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

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

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

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

SergKis: Dima пишет Это я так понял для всех окон а если для конкретного окна , то как ? не очень понимаю к чему клонишь ?[pre2] If GetControlHandle(cControlName, cForm) == GetFocus() // нужный конрол нужного окна в фокусе EndIf [/pre2]

Dima: SergKis пишет: где то уже было, Андрей выяснял, если не ошибаюсь Да он выяснял , загружен ли фонт в программе . Ответ был таков GetFontHandle( Font_1 ) если вернуло 0 , не загружен. А вопрос был а доступен ли фонт в системе. В семерке скажем есть фонты которых нет в XP а я формирую Excel отчет и там хочу установить нужный фонт с проверкой конечно. Похожую функцию нашел GetFont() , но она и диалоговое окно вешает а оно мне не нужно. Мне бы просто массив имен фонтов Насчет фокуса контрола вроде понял , тяжко дается после консоли все это

SergKis: Dima пишет тяжко дается после консоли все это Главное помни, что на событиях окон, контролов (в блоках кода) всегда есть переменные _HMG_ThisFormIndex _HMG_ThisEventType _HMG_ThisType _HMG_ThisIndex _HMG_ThisFormName _HMG_ThisControlName от них плясать надо в блоках кода. _HMG_ThisType := W-window\C-control а GetFocus(), как правило нужно в процедурах типа TIMER если в GetBox использовать ACTION, ACTION2 и при клике на буттоны соответствующие, в вызовах GetFocus() даст handle нажатого button (он отсутствует в регистации контрлов МиниГуи), а _HMG_ThisControlName даст имя GetBox, к которому бутонны относятся. Через _HMG_ThisIndex можно достать из переменных _HMG_... все о контроле, а через _HMG_ThisFormIndex можно достать из переменных _HMG_... все о форме на котором контрол.

Dima: Vlad04 пишет: А дальше все просто - надо затенить основную форму - поверх ее (а можно и на весь Экран) открываешь вторую с нужной прозрачность Сделал , прикольно получилось !

Dima:

Vlad04: Dima пишет: цитата: Как узнать что кнопка имеет фокус ввода ? Можно в некоторых случаях так, к примеру: if This.FocusedControl == "Text_New" ..... endif

Dima: Vlad04 И так сработает ? [pre2] if GetProperty( "Form_0", "FocusedControl" )=="Text_New" .... endif [/pre2]

Vlad04: Dima И так сработает ? И так сработает !

Dima: Vlad04 пишет: И так сработает ! У меня не работает , во всяком случае в GOTFOCUS окна , впрочем как и не пашет установка фокуса на бровс. При чем это не пашет если окно получает фокус ввода извне (не из моей проги). Такое поведение только на семерке и XP , выше уже все в порядке. К примеру из проги сформировал отчет EXCEL и вывел его окно так ShowWindow(oExcel:hWnd, SW_MAXIMIZE) BringWindowToTop(oExcel:hWnd) То после возврата в свою программу все танцы с установкой (проверкой) фокуса не работают в GOTFOCUS окна. Поэтому пришлось делать через свои переменные.

Dima: Как заставить мышку ездить только в пределах указанного окна а после определенных действий вернуть как было ? Вроде был пример , но пока не вижу. ЗЫ Идея вроде ясна , на ON MOUSEMOVE окна вешаем процедуру которая снимает координаты мыши (GETCURSORPOS()) , затем сверяем координаты с координатами окна и если нужно ставим курсор мыши куда нужно с помощью SetcursorPos()

gfilatov2002: Dima пишет: Мне бы просто массив имен фонтов Посмотри функцию rr_GetFontNames() из сырцов библиотеки HbPrinter

Dima: gfilatov2002 То что надо

Vlad04: Dima Не клацайте на форме Excel Желательно, до окончания формирования отчета , Excel не показывать. Для больших отчетов существенное ускорение.

Dima: Vlad04 пишет: Желательно, до окончания формирования отчета , Excel не показывать. Да я знаю , так и делал. Сам отчет не очень большой да и юзеры захотели "мультов"

Dima: Вертикальный скролл вообще отрубается в TS ? Установка obrw:lNoVScroll := TRUE ему до лампочки

Dima: И еще наверное косяк В бровсе 2 колонки Есть установки obrw:nfreeze:=2 obrw:lLockFreeze:=FALSE Так вот если вертикального скрола нет (база не большая) то я могу входит в режим редактирования двойным кликом мышки , если этот скрол есть то не могу , хотя VK_RETURN пускает в обоих случаях в режим редактирования.

Haz: Dima пишет: Установка obrw:lNoVScroll := TRUE ему до лампочки Перед LoadFields() или Перед ::SetArray() те до того как определены данные для бровса oBrw:lNoVScroll := TRUE oBrw:oVScroll := NIL ЗЫ Все в исходниках Это как в поговорке - "Моется тот кому лень чесаться" Тоже с этим замучился. так и мучается тот кому лень читать

Andrey: Dima пишет: Вертикальный скролл вообще отрубается в TS ? Установка obrw:lNoVScroll := TRUE ему до лампочки Ага, подтверждаю ! Тоже с этим замучился.

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

Dima: Haz пишет: Перед LoadFields() или Перед ::SetArray() те до того как определены данные для бровса oBrw:lNoVScroll := TRUE oBrw:oVScroll := NIL Не работает однако. Скрол по прежнему рисуется , но при движении по бровсу у него реакции нет (стоит на месте) Нажимаем мышкой но скроле которого не должно быть и получаем ошибку Called from GETPOS(0) Called from TSBROWSE:VSCROLL(12209) Called from TSBROWSE:HANDLEEVENT(7340) Called from EVENTS(0) Вообще я смотрел по началу примеры , прежде чем спросить и один из них твой Tsb_cursor и там была тщетная попытка выключить вертикальный скрол , не до :SetArray а после. И еще непонятка (думал решили) , каким образом горизонтальный скролл влияет на nAdjColumn , если этот скролл есть nAdjColumn работает правильно , если скрола нет то он не работает. Не должно быть между ними ни какой связи , но получается что nAdjColumn зависим от г. скрола.



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