On-line: Andrey, гостей 2. Всего: 3 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 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 добавить .... будет моргать совсем как по настоящему )

Спасибо: 0 
Профиль
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

но она является недокументированной и не рекомендуется к использованию, т.к. может быть исключена в любой новой Винде
Благодарю за помощь, Ваше предложение принимается

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




Пост N: 4795
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.03.16 17:58. Заголовок: Haz пишет: к модаль..


Haz пишет:

 цитата:
к модальному можно еще и Flash добавить .... будет моргать совсем как по настоящему )



Григорий - добавь пожалуйста ! Очень нужно...

Спасибо: 0 
Профиль
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




Спасибо: 0 
Профиль
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): Скрытый текст


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 905
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 17.03.16 23:59. Заголовок: SergKis пишет: без ..


SergKis пишет:

 цитата:
без этих изменений, не удерживался ::nRowPos


Благодарю за помощь, сделал эти изменения в коде TSBrowse

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 906
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.03.16 00:01. Заголовок: Andrey пишет: добав..


Andrey пишет:

 цитата:
добавь пожалуйста ! Очень нужно


Не вопрос, уже добавил моргание (6 раз с интервалом в 50 миллисекунд)

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 907
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.03.16 11:59. Заголовок: Сегодня выпущен очер..


Сегодня выпущен очередной релиз библиотеки MiniguiEx.

Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу:

http://hmgextended.com/files/CONTRIB/hmg-16.03-setup.zip

Также доступна сборка для компилятора MinGW32 по адресу:

http://hmgextended.com/files/CONTRIB/hmg1603-mingw.exe

и для компилятора MinGW64 по адресу:

http://hmgextended.com/files/CONTRIB/minigui64-1603.exe

и компактный архив для последней доступной версии компилятора xHarbour

http://hmgextended.com/files/CONTRIB/xhmg1603_xhb10146.zip

Благодарю за Ваше внимание и поддержку данного проекта

Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 909
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.03.16 11:37. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
доработанный вариант кода


Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок
Для кого это критично, могут обновить у себя инсталяцию BCC по ссылке выше

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 834
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.16 12:13. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Сделал "тихий" апдейт сборки 16.03 с учетом этих поправок


Спасибо, в таком варианте все работает.



Спасибо: 0 
Профиль
Softlog86



Пост N: 288
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 23.03.16 15:01. Заголовок: Заметил небольшой ба..


Заметил небольшой баг .
WINDOWS XP . Тема - "XP стандартная голубая"
Контрол из MiniGui :FRAME
Неправильно отображает цвета , указанные в FONTCOLOR ......
Пишу - WHITE - выводит вроде как зелёный :(

WINDOWS -7 . Тема "Классическая" -отображение правильное .


На других темах не проверял



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 910
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.03.16 15:08. Заголовок: Softlog86 пишет: Те..


Softlog86 пишет:

 цитата:
Тема "Классическая" -отображение правильное


Это не ошибка. В классической теме под WinXP будет также отображение правильное
Выводы о поведении Винды в разных темах делайте самостоятельно...

Спасибо: 0 
Профиль
Softlog86



Пост N: 289
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 23.03.16 22:45. Заголовок: просто другие контро..


просто другие контролы вырисовываются заданным цветом , а frame - почему-то по-своему . Чтоб ему еще прикрутить свойство NOXPSTYLE :)
Посоветуйте как решить-то ? или тупо не использовать раскраску вовсе ? ругаются клиенты что ничего не видно . А предлагать им "сменить тему" ...... не так поймут .

Спасибо: 0 
Профиль
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)



Спасибо: 0 
Профиль
Softlog86



Пост N: 290
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 24.03.16 10:54. Заголовок: Спасибо за наводку ...


Спасибо за наводку .... Приму к сведению .....

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




Пост N: 174
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 24.03.16 11:29. Заголовок: У меня все Разморгалось в новой


У меня все Разморгалось с новой сборкой 16.03 :) Видимо потому что я пользуюсь только Модальными окнами .
Причем в версии под MINGW имею Модальное окно которое моргает после того когда възвал и закрыл функцию MsgInfo() например.
а в BCC наоборот сначало моргает MsgInfo() при показе а потом и основное Модальное окно из кторого функция бъла вызвана

Григорий есть способ ето откльчить ?

Спасибо: 0 
Профиль
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.

Спасибо: 0 
Профиль
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
...
и пересобрать библиотеку

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