FreeBasic похожий на PureBasic
Участников: 5
Страница 6 из 6
Страница 6 из 6 • 1, 2, 3, 4, 5, 6
Re: FreeBasic похожий на PureBasic
Что-то у меня как два года назад не получалось по гаджетам переходить табом или стрелками, не получалось включать чекбоксы пробелом, так и сейчас не получается, весь гуй доступен только мышкой.
Что я делаю не так?
Что я делаю не так?
Re: FreeBasic похожий на PureBasic
DoReMi пишет:Что-то у меня как два года назад не получалось по гаджетам переходить табом или стрелками, не получалось включать чекбоксы пробелом, так и сейчас не получается, весь гуй доступен только мышкой.
Что я делаю не так?
И не будет. Я делал тут в какой-то версии переключение по TAB , но потом убрал. Вся эта кустарная хрень на уровне бинарного кода библиотеки не нужна.
Вы думали, что перейдя на Purebasic , ваши вопросы волшебным образом решатся... Возьмите, создайте гаджеты в PB и среди них должен быть EditorGadget и поймете , что гаджеты перестают переключаться по TAB. И это не вина разработчика PB , просто все случаи предусмотреть невозможно. Есть такие случаи, которые должен контролировать сам программист.
Захочет пользователь переключать гаджеты кнопками на клавиатуре, легко реализует сам. Вот пример, который делает все это в несколько строчек (переключение по TAB\SHIFT+TAB , а нажатие пробелом):
- Код:
#Include "window9.bi"
Dim As Integer event
Var hwnd=OpenWindow("",10,10,400,400):CenterWindow(hwnd)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_TAB,1001)
AddKeyboardShortcut(hwnd,FSHIFT,VK_TAB,1002)
ButtonGadget(1,10,10,100,20,"1 кнопка")
ButtonGadget(2,10,40,100,20,"2 кнопка")
ButtonGadget(3,10,70,100,20,"3 кнопка")
ButtonGadget(4,10,100,100,20,"4 кнопка")
Dim As Integer TabStop(1 To 4) = {1,2,3,4}, iNumberSelect = 1
SetFocus(GadgetID(TabStop(iNumberSelect)))
Do
event=WaitEvent
If event=EventMenu Then
Select Case EventNumber
Case 1001
iNumberSelect = ID_In_Number(GetFocus)
iNumberSelect = iNumberSelect + 1
If iNumberSelect>UBound(TabStop) Then iNumberSelect = 1
SetFocus(GadgetID(TabStop(iNumberSelect)))
Case 1002
iNumberSelect = ID_In_Number(GetFocus)
iNumberSelect = iNumberSelect - 1
If iNumberSelect<LBound(TabStop) Then iNumberSelect = UBound(TabStop)
SetFocus(GadgetID(TabStop(iNumberSelect)))
End Select
ElseIf event = eventgadget Then
MessBox("",GetGadgetText(ID_In_Number(GetFocus)))
SetFocus(GadgetID(TabStop(iNumberSelect)))
EndIf
If event=EventClose Then End
Loop
Однако, если в данном коде добавить EditorGadget , то будут косяки. В этом случае нужно решить , какими кнопками лучше переходить по гаджетам.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: FreeBasic похожий на PureBasic
Ну как перешел, у меня хвост программ на FB, непереведенных, пара с использованием Вашей библиотеки, и несколько новых на PB пока вообще без GUI. Всё в планах как-то собрать это в одном приложении, но всё такое разное и несовместимое... Собственно мне уже давно всё равно на каком языке или в какой среде писать, может в итоге это будет Lazarus или PHP Develstudio.
EditorGadget это который многострочный? Это логично, что Таб там работать не будет, он фокус просто так не отдаст. Но это и не критично. Когда на форме десять чекбоксов и четыре кнопки задумываться о механизме перемещения между элементами интерфейса ну совсем не хочется.
Спасибо, конечно, за вариант решения, вроде выглядит не ахти как сложно, может придётся им воспользоваться.
EditorGadget это который многострочный? Это логично, что Таб там работать не будет, он фокус просто так не отдаст. Но это и не критично. Когда на форме десять чекбоксов и четыре кнопки задумываться о механизме перемещения между элементами интерфейса ну совсем не хочется.
Спасибо, конечно, за вариант решения, вроде выглядит не ахти как сложно, может придётся им воспользоваться.
Re: FreeBasic похожий на PureBasic
А, хотел ещё спросить, а есть какой-то способ сделать, чтобы окно "не умирало", когда выполняется длительная процедура? Ну вот как в дельфях Application.ProcessMessages.
Re: FreeBasic похожий на PureBasic
DoReMi пишет:А, хотел ещё спросить, а есть какой-то способ сделать, чтобы окно "не умирало", когда выполняется длительная процедура? Ну вот как в дельфях Application.ProcessMessages.
Запустить длительную процедуру по таймеру(SetTimer) или в отдельном потоке(ThreadCreate).
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: FreeBasic похожий на PureBasic
Нет, не запуск в фоне, а чтобы окно программы отвечало на запросы системы, перерисовывалось.
Сейчас оно становится белым и в заголовке написано "(не отвечает)".
Что нужно включить в свою процедуру?
Сейчас оно становится белым и в заголовке написано "(не отвечает)".
Что нужно включить в свою процедуру?
Re: FreeBasic похожий на PureBasic
DoReMi пишет:Нет, не запуск в фоне, а чтобы окно программы отвечало на запросы системы, перерисовывалось.
Сейчас оно становится белым и в заголовке написано "(не отвечает)".
Что нужно включить в свою процедуру?
А ну не понял сразу. Так можно продублировать обработчик событий. Можно вообще добавлять сколько угодно и где угодно в одном потоке функции WaitEvent или WindowEvent. Если обработка событий имеет не хилый размер, вынести обработку событий в процедуру и вызывать эту процедуру там где вздумается.
Например:
- Код:
#Include "window9.bi"
Dim Shared As Integer event
Dim as HWND hwnd
Sub eventHandler()
Do
event=WaitEvent()
Select Case event
Case EventClose
End
Case eventgadget
' куча всяких проверок
Case eventmenu
' куча всяких проверок
End Select
Loop
End Sub
Sub verylong()
Do
eventHandler()
Do
eventHandler()
Do
eventHandler()
Loop
Loop
Loop
End Sub
hwnd=OpenWindow("",10,10,500,500) : CenterWindow(hwnd)
Do
event=WaitEvent()
verylong()
If Event=EventClose Then End
Loop
В какой-то программе я вообще вставлял просто waitevent и все. То есть мне не нужна была обработка событий, важно было только то, чтобы окно не висло. Где-то делал выборочную обработку событий, а где-то полностью обрабатывал события
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: FreeBasic похожий на PureBasic
Спасибо, гораздо лучше ) Правда, приходится принудительно блокировать сами элементы диалога, чтобы пользовать не жамкал.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Страница 6 из 6 • 1, 2, 3, 4, 5, 6
Страница 6 из 6
Права доступа к этому форуму:
Вы не можете отвечать на сообщения