On-line: Pasha, Haz, гостей 1. Всего: 3 [подробнее..]
АвторСообщение
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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 таких ляпов нет.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 764
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.06.15 11:58. Заголовок: Dima пишет: Минигуи..


Dima пишет:

 цитата:
Минигуи не допилен как следует я так понял


Поддержку MDI интерфейса в Минигуи не одобрял автор библиотеки, поэтому ее добавил в расширенную сборку Януш Пора (как сумел).
Если будут предложены необходимые доработки от заинтересованных лиц, то они будут включены в актуальную версию (после проверки, конечно)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4963
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.15 12:06. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
поэтому ее добавил в расширенную сборку Януш Пора (как сумел)


Теперь все ясно а я копья ломаю

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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.
...
и получил модально окно в др. приложениях поверх, может у тебя такое есть ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4964
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.15 13:16. Заголовок: SergKis Такого нет...


SergKis
Такого нет.
Основное окно у меня простое с запросом пароля , после его ввода окно прячу.
Затем вылазит MDI окно в котором живет статус бар и живут MDICHILD окна.
При нажатии на статус бар создается менюшка в окне MODAL , это окно живет
во всех приложениях ;)
Что касается TOPMOST то он да стоял но на окне с вводом пароля. Убрал временно.
Поведение MODAL окна изменилось. При переключении в другую программу все
нормально и нет этого окна. Но при возврате в свое приложение не видать MODAL
окна.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 666
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.15 14:38. Заголовок: Dima пишет:Основное ..


Dima пишет:
 цитата:
Основное окно у меня простое с запросом пароля , после его ввода окно прячу. Затем вылазит MDI окно


т.е. у тебя основное окно main и потом mdi main, два окна типа A - не знаю как они уживуться по переммым _HMG_...
у меня есть такая ситуация, но mdi - отдельный exe, который запускаю.
Если пробнуть пустить только mdi часть (типа пароль уже ввели), что будет ?
Пример на borland (говорил выше) ведет себя с модал окном (без topmost) вполне адекватно, как должно быть (кроме отрисовки main после ...)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4965
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.15 14:41. Заголовок: SergKis пишет: и по..


SergKis пишет:

 цитата:
и потом mdi main


Нет просто MDI , ведь 2-х MAIN окон быть не может
Ладно , спасибо. Я не буду пока юзать MDI пока с ними не наведут порядок.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4306
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.06.15 16:11. Заголовок: Dima пишет: ведь 2-..


Dima пишет:

 цитата:
ведь 2-х MAIN окон быть не может


Было бы интересно посмотреть.
Очень удобно на панели задач иметь свои отдельные окна !
Юзера просят об этом.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 ,
молчу уже про эллипс ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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. Возможно (это просто догадка) попадать нужно
на последнюю форму вызванную в программе.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 668
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.15 10:42. Заголовок: Dima Запущена прога..


Dima
Запущена прога 2-раза сразу (первый раз уже где то работаем), или запустили, где то работали, вышли (запомнили где были), снова запустили и хотим попасть сразу в режим (окно, контрол) где были ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4968
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 10:49. Заголовок: SergKis пишет: Запу..


SergKis пишет:

 цитата:
Запущена прога 2-раза сразу (первый раз уже где то работаем)


вот это

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4969
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 10:58. Заголовок: Собственно идея взят..


Собственно идея взята тут C:\MiniGUI\SAMPLES\Advanced\IsExeRunning\demo.prg
Вторую копию проги не запустить. Но в примере окошко всего одно.
А если их будет больше то при повторном запуске мы все равно попадаем на главное окно
а попасть надо на последнее , которое было в момент повторного запуска программы.
Вроде понятно пояснил.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 669
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.15 10:59. Заголовок: Dima Туплю. Если уж..


Dima
Туплю. Если уже в child работаешь, зачем манипуляции с hWnd - просто выходи и все из 2-го экз. проги.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4970
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 11:07. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если уже в child работаешь, зачем манипуляции с hWnd - просто выходи и все из 2-го экз. проги.


Мы не ищем легких путей , хотел сделать красиво. В одной проге такой эффект видел.
При повторном запуске попадаем куда нужно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 670
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.15 11:28. Заголовок: Dima пишет:Мы не ище..


Dima пишет:
 цитата:
Мы не ищем легких путей


Если 1-е приложение свернуто (все окна) и надо развернуть 2-м запуском можно
- послать WM_COPYDATA 1-ому и пусть оно само все делает как надо (в sampes поищи)
- перебрать окна принадл. hWnd и раскрыть нужные (как определить ?) но где видел не помню

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4971
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 11:38. Заголовок: Понял , бум копать. ..


Понял , бум копать. Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 671
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.15 12:15. Заголовок: Dima Если на окно 1..


Dima
Если на окно 1-го запуска повесить on gotfocus, с алгоритмом по развернутым окнам child, то будет срабатывать и твой код

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4972
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 12:51. Заголовок: SergKis пишет: пер..


SergKis пишет:

 цитата:
перебрать окна принадл. hWnd и раскрыть нужные (как определить ?) но где видел не помню


Этот вариант предпочтительнее , будем искать примерчик....

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 289 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 637
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет