Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Haz
|
| |
Пост N: 830
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.03.16 14:19. Заголовок: Григорий Есть еще п..
Григорий Есть еще предложение ... Как неоднократно тут вопрошал Андрей, при переключении между программами в Windows, если в программе на MiniGui последним активным было модальное окно , вызванное из дочернего, то такое модальное окно не получает фокус и программа уходит в вечное ожидание когда его закроют. Схематически вызовы такие MAIN->CHILD->MODAL , переключаем задачи и попадаем в CHILD ( MODAL не видно и на него не переключиться ). Предлагаю очень простое решение: в модуле h_events.prg в обработку событий в функцию Events() , в событие WM_SETFOCUS добавить условие Было: _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure , i , 'WINDOW_GOTFOCUS' ) iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) Стало: IF _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) ELSE iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) END Таким образом , при любой попытке дать фокус любому окну, если есть модальное , то фокус и топ на экране получит оно PS. После получения фокуса , к модальному можно еще и Flash добавить .... будет моргать совсем как по настоящему )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 904
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.03.16 15:35. Заголовок: Haz пишет: при любо..
Haz пишет: цитата: | при любой попытке дать фокус любому окну, если есть модальное , то фокус и топ на экране получит оно |
| Неплохое предложение, хотя особого эффекта функция BringWindowToTop() у меня не дает (но и ничего не портит, похоже). Лучше работает другая функция WinAPI цитата: | DECLARE DLL_TYPE_BOOL SwitchToThisWindow( DLL_TYPE_LONG hWnd, DLL_TYPE_BOOL lRestore ) ; IN USER32.DLL |
|
но она является недокументированной и не рекомендуется к использованию, т.к. может быть исключена в любой новой Винде Благодарю за помощь, Ваше предложение принимается
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4795
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.03.16 17:58. Заголовок: Haz пишет: к модаль..
Haz пишет: цитата: | к модальному можно еще и Flash добавить .... будет моргать совсем как по настоящему ) |
| Григорий - добавь пожалуйста ! Очень нужно...
|
|
|
Haz
|
| |
Пост N: 831
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.03.16 18:36. Заголовок: Andrey пишет: Григо..
Andrey пишет: цитата: | Григорий - добавь пожалуйста ! Очень нужно... |
| тогда так if _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) if _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" FlashWindowEx( _HMG_ActiveModalHandle , 1, 5, 100 ) end else iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) end
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 900
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.03.16 19:54. Заголовок: gfilatov2002 В свое..
gfilatov2002 В своей версии подправил: METHOD GoToRec( nRec ) CLASS TSBrowse ... ( ::cAlias )->( DbGoto( nRec ) ) // If nRecNo != ( ::cAlias )->( RecNo() ) .and. ::nLen > nLines было If ::nLen > nLines nRecNo := ( ::cAlias )->( RecNo() ) ( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) If ( ::cAlias )->( EoF() ) ... Else ( ::cAlias )->( DbGoTo( nRecNo ) ) ::nLastPos := nRecNo ::nAt := ::nLogicPos() EndIf ... без этих изменений, не удерживался ::nRowPos (перепрыгивал на 1) и бывало не так, как надо перепоказ происходил Пример (на базе Tsb_addrecord): Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "tsbrowse.ch" FIELD id, info *----------------------------------- PROCEDURE Main *----------------------------------- LOCAL i, obrw IF !hb_FileExists( "datab.dbf" ) dbCreate( "datab", { { "ID", "N", 5, 0 }, { "INFO", "C", 15, 0 } } ) ENDIF USE datab ALIAS base NEW INDEX ON id TO datab temporary IF LastRec() == 0 FOR i := 1 TO 200 APPEND BLANK REPLACE id WITH RecNo(), info WITH "record " + hb_ntos( RecNo(), 4 ) NEXT ENDIF DEFINE WINDOW win_1 AT 0, 0 WIDTH 400 HEIGHT 500 ; MAIN TITLE "TSBrowse Add Record Demo" NOMAXIMIZE NOSIZE @06, 10 BUTTON BRUN CAPTION "Add Record" ACTION AddRecord( obrw ) @06, 110 BUTTON BFND CAPTION "Find ID 100" ACTION FindRecord( obrw ) DEFINE STATUSBAR FONT _HMG_DefaultFontName SIZE _HMG_DefaultFontSize STATUSITEM "" END STATUSBAR DEFINE TBROWSE obrw AT 40, 10 GRID ALIAS "base" ; WIDTH 370 HEIGHT 418 - 60 ADD COLUMN TO obrw HEADER "ID" ; SIZE 100 ; DATA FieldWBlock( "id", Select( "base" ) ) ; TOOLTIP "My column 1" ADD COLUMN TO obrw HEADER "INFO" ; SIZE 150 ; DATA FieldWBlock( "info", Select( "base" ) ) ; TOOLTIP "My column 2" obrw:cToolTip := "My all columns TsBrowse tooltip" obrw:lNoHScroll := .T. obrw:SetColor( { 2 }, { {|| iif( base->( ordKeyNo() ) % 2 == 0, RGB( 255, 255, 255 ), RGB( 230, 230, 230 ) ) } } ) END TBROWSE obrw:SetFocus() END WINDOW CENTER WINDOW win_1 ACTIVATE WINDOW win_1 RETURN *----------------------------------- PROCEDURE AddRecord( obrw ) *----------------------------------- APPEND BLANK REPLACE id WITH RecNo(), info WITH "record " + hb_ntos( RecNo(), 4 ) obrw:GoToRec( base->( RecNo() ) ) obrw:SetFocus() RETURN FUNC FindRecord( obrw ) SEEK 100 obrw:GotoRec(RecNo()) obrw:SetFocus() RETURN
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 905
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.03.16 23:59. Заголовок: SergKis пишет: без ..
SergKis пишет: цитата: | без этих изменений, не удерживался ::nRowPos |
| Благодарю за помощь, сделал эти изменения в коде TSBrowse
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 906
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.03.16 00:01. Заголовок: Andrey пишет: добав..
Andrey пишет: цитата: | добавь пожалуйста ! Очень нужно |
| Не вопрос, уже добавил моргание (6 раз с интервалом в 50 миллисекунд)
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 907
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.16 11:59. Заголовок: Сегодня выпущен очер..
|
|
|
Haz
|
| |
Пост N: 833
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.03.16 15:12. Заголовок: Григорий , все же сл..
Григорий , все же следующий вариант работает более корректно ( у себя заменил на него ) //H_EVENTS.PRG _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure , i , 'WINDOW_GOTFOCUS' ) IF _HMG_IsModalActive BringWindowToTop(_HMG_ActiveModalHandle) if _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" // Это нужно чтоб при вызове из модального окна - другого FlashWindowEx( _HMG_ActiveModalHandle , 1, 6, 50 ) // модального , старое не мограло end ELSE iif ( _HMG_aFormFocusedControl != 0 , setfocus ( _HMG_aFormFocusedControl ) , Nil ) END Проверял работу новой версии вот на примере ниже , если после запуска теста на панели задач выбрать мышью другое приложение , а потом опять тест - НЕ ВСЕГДА попадаем в модал да и моргает не то окно ( в титле окон видно ). А если переключать не мышом, а альт+таб , то вроде нормик #include "minigui.ch" Function Main DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Main' ; MAIN ; ON INIT Child() END WINDOW Form_1.Activate Return Nil Func Child() Form_1.Hide DEFINE WINDOW Form_2 ; AT 100,100 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Standard' ; WINDOWTYPE STANDARD ; ON INIT Modal() END WINDOW Form_2.Activate Form_1.Show return nil Func Modal() DEFINE WINDOW Form_3 ; AT 200,200 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Modal' ; MODAL END WINDOW Form_3.Activate return nil
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 908
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.16 23:01. Заголовок: Haz пишет: следующ..
Haz пишет: цитата: | следующий вариант работает более корректно |
| Благодарю за пример! Предлагаю доработанный вариант кода с учетом Ваших замечаний: ... IF _HMG_IsModalActive BringWindowToTop ( _HMG_ActiveModalHandle ) IF iswinnt() .AND. ( _HMG_aFormType != 'M' .OR. ; _HMG_aFormFocused == .T. .AND. _HMG_aFormType [ AScan ( _HMG_aFormHandles, _HMG_aFormParentHandle ) ] == 'M' ) // Form's caption blinking FlashWindowEx ( _HMG_ActiveModalHandle , 1 , 5 , 60 ) ELSE _HMG_aFormFocused := .T. ENDIF ENDIF IF _HMG_aFormFocusedControl != 0 setfocus ( _HMG_aFormFocusedControl ) ENDIF
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 909
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 11:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | доработанный вариант кода |
| Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок Для кого это критично, могут обновить у себя инсталяцию BCC по ссылке выше
|
|
|
|
Haz
|
| |
Пост N: 834
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.16 12:13. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок |
| Спасибо, в таком варианте все работает.
|
|
|
Softlog86
|
| |
Пост N: 288
Зарегистрирован: 03.12.08
|
|
Отправлено: 23.03.16 15:01. Заголовок: Заметил небольшой ба..
Заметил небольшой баг . WINDOWS XP . Тема - "XP стандартная голубая" Контрол из MiniGui :FRAME Неправильно отображает цвета , указанные в FONTCOLOR ...... Пишу - WHITE - выводит вроде как зелёный :( WINDOWS -7 . Тема "Классическая" -отображение правильное . На других темах не проверял
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 910
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 15:08. Заголовок: Softlog86 пишет: Те..
Softlog86 пишет: цитата: | Тема "Классическая" -отображение правильное |
| Это не ошибка. В классической теме под WinXP будет также отображение правильное Выводы о поведении Винды в разных темах делайте самостоятельно...
|
|
|
Softlog86
|
| |
Пост N: 289
Зарегистрирован: 03.12.08
|
|
Отправлено: 23.03.16 22:45. Заголовок: просто другие контро..
просто другие контролы вырисовываются заданным цветом , а frame - почему-то по-своему . Чтоб ему еще прикрутить свойство NOXPSTYLE :) Посоветуйте как решить-то ? или тупо не использовать раскраску вовсе ? ругаются клиенты что ничего не видно . А предлагать им "сменить тему" ...... не так поймут .
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 911
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.03.16 23:30. Заголовок: Softlog86 пишет: По..
Softlog86 пишет: Используйте в таком случае OwnerDraw frame как в примере из папки samples\Basic\LABEL_3 Вызов функции цитата: | MyFrame(300,300,175,50,"20","My Frame",BLUE,LGREEN) |
|
|
|
|
Softlog86
|
| |
Пост N: 290
Зарегистрирован: 03.12.08
|
|
Отправлено: 24.03.16 10:54. Заголовок: Спасибо за наводку ...
Спасибо за наводку .... Приму к сведению .....
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 174
Зарегистрирован: 15.09.05
|
|
Отправлено: 24.03.16 11:29. Заголовок: У меня все Разморгалось в новой
У меня все Разморгалось с новой сборкой 16.03 :) Видимо потому что я пользуюсь только Модальными окнами . Причем в версии под MINGW имею Модальное окно которое моргает после того когда възвал и закрыл функцию MsgInfo() например. а в BCC наоборот сначало моргает MsgInfo() при показе а потом и основное Модальное окно из кторого функция бъла вызвана Григорий есть способ ето откльчить ?
|
|
|
Haz
|
| |
Пост N: 835
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.03.16 14:58. Заголовок: sashaBG пишет: У ме..
sashaBG пишет: цитата: | У меня все Разморгалось с новой сборкой 16.03 : |
| Есть такое. При нескольких модальный они перемигиваются Скорее всего дело в условии IF iswinnt() .AND. ( _HMG_aFormType != 'M' .OR. ; _HMG_aFormFocused == .T. .AND. _HMG_aFormType [ AScan ( _HMG_aFormHandles, _HMG_aFormParentHandle ) ] == 'M' ) поменял у себя на if iswinnt() .AND. _HMG_aFormFocusedControl <> _HMG_ActiveModalHandle .and. _HMG_aFormType [ i ] <> "M" т.е. мигает только если пытается получить фокус не то окно которое является последним открытым модальным, а какое то другое. При этом окно которое хочет получить фокус не является модальным. После этой правки вроде полегчало и моргает только по делу. Для отключения, можно флаг организовать в исходнике типа lModalBlink и моргать только если он выставлен в .T.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 912
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.03.16 15:40. Заголовок: sashaBG пишет: Григ..
sashaBG пишет: цитата: | Григорий есть способ ето откльчить ? |
| Да, надо в исходнике h_events.prg изменить обработку события WM_SETFOCUS таким образом: ... _DoWindowEventProcedure ( _HMG_aFormGotFocusProcedure [ i ] , i , 'WINDOW_GOTFOCUS' ) IF _HMG_IsModalActive .AND. Empty ( _HMG_InplaceParentHandle ) BringWindowToTop ( _HMG_ActiveModalHandle ) IF iswinnt() .AND. _HMG_aFormType [ i ] != 'M' // Form's caption blinking FlashWindowEx ( _HMG_ActiveModalHandle , 1 , 5 , 60 ) ENDIF ENDIF ... и пересобрать библиотеку
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|