Форум » Документация » Документация по HwGUI » Ответить

Документация по HwGUI

alkresin: Наконец-то созрел для того, чтобы обновить документацию по HwGUI и решил начать с русской версии, которой до сих пор не было. Вот первая часть: http://www.kresin.ru/hwgdoc.html. Обращаю ваше внимание, что там, как и на многих других страницах сайта есть message board - можно писать комментарии, ругать за недостатки, сообщать о том, чего недостает, и т.п.

Ответов - 94, стр: 1 2 3 4 5 All

SergKis: alkresin Можно тут вставлю свои замечания (там на сайте не привычный редактор) о пробе windows версии [pre2] 1. Задание стилей, помнить их и задавать, для многих, думаю, будет затруднительно 2. Соединение их (стилей) через +, не совсем коректно, хотя бы через ф-ю nNewStyle := hwg_BitOr( nStyle, ....), примеры AEval({WS_CHILD, ES_AUTOHSCROLL, BS_FLAT}, {|s| nStyle := Hwg_BitOr(nStyle, s) }) nTStyle := hwg_BitOr(TBSTYLE_FLAT, TBSTYLE_TRANSPARENT, CCS_NODIVIDER ) nBStyle := hwg_BitOr(TBSTYLE_FLAT, TBSTYLE_TRANSPARENT) 3. Цифровой идентификатор контролов (виджетов) хорошо что есть, но помнить в большом проекте ..., хотелось бы символьное имя (может у меня от МиниГуи так) 4. К сожалению, только INIT DIALOG оказался работоспособным, перенос примеров на child mdi не работают аналогично диалоговому окну 5. HBrowse очень мелькающий (переотображениями), Получить координаты ячеки текущей или какой то оказалось не просто, но получил 6. HBrowseEx по мельканию лучше, но получить координаты ячейки не получилось. Многострочный заголовок получается нормально, но Super Header отсутсвует. Есть я так понял механизм задания врисовки в ячейку (сложноватый показалось, особенно в запоминании) 7. ButtonEx с image без подборки позиции PICTUREMARGIN 7 не смотрится совсем @ 350, 50 BUTTONex oBtBuild CAPTION "Build" SIZE 88,52 FONT oFBtn BITMAP oImgBuild:Handle ; ON Click { || hwg_MsgInfo("Build button") } TRANSPARENT PICTUREMARGIN 7 @ 350,110 BUTTONex oBtExit CAPTION "Exit" SIZE 88,52 FONT oFBtn BITMAP oImgExit:Handle ; ON Click { || hwg_MsgInfo("Exit button") } TRANSPARENT PICTUREMARGIN 7 8. В Get задание цвета через STATIC переменную, работает, но при наличии объектов, смотрится (может только мне) страно Конечно реакция на события (из за отсутсвия базы, как в минигуи) мгновенная, понравиловилось присутсвие везде bOther обработчика, установка клавиш не через hotkey, но без больших вложений (времени и труда) трудно применимо. [/pre2]

alkresin: Я разобью ответ на несколько частей, чтоб потом было удобнее. SergKis пишет: 1. Задание стилей, помнить их и задавать, для многих, думаю, будет затруднительно Вы правы. Есть с ними еще один неприятный момент: это не кросс-платформенно. Названия и свойства стилей - из winapi, GTK про них ничего не знает. В некоторых случаях, когда это надо, я симулирую поведение этих стилей в GTK версии, но в большинстве случаев они там просто игнорируются. С другой стороны: а какова альтернатива ? Возможных стилей великое множество и повторить их все какими-то более удобными для использования средствами проблематично. К счастью, в большинстве случаев их вообще не надо использовать. И еще: все эти стили хорошо описаны в MSDN и прочих доступных источниках, мне меньще забот по документированию ).

alkresin: SergKis пишет: 3. Цифровой идентификатор контролов (виджетов) хорошо что есть, но помнить в большом проекте ..., хотелось бы символьное имя Цифровой идентификатор служит, в основном, для внутренних нужд, а символьный, кстати, есть - это имя переменной соответствующего объекта. Т.е., если у ва вот такой фрагмент кода: [pre] LOCAL oButton ... INIT DIALOG oDlg ... ... @ 20,200 BUTTON oButton CAPTION "ClickMe" ... ... [/pre] То вы можете обращаться к кнопке вот так: oDlg:oButton даже за пределами этой функции, если oDlg известен.


alkresin: SergKis пишет: 4. К сожалению, только INIT DIALOG оказался работоспособным, перенос примеров на child mdi не работают аналогично диалоговому окну MDI работают нормально. Есть примеры использования, утилита DbcH, например, построена на них. Возможно, ваши проблемы были связаны с тем, что MDI окно - это немодальный объект, в отличие от обычного модального диалога, поэтому его надо использовать немного по-другому - так, как немодальный диалог.

alkresin: SergKis пишет: 5. HBrowse очень мелькающий (переотображениями), Получить координаты ячеки текущей или какой то оказалось не просто, но получил Хм... Переотображений я что-то не замечал, разве что когда у меня медленное соединение с сервером. Вот если вы открываете локальную таблицу тем же dbchw, есть какие-то мелькания ? По координатам - см. метод HBrowse():Edit() - там вычисляются координаты ячейки, чтобы отредактировать ее. Кстати, а зачем они вам ? Мне ни разу не понадобились. 6. HBrowseEx по мельканию лучше, но получить координаты ячейки не получилось. Многострочный заголовок получается нормально, но Super Header отсутсвует. Есть я так понял механизм задания врисовки в ячейку (сложноватый показалось, особенно в запоминании) 7. ButtonEx с image без подборки позиции PICTUREMARGIN 7 не смотрится совсем @ 350, 50 BUTTONex oBtBuild CAPTION "Build" SIZE 88,52 FONT oFBtn BITMAP oImgBuild:Handle ; ON Click { || hwg_MsgInfo("Build button") } TRANSPARENT PICTUREMARGIN 7 @ 350,110 BUTTONex oBtExit CAPTION "Exit" SIZE 88,52 FONT oFBtn BITMAP oImgExit:Handle ; ON Click { || hwg_MsgInfo("Exit button") } TRANSPARENT PICTUREMARGIN 7 По всем -ex классам из contrib не хочется комментировать, чтобы не обидеть авторов. Просто рекомендую пользоваться только теми, что в основном наборе. Если нужна картинка на кнопке, используйте ownerbutton - с недавним добавлением стилей (HStyle) они выглядят вполне прилично.

alkresin: SergKis пишет: 8. В Get задание цвета через STATIC переменную, работает, но при наличии объектов, смотрится (может только мне) страно Не понял, о какой STATIC переменной речь ? Конечно реакция на события (из за отсутсвия базы, как в минигуи) мгновенная, понравиловилось присутсвие везде bOther обработчика, установка клавиш не через hotkey, но без больших вложений (времени и труда) трудно применимо. Проблема в отсутствии адекватной документации, это я и пытаюсь сейчас исправить.

SergKis: alkresin пишет Не понял, о какой STATIC переменной речь ? [pre2] STATIC lColorinFocus := .F. STATIC tColorinFocus := 0 STATIC bColorinFocus := 16777164 ... CLASS HEdit INHERIT HControl ... FUNCTION hwg_SetColorinFocus( lDef, tColor, bColor ) IF ValType( lDef ) <> "L" RETURN .F. ENDIF lColorinFocus := lDef IF tColor != Nil tColorinFocus := tColor ENDIF IF bColor != Nil bColorinFocus := bColor ENDIF RETURN .T. ... пример testget2.prg Function DlgGet(lColor) ... If lColor <> Nil hwg_SetColorinFocus( lColor ) EndIf [/pre2]

SergKis: alkresin пишет С другой стороны: а какова альтернатива ? Возможных стилей великое множество и повторить Все варианты, дествительно не опишешь, но часто используемые (несколько вариантов), возмоожно заложить в init окон, самому пришлось вспоминать, лазить по источникам (в VO об этом приходилось помнить, с MiniGui уже подзабыл)

SergKis: alkresin пишет То вы можете обращаться к кнопке вот так: oDlg:oButton даже за пределами этой функции, если oDlg известен Вот именно, если известен oDlg, oButton. А ели управление с др. окна, контролами, надо их минимум делать PRIVATE\PUBLIC или по цифровомоу id, да даже в пунктах меню (там я имею объект окна) к контролам как обращаться, что бы попроще. К переменным PRIVATE\PUBLIC у меня стойкое убеждение использовать осторожно ( мусоросборщих их таскает туда сюда), в минигуи редко но бывает (прогу не выгружают неделями), переменная PUBLIC обявленная и инициализированная {NIL,NIL,NIL} после сборки мусора превращается в NIL, приходится ставить контроль ситуации типа переменной.

alkresin: SergKis пишет: STATIC lColorinFocus := .F. STATIC tColorinFocus := 0 STATIC bColorinFocus := 16777164 ... Это цвет GET-элемента, получающего фокус, он обычно один и тот же для всех GET-элементов, поэтому и сделан общим. Можно было определить через CLASS VAR - но это, в принципе, одно и то же. Собственно цвет, текста и фона - в переменных объекта, :tcolor и :bcolor.

alkresin: SergKis пишет: Вот именно, если известен oDlg, oButton oButton хранить нигде не надо, oDlg можно всегда найти: если это модальный диалог, то с hwg_GetModalDlg(), если главное окно, HWindow():GetMain(), MDI - HWindow():GetMdiActive(). Т.е., если вы знаете, например, что в текущем модальном диалоге есть кнопка, объект которой назван oButton LOCAL переменная), то из любой функции вы можете обратиться к этому объекту как hwg_GetModalDlg():oButton. И никаких PUBLIC, PRIVATE, STATIC.

