On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
gfilatov
модератор




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №48, которая выйдет в конце недели.
Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новый класс HEADERIMAGE для Grid и Browse;
- свойство Address в Hyperlink может теперь открывать папку или файл на диске;
- добавлен NOTABSTOP класс для Browse;
- поддержка пользовательских компонентов (заимствована из оффициального релиза);
- расширения и исправления в библиотеках TsBrowse и PropGrid;
- обновлены сборки Харбор и HMGS-IDE;
- новые и обновленные старые примеры (как обычно ).




--
Улыбайся - завтра будет хуже!
Спасибо: 5 
Профиль
Новых ответов нет , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [см. все]


SergKis



Пост N: 1874
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.06.18 16:16. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил в своей lib
 
*------------------------------------------------------------------------------*
FUNC Do_Obj( nHandle, bBlock, p1, p2, p3 )
*------------------------------------------------------------------------------*
LOCAL o

If empty (nHandle) ; nHandle := _HMG_ThisFormName
ElseIf HB_ISOBJECT(nHandle)
If nHandle:ClassName == 'TSBROWSE'; nHandle := nHandle:cParentWnd
Else ; nHandle := nHandle:Name
EndIf
EndIf

If HB_ISCHAR(nHandle) ; nHandle := GetFormHandle( nHandle )
EndIf

If hmg_IsWindowObject(nHandle)

o := hmg_GetWindowObject(nHandle)

If HB_ISCHAR(bBlock); bBlock := hb_macroblock( bBlock )
EndIf

If HB_ISBLOCK(bBlock)
IF o:IsWindow; RETURN Do_WindowEventProcedure ( bBlock, o:Index, o, p1, p2, p3 )
ELSE ; RETURN Do_ControlEventProcedure ( bBlock, o:Index, o, p1, p2, p3 )
ENDIF
EndIf

Endif

RETURN o

Для исп. в командах (короче писать), к прмеру
#translate doObj( <blk> ) => Do_Obj ( nil , <"blk"> )
#translate doObj( <blk> , <wnd> ) => Do_Obj ( <"wnd">, <"blk"> )
#translate _doObj( <blk> ) => Do_Obj ( nil , <"blk"> )
#translate _doObj( <blk> , <wnd> ) => Do_Obj ( <wnd> , <"blk"> )

#translate wObj( ) => _WindowObj ( _HMG_ThisFormName )
#translate wObj( <wnd> ) => _WindowObj ( <"wnd"> )
#translate _wObj( ) => _WindowObj ( _HMG_ThisFormName )
#translate _wObj( <wnd> ) => _WindowObj ( <wnd> )

#translate gObj( <ctl> ) => _ControlObj( <"ctl">, _HMG_ThisFormName )
#translate gObj( <ctl> , <wnd> ) => _ControlObj( <"ctl">, <wnd> )
#translate _gObj( <ctl> ) => _ControlObj( <ctl> , _HMG_ThisFormName )
#translate _gObj( <ctl> , <wnd> ) => _ControlObj( <ctl> , <wnd> )


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




Пост N: 1302
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.06.18 20:53. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил в своей lib


Благодарю за внимание!
Мы уже обсуждали, что подготовкой входных параметров в идеале должна заниматься вызывающая функция
Это позволяет делать функции в ядре компактными
По этой причине не принято...

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



Пост N: 1875
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.06.18 21:05. Заголовок: gfilatov2002 пишет Э..


gfilatov2002 пишет
 цитата:
Это позволяет делать функции в ядре компактными




 цитата:
Был не прав, вспылил.



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




Пост N: 1303
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.06.18 11:28. Заголовок: Всем кому это интере..


Всем кому это интересно

Подготовил beta 3 для новой сборки библиотеки со следующим списком изменений
Скрытый текст


Благодарю за Ваше внимание
Особая благодарность Сергею Киселеву за неоценимую помощь в развитии библиотеки TsBrowse


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



Пост N: 1876
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.18 15:34. Заголовок: gfilatov2002 Если м..


gfilatov2002
Если модальному окну добавить свойство lFocusBreack := [.F.]\.T.
Добавить в место, где обработка потери фокуса мод. окном с морганием, проверку lFocusBreack.
Если .T., не моргать, а завершать мод.окно (как по X), будет похоже на child поведение под модал родителем



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



Пост N: 1877
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.18 16:05. Заголовок: PS В команду #comman..


PS
В команду
 
#command ADD [ COLUMN ] TO [ TBROWSE ] <oBrw> ;
...

надо добавить ALIAS, тогда в команде ADD COLUMN ... DATA hb_macroblock(...) ... ALIAS ...
поведение аналогично DEFINE COLUMN будет

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




Пост N: 1304
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.06.18 16:35. Заголовок: SergKis пишет: надо..


SergKis пишет:

 цитата:
надо добавить ALIAS, тогда в команде ADD COLUMN


Да, это было сделано сразу при модификации

 цитата:
аналогично DEFINE COLUMN



SergKis пишет:

 цитата:
Если модальному окну добавить свойство lFocusBreack


Предложение интересное, но требуется небольшой пример для проверки этого нового свойства

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



Пост N: 1878
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.18 18:28. Заголовок: gfilatov2002 пишет т..


gfilatov2002 пишет
 цитата:
требуется небольшой пример


Свойство условное, имел ввиду такое
 
FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ;
...
NoAutoRelease, InteractiveCloseProcedure, MoveProcedure, DropProcedure, clientwidth, clientheight, lLostExit )
...
_HMG_aFormMiscData1 [ k ] := {lLostExit}
...

В обработчике, при потере фокуса на окне типа 'M' проверить разрешен выход или нет.


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



Пост N: 1879
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.18 18:32. Заголовок: PS в команду #xcom..


PS
в команду #xcommand DEFINE WINDOW <w> ;
добавить
 
[ <helpbutton: HELPBUTTON> ] ;
[ <FocusExit: FOCUSEXIT>
=> ;
DECLARE WINDOW <w> ;;
...
к примеру


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




Пост N: 1305
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.06.18 20:56. Заголовок: SergKis пишет: Свой..


SergKis пишет:

 цитата:
Свойство условное


Решил назвать это свойство модального окна FLASHEXIT и сохранять его в элементе массива _HMG_aFormFocused [ i ]

У меня уже работает следующий пример:

#include "Minigui.ch" 

*************
function MAIN
*************

DEFINE WINDOW cDlgMain AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Main" MAIN

DEFINE BUTTONEX ButtonEX_1
ROW 225
COL 79
WIDTH 100
HEIGHT 30
CAPTION "Child&Modal"
ICON NIL
ACTION CHILD_MODAL()
END BUTTONEX

DEFINE BUTTONEX ButtonEX_2
ROW 225
COL 219
WIDTH 100
HEIGHT 30
CAPTION "&Quit"
ICON NIL
ACTION cDlgMain.release
END BUTTONEX

END window

cDlgMain.center
cDlgMain.activate

return NIL

*************************
static function CHILD_MODAL
*************************
IF iswindowdefined(cDlgChild1)
doMethod( "cDlgChild1", "SETFOCUS" )
return NIL
ENDIF

DEFINE WINDOW cDlgChild1 AT 0 , 0 WIDTH 400 HEIGHT 300 TITLE "Child" CHILD ;
ON GOTFOCUS iif((i := GetFormIndex( "cDlgModal1" )) > 0, _HMG_aFormFocused [ i ] := .T., THIS.TITLE := "GOTFOCUS")

END window

DEFINE WINDOW cDlgModal1 AT 0 , 0 WIDTH 100 HEIGHT 100 TITLE "Modal" MODAL ;
ON LOSTFOCUS cDlgChild1.TITLE := "FLASHEXIT"

END window

cDlgChild1.center

activate window cDlgModal1, cDlgChild1

return NIL

Прошу проверить и подтвердить, что я двигаюсь в правильном направлении

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




Пост N: 1306
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.06.18 21:03. Заголовок: P.S. В файле h_event..


P.S.
В файле h_events.prg сделал такую вставку
... 
IF iswinnt() .OR. _HMG_aFormType [ i ] != 'M'
BringWindowToTop ( _HMG_ActiveModalHandle )

FOR x := 1 TO Len ( _HMG_aFormHandles )

IF _HMG_aFormHandles [x] == _HMG_ActiveModalHandle .AND. _HMG_aFormFocused [x]
PostMessage( _HMG_ActiveModalHandle, WM_CLOSE, 0, 0 )
ENDIF

NEXT x
ENDIF
...


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



Пост N: 1880
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.18 23:49. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Прошу проверить


Более наглядный пример (по мне)Скрытый текст

С модал 1 фокус на маин окно и с маин 2 фокус на маин 1.
Если нажав на модал 1 кнопку Focus Main, переключить на far и обратно - срабатывает, модал 1 уходит.

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



Пост N: 1881
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.18 00:07. Заголовок: SergKis пишет С мода..


SergKis пишет
 цитата:
С модал 1 фокус на маин окно и с маин 2 фокус на маин 1.


читать
С модал 1 фокус на маин окно и с модал 2 фокус на модал 1.

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



Пост N: 1882
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.18 12:28. Заголовок: gfilatov2002 Такой ..


gfilatov2002
Такой манипуляцией, запустил child окно под modal
 
*************************
static function MODAL_2( oParent )
*************************
LOCAL y := App.Row+80
LOCAL x := App.Col+80
LOCAL m := _HMG_IsModalActive
LOCAL h := _HMG_ActiveModalHandle

_HMG_IsModalActive := .F.
_HMG_ActiveModalHandle := 0

DEFINE WINDOW cModal2 AT y, x WIDTH 400 HEIGHT 300 TITLE "Modal 2" CHILD
ON GOTFOCUS This.Release
...


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



Пост N: 1883
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.18 14:34. Заголовок: SergKis пишет Такой ..


SergKis пишет
 цитата:
Такой манипуляцией, запустил child окно под modal


Работающий вариант с modal окна запустить child окно (это против системы). Функция на замену к примеру выше
Скрытый текст


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



Пост N: 1884
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.06.18 11:55. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал в своей версии
 
CLASS TSColumn
...
DATA bSeek //

...
METHOD DrawLine( xRow ) CLASS TSBrowse
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
Elseif cColAls != Nil
If Valtype( oColumn:bSeek ) == 'B'
( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) )
EndIf

uData := ( cColAls )->( Eval( oColumn:bData ) )
Else
If Valtype( oColumn:bSeek ) == 'B'
Eval( oColumn:bSeek, Self, nJ )
EndIf

uData := Eval( oColumn:bData )
EndIf
...
METHOD DrawSelect( xRow, lFoot ) CLASS TSBrowse
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
Elseif cColAls != Nil
If Valtype( oColumn:bSeek ) == 'B'
( cColAls )->( Eval( oColumn:bSeek, Self, nJ ) )
EndIf

uData := ( cColAls )->( Eval( oColumn:bData ) )
Else
If Valtype( oColumn:bSeek ) == 'B'
Eval( oColumn:bSeek, Self, nJ )
EndIf
uData := Eval( oColumn:bData )
EndIf
...

Может полезно будет. Без relation, сечас, в блоке :bData делаем подвод, с :bSeek можно разделить подвод и :bData :
oBrw:aColumns[5]:bSeek := {|obr| iif( obr:cAlias->FLD_3 == STAT, .T., dbSeek( obr:cAlias->FLD_3 ) ) }


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




Пост N: 1307
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.06.18 13:22. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может полезно будет.


Добавил, поскольку Вы находите это полезным
Благодарю за помощь

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



Пост N: 1885
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.06.18 16:06. Заголовок: Григорий, чем у Вас ..


Григорий, чем у Вас завершилось
 цитата:
свойство модального окна FLASHEXIT


У меня срабатывало, при уст. фокуса на внешнее приложении, к примеру Far.
На своих окнах hmg -> не срабатывало. Завершил костылем, modal -> child,
похожий костыль работает MDI child -> modal давно и стабильно.

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




Пост N: 1308
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.06.18 16:40. Заголовок: SergKis пишет: чем ..


SergKis пишет:

 цитата:
чем у Вас завершилось


Завершилось тем, что переписал этот кусок следующим образом:

 цитата:
... 
IF _HMG_IsModalActive .AND. Empty ( _HMG_InplaceParentHandle ) .AND. ;
( _HMG_aFormVirtualWidth [ i ] == 0 .OR. _HMG_aFormVirtualHeight [ i ] == 0 ) .AND. ;
_HMG_SplitLastControl != "TOOLBAR"

IF _HMG_aFormType [ i ] != 'M'

IF iswinnt()

IF ! _OnFlashExit ()
BringWindowToTop ( _HMG_ActiveModalHandle )
// Form's caption blinking if a top window is not Modal window
FlashWindowEx ( _HMG_ActiveModalHandle, 1, 5, 60 )
ENDIF

ELSE

IF ! _OnFlashExit ()
BringWindowToTop ( _HMG_ActiveModalHandle )
ENDIF

ENDIF

ENDIF

ENDIF
...
*-----------------------------------------------------------------------------*
STATIC FUNCTION _OnFlashExit ()
*-----------------------------------------------------------------------------*
LOCAL x, lExit := .F., nFormCount := Len ( _HMG_aFormNames )

FOR x := 1 TO nFormCount

IF _HMG_aFormHandles [x] == _HMG_ActiveModalHandle .AND. _HMG_aFormFocused [x]
PostMessage ( _HMG_ActiveModalHandle, WM_CLOSE, 0, 0 )
lExit := .T.
EXIT
ENDIF

NEXT x

RETURN lExit


Критика принимается...

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



Пост N: 1886
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.06.18 17:36. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
переписал этот кусок следующим образом


Не понял, как работает ?
Простой пример Скрытый текст

Два окна. wMain -> wModal, на modal ставлю _HMG_aFormFocused [ This.Index ] := .T.,
при потере фокуса по кнопке или клику по main окну, modal должна убраться.
Остается.


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