Нужна Droopy_Library библиотека для PB4.40 - PB4.41
А для 4.51 Droopy_Library уже есть???
Отредактировано Lucagin (17.01.2011 22:18:44)
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)
Нужна Droopy_Library библиотека для PB4.40 - PB4.41
А для 4.51 Droopy_Library уже есть???
Отредактировано Lucagin (17.01.2011 22:18:44)
http://purebasic.ucoz.com/PB_rar/Droopy_1_32_4_50.zip у меня только эта
Отредактировано mirashic (17.01.2011 22:03:15)
А для 4.51 Droopy_Library уже есть???
Тут гдето была ссылка:
http://pbasic.spb.ru/phpBB2/viewtopic.p … start=3150
И о окнах тут обсуждали:
http://pbasic.spb.ru/phpBB2/viewtopic.p … ht=skinwin
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
спасибо!!!
Здравствуйте, у меня есть две проблемы сейчас. Первая связана с компиляцией на 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)
То есть использование api-констант, как мне посоветовали на этом форуме, всё работает, но может ли из-за этих api-констант не компилироватся на операционной системе Mac, или Linux? И если да, то тогда, что сделать, чтобы можно было всё же скомпилировать?
Ни на Маке ни в Linux это не будет компилироваться. Что бы скомпилировать надо искать соответствующее решение для этих ОС - у них есть свои API. Или исключить , закомментировать эти функции.
А второй вопрос связан с EditorGadget, на нём нельзя вызывать контекстное меню, для копирования и вставки текста, как в StringGadget, как это можно исправить?
Тут есть подробно о редакторе и о самодельном меню:
То есть использование 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
Пётр, ВиниПур, спасибо за помощь, а где я могу посмотреть, какие соответствующие константы я должен подставить для Mac?
Отредактировано goodwen (23.01.2011 20:30:05)
какие соответствующие константы я должен подставить для Mac?
Нужно искать в гулге или на MAC-форумах.
какие соответствующие константы я должен подставить для Mac?
Если бы бы было всё так просто! Константы это всего лишь числа, главное то сами функции разные для каждой ОСи. По той ссылке, что я дал есть вроде универсальное решение на Scintilla, там Петр давал код. На Лине точно работает, а вот с Маком как раз и проверь.
ВиниПур, Пётр спасибо, буду искать и заодно Scintilla проверю.
подскажите пожалуйста есть функции для определение системы счисления?
Тоесть я в текстовое поле ввожу информацию, а программа определяет какая это система счисления, двоичная, дясятиричная, или шеснадцатиричная?
Так же интересует функции для перевода в разные системы счисления!
Взарание спасибо!
А также отдельное спасибо авторам этого замечательного сайта, форума!
как из текстового поля прочитать в переменную и наоборот из переменной в текстовое поле?
Так же интересует функции для перевода в разные системы счисления!
Вот конвертер систем счисления в месте с его исходным текстом http://pure-basic.narod.ru/project/Hex-Dec-Bin.html
как из текстового поля прочитать в переменную и наоборот из переменной в текстовое поле?
Тут написано как http://pure-basic.narod.ru/docs/books/9.htm
как можно сделать так чтобы текстовое поле не довало мне вводить все символы кроме 1, 5, 7, h, k?
Как можно определить в какой системи счисления введённые данные в тексовое поле?
как можно сделать так чтобы текстовое поле не довало мне вводить все символы кроме 1, 5, 7, h, k?
Посмотри здесь http://purebasic.info/phpBB2/viewtopic.php?t=797
Как можно определить в какой системе счисления введённые данные в тексовое поле?
Нужно анализировать введённые символы но это поможет не всегда, к примеру:
110
сложно сказать это число в двоичной (6), десятичной (110) или в шестнадцатеричной (272) системе счисления!
это просто фильтр, а нужно что-бы символ не впечатовался а текстовое поле
это просто фильтр, а нужно что-бы символ не впечатовался а текстовое поле
Это фильтр между клавиатурой и текстовым полем.
"Ненужные" символы "выбрасываются" из потока до поступления в поле.
Как программно заблокировать клавишу Win? Ну и в добавок клавиши контрл и альт, ну и делит тоже можно)
Нужно ставить глобальный хук на клавиатуру, а это возможно только с помощью DLL, зарегистрированной в системе (насколько мне известно).
понятно
подскажите как можно написать тулбар для Оперы и експоера?
Ребята, подскажите, как изменить размер имеющегося курсора?
Я меняю стандартный курсор на свой, в виде шара (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 ;}
Отредактировано Lucagin (04.02.2011 00:45:12)
Замена стандартного курсора на свой, производится лишь в исключительных случаях, т. к. это распространяется на всю систему. а не только на одно приложение.
Какую задачу нужно решить сменой курсоров? Возможно найдется другое решение без глобальных модификаций на уровне системы.
Замена стандартного курсора на свой, производится лишь в исключительных случаях, т. к. это распространяется на всю систему. а не только на одно приложение.Какую задачу нужно решить сменой курсоров? Возможно найдется другое решение без глобальных модификаций на уровне системы
Генерирую лабиринт, хочу, чтобы по нему можно было провести шарик-курсор с лева на право, так чтобы за границы дорожки мышка выходить не могла. Ограничивать курсор внутри прохода, хочу сканируя цвет вокруг курсора-шара и удерживая координаты курсора внутри стенок …
Смотрел в функциях 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)
Код на половине обрывается....
Код на половине обрывается....
Поправил...
Лучше подменять курсор только для требуемого 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 окно не вписывается в размеры экрана по горизонтали!
При разрешении 1024х768 окно не вписывается в размеры экрана по горизонтали!
Да , согласен, забыл центрировать по центру экрана…
Лучше подменять курсор только для требуемого ImageGadget Код:SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursorFromFile_(@"Shar24.cur"))
Так намного лучше... !!!
А как быть с размером курсора???
Отредактировано Lucagin (04.02.2011 12:00:08)
А как быть с размером курсора???
В описании функции 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) ; Допустимая высота курсора.
Какая версия? | OffTop | 03.10.2021 |
Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
консоль | Вопросы по PureBasic | 19.03.2015 |
Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)