Автор | Сообщение |
|
| |
Пост N: 4905
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.06.15 10:51. Заголовок: Вопросы новичка [MiniGUI]
MAIN окно не получило фокус ввода при запуске , почему ? Пример самодостаточный. #include "minigui.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN REQUEST HB_LANG_RUWIN REQUEST HB_LANG_RU866 Func Main() DEFINE WINDOW Form_0 AT 321 , 491 WIDTH 558 HEIGHT 175 TITLE "Почему окно не в фокусе при запуске ?" ; MAIN NOSIZE NOSYSMENU TOPMOST ON INIT {|| MdiMain()} DEFINE BUTTONex Button_1 ROW 32 COL 424 WIDTH 110 HEIGHT 28 CAPTION "Вход" ACTION { || ret:=.t., DoMethod("Form_0","Hide") , DoMethod("Form_1","show") } FONTBOLD .t. END BUTTONex DEFINE BUTTONex Button_2 ROW 71 COL 424 CAPTION "Отмена" ACTION { || DoMethod("Form_0","Release") } WIDTH 110 HEIGHT 28 FONTBOLD .t. END BUTTONex END WINDOW Form_0.Activate Form_0.Setfocus return nil ***************************** Func Mdimain() DEFINE WINDOW Form_1 at 0,0 ; WIDTH 200 HEIGHT 300 TITLE "MDI windows" ; MDI ; NOSHOW END WINDOW Form_1.Center Form_1.Activate Form_0.Release return
|
|
|
Ответов - 289
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|
| |
Пост N: 4962
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.15 11:28. Заголовок: SergKis Понял , спа..
SergKis Понял , спасибо и на этом. Минигуи не допилен как следует я так понял , потому как даже в старых версиях FW таких ляпов нет.
|
|
|
|
| moderator
|
Пост N: 764
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.06.15 11:58. Заголовок: Dima пишет: Минигуи..
Dima пишет: цитата: | Минигуи не допилен как следует я так понял |
| Поддержку MDI интерфейса в Минигуи не одобрял автор библиотеки, поэтому ее добавил в расширенную сборку Януш Пора (как сумел). Если будут предложены необходимые доработки от заинтересованных лиц, то они будут включены в актуальную версию (после проверки, конечно)
|
|
|
|
| |
Пост N: 4963
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.15 12:06. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | поэтому ее добавил в расширенную сборку Януш Пора (как сумел) |
| Теперь все ясно а я копья ломаю
|
|
|
|
| постоянный участник
|
Пост N: 665
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.15 12:50. Заголовок: Dima Добавил в прим..
Dima Добавил в пример (в начале темы, который ломал mdimain [hb 3.2 minigui 2.4.7 borland]) в modal окно DEFINE WINDOW wModal AT 0,0 WIDTH 400 HEIGHT 300 MODAL ThisWindow.Topmost := .T. ... и получил модально окно в др. приложениях поверх, может у тебя такое есть ?
|
|
|
|
| |
Пост N: 4964
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.15 13:16. Заголовок: SergKis Такого нет...
SergKis Такого нет. Основное окно у меня простое с запросом пароля , после его ввода окно прячу. Затем вылазит MDI окно в котором живет статус бар и живут MDICHILD окна. При нажатии на статус бар создается менюшка в окне MODAL , это окно живет во всех приложениях ;) Что касается TOPMOST то он да стоял но на окне с вводом пароля. Убрал временно. Поведение MODAL окна изменилось. При переключении в другую программу все нормально и нет этого окна. Но при возврате в свое приложение не видать MODAL окна.
|
|
|
|
| постоянный участник
|
Пост N: 666
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.15 14:38. Заголовок: Dima пишет:Основное ..
Dima пишет: цитата: | Основное окно у меня простое с запросом пароля , после его ввода окно прячу. Затем вылазит MDI окно |
| т.е. у тебя основное окно main и потом mdi main, два окна типа A - не знаю как они уживуться по переммым _HMG_... у меня есть такая ситуация, но mdi - отдельный exe, который запускаю. Если пробнуть пустить только mdi часть (типа пароль уже ввели), что будет ? Пример на borland (говорил выше) ведет себя с модал окном (без topmost) вполне адекватно, как должно быть (кроме отрисовки main после ...)
|
|
|
|
| |
Пост N: 4965
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.15 14:41. Заголовок: SergKis пишет: и по..
SergKis пишет: Нет просто MDI , ведь 2-х MAIN окон быть не может Ладно , спасибо. Я не буду пока юзать MDI пока с ними не наведут порядок.
|
|
|
|
| постоянный участник
|
Пост N: 4306
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.06.15 16:11. Заголовок: Dima пишет: ведь 2-..
Dima пишет: цитата: | ведь 2-х MAIN окон быть не может |
| Было бы интересно посмотреть. Очень удобно на панели задач иметь свои отдельные окна ! Юзера просят об этом.
|
|
|
|
| |
Пост N: 4966
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.15 21:49. Заголовок: Пара простых вопросо..
Пара простых вопросов от новичка к знатокам. 1. В самом начале программы стоит вот такая конструкция , что бы не запустить программу более одного раза IF IsExeRunning( cFileNoPath( HB_ArgV( 0 ) ) ) hWnd := FindWindow( APP_TITLE ) IF hWnd > 0 IF IsIconic( hWnd ) _Restore( hWnd ) ELSE SetForeGroundWindow( hWnd ) ENDIF ELSE MsgStop( "Cannot find application window!", "Error", , .f. ) ENDIF quit ENDIF Да это работает. Но в основном окне могут быть открыты другие окошки. Как можно попасть не на основное окно программы (хотя понятно что ищем его в коде выше) а на активное (в фокусе окно) живущее в паренте главного окна ? А если попасть еще бы в нужное окошко да еще и в последний в фокусе контрол , но это видимо я уже фантазирую ;) 2. Пример C:\MiniGUI\SAMPLES\BASIC\REGIONS\ , почему такие "обгрызанные" углы в RoundRect , молчу уже про эллипс ?
|
|
|
|
| постоянный участник
|
Пост N: 667
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.15 23:13. Заголовок: Dima пишет:в нужное ..
Dima пишет: цитата: | в нужное окошко да еще и в последний в фокусе контрол |
| Не очень понятно желание попасть в контрол, который уже в фокусе (gotfocus, onchange уже были и ...), может про это спрашиваешь (последним был в фокусе): // в процедуре LostFocus IF ( i := AScan ( _HMG_aControlHandles, GetFocus()) ) > 0 cControlName := _HMG_aControlNames[ i ] IF ( i := AScan ( _HMG_aFormHandles, _HMG_aControlParenthandles[ i ] ) ) > 0 cFormName := _HMG_aFormNames[ i ] ENDIF ENDIF ... // потом где то IF ! empty(cControlName) .and. ! empty(cFormName) _SetFocus(cControlName, cFormName) ENDIF
|
|
|
|
| |
Пост N: 4967
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 09:35. Заголовок: Нет я не про это. ..
Нет я не про это. В самом начале проги вот такой код IF IsExeRunning( cFileNoPath( HB_ArgV( 0 ) ) ) hWnd := FindWindow( APP_TITLE ) IF hWnd > 0 IF IsIconic( hWnd ) _Restore( hWnd ) ELSE SetForeGroundWindow( hWnd ) ENDIF ENDIF quit ENDIF Запустил программу , вылезло главное окно (обычное) , вызываю в нем CHILD окно. После этого снова запускаю программу и код который выше сделает активным главное окно но не CHILD. Мне надо попасть на CHILD. Возможно (это просто догадка) попадать нужно на последнюю форму вызванную в программе.
|
|
|
|
|
| постоянный участник
|
Пост N: 668
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.06.15 10:42. Заголовок: Dima Запущена прога..
Dima Запущена прога 2-раза сразу (первый раз уже где то работаем), или запустили, где то работали, вышли (запомнили где были), снова запустили и хотим попасть сразу в режим (окно, контрол) где были ?
|
|
|
|
| |
Пост N: 4968
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 10:49. Заголовок: SergKis пишет: Запу..
SergKis пишет: цитата: | Запущена прога 2-раза сразу (первый раз уже где то работаем) |
| вот это
|
|
|
|
| |
Пост N: 4969
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 10:58. Заголовок: Собственно идея взят..
Собственно идея взята тут C:\MiniGUI\SAMPLES\Advanced\IsExeRunning\demo.prg Вторую копию проги не запустить. Но в примере окошко всего одно. А если их будет больше то при повторном запуске мы все равно попадаем на главное окно а попасть надо на последнее , которое было в момент повторного запуска программы. Вроде понятно пояснил.
|
|
|
|
| постоянный участник
|
Пост N: 669
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.06.15 10:59. Заголовок: Dima Туплю. Если уж..
Dima Туплю. Если уже в child работаешь, зачем манипуляции с hWnd - просто выходи и все из 2-го экз. проги.
|
|
|
|
| |
Пост N: 4970
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 11:07. Заголовок: SergKis пишет: Если..
SergKis пишет: цитата: | Если уже в child работаешь, зачем манипуляции с hWnd - просто выходи и все из 2-го экз. проги. |
| Мы не ищем легких путей , хотел сделать красиво. В одной проге такой эффект видел. При повторном запуске попадаем куда нужно.
|
|
|
|
| постоянный участник
|
Пост N: 670
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.06.15 11:28. Заголовок: Dima пишет:Мы не ище..
Dima пишет: Если 1-е приложение свернуто (все окна) и надо развернуть 2-м запуском можно - послать WM_COPYDATA 1-ому и пусть оно само все делает как надо (в sampes поищи) - перебрать окна принадл. hWnd и раскрыть нужные (как определить ?) но где видел не помню
|
|
|
|
| |
Пост N: 4971
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 11:38. Заголовок: Понял , бум копать. ..
Понял , бум копать. Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 671
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.06.15 12:15. Заголовок: Dima Если на окно 1..
Dima Если на окно 1-го запуска повесить on gotfocus, с алгоритмом по развернутым окнам child, то будет срабатывать и твой код
|
|
|
|
| |
Пост N: 4972
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.15 12:51. Заголовок: SergKis пишет: пер..
SergKis пишет: цитата: | перебрать окна принадл. hWnd и раскрыть нужные (как определить ?) но где видел не помню |
| Этот вариант предпочтительнее , будем искать примерчик....
|
|
|
Ответов - 289
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|