PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)


Вопросы новичка (продолжение…)

Сообщений 211 страница 240 из 974

211

mirashic написал(а):

Нужна Droopy_Library библиотека  для PB4.40 - PB4.41

А для 4.51 Droopy_Library уже есть???

Отредактировано Lucagin (17.01.2011 22:18:44)

0

212

http://purebasic.ucoz.com/PB_rar/Droopy_1_32_4_50.zip у меня только эта

Отредактировано mirashic (17.01.2011 22:03:15)

0

213

Lucagin написал(а):

А для 4.51 Droopy_Library уже есть???

Тут гдето была ссылка:
http://pbasic.spb.ru/phpBB2/viewtopic.p … start=3150

И о окнах тут обсуждали:
http://pbasic.spb.ru/phpBB2/viewtopic.p … ht=skinwin

0

214

mirashic написал(а):

http://purebasic.ucoz.com/PB_rar/Droopy_1_32_4_50.zip у меня только эта

ВиниПур написал(а):

Тут гдето была ссылка:http://pbasic.spb.ru/phpBB2/viewtopic.p … start=3150
И о окнах тут обсуждали:http://pbasic.spb.ru/phpBB2/viewtopic.p … ht=skinwin

спасибо!!! :flag:

0

215

Здравствуйте, у меня есть две проблемы сейчас. Первая связана с компиляцией на Mac OS X, я скачал PB для этой ос, другой человек, у которого есть эта ОС, не может скомпилировать приложение, которое я написал на Windows, я пока не знаю, что именно выдаёт компилятор при компиляции, но у меня в приложение есть вот такая строка:

