FreeBasic похожий на PureBasic

Страница 6 из 6 Предыдущий  1, 2, 3, 4, 5, 6

Предыдущая тема Следующая тема Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  DEPOzit в Чт Ноя 22, 2012 1:32 pm

Спасибо очередной раз за помощь.

DEPOzit

Сообщения : 113
Дата регистрации : 2008-05-15
Возраст : 35
Откуда : Смоленская обл.

Посмотреть профиль http://freebasic.ru/

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  DoReMi в Ср Окт 29, 2014 6:22 am

Что-то у меня как два года назад не получалось по гаджетам переходить табом или стрелками, не получалось включать чекбоксы пробелом, так и сейчас не получается, весь гуй доступен только мышкой.
Что я делаю не так?
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  trew в Ср Окт 29, 2014 9:01 am

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

Сообщение  DoReMi в Ср Окт 29, 2014 9:27 am

Ну как перешел, у меня хвост программ на FB, непереведенных, пара с использованием Вашей библиотеки, и несколько новых на PB пока вообще без GUI. Всё в планах как-то собрать это в одном приложении, но всё такое разное и несовместимое... Собственно мне уже давно всё равно на каком языке или в какой среде писать, может в итоге это будет Lazarus или PHP Develstudio.
EditorGadget это который многострочный? Это логично, что Таб там работать не будет, он фокус просто так не отдаст. Но это и не критично. Когда на форме десять чекбоксов и четыре кнопки задумываться о механизме перемещения между элементами интерфейса ну совсем не хочется.
Спасибо, конечно, за вариант решения, вроде выглядит не ахти как сложно, может придётся им воспользоваться.
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  DoReMi в Сб Ноя 01, 2014 9:35 am

А, хотел ещё спросить, а есть какой-то способ сделать, чтобы окно "не умирало", когда выполняется длительная процедура? Ну вот как в дельфях Application.ProcessMessages.
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  trew в Сб Ноя 01, 2014 11:36 am

DoReMi пишет:А, хотел ещё спросить, а есть какой-то способ сделать, чтобы окно "не умирало", когда выполняется длительная процедура? Ну вот как в дельфях Application.ProcessMessages.

Запустить длительную процедуру по таймеру(SetTimer) или в отдельном потоке(ThreadCreate).

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  DoReMi в Сб Ноя 01, 2014 12:55 pm

Нет, не запуск в фоне, а чтобы окно программы отвечало на запросы системы, перерисовывалось.
Сейчас оно становится белым и в заголовке написано "(не отвечает)".
Что нужно включить в свою процедуру?
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  trew в Сб Ноя 01, 2014 1:47 pm

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

Сообщение  DoReMi в Сб Ноя 01, 2014 2:01 pm

Спасибо, гораздо лучше ) Правда, приходится принудительно блокировать сами элементы диалога, чтобы пользовать не жамкал.
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  valdimir в Пт Июл 15, 2016 10:48 pm

-

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: FreeBasic похожий на PureBasic

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 6 из 6 Предыдущий  1, 2, 3, 4, 5, 6

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения