Форум » GUI » [?] Простой вопрос » Ответить

[?] Простой вопрос

Dima: Есть главное окно программы , в нем живут несколько CHILD окон (не MDI). В процедуре ON INTERACTIVECLOSE главного окна есть блок кода , если он вернет TRUE тогда закроется главное окно и программа завершится. А вот если блок кода вернул FALSE , то как вернуть фокус ввода на окно на котором был фокус ввода до нажатия крестика главного окна ?

Ответов - 148, стр: 1 2 3 4 5 6 7 8 All

Dima: SergKis пишет: там не активное основное окно, поверх лежит модал окно NOSIZE NOMINIMIZE NOMAXMIZE Все верно и оно затемнено (основное) , вот так и мне надо бы. Или как тут http://windowstips.ru/notes/4507 но затемнить нужно конкретное окно

SergKis: Dima для начала клади модал окно поверх, отладив, занимайся сменой цветов в основном

Dima: SergKis пишет: для начала клади модал окно поверх положил , но окно (не главное) из которого его вызвал хотел затемнить , вот и все. могу сделать его прозрачным , но это не то , нужно затемнение.

SergKis: Dima пишет нужно затемнение. таких алгоритмов в минигуи не видел

Dima: SergKis пишет: аких алгоритмов в минигуи не видел есть не что похожее C:\MiniGUI\SAMPLES\Advanced\BosTaurus\Demo5 При запуске сразу идем в меню и давим любой пункт , вылазит MsgInfo а окно за ним становится серым. Попробовал переделать Grayness_effect_start и Grayness_effect_end подавая на вход имя своего окна , не пашет однако.

Haz: Это не то. Пример затемняет только фон окна. все контролы на окне остаются как были. Попробуй пробежаться по свойсьву BackColor окна и ВСЕХ его контролов.

gfilatov2002: Haz пишет: Попробуй пробежаться по свойству BackColor окна и ВСЕХ его контролов. Эти две фукции могут в этом деле помочь [pre]/******************************************************************************/ Procedure ChangeAllBackcolor /******************************************************************************/ LOCAL i, nFormCount := Len( _HMG_aFormNames ) LOCAL nI, cCtrlName, cFormName LOCAL aCtrls FOR i := 1 TO nFormCount cFormName := _HMG_aFormNames [ i ] IF _IsWindowDefined ( cFormName ) SetProperty( cFormName, "BACKCOLOR", GRAY ) aCtrls := _GetArrayOfAllControlsForForm( cFormName ) FOR nI := 1 TO Len( aCtrls ) cCtrlName := aCTrls[ nI ] SetProperty( cFormName, cCtrlName, "BACKCOLOR", GRAY ) SetProperty( cFormName, cCtrlName, "FONTCOLOR", WHITE ) NEXT ENDIF NEXT Return /******************************************************************************/ FUNCTION _GetArrayOfAllControlsForForm ( cFormName ) /******************************************************************************/ LOCAL nFormHandle, i, nControlCount, aRetVal := {}, x nFormHandle := GetFormHandle ( cFormName ) nControlCount := Len ( _HMG_aControlHandles ) FOR i := 1 TO nControlCount IF _HMG_aControlParentHandles[ i ] == nFormHandle IF ValType( _HMG_aControlHandles[ i ] ) == 'N' IF ! Empty( _HMG_aControlNames[ i ] ) IF AScan( aRetVal, _HMG_aControlNames[ i ] ) == 0 AAdd( aRetVal, _HMG_aControlNames[ i ] ) ENDIF ENDIF ELSEIF ValType( _HMG_aControlHandles[i ] ) == 'A' FOR x := 1 TO Len ( _HMG_aControlHandles[ i ] ) IF !Empty( _HMG_aControlNames[ i ] ) IF AScan( aRetVal, _HMG_aControlNames[ i ] ) == 0 AAdd( aRetVal, _HMG_aControlNames[ i ] ) ENDIF ENDIF NEXT x ENDIF ENDIF NEXT i RETURN ASort( aRetVal )[/pre]

SergKis: Haz пишет Попробуй пробежаться по свойсьву BackColor окна и ВСЕХ его контролов. тогда контролам и disable добавить можо

Haz: SergKis пишет: тогда контролам и disable добавить можо да, вполне логично это сделать

Andrey: gfilatov2002 пишет: Эти две фукции могут в этом деле помочь Не совсем понятно.... Имею кнопку на форме, при нажатии должны: затемнить текущая форма + вызов новой формы, после закрытия новой формы нужно разтемнить текущую форму.

SergKis: Andrey пишет Не совсем понятно.... добавь local b, f, aClrOld := {} ... cCtrlName := aCTrls[ nI ] b := GetProperty( cFormName, cCtrlName, "BACKCOLOR" ) f := GetProperty( cFormName, cCtrlName, "FONTCOLOR" ) aAdd(aClrOld, {cFormName, cCtrlName, b, f}) SetProperty( cFormName, cCtrlName, "BACKCOLOR", GRAY ) SetProperty( cFormName, cCtrlName, "FONTCOLOR", WHITE ) ... Return aClrOld на вызове новой формы или на нажатии темнишь и получаешь старые значения на release новой возвращаешь старые значения на форму - разтемняешь

Andrey: У Дмитрия красивое затенение окна. Примерно так хочется - кнопка BUTTONEX Button_Test с обработкой: ACTION {|| aObj := ChangeAllBackcolor(ThisWindow.Name) ,; MsgDebug("Test Change All Backcolor Form") ,; ChangeAllBackRestore(aObj,ThisWindow.Name) } Фон менять нужно у всех объектов, включая TsBrowse .... С картинкой только это не выйдет, я имею ввиду PNG со свойством TRANSPARENT BACKGROUNDCOLOR aBackColor ....

Dima: При нажатии кнопки на форме , каким образом запомнить фон цвета не активного курсора бровса , сменить его и затем снова восстановить. Объясню зачем. Кнопка на форме скипает бровс. У нее такая процедура ACTION {|| tmpbrw:GoDown(),tmpbrw:SetFocus() } При нажатии на нее бровс теряет фокус ввода и затем снова его получает , в результате имеем на бровсе "подмигивание" курсора. Попробовал в кнопке ON GOTFOCUS {|| tmpbrw:setcolor({12},{Rgb( 198, 226, 255 ), Rgb( 159, 207, 255 )})} Но тогда при наведении на кнопку , дергается весь бровс Проехали

Vlad04: У разных языков разные реализации. У Делфи у формы есть свойство AlphaBlend (и параметр) - устанавливает прозрачность. А дальше все просто - надо затенить основную форму - поверх ее (а можно и на весь Экран) открываешь вторую с нужной прозрачность и оттенком. На Основной ничего делать с контролами не надо.Кстати, так и Локеры пишутся

Haz: Влад, идея понятна. Думаю будет работать. Спасибо

Dima: Как узнать что кнопка имеет фокус ввода ? PS Проехали сделал через переменную

SergKis: Dima пишет:Как узнать что кнопка имеет фокус ввода ? [pre2] IF ( nI := ascan(_HMG_aControlHandle, GetFocus()) ) > 0 // фокус на контроле МиниГуи IF _HMG_aControlType [ nI ] == "BUTTON" .and. _HMG_aControlNames [ nI ] == ButtonName // нужный button (или другой контрол) нашли и он в фокусе ... ENDIF ENDIF [/pre2]

Dima: SergKis Спасибо Это я так понял для всех окон а если для конкретного окна , то как ? И еще вопрос: как узнать установлен ли конкретный шрифт в системе ?

SergKis: Dima GetFocus() дает handle контрола в фокусе (окно тоже) [pre2] ParentFormHandle :=_HMG_aControlParenthandles [ nI ] If ( nK := ascan(_HMG_aFormHandles, ParentFormHandle) ) > 0 cFormName := _HMG_aFormNames[ nK ] EndIf [/pre2]

SergKis: Dima пишет как узнать установлен ли конкретный шрифт в системе ? где то уже было, Андрей выяснял, если не ошибаюсь, сам не использовал.



полная версия страницы