Код:
EditorGadget(#Editor_1, 10, 20, 620, 80)
SendMessage_(GadgetID(#Editor_1),#EM_SETTARGETDEVICE, #Null, 0)

То есть использование api-констант, как мне посоветовали на этом форуме, всё работает, но может ли из-за этих api-констант не компилироватся на операционной системе Mac, или Linux? И если да, то тогда, что сделать, чтобы можно было всё же скомпилировать?
А второй вопрос связан с EditorGadget, на нём нельзя вызывать контекстное меню, для копирования и вставки текста, как в StringGadget, как это можно исправить?

Отредактировано goodwen (23.01.2011 13:56:09)

0

216

goodwen написал(а):

То есть использование api-констант, как мне посоветовали на этом форуме, всё работает, но может ли из-за этих api-констант не компилироватся на операционной системе Mac, или Linux? И если да, то тогда, что сделать, чтобы можно было всё же скомпилировать?

Ни на Маке ни в Linux это не будет компилироваться. Что бы скомпилировать надо искать соответствующее решение для этих ОС - у них есть свои API. Или исключить , закомментировать эти функции.

goodwen написал(а):

А второй вопрос связан с EditorGadget, на нём нельзя вызывать контекстное меню, для копирования и вставки текста, как в StringGadget, как это можно исправить?

Тут есть подробно о редакторе и о самодельном меню:

http://pbasic.spb.ru/phpBB2/viewtopic.p … undo#13547

0

217

goodwen написал(а):

То есть использование api-констант, как мне посоветовали на этом форуме, всё работает, но может ли из-за этих api-констант не компилироватся на операционной системе Mac, или Linux?

API функции на всех платформах разные, для Windows одни, для Linux другие, а для MacOS, третьи.
Чтобы код компилировался под разные платформы, нужно использовать условную компиляцию, при которой будут автоматически подставляться требуемые API функции.
К примеру:

Код:
EditorGadget(#Editor_1, 10, 20, 620, 80)
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    SendMessage_(GadgetID(#Editor_1),#EM_SETTARGETDEVICE, #Null, 0)
  CompilerCase #PB_OS_Linux
    gtk_text_view_set_wrap_mode_(GadgetID(#Editor_1), #GTK_WRAP_NONE)
  CompilerCase #PB_OS_MacOS
    ; Код для МакОС
  CompilerCase #PB_OS_AmigaOS
    ; Код для АмигаОС
CompilerEndSelect

0

218

Пётр, ВиниПур, спасибо за помощь, а где я могу посмотреть, какие соответствующие константы я должен подставить для Mac?

Отредактировано goodwen (23.01.2011 20:30:05)

0

219

goodwen написал(а):

какие соответствующие константы я должен подставить для Mac?

Нужно искать в гулге или на MAC-форумах.

0

220

goodwen написал(а):

какие соответствующие константы я должен подставить для Mac?

Если бы бы было всё так просто! Константы это всего лишь числа, главное то сами функции разные для каждой ОСи. По той ссылке, что я дал есть вроде универсальное решение на Scintilla, там Петр давал код. На Лине точно работает, а вот с Маком как раз и проверь.

0

221

ВиниПур, Пётр  спасибо, буду искать и заодно Scintilla проверю.

0

222

подскажите пожалуйста есть функции для определение системы счисления?
Тоесть я в текстовое поле ввожу информацию,  а программа определяет какая это система счисления, двоичная, дясятиричная, или шеснадцатиричная?
Так же интересует функции для перевода в разные системы счисления!

Взарание спасибо!

А также отдельное спасибо авторам этого замечательного сайта, форума!

0

223

как из текстового поля прочитать в переменную и наоборот из переменной в текстовое поле?

0

224

Denis написал(а):

Так же интересует функции для перевода в разные системы счисления!

Вот конвертер систем счисления в месте с его исходным текстом http://pure-basic.narod.ru/project/Hex-Dec-Bin.html

Denis написал(а):

как из текстового поля прочитать в переменную и наоборот из переменной в текстовое поле?

Тут написано как http://pure-basic.narod.ru/docs/books/9.htm

0

225

как можно сделать так чтобы текстовое поле не довало мне вводить все символы кроме 1, 5, 7, h, k?
Как можно определить в какой системи счисления введённые данные в тексовое поле?

0

226

Denis написал(а):

как можно сделать так чтобы текстовое поле не довало мне вводить все символы кроме 1, 5, 7, h, k?

Посмотри здесь http://purebasic.info/phpBB2/viewtopic.php?t=797

Denis написал(а):

Как можно определить в какой системе счисления введённые данные в тексовое поле?

Нужно анализировать введённые символы но это поможет не всегда, к примеру:

Код:
110

сложно сказать это число в двоичной (6), десятичной (110) или в шестнадцатеричной (272) системе счисления!

0

227

это просто фильтр, а нужно что-бы символ не впечатовался а текстовое поле

0

228

Denis написал(а):

это просто фильтр, а нужно что-бы символ не впечатовался а текстовое поле

Это фильтр между клавиатурой и текстовым полем.
"Ненужные" символы "выбрасываются" из потока до поступления в поле.

0

229

Как программно заблокировать клавишу Win? Ну и в добавок клавиши контрл и альт, ну и делит тоже можно)

0

230

Нужно ставить глобальный хук на клавиатуру, а это возможно только с помощью DLL, зарегистрированной в системе (насколько мне известно).

0

231

понятно

0

232

подскажите как можно написать тулбар для Оперы и експоера?

0

233

Ребята, подскажите, как изменить размер имеющегося курсора?
Я меняю стандартный курсор на свой, в виде шара (16 пикс, 24 пикс, 8 пикс) функцией SetSystemCursor_(LoadCursorFromFile_(@"мой_курсор.cur"), #IDC_ARROW) , но при этом, какого бы размера я картинку не загружал, он остается стандартного размера примерно диаметром около 30 пикселей.
Как мне его уменьшить и еще, как сместить точку указателя(активную точку курсора) в центр шара???

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #MenuBar_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuItem(1,"Из.Курсор")
    EndIf
       
  EndIf
EndProcedure

Open_Window_0()

shar16=LoadCursorFromFile_(@"shar16.cur")
Shar24=LoadCursorFromFile_(@"Shar24.cur")
stan=LoadCursorFromFile_(@"stan.cur")
If shar16=0 Or Shar24=0 Or LoadCursorFromFile_(@"stan.cur")=0
  MessageRequester("KlavaState_Cursor", "Не удалось загрузить курсор!", #MB_OK|#MB_ICONERROR)
  End
EndIf

;{ Основной цикл
Repeat
  event=WaitWindowEvent()
  menu = EventMenu()
  If event=#PB_Event_Menu
    If menu=1
      SetSystemCursor_(LoadCursorFromFile_(@"Shar24.cur"), #IDC_ARROW)
           
    EndIf
  EndIf  
  
  
Until event=#PB_Event_CloseWindow
  SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
  End
;}

http://ifolder.ru/21699306

Отредактировано Lucagin (04.02.2011 00:45:12)

0

234

Замена стандартного курсора на свой, производится лишь в исключительных случаях, т. к. это распространяется на всю систему. а не только на одно приложение.
Какую задачу нужно решить сменой курсоров? Возможно найдется другое решение без глобальных модификаций на уровне системы.

0

235

Пётр написал(а):

Замена стандартного курсора на свой, производится лишь в исключительных случаях, т. к. это распространяется на всю систему. а не только на одно приложение.Какую задачу нужно решить сменой курсоров? Возможно найдется другое решение без глобальных модификаций на уровне системы

Генерирую лабиринт, хочу, чтобы по нему можно было провести шарик-курсор с лева на право, так чтобы за границы дорожки мышка выходить не могла. Ограничивать курсор внутри прохода, хочу сканируя цвет вокруг курсора-шара и удерживая координаты курсора внутри стенок  …

Смотрел в функциях API, есть  CreateCursor_(), позволяющая создать курсор с нужными характеристиками, но не знаю, как правильно работать с 2-мя курсорами…

Не знаю конечно на сколько я рационально сгенерировал лабиринт (код еще сырой и пока не полный),вот и хотел для него сделать проход шарика на время… Но встал вопрос с размером курсора… Вот код… (курсор шарик и стандартный курсор есть в архиве из предыдущего поста)… Курсор «освобождает» двойной правый клик…

Код:
;{ Константы
Enumeration
  #Window_0
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration


;- Gadget Constants
;
Enumeration
  #Image_0
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_0
EndEnumeration

;}

;{ Переменные
Structure Cletka
  x1.l
  x2.l
  y1.l
  y2.l
  s0.b
  s1.b
  s2.b
  s3.b  
  Tip.b    ; Индикатор показывает тип ячейки: ячейка, где все стенки закрыты=0 , ячейка Основного пути = 1 ,ячейка Дополнительного пути =2 или 3 или 4...  
EndStructure

Global Dim Arrey.Cletka(39,19)
Global a
Global b
Global Kursor ; Номер ячейки входа,для позиционирования курсора...
;}

Procedure Arrey_Sbros()    ; Задаю исходные значения массива (все стенки ячеек присутсвуют=1)
  For a=o To 39
    For b=0 To 19
      Arrey(a,b)\x1=25*a
      Arrey(a,b)\x2=25*a+25
      Arrey(a,b)\y1=25*b
      Arrey(a,b)\y2=25*b+25
      Arrey(a,b)\s0=1
      Arrey(a,b)\s1=1
      Arrey(a,b)\s2=1
      Arrey(a,b)\s3=1
      Arrey(a,b)\Tip=0 ; Все ячейки типа: (все стенки закрыты)
    Next
  Next
EndProcedure

Procedure Open_Window_0()
 If OpenWindow(#Window_0, 216, 0, 1024, 575, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuItem(1,"Старт")
      ;MenuTitle("Старт")      
      ;MenuTitle("Настройки")
      ;MenuTitle("Помощь")
      MenuItem(2,"Выход")
      ;MenuTitle("Выход")
    EndIf

    If CreateStatusBar(#StatusBar_0, WindowID(#Window_0))
    EndIf

    If CreateGadgetList(WindowID(#Window_0))
       CreateImage(#Image_0,1002,502)
       ImageGadget(#Image_0, 10, 20, 1002, 502, Image0)       
    EndIf
 EndIf
EndProcedure

Procedure risov()          ; Начальная прорисовка сетки (все поля квадраты)
  If StartDrawing(ImageOutput(#Image_0))     
       Box(0, 0, 1002, 502,RGB(125, 2, 130))
          For a=0 To 39
            For b=0 To 19
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1,Arrey(a,b)\x2,Arrey(a,b)\y1,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1,Arrey(a,b)\x1,Arrey(a,b)\y2,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y2,Arrey(a,b)\x2,Arrey(a,b)\y2,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x2,Arrey(a,b)\y2,Arrey(a,b)\x2,Arrey(a,b)\y1,RGB(255, 202, 0))
            Next
          Next 
          ;DrawingMode(#PB_2DDrawing_Outlined )
          ;Box(0, 0, 1000, 500,RGB(255, 202, 0))
      StopDrawing()        
  EndIf       
  
  SetGadgetState(#Image_0,ImageID(#Image_0))    
EndProcedure

Procedure Osnov_Proxod(c) 
  P=Random(2)                       ; Случайным образом определяю направление, 0- идем вверх, 1 – идем вперед, 3- идем вниз… 
     If p=0
       If b<>0 And Arrey(a,b-1)\Tip=0
          Arrey(a,b)\s1=0
          Arrey(a,b)\Tip=c
          b=b-1
          Arrey(a,b)\s3=0
          Arrey(a,b)\Tip=c
        EndIf
      ElseIf p=1
        If a<>39 And Arrey(a+1,b)\Tip=0
           Arrey(a,b)\s2=0 
           Arrey(a,b)\Tip=c
           a=a+1
           Arrey(a,b)\s0=0
           Arrey(a,b)\Tip=c
         EndIf
      ElseIf p=2
         If b<>19 And Arrey(a,b+1)\Tip=0
           Arrey(a,b)\s3=0
           Arrey(a,b)\Tip=c
           b=b+1
           Arrey(a,b)\s1=0
           Arrey(a,b)\Tip=c
         EndIf  
      EndIf       
   
EndProcedure

Procedure Dop_Proxod(c)  
  P=Random(3)                               ; Случайным образом определяю направление, 0 – идем назад, 1- идем вверх, 2 – идем вперед, 3- идем вниз… 
      If p=0
        If a<>0 And Arrey(a-1,b)\Tip=0
          Arrey(a,b)\s0=0
          Arrey(a,b)\Tip=c
          a=a-1
          Arrey(a,b)\s2=0
          Arrey(a,b)\Tip=c
        EndIf  
      ElseIf p=1
       If b<>0 And Arrey(a,b-1)\Tip=0
          Arrey(a,b)\s1=0
          Arrey(a,b)\Tip=c
          b=b-1
          Arrey(a,b)\s3=0
          Arrey(a,b)\Tip=c
        EndIf
      ElseIf p=2
        If a<>39 And Arrey(a+1,b)\Tip=0
           Arrey(a,b)\s2=0 
           Arrey(a,b)\Tip=c
           a=a+1
           Arrey(a,b)\s0=0
           Arrey(a,b)\Tip=c
         EndIf
      ElseIf p=3
         If b<>19 And Arrey(a,b+1)\Tip=0
           Arrey(a,b)\s3=0
           Arrey(a,b)\Tip=c
           b=b+1
           Arrey(a,b)\s1=0
           Arrey(a,b)\Tip=c
         EndIf  
      EndIf       
   
EndProcedure

Procedure OsnovPut()    ; Делаю основной проход от входа к выходу...( S0- левая боковая стенка каждой ячейки, S1- верхняя стенка ячейки, S2- правая стенка, s3-нижняя стенка)
  b=Random(19) : Kursor=b ;Debug b
  a=0
  Arrey(a,b)\s0=0
    While a<39
     Osnov_Proxod(1) 
    Wend
  Arrey(a,b)\s2=0  
EndProcedure

Procedure DopPut(f,s)   ; Доп. Проход от центрального прохода в стороны...
  For a=0 To 39
    For b=0 To 19
      If Arrey(a,b)\Tip=f
        d=Random(s)
        For v=0 To d
          Dop_Proxod(f+1)
        Next 
      EndIf 
    Next b
  Next a 
EndProcedure 

Procedure risov_lab()   ; Стираю (закрашивая фоном) пробитые стенки)...
  If StartDrawing(ImageOutput(#Image_0))     
       ;Box(0, 0, 1002, 502,RGB(125, 2, 130))
          For a=0 To 39
            For b=0 To 19
              If Arrey(a,b)\s0=0
                LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1+1,Arrey(a,b)\x1,Arrey(a,b)\y2-1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s1=0
                LineXY(Arrey(a,b)\x1+1,Arrey(a,b)\y1,Arrey(a,b)\x2-1,Arrey(a,b)\y1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s2=0
                LineXY(Arrey(a,b)\x2,Arrey(a,b)\y1+1,Arrey(a,b)\x2,Arrey(a,b)\y2-1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s3=0
                LineXY(Arrey(a,b)\x1+1,Arrey(a,b)\y2,Arrey(a,b)\x2-1,Arrey(a,b)\y2,RGB(125, 2, 130))
              EndIf
            Next
          Next 
          ;DrawingMode(#PB_2DDrawing_Outlined )
           ;Box(0, 0, 1000, 500,RGB(255, 0, 0))
      StopDrawing()        
  EndIf       
  
  SetGadgetState(#Image_0,ImageID(#Image_0))    
EndProcedure      

Open_Window_0()

Koordin.RECT                                      ; Область, ограничивающая перемещение курсора...
Koordin\left=WindowX(#Window_0)+10
Koordin\top=WindowY(#Window_0)+65 
Koordin\right=WindowX(#Window_0)+WindowWidth(#Window_0)-35
Koordin\bottom=WindowY(#Window_0)+WindowHeight(#Window_0)-38


Shar24=LoadCursorFromFile_(@"Shar24.cur")          ; Проверяем, есть ли файлы с курсорами...
stan=LoadCursorFromFile_(@"stan.cur")
  If Shar24=0 Or stan=0
    MessageRequester("KlavaState_Cursor", "Не удалось загрузить курсор!", #MB_OK|#MB_ICONERROR)
    End
  EndIf

;{ Основной цикл
Repeat : event=WaitWindowEvent() : gadget=EventGadget() : menu = EventMenu() : EventType = EventType()  
  
  If event=#PB_Event_Menu
    If menu=1      
      HideGadget(#Image_0, 1)
      Arrey_Sbros()
      risov()
      OsnovPut()
      For q=0 To 2
        For w=1 To 4
          DopPut(w,200/w)
        Next
      Next 
      
      For a=0 To 39
        For b=0 To 19
          If Arrey(a,b)\Tip=0                           ;Если после проходов остались не тронутые (с 4-мя стенками) квадраты, то убираем у них по одной стенке...
            If a<>0      : Arrey(a,b)\s0=0
            ElseIf b<>0  : Arrey(a,b)\s1=0
            ElseIf a<>39 : Arrey(a,b)\s2=0
            ElseIf b<>19 : Arrey(a,b)\s3=0
            EndIf  
          EndIf  
        Next
      Next        
      
      risov_lab()
      HideGadget(#Image_0, 0)
      SetCursorPos_(WindowX(0)+GadgetX(#Image_0)+Arrey(0,Kursor)\x1+5, WindowY(0)+GadgetY(#Image_0)+Arrey(0,Kursor)\y1+40) ; устанавливаем курсор в позицию входа в лабиринт
      SetSystemCursor_(LoadCursorFromFile_(@"Shar24.cur"), #IDC_ARROW)
      ClipCursor_(@Koordin)
      
      
    ElseIf menu=2
      SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
      ClipCursor_(0)
      End
    EndIf

  ElseIf event=#PB_Event_Gadget And EventType=#PB_EventType_RightDoubleClick     ; Двойной клик правой кнопкой, освобождает курсор и возвращает стандартный вид курсору
    SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
    ClipCursor_(0)
  EndIf  
  
  
Until event=#PB_Event_CloseWindow

  SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
  End
;}

Отредактировано Lucagin (04.02.2011 11:11:21)

0

236

Код на половине обрывается....

0

237

Пётр написал(а):

Код на половине обрывается....

Поправил...

0

238

Лучше подменять курсор только для требуемого ImageGadget

Код:
SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursorFromFile_(@"Shar24.cur"))
Код:
;{ Константы
Enumeration
  #Window_0
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration


;- Gadget Constants
;
Enumeration
  #Image_0
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_0
EndEnumeration

;}

;{ Переменные
Structure Cletka
  x1.l
  x2.l
  y1.l
  y2.l
  s0.b
  s1.b
  s2.b
  s3.b  
  Tip.b    ; Индикатор показывает тип ячейки: ячейка, где все стенки закрыты=0 , ячейка Основного пути = 1 ,ячейка Дополнительного пути =2 или 3 или 4...  
EndStructure

Global Dim Arrey.Cletka(39,19)
Global a
Global b
Global Kursor ; Номер ячейки входа,для позиционирования курсора...
;}

Procedure Arrey_Sbros()    ; Задаю исходные значения массива (все стенки ячеек присутсвуют=1)
  For a=o To 39
    For b=0 To 19
      Arrey(a,b)\x1=25*a
      Arrey(a,b)\x2=25*a+25
      Arrey(a,b)\y1=25*b
      Arrey(a,b)\y2=25*b+25
      Arrey(a,b)\s0=1
      Arrey(a,b)\s1=1
      Arrey(a,b)\s2=1
      Arrey(a,b)\s3=1
      Arrey(a,b)\Tip=0 ; Все ячейки типа: (все стенки закрыты)
    Next
  Next
EndProcedure

Procedure Open_Window_0()
 If OpenWindow(#Window_0, 216, 0, 1024, 575, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuItem(1,"Старт")
      ;MenuTitle("Старт")      
      ;MenuTitle("Настройки")
      ;MenuTitle("Помощь")
      MenuItem(2,"Выход")
      ;MenuTitle("Выход")
    EndIf

    If CreateStatusBar(#StatusBar_0, WindowID(#Window_0))
    EndIf

    If CreateGadgetList(WindowID(#Window_0))
       CreateImage(#Image_0,1002,502)
       ImageGadget(#Image_0, 10, 20, 1002, 502, Image0)       
    EndIf
 EndIf
EndProcedure

Procedure risov()          ; Начальная прорисовка сетки (все поля квадраты)
  If StartDrawing(ImageOutput(#Image_0))     
       Box(0, 0, 1002, 502,RGB(125, 2, 130))
          For a=0 To 39
            For b=0 To 19
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1,Arrey(a,b)\x2,Arrey(a,b)\y1,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1,Arrey(a,b)\x1,Arrey(a,b)\y2,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x1,Arrey(a,b)\y2,Arrey(a,b)\x2,Arrey(a,b)\y2,RGB(255, 202, 0))
              LineXY(Arrey(a,b)\x2,Arrey(a,b)\y2,Arrey(a,b)\x2,Arrey(a,b)\y1,RGB(255, 202, 0))
            Next
          Next 
          ;DrawingMode(#PB_2DDrawing_Outlined )
          ;Box(0, 0, 1000, 500,RGB(255, 202, 0))
      StopDrawing()        
  EndIf       
  
  SetGadgetState(#Image_0,ImageID(#Image_0))    
EndProcedure

Procedure Osnov_Proxod(c) 
  P=Random(2)
     If p=0
       If b<>0 And Arrey(a,b-1)\Tip=0
          Arrey(a,b)\s1=0
          Arrey(a,b)\Tip=c
          b=b-1
          Arrey(a,b)\s3=0
          Arrey(a,b)\Tip=c
        EndIf
      ElseIf p=1
        If a<>39 And Arrey(a+1,b)\Tip=0
           Arrey(a,b)\s2=0 
           Arrey(a,b)\Tip=c
           a=a+1
           Arrey(a,b)\s0=0
           Arrey(a,b)\Tip=c
         EndIf
      ElseIf p=2
         If b<>19 And Arrey(a,b+1)\Tip=0
           Arrey(a,b)\s3=0
           Arrey(a,b)\Tip=c
           b=b+1
           Arrey(a,b)\s1=0
           Arrey(a,b)\Tip=c
         EndIf  
      EndIf       
   
EndProcedure

Procedure Dop_Proxod(c)  
  P=Random(3)
      If p=0
        If a<>0 And Arrey(a-1,b)\Tip=0
          Arrey(a,b)\s0=0
          Arrey(a,b)\Tip=c
          a=a-1
          Arrey(a,b)\s2=0
          Arrey(a,b)\Tip=c
        EndIf  
      ElseIf p=1
       If b<>0 And Arrey(a,b-1)\Tip=0
          Arrey(a,b)\s1=0
          Arrey(a,b)\Tip=c
          b=b-1
          Arrey(a,b)\s3=0
          Arrey(a,b)\Tip=c
        EndIf
      ElseIf p=2
        If a<>39 And Arrey(a+1,b)\Tip=0
           Arrey(a,b)\s2=0 
           Arrey(a,b)\Tip=c
           a=a+1
           Arrey(a,b)\s0=0
           Arrey(a,b)\Tip=c
         EndIf
      ElseIf p=3
         If b<>19 And Arrey(a,b+1)\Tip=0
           Arrey(a,b)\s3=0
           Arrey(a,b)\Tip=c
           b=b+1
           Arrey(a,b)\s1=0
           Arrey(a,b)\Tip=c
         EndIf  
      EndIf       
   
EndProcedure

Procedure OsnovPut()    ; Делаю основной проход от входа к выходу...( S0- левая боковая стенка каждой ячейки, S1- верхняя стенка ячейки, S2- правая стенка, s3-нижняя стенка)
  b=Random(19) : Kursor=b ;Debug b
  a=0
  Arrey(a,b)\s0=0
    While a<39
     Osnov_Proxod(1) 
    Wend
  Arrey(a,b)\s2=0  
EndProcedure

Procedure DopPut(f,s)   ; Доп. Проход от центрального прохода в стороны...
  For a=0 To 39
    For b=0 To 19
      If Arrey(a,b)\Tip=f
        d=Random(s)
        For v=0 To d
          Dop_Proxod(f+1)
        Next 
      EndIf 
    Next b
  Next a 
EndProcedure 

Procedure risov_lab()   ; Стираю (закрашивая фоном) пробитые стенки)...
  If StartDrawing(ImageOutput(#Image_0))     
       ;Box(0, 0, 1002, 502,RGB(125, 2, 130))
          For a=0 To 39
            For b=0 To 19
              If Arrey(a,b)\s0=0
                LineXY(Arrey(a,b)\x1,Arrey(a,b)\y1+1,Arrey(a,b)\x1,Arrey(a,b)\y2-1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s1=0
                LineXY(Arrey(a,b)\x1+1,Arrey(a,b)\y1,Arrey(a,b)\x2-1,Arrey(a,b)\y1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s2=0
                LineXY(Arrey(a,b)\x2,Arrey(a,b)\y1+1,Arrey(a,b)\x2,Arrey(a,b)\y2-1,RGB(125, 2, 130))
              EndIf
              If Arrey(a,b)\s3=0
                LineXY(Arrey(a,b)\x1+1,Arrey(a,b)\y2,Arrey(a,b)\x2-1,Arrey(a,b)\y2,RGB(125, 2, 130))
              EndIf
            Next
          Next 
          ;DrawingMode(#PB_2DDrawing_Outlined )
           ;Box(0, 0, 1000, 500,RGB(255, 0, 0))
      StopDrawing()        
  EndIf       
  
  SetGadgetState(#Image_0,ImageID(#Image_0))    
EndProcedure      

Open_Window_0()

Koordin.RECT                                      ; Область, ограничивающая перемещение курсора...
Koordin\left=WindowX(#Window_0)+10
Koordin\top=WindowY(#Window_0)+65 
Koordin\right=WindowX(#Window_0)+WindowWidth(#Window_0)-35
Koordin\bottom=WindowY(#Window_0)+WindowHeight(#Window_0)-38


Shar24=LoadCursorFromFile_(@"Shar24.cur")          ; Проверяем, есть ли файлы с курсорами...
stan=LoadCursorFromFile_(@"stan.cur")
  If Shar24=0 Or stan=0
    MessageRequester("KlavaState_Cursor", "Не удалось загрузить курсор!", #MB_OK|#MB_ICONERROR)
    End
  EndIf

;{ Основной цикл
Repeat : event=WaitWindowEvent() : gadget=EventGadget() : menu = EventMenu() : EventType = EventType()  
  
  If event=#PB_Event_Menu
    If menu=1      
      HideGadget(#Image_0, 1)
      Arrey_Sbros()
      risov()
      OsnovPut()
      For q=0 To 2
        For w=1 To 4
          DopPut(w,200/w)
        Next
      Next 
      
      For a=0 To 39
        For b=0 To 19
          If Arrey(a,b)\Tip=0                           ;Если после проходов остались не тронутые (с 4-мя стенками) квадраты, то убираем у них по одной стенке...
            If a<>0      : Arrey(a,b)\s0=0
            ElseIf b<>0  : Arrey(a,b)\s1=0
            ElseIf a<>39 : Arrey(a,b)\s2=0
            ElseIf b<>19 : Arrey(a,b)\s3=0
            EndIf  
          EndIf  
        Next
      Next        
      
      risov_lab()
      HideGadget(#Image_0, 0)
      SetCursorPos_(WindowX(0)+GadgetX(#Image_0)+Arrey(0,Kursor)\x1+5, WindowY(0)+GadgetY(#Image_0)+Arrey(0,Kursor)\y1+40) ; устанавливаем курсор в позицию входа в лабиринт
      SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursorFromFile_(@"Shar24.cur"))
      ;SetSystemCursor_(LoadCursorFromFile_(@"Shar24.cur"), #IDC_ARROW)
      ;ClipCursor_(@Koordin)
      
      
    ElseIf menu=2
      ;SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
      SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursor_(0,#IDC_ARROW))
      ;ClipCursor_(0)
      End
    EndIf

  ElseIf event=#PB_Event_Gadget And EventType=#PB_EventType_RightDoubleClick     ; Двойной клик правой кнопкой, освобождает курсор и возвращает стандартный вид курсору
    SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursor_(0,#IDC_ARROW))
    ;SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
    ;ClipCursor_(0)
  EndIf  
  
  
Until event=#PB_Event_CloseWindow

  ;SetSystemCursor_(LoadCursorFromFile_(@"stan.cur"), #IDC_ARROW)
  End
;}

При разрешении 1024х768 окно не вписывается в размеры экрана по горизонтали!

0

239

Пётр написал(а):

При разрешении 1024х768 окно не вписывается в размеры экрана по горизонтали!

Да , согласен, забыл центрировать по центру экрана…

Пётр написал(а):

Лучше подменять курсор только для требуемого ImageGadget  Код:SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursorFromFile_(@"Shar24.cur"))

Так намного лучше... !!! ^^

А как быть с размером курсора???

Отредактировано Lucagin (04.02.2011 12:00:08)

0

240

Lucagin написал(а):

А как быть с размером курсора???

В описании функции CreateCursor сказано:

The nWidth and nHeight parameters must specify a width and height that are supported by the current display driver, because the system cannot create cursors of other sizes. To determine the width and height supported by the display driver, use the GetSystemMetrics function, specifying the SM_CXCURSOR or SM_CYCURSOR value.

То есть размер курсора не может быть произвольным, а только таким, какой поддерживает ОС!

Код:
Debug GetSystemMetrics_(#SM_CXCURSOR) ; Допустимая ширина курсора.
Debug GetSystemMetrics_(#SM_CYCURSOR) ; Допустимая высота курсора.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)