SergKis: alkresin пишет он обычно один и тот же для всех GET-элементов, Это и смущает. Как сделать (в фокусе) 1. сумма < 0 один цвет 2. сумма > 0 < 1000 другой 3. сумма от 1000-5000 еще цвет 5. сумма > 5000 еще 6. ставку налога (или сумму) от этих сумм тоже цветами 7. теперь даты, прошлый год - цвет, прошлые месяцы тек. отч. периода - цвет, тек. месяц выходные - еще цвет 8. а добавим еще окно где все похоже, но немного\сильно отличается. Это ж как надо выеживаться, что бы сохранять\устанавливать, может я что не догоняю, конечно ... Если эти переменные в объекте вопросов нет, блок кода на них в oget и понятно, создал, установил критерии и забыл.

SergKis: alkresin пишет hwg_GetModalDlg():oButton. И никаких PUBLIC, PRIVATE, STATIC. Скорее танцуем так, имеем одно-два окна карточки, находимся на модал диалог и на нем делаем манимуляции, отражающиеся на др. окнах. Все окна собраны динамически от каких то установок (контролы-виджеты набраны динамически), т.е. надо проверить наличие контрола(ов) на др.окне(х) и вк.\выкл. алгоритмы заплнения\расчетов и. т.д. от тек.модального

alkresin: SergKis пишет: Это и смущает. Как сделать (в фокусе) Если надо, чтобы перед заходом в GET он менял свой цвет в зависимости от содержимого, то самое напрашивающееся решение - прописать это в кодоблоке WHEN этого GET'a, поставить там соответствующие oGet:SetColor( tColor, bColor )

alkresin: SergKis пишет: Скорее танцуем так, имеем одно-два окна карточки, находимся на модал диалог и на нем делаем манимуляции, отражающиеся на др. окнах. Все окна собраны динамически от каких то установок (контролы-виджеты набраны динамически), т.е. надо проверить наличие контрола(ов) на др.окне(х) и вк.\выкл. алгоритмы заплнения\расчетов и. т.д. от тек.модального Для такого случая тоже нетрудно что-нибудь придумать. Если неудобно использовать имена объектов, можно передавать нужные объекты как параметры процедуре модального диалога (в массиве, если их слишком много), можно в :cargo хранить тот самый строковый id и потом искать по нему, ...

SergKis: alkresin пишет прописать это в кодоблоке WHEN этого GET'a, поставить там соответствующие oGet:SetColor( tColor, bColor ) Вот и получаются "пляски с бубном" во WHEN (востановить), VALID (сохранить), на GOT FOCUS окна (массив сохранить) и т.д. и т.п., а просится добавить в HEDIT DATA tColorinFocus DTA bColorinFocus которые могут быть блоками кода, как в них (блоках) доставать контролы с др. окон - это др. вопрос У себя мы добавили в окна и контролы DATA cID и в методе поиска окна, контрола, если первый параметр "C" поиск по cID, иначе как было и многие вопросы отпали

SergKis: alkresin пишет метод HBrowse():Edit() - там вычисляются координаты ячейки, чтобы отредактировать ее. Кстати, а зачем они вам ? Мне ни разу не понадобились. Это странно. У ячейки получить контекстное меню, др. окно для манипуляций (типа achoice, др. hbrowse, ... [с заголовком или без]), в footer ячейки (по клику или без) положить Get для поисков, ну т.д.

SergKis: alkresin пишет MDI работают нормально. Может я что то не то делаю, пример с dialog и child окнами http://my-files.ru/d6gydy 1. На диалоговом окне работает VK_TAB перемещая фокус, на чилд окне фокус на get надо мышой установить и VK_TAB работает только на get на кнопки не прерходит 2. "Танец с бубнами". - запускаем пункт меню Create DlgGet window. Имеем один цвет первого get в фокусе - запускаем пункт меню Get using SetcolorinFocus. Имеем то что и должно по установке - запускаем пункт меню Create DlgGet window снова. Имеем цвет первого get в фокусе из пред. пункта

SergKis: alkresin пишет Переотображений я что-то не замечал, разве что когда у меня медленное соединение с сервером Пример http://my-files.ru/4tcwwc (DbcHw.txt переименовать в DbcHw.exe файлообменник не пропускал сразу с exe) Открываем K1.DBF в проге и двигаем курсор вправо\влево не переходя на скрытые колонки справа (т.е. все действия ТОЛЬКО на 1-м экране таблицы) Когда будем перемещаться по узким колонкам эффект мерцания\гирлянды проявится (особенно, если подержать клавиши влево\вправо нажатыми)

SergKis: alkresin По HBrowse, я правильно понимяю: 1. многострочный заголовок есть 2. многострочный подвал есть 3. многострочной строки нет (однострочная) 4. Super header отсутствует и сделать, что то похожее (на картинке нижнее окно) не получится http://shot.qip.ru/00QROn-1MgWBROLR/



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