Автор | Сообщение |
|
| moderator
|
Пост N: 976
Зарегистрирован: 06.07.06
|
|
Отправлено: 25.08.16 16:39. Заголовок: Документация по HwGUI
Наконец-то созрел для того, чтобы обновить документацию по HwGUI и решил начать с русской версии, которой до сих пор не было. Вот первая часть: http://www.kresin.ru/hwgdoc.html. Обращаю ваше внимание, что там, как и на многих других страницах сайта есть message board - можно писать комментарии, ругать за недостатки, сообщать о том, чего недостает, и т.п.
|
|
|
Ответов - 94
, стр:
1
2
3
4
5
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 1168
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.08.16 19:04. Заголовок: alkresin Можно тут ..
alkresin Можно тут вставлю свои замечания (там на сайте не привычный редактор) о пробе windows версии 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, но без больших вложений (времени и труда) трудно применимо.
|
|
|
|
| moderator
|
Пост N: 977
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 10:34. Заголовок: Я разобью ответ на н..
Я разобью ответ на несколько частей, чтоб потом было удобнее. SergKis пишет: цитата: | 1. Задание стилей, помнить их и задавать, для многих, думаю, будет затруднительно |
| Вы правы. Есть с ними еще один неприятный момент: это не кросс-платформенно. Названия и свойства стилей - из winapi, GTK про них ничего не знает. В некоторых случаях, когда это надо, я симулирую поведение этих стилей в GTK версии, но в большинстве случаев они там просто игнорируются. С другой стороны: а какова альтернатива ? Возможных стилей великое множество и повторить их все какими-то более удобными для использования средствами проблематично. К счастью, в большинстве случаев их вообще не надо использовать. И еще: все эти стили хорошо описаны в MSDN и прочих доступных источниках, мне меньще забот по документированию ).
|
|
|
|
| moderator
|
Пост N: 978
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 10:43. Заголовок: SergKis пишет: 3. Ц..
SergKis пишет: цитата: | 3. Цифровой идентификатор контролов (виджетов) хорошо что есть, но помнить в большом проекте ..., хотелось бы символьное имя |
| Цифровой идентификатор служит, в основном, для внутренних нужд, а символьный, кстати, есть - это имя переменной соответствующего объекта. Т.е., если у ва вот такой фрагмент кода: LOCAL oButton ... INIT DIALOG oDlg ... ... @ 20,200 BUTTON oButton CAPTION "ClickMe" ... ... То вы можете обращаться к кнопке вот так: oDlg:oButton даже за пределами этой функции, если oDlg известен.
|
|
|
|
| moderator
|
Пост N: 979
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 10:47. Заголовок: SergKis пишет: 4. К..
SergKis пишет: цитата: | 4. К сожалению, только INIT DIALOG оказался работоспособным, перенос примеров на child mdi не работают аналогично диалоговому окну |
| MDI работают нормально. Есть примеры использования, утилита DbcH, например, построена на них. Возможно, ваши проблемы были связаны с тем, что MDI окно - это немодальный объект, в отличие от обычного модального диалога, поэтому его надо использовать немного по-другому - так, как немодальный диалог.
|
|
|
|
| moderator
|
Пост N: 980
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 11:09. Заголовок: SergKis пишет: 5. H..
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) они выглядят вполне прилично.
|
|
|
|
| moderator
|
Пост N: 981
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 11:12. Заголовок: SergKis пишет: 8. В..
SergKis пишет: цитата: | 8. В Get задание цвета через STATIC переменную, работает, но при наличии объектов, смотрится (может только мне) страно |
| Не понял, о какой STATIC переменной речь ? цитата: | Конечно реакция на события (из за отсутсвия базы, как в минигуи) мгновенная, понравиловилось присутсвие везде bOther обработчика, установка клавиш не через hotkey, но без больших вложений (времени и труда) трудно применимо. |
| Проблема в отсутствии адекватной документации, это я и пытаюсь сейчас исправить.
|
|
|
|
| постоянный участник
|
Пост N: 1169
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 12:15. Заголовок: alkresin пишет Не по..
alkresin пишет цитата: | Не понял, о какой STATIC переменной речь ? |
| 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
|
|
|
|
| постоянный участник
|
Пост N: 1170
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 12:24. Заголовок: alkresin пишет С дру..
alkresin пишет цитата: | С другой стороны: а какова альтернатива ? Возможных стилей великое множество и повторить |
| Все варианты, дествительно не опишешь, но часто используемые (несколько вариантов), возмоожно заложить в init окон, самому пришлось вспоминать, лазить по источникам (в VO об этом приходилось помнить, с MiniGui уже подзабыл)
|
|
|
|
| постоянный участник
|
Пост N: 1171
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 12:35. Заголовок: alkresin пишет То вы..
alkresin пишет цитата: | То вы можете обращаться к кнопке вот так: oDlg:oButton даже за пределами этой функции, если oDlg известен |
| Вот именно, если известен oDlg, oButton. А ели управление с др. окна, контролами, надо их минимум делать PRIVATE\PUBLIC или по цифровомоу id, да даже в пунктах меню (там я имею объект окна) к контролам как обращаться, что бы попроще. К переменным PRIVATE\PUBLIC у меня стойкое убеждение использовать осторожно ( мусоросборщих их таскает туда сюда), в минигуи редко но бывает (прогу не выгружают неделями), переменная PUBLIC обявленная и инициализированная {NIL,NIL,NIL} после сборки мусора превращается в NIL, приходится ставить контроль ситуации типа переменной.
|
|
|
|
| moderator
|
Пост N: 982
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 13:22. Заголовок: SergKis пишет: STAT..
SergKis пишет: цитата: | STATIC lColorinFocus := .F. STATIC tColorinFocus := 0 STATIC bColorinFocus := 16777164 ... |
| Это цвет GET-элемента, получающего фокус, он обычно один и тот же для всех GET-элементов, поэтому и сделан общим. Можно было определить через CLASS VAR - но это, в принципе, одно и то же. Собственно цвет, текста и фона - в переменных объекта, :tcolor и :bcolor.
|
|
|
|
| moderator
|
Пост N: 983
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 13:34. Заголовок: SergKis пишет: Вот ..
SergKis пишет: цитата: | Вот именно, если известен oDlg, oButton |
| oButton хранить нигде не надо, oDlg можно всегда найти: если это модальный диалог, то с hwg_GetModalDlg(), если главное окно, HWindow():GetMain(), MDI - HWindow():GetMdiActive(). Т.е., если вы знаете, например, что в текущем модальном диалоге есть кнопка, объект которой назван oButton LOCAL переменная), то из любой функции вы можете обратиться к этому объекту как hwg_GetModalDlg():oButton. И никаких PUBLIC, PRIVATE, STATIC.
|
|
|
|
|
| постоянный участник
|
Пост N: 1172
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 19:54. Заголовок: alkresin пишет он о..
alkresin пишет цитата: | он обычно один и тот же для всех GET-элементов, |
| Это и смущает. Как сделать (в фокусе) 1. сумма < 0 один цвет 2. сумма > 0 < 1000 другой 3. сумма от 1000-5000 еще цвет 5. сумма > 5000 еще 6. ставку налога (или сумму) от этих сумм тоже цветами 7. теперь даты, прошлый год - цвет, прошлые месяцы тек. отч. периода - цвет, тек. месяц выходные - еще цвет 8. а добавим еще окно где все похоже, но немного\сильно отличается. Это ж как надо выеживаться, что бы сохранять\устанавливать, может я что не догоняю, конечно ... Если эти переменные в объекте вопросов нет, блок кода на них в oget и понятно, создал, установил критерии и забыл.
|
|
|
|
| постоянный участник
|
Пост N: 1173
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 20:02. Заголовок: alkresin пишет hwg_G..
alkresin пишет цитата: | hwg_GetModalDlg():oButton. И никаких PUBLIC, PRIVATE, STATIC. |
| Скорее танцуем так, имеем одно-два окна карточки, находимся на модал диалог и на нем делаем манимуляции, отражающиеся на др. окнах. Все окна собраны динамически от каких то установок (контролы-виджеты набраны динамически), т.е. надо проверить наличие контрола(ов) на др.окне(х) и вк.\выкл. алгоритмы заплнения\расчетов и. т.д. от тек.модального
|
|
|
|
| moderator
|
Пост N: 984
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 20:14. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это и смущает. Как сделать (в фокусе) |
| Если надо, чтобы перед заходом в GET он менял свой цвет в зависимости от содержимого, то самое напрашивающееся решение - прописать это в кодоблоке WHEN этого GET'a, поставить там соответствующие oGet:SetColor( tColor, bColor )
|
|
|
|
| moderator
|
Пост N: 985
Зарегистрирован: 06.07.06
|
|
Отправлено: 26.08.16 20:21. Заголовок: SergKis пишет: Скор..
SergKis пишет: цитата: | Скорее танцуем так, имеем одно-два окна карточки, находимся на модал диалог и на нем делаем манимуляции, отражающиеся на др. окнах. Все окна собраны динамически от каких то установок (контролы-виджеты набраны динамически), т.е. надо проверить наличие контрола(ов) на др.окне(х) и вк.\выкл. алгоритмы заплнения\расчетов и. т.д. от тек.модального |
| Для такого случая тоже нетрудно что-нибудь придумать. Если неудобно использовать имена объектов, можно передавать нужные объекты как параметры процедуре модального диалога (в массиве, если их слишком много), можно в :cargo хранить тот самый строковый id и потом искать по нему, ...
|
|
|
|
| постоянный участник
|
Пост N: 1174
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 21:10. Заголовок: alkresin пишет проп..
alkresin пишет цитата: | прописать это в кодоблоке WHEN этого GET'a, поставить там соответствующие oGet:SetColor( tColor, bColor ) |
| Вот и получаются "пляски с бубном" во WHEN (востановить), VALID (сохранить), на GOT FOCUS окна (массив сохранить) и т.д. и т.п., а просится добавить в HEDIT DATA tColorinFocus DTA bColorinFocus которые могут быть блоками кода, как в них (блоках) доставать контролы с др. окон - это др. вопрос У себя мы добавили в окна и контролы DATA cID и в методе поиска окна, контрола, если первый параметр "C" поиск по cID, иначе как было и многие вопросы отпали
|
|
|
|
| постоянный участник
|
Пост N: 1175
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.16 21:19. Заголовок: alkresin пишет метод..
alkresin пишет цитата: | метод HBrowse():Edit() - там вычисляются координаты ячейки, чтобы отредактировать ее. Кстати, а зачем они вам ? Мне ни разу не понадобились. |
| Это странно. У ячейки получить контекстное меню, др. окно для манипуляций (типа achoice, др. hbrowse, ... [с заголовком или без]), в footer ячейки (по клику или без) положить Get для поисков, ну т.д.
|
|
|
|
| постоянный участник
|
Пост N: 1176
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.16 08:48. Заголовок: alkresin пишет MDI р..
alkresin пишет Может я что то не то делаю, пример с 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 в фокусе из пред. пункта
|
|
|
|
| постоянный участник
|
Пост N: 1177
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.16 10:04. Заголовок: alkresin пишет Перео..
alkresin пишет цитата: | Переотображений я что-то не замечал, разве что когда у меня медленное соединение с сервером |
| Пример http://my-files.ru/4tcwwc (DbcHw.txt переименовать в DbcHw.exe файлообменник не пропускал сразу с exe) Открываем K1.DBF в проге и двигаем курсор вправо\влево не переходя на скрытые колонки справа (т.е. все действия ТОЛЬКО на 1-м экране таблицы) Когда будем перемещаться по узким колонкам эффект мерцания\гирлянды проявится (особенно, если подержать клавиши влево\вправо нажатыми)
|
|
|
|
| постоянный участник
|
Пост N: 1179
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.16 14:36. Заголовок: alkresin По HBrowse,..
alkresin По HBrowse, я правильно понимяю: 1. многострочный заголовок есть 2. многострочный подвал есть 3. многострочной строки нет (однострочная) 4. Super header отсутствует и сделать, что то похожее (на картинке нижнее окно) не получится http://shot.qip.ru/00QROn-1MgWBROLR/
|
|
|
|
| постоянный участник
|
Пост N: 1180
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.08.16 14:40. Заголовок: PS строки с текстом ..
PS строки с текстом Pavisam - это footer, строки самые верхние (2-е) это Super header
|
|
|
|
|
| moderator
|
Пост N: 986
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 09:50. Заголовок: SergKis пишет: Вот ..
SergKis пишет: цитата: | Вот и получаются "пляски с бубном" во WHEN (востановить), VALID (сохранить), на GOT FOCUS окна (массив сохранить) и т.д. и т.п., а просится добавить в HEDIT DATA tColorinFocus DTA bColorinFocus |
| Вы вместо двух старых известных кодоблоков (WHEN и VALID) предлагаете сделать для этой цели два новых: tColorinFocus, bColorinFocus. Не вижу упрощения. А что за массив надо сохранять в GOT FOCUS ?
|
|
|
|
| moderator
|
Пост N: 987
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 10:05. Заголовок: SergKis пишет: Прим..
SergKis пишет: Увы, не успел скачать - файл удален как "вредоносный"
|
|
|
|
| moderator
|
Пост N: 988
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 10:09. Заголовок: SergKis пишет: 1. м..
SergKis пишет: цитата: | 1. многострочный заголовок есть 2. многострочный подвал есть |
| :) На днях задумывался, не убрать ли это дело, нужно ли оно кому-нибудь, знает ли кто о нем... Сам ни разу не пользовался. [quote]3. многострочной строки нет (однострочная) 4. Super header отсутствует [.quote] Отсутствует. Если бы кто-нибудь попросил, подумал бы на эту тему.
|
|
|
|
| moderator
|
Пост N: 989
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 10:55. Заголовок: SergKis пишет: 1. Н..
SergKis пишет: цитата: | 1. На диалоговом окне работает VK_TAB перемещая фокус, на чилд окне фокус на get надо мышой установить |
| Можно сразу после oChildWnd:Activate() поставить oGet1:SetFocus(). цитата: | VK_TAB работает только на get на кнопки не прерходит |
| Да, действительно. Странно. Похоже на какую-то фишку в winapi, там таких неожиданных эффектов немало. Надо посмотреть. цитата: | 2. "Танец с бубнами". - запускаем пункт меню Create DlgGet window. Имеем один цвет первого get в фокусе - запускаем пункт меню Get using SetcolorinFocus. Имеем то что и должно по установке - запускаем пункт меню Create DlgGet window снова. Имеем цвет первого get в фокусе из пред. пункта |
| А... Ну это, сами понимаете, следствие использования hwg_SetColorinFocus(), который устанавливает цвета глобально для всех GET'ов. Разумно, наверное, делать это на 3-х уровнях: глобально, для окна (диалога) и для конкретного GET-элемента. Сам я никогда этим не пользовался (и не я это реализовывал), поэтому и не сразу даже понял, о чем речь. Да, тут есть о чем подумать.
|
|
|
|
| постоянный участник
|
Пост N: 1181
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.08.16 11:36. Заголовок: alkresin пишет Вы вм..
alkresin пишет цитата: | Вы вместо двух старых известных кодоблоков (WHEN и VALID) предлагаете сделать для этой цели два новых: tColorinFocus, bColorinFocus. Не вижу упрощения. |
| Дело не в упрощении, а в "все свое ношу с собой", т.е. имеем объект Get и все относящееся к нему должно находится в нем, а цвет в фокусе - это свойсво объекта, так же как и цвет не в фокусе, можно подумать о цветах в READONLY, но для начала хорошо бы отвязаться от static переменных (два-три одновременно отображаемых окна, с разными стилями Getов - это ...) А если в этих свойствах иметь блоки кода (не только числа\масссив rgb) - решает все проблеммы с цветами цитата: | 1. сумма < 0 один цвет 2. сумма > 0 < 1000 другой 3. сумма от 1000-5000 еще цвет 5. сумма > 5000 еще |
| в одном Get объекте
|
|
|
|
| постоянный участник
|
Пост N: 1182
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.08.16 12:05. Заголовок: alkresin пишет Отсут..
alkresin пишет цитата: | Отсутствует. Если бы кто-нибудь попросил, подумал бы на эту тему |
| То что сейчас есть в HEdit, к сожалению, годится в основном для справочников и очень ограниченного списка документов. Я, конечно, говорю только о себе, возможно у др. не так. В clipper задачах, которые надо переводить в Gui такая потребность: - многострочный super header - многострочный header - многосточные (было мах 3) строки - многострочный footer замечательно иметь сразу и многострочный footer (по аналогии с super header), но это уже хотелка, можно реализовывать через label или иными способами Та картинка, данная выше - это раб.место по приему xml заказов и это средняя потребность от browse. Реализована на cpp+Htmlayout монитор отображения и в hide режиме hb 2.0 работа с базой. Хотелось бы уйти на чистый hb с уникодом (в hwg это есть и три языка LV866 встроилось на ура и большой респект за проделанную работу)
|
|
|
|
| постоянный участник
|
Пост N: 1183
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.08.16 12:31. Заголовок: alkresin пишет Увы, ..
alkresin пишет цитата: | Увы, не успел скачать - файл удален как "вредоносный" |
| Это у была утилита dbc с LV866 и база с лат., рус. языками в которой 201 поле первое 10 байт, второе 40, остальные поля 2-3 байта (на первом экране). Эффект мерцания проявляется на selected строке при движении курсора по узким плям. Причина, вероятно в прорисовке цветов всей строки, а не только ячеек, учавствующих в смене цветов фокус\не фокус, но в целом это мелочь.
|
|
|
|
| moderator
|
Пост N: 990
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 16:21. Заголовок: Запостил сейчас изме..
Запостил сейчас изменения. касающиеся ColorInFocus, сделал 3 уровня: 1) глобальный: все работает как раньше, для всех GET, для всех окон; 2) уровень окна: можно определить эти цвета для конкретного окна той же функцией hwg_SetColorinFocus(), только в качестве первого параметра передается объект окна; 3) уровень отдельного GET: для него добавлена новая переменная :bColorBlock. Этот кодоблок вызывается при получении фокуса и ему передается в качестве параметра объект соответствующего GET. Кодоблок должен, по идее, использовать :setColor() для установки нужных цветов.
|
|
|
|
| постоянный участник
|
Пост N: 1184
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.08.16 18:37. Заголовок: alkresin пишет Запос..
alkresin пишет цитата: | Запостил сейчас изменения. касающиеся ColorInFocus |
| Это где ? С вашего сайта и HwGUI на Sourceforge одно и то же /* * $Id: Changelog 2526 2016-02-01 13:13:00Z alkresin $ */
|
|
|
|
| moderator
|
Пост N: 991
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.08.16 20:16. Заголовок: На SVN, конечно. Нов..
|
|
|
|
|
| постоянный участник
|
Пост N: 1185
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.08.16 22:28. Заголовок: alkresin Спасибо за..
alkresin Спасибо за ссылку. Нашел свои опыты с hbrowse, где видно, как мерцает переотображение selected строки при горизонтальном перемещении http://my-files.ru/h192y7
|
|
|
|
| постоянный участник
|
Пост N: 1186
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.08.16 06:10. Заголовок: alkresin пишет Запос..
alkresin пишет цитата: | Запостил сейчас изменения. касающиеся ColorInFocus |
| SerKis пишет цитата: | 1. сумма < 0 один цвет 2. сумма > 0 < 1000 другой 3. сумма от 1000-5000 еще цвет 5. сумма > 5000 еще в одном Get объекте |
| Может не все понял. 1. При переходе фокуса с Get на др. Get блок кода должен срабатывать и поставив в нем :SetColor... цвет в фокусе должен меняться. А будет ли срабатывать блок кода в ситуации oGet:Value( -100 ); oGet:Refresh() oGet:Value( 100 ); oGet:Refresh() oGet:Value( 1001 ); oGet:Refresh() ... 2. Может облегчить жизнь и не внутри блока кода делать :SetColor, а пусть блок кода возвращает цвет и внутри HEdit делать :SetColor... 3. Не добавлять DATA bColorBlock, а сделать как то так: Local bC := ::bColor Local tC := ::tColor If hb_IsBlock(bColorinFocus) bC := Eval(bColorinFocus, Self) EndIf If hb_IsBlock(tColorinFocus) tC := Eval(tColorinFocus, Self) EndIf ::SetColor(tC, bC)
|
|
|
|
| moderator
|
Пост N: 992
Зарегистрирован: 06.07.06
|
|
Отправлено: 30.08.16 09:24. Заголовок: SergKis пишет: буде..
SergKis пишет: цитата: | будет ли срабатывать блок кода в ситуации oGet:Value( -100 ); oGet:Refresh() |
| Нет. Он срабатывает только при получении фокуса. И, вообще-то, мне всегда казалось, что значение GET элемента, когда он находится в фокусе ввода, меняет человек, вводящий информацию, а не программа. Но на крайний случай можно написать что-то вроде: Function RefreshColor( oGet ) IF hwg_Isptreq( oGet:handle, hwg_Getfocus() ) Eval( oGet:bColorBlock, oGet ) ) ENDIF Return oGet:Refresh() и вызывать эту функцию вместо oGet:Refresh() цитата: | 2. Может облегчить жизнь и не внутри блока кода делать :SetColor, а пусть блок кода возвращает цвет и внутри HEdit делать :SetColor. 3. ... |
| Не люблю добавлять переменные в класс на всякий случай жизни - тогда он в конце концов вырастет в монстра.. Один :bColorBlock, IMO, лучше чем два, для текста и фона отдельно. И я не понимаю, почему написать 2 кодоблока, каждый с Return nColor, легче, чем один с Return o:SetColor( tColor,bColor ). Я исповедую минималистический подход. На мой взгляд, класс должен предоставлять минимальный, но достаточный инструментарий для разработчика, а уж его дело использовать этот инструментарий в соответствии со своими вкусами и потребностями. Ну а баланс между минимальным и достаточным - дело тонкое, конечно, и иногда субъективное ).
|
|
|
|
| постоянный участник
|
Пост N: 1187
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.08.16 12:16. Заголовок: SerKis пишет мне вс..
SerKis пишет цитата: | мне всегда казалось, что значение GET элемента, когда он находится в фокусе ввода, меняет человек, вводящий информацию, а не программа |
| Вот одна из простых карточек http://shot.qip.ru/00QSeG-111709ntXja/ вправа от списка л.счетов Getы в Readonly, при перемещении они заполняются данными из базы, по клавише\кнопке\двойной клик на тексте у Get или сам Get, если разрешено, переводим в режим редактирования от первого Get или от того, по которому кликнули. Еще с s87 такие карточки были.
|
|
|
|
| moderator
|
Пост N: 993
Зарегистрирован: 06.07.06
|
|
Отправлено: 30.08.16 15:33. Заголовок: Что-то не отображает..
Что-то не отображается у меня эта картинка, ну да ладно. Согласен, бывает такое, чего только не бывает). В любом случае простенькая ф-я типа приведенной выше RefreshColor() решит этот вопрос, а железно прописывать подобную функциональность в HEdit(), по-моему, будет неправильно.
|
|
|
|
| |
Пост N: 5988
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.08.16 15:42. Заголовок: alkresin пишет: Чт..
alkresin пишет: цитата: | Что-то не отображается у меня эта картинка, ну да ладно |
| А так ?
|
|
|
|
| moderator
|
Пост N: 994
Зарегистрирован: 06.07.06
|
|
Отправлено: 30.08.16 16:38. Заголовок: Это она и есть ? Я п..
Это она и есть ? Я подумал, что какое-то сопутствующее бизнес-предложение от qip.ru. Но где тут текстовый GET, все равно не вижу.
|
|
|
|
| постоянный участник
|
Пост N: 1188
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.08.16 17:57. Заголовок: alkresin пишет: Но г..
alkresin пишет: цитата: | Но где тут текстовый GET, все равно не вижу |
| Все светлозеленые клеточки это GetBox MiniGui (Get аналоги hwg) в состоянии readonly цитата: | В любом случае простенькая ф-я типа приведенной выше RefreshColor() решит этот вопрос, а железно прописывать подобную функциональность в HEdit(), по-моему, будет неправильно. |
| Не соглашусь, имея объект, городить доп. функционал можно, но по мне нонсенс. А менять функционал сильно не недо добавляем в класс DATA tColorinFocus DATA bColorinFocus METHOD SetColorReal() CLASS HEdit LOCAL tC := ::tColor LOCAL bC := ::bColor LOCAL xC If lColorinFocus tC := tColorinFocus bC := bColorinFocus Else If ::tColorinFocus != NIL tC := ::tColorinFocus EndIf If ::bColorinFocus != NIL bC := ::bColorinFocus EndIf EndIf If hb_IsBlock(tC) xC := Eval(tC, Self) If hb_IsNumeric(xC) tC := xC EndIf EndIf If hb_IsBlock(bC) xC := Eval(bC, Self) If hb_IsNumeric(xC) bC := xC EndIf EndIf ::Setcolor( tC, bC, .T. ) RETURN в Refresh() метод добавляем ::SetColorReal() и не надо больше никаких DATA aColorOld INIT { 0,0 } DATA bColorBlock IF msg == WM_SETFOCUS oParent := hwg_getParentForm( Self ) IF lColorinFocus .OR. oParent:tColorinFocus >= 0 .OR. oParent:bColorinFocus >= 0 .OR. ::bColorBlock != Nil ::aColorOld[1] := ::tcolor ::aColorOld[2] := ::bcolor IF ::bColorBlock != Nil Eval( ::bColorBlock, Self ) ELSE ::Setcolor( Iif( oParent:tColorinFocus >= 0, oParent:tColorinFocus, tColorinFocus ), ; Iif( oParent:bColorinFocus >= 0, oParent:bColorinFocus, bColorinFocus ), .T. ) ENDIF ENDIF ELSEIF msg == WM_KILLFOCUS oParent := hwg_getParentForm( Self ) IF lColorinFocus .OR. oParent:tColorinFocus >= 0 .OR. oParent:bColorinFocus >= 0 .OR. ::bColorBlock != Nil ::tcolor := ::aColorOld[1] ::bcolor := ::aColorOld[2] ::Setcolor( ::tcolor, ::bColor, .T. ) ENDIF ENDIF имеем два простых блока управления цветом от oGet:Value() на скорую руку делал, может пропустил\не учел что, тогда сори
|
|
|
|
| moderator
|
Пост N: 995
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 10:05. Заголовок: SergKis пишет: Все ..
SergKis пишет: цитата: | Все светлозеленые клеточки это GetBox MiniGui (Get аналоги hwg) в состоянии readonly |
| Странно. Всматривался во все глаза несколько раз, но светлозеленых клеточек не увидел. цитата: | и не надо больше никаких DATA aColorOld INIT { 0,0 } |
| Увы, надо. Метод :SetColor() устанавливает новые значения :tColor, :bColor - а, значит, нужен :aColorOld и нужна обработка WM_KILLFOCUS. Нужна также и обработка WM_SETFOCUS, так как именно в это время надо поместить в :aColorOld старые значения, а :Refresh() может быть вызван в любое время.
|
|
|
|
| постоянный участник
|
Пост N: 1189
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 10:34. Заголовок: alkresin пишет: нуж..
alkresin пишет: цитата: | нужна обработка WM_KILLFOCUS. Нужна также и обработка WM_SETFOCUS |
| Я Имел ввиду в том виде, как было. Как сбросил текст метода, увидел, что пропустил добавляем в класс DATA tColorinFocus DATA bColorinFocus DATA lFocused INIT .F. METHOD SetColorReal( lFocus ) CLASS HEdit LOCAL tC := ::tColor LOCAL bC := ::bColor LOCAL xC ::lFocused := ! empty(lFocus) If ::lFocused If lColorinFocus tC := tColorinFocus bC := bColorinFocus Else If ::tColorinFocus != NIL tC := ::tColorinFocus EndIf If ::bColorinFocus != NIL bC := ::bColorinFocus EndIf EndIf EndIf If hb_IsBlock(tC) xC := Eval(tC, Self) If hb_IsNumeric(xC) tC := xC EndIf EndIf If hb_IsBlock(bC) xC := Eval(bC, Self) If hb_IsNumeric(xC) bC := xC EndIf EndIf ::Setcolor( tC, bC, .T. ) RETURN и IF msg == WM_SETFOCUS ::SetColorReal(.T.) ::Refresh() ELSEIF msg == WM_KILLFOCUS ::SetColorReal(.F.) ::Refresh() тогда все что работало по старой схеме (STATIC переменные), должно работать и без них можно работать со свойствами объекта, согласен, в Refresh() вставлять не надо. alkresin пишет: Возможно. Я только вчера бегло глянул на содержимое HEdit (дома ремонт, к компу набегаю с зачумленной головой)
|
|
|
|
|
| постоянный участник
|
Пост N: 1190
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 11:01. Заголовок: alkresin пишет: Стра..
alkresin пишет: цитата: | Странно. Всматривался во все глаза несколько раз, но светлозеленых клеточек не увидел. |
| Повторю др. карточку - аналог (в той задаче есть рус. яз., хотел чтоб понятней было). В текстовом файле кусок кода реализации http://my-files.ru/xtcnl1
|
|
|
|
| moderator
|
Пост N: 996
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 13:16. Заголовок: SergKis пишет: тогд..
SergKis пишет: цитата: | тогда все что работало по старой схеме (STATIC переменные), должно работать и без них можно работать со свойствами объекта, согласен, в Refresh() вставлять не надо. |
| Надо еще :aColorOld задействовать - словом, получается примерно то, что я и сделал, только с двумя отдельными кодоблоками для текста и фона вместо одного, на котором я по-прежнему настаиваю. А вот в Refresh(), наверное, надо все-таки вставить что-то вроде: IF !Empty(::bColorBlock) .AND. hwg_isPtrEq(::handle,hwg_getFocus) Eval( ::bColorBlock, Self ) ENDIF Раз есть такой кодоблок для смены цвета по условию, надо его использовать при смене содержимого GET, имеющего фокус.
|
|
|
|
| moderator
|
Пост N: 997
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 13:19. Заголовок: SergKis пишет: Наше..
SergKis пишет: цитата: | Нашел свои опыты с hbrowse, где видно, как мерцает переотображение selected строки при горизонтальном перемещении |
| Убрал мерцание.
|
|
|
|
| постоянный участник
|
Пост N: 1191
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 15:22. Заголовок: alkresin пишет: Надо..
alkresin пишет: цитата: | Надо еще :aColorOld задействовать |
| Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются. Но вам виднее, я что то пропускаю, наверно (башка забита ремонтом). цитата: | на котором я по-прежнему настаиваю |
| это ваше право, я только предложил.
|
|
|
|
| moderator
|
Пост N: 998
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 16:35. Заголовок: SergKis пишет: Не о..
SergKis пишет: цитата: | Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются. |
| В том-то и дело, что меняются. Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.
|
|
|
|
| постоянный участник
|
Пост N: 1192
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 16:49. Заголовок: alkresin пишет: Мето..
alkresin пишет: [quote]Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.[quote] Тогда не надо исп. SetColor(...) из CLASS HCustomWindow, надо SetColorReal, сделать SetColor(...) и произвести все действия от пполученных переменных tC, bC - добавиться несколько строк.
|
|
|
|
| moderator
|
Пост N: 999
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 20:18. Заголовок: SergKis пишет: Тогд..
SergKis пишет: цитата: | Тогда не надо исп. SetColor(...) из CLASS HCustomWindow, надо SetColorReal, сделать SetColor(...) и произвести все действия от пполученных переменных tC, bC - добавиться несколько строк. |
| Увы, это невозможно. :SetColor() не раскрашивает control самостоятельно, он устанавливает новые значения :tColor, :bColor, которые используются уже в другое время и в другом месте: методом :onCtlColor() при обработке сообщения WM_CTLCOLOREDIT, это особенности WinAPI, уж так он сделан.
|
|
|
|
| постоянный участник
|
Пост N: 1193
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 22:24. Заголовок: alkresin пишет: при..
alkresin пишет: цитата: | при обработке сообщения WM_CTLCOLOREDIT |
| Увидел обработчик, да без :aColorOld не обойтись. Немного понятней стала организация, спасибо за разъяснения.
|
|
|
|
| moderator
|
Пост N: 1000
Зарегистрирован: 06.07.06
|
|
Отправлено: 01.09.16 13:57. Заголовок: SergKis пишет: 4. S..
SergKis пишет: цитата: | 4. Super header отсутствует и сделать, что то похожее (на картинке нижнее окно) не получится |
| Посмотрел это дело внимательнее, и выяснилось, что возможность сделать этот Super header все же есть. Еще в 2003 году ( полезная вещь Changelog) ) Павел Царенко прислал код для расчерчивания ячеек заголовка. В принципе, все достаточно просто. Для каждой колонки указывается :cGrid, там информация по каждой строке заголовка отделяется точкой с запятой ( так же делятся строки и в тексте заголовка. Так вот, в этом :cGrid указывается, с какой стороны рисовать разделительную линию с помощью букв N(North), S(South), W(West), E(East). Т.е., если мы хотим в Super header объединить 2 и 3-ью колонки, то можем написать: oBrw:aColumns[2]:cGrid := "W;WN" oBrw:aColumns[2]:heading := "Super header;col1" oBrw:aColumns[3]:cGrid := "E;EN" oBrw:aColumns[3]:heading := ";col2" Единственно, что надо сделать - чтобы в этом случае текст "Super header" автоматически размещался по центру двух колонок.
|
|
|
|
| постоянный участник
|
Пост N: 1194
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 14:57. Заголовок: alkresin пишет: Т.е..
alkresin пишет: цитата: | Т.е., если мы хотим в Super header объединить 2 и 3-ью колонки, то можем написать: |
| Такая штука, вроде, и реализована в HBrowseEx. Точно не скажу, уже отключился от hwg
|
|
|
|
| постоянный участник
|
Пост N: 1195
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 15:58. Заголовок: alkresin пишет: Един..
alkresin пишет: цитата: | Единственно, что надо сделать - чтобы в этом случае текст "Super header" автоматически размещался по центру двух колонок |
| Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2 (для индикации уст. ордера, например) ?
|
|
|
|
| moderator
|
Пост N: 1001
Зарегистрирован: 06.07.06
|
|
Отправлено: 01.09.16 17:05. Заголовок: SergKis пишет: Как ..
SergKis пишет: цитата: | Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2 |
| Думал недавно на эту тему. Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо и будет вызываться при прорисовывании заголовка. При необходимости ( смене ордера, например ) его надо будет просто переставить из одного oColumn в другой. А можно сделать массив таких кодоблоков - как сделал недавно в HPanel - разные фрагменты программы могут добавлять туда свои рисующие кодоблоки.
|
|
|
|
| постоянный участник
|
Пост N: 1196
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 17:48. Заголовок: alkresin пишет: Хочу..
alkresin пишет: цитата: | Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо |
| Если на нем, делать строки, header, footer и т.д., то это замечательно, а если заложить в HBrowse двойную буферизацию ("раз пошла такая пъянка") - это вооооооооще SUPER !
|
|
|
|
| moderator
|
Пост N: 1002
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 10:15. Заголовок: По идее, нужны отдел..
По идее, нужны отдельные кодоблоки для строк, header, footer. Кроме того, хорошо бы иметь кодоблок, который рисует весь объект, скажем, header, и кодоблок, который рисует только фон - если вы хотите по-своему нарисовать фон, но не хотите заморачиваться с рисованием всего остального. А еще кодоблоки, которые рисуют отдельные элементы. Скажем, вас устраивает стандартный header, но вы хотите после того как он нарисуется пририсовать какой-либо значок (тот же знак установки сортировки) - причем, теоретически, таких кодоблоков может быть больше одного. Поэтому я думаю сделать массив кодоблоков, куда можно будет добавлять их, например, так: oColumn:SetPaint( PAINT_HEADER_ALL, block1 ) oColumn:SetPaint( PAINT_LINE_BACKGROUND, block2 ) а HwGUI будет находить и запускать их в соответствующие моменты времени вместо каких-то своих стандартных действий. Боюсь только, не слишком ли это будет "накручено" для пользователя. цитата: | а если заложить в HBrowse двойную буферизацию |
| Ну это нетрудно - всего несколько строк добавить, как это сделано в source/common/hcedit.prg, например: hDCReal := hwg_BeginPaint( ::handle, pps ) aCoors := hwg_GetClientRect( ::handle ) hDC := hwg_CreateCompatibleDC( hDCReal ) hBitmap := hwg_CreateCompatibleBitmap( hDCReal, aCoors[3]-aCoors[1], aCoors[3]-aCoors[1] ), aCoors[4]-aCoors[2] ) hwg_Selectobject( hDC, hBitmap ) ... hwg_BitBlt( hDCReal, 0, 0, aCoors[3] - aCoors[1], aCoors[4] - aCoors[2], hDC, ::nShiftL, 0, SRCCOPY ) hwg_DeleteDC( hDC ) hwg_DeleteObject( hBitmap ) hwg_EndPaint( ::handle, pps ) но надо ли ? Я убрал многие моменты, которые могли приводить к перерисовке фрагментов browse и сейчас, вроде, мерцания нет.
|
|
|
|
| постоянный участник
|
Пост N: 1200
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 11:24. Заголовок: alkresin пишет: но н..
alkresin пишет: Работа с сервером напрямую (без skipов, медленное соединение...). В минигуи мы вынуждены были сделать такое (старая версия) в browse (ListView). Мне думается это облегчит жизнь всем, тем более цитата: | Ну это нетрудно - всего несколько строк добавить |
| цитата: | Поэтому я думаю сделать массив кодоблоков |
| Наверно, да. Возможно такой массив (объект) организовать для ячейки и далее распространить его на строку и механизм строки распространить на hedar, super header, footer, тогда и super footer получится автоматом. Заложить средние (это условно) возможности в общее поведение browse, а т.к. это скорее всего будут классы, то наследованием можно усложнить поведение до нужных кондиций по надобности
|
|
|
|
| постоянный участник
|
Пост N: 1201
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 11:38. Заголовок: alkresin пишет: Боюс..
alkresin пишет: цитата: | Боюсь только, не слишком ли это будет "накручено" для пользователя. |
| Думаю, пользователей обрадует, расширение возможностей. "Упрощенный" вариант ляжет в #xcommand ..., а "развитой" в объектах. Это от трудоемкости реализации зависит.
|
|
|
|
| moderator
|
Пост N: 1003
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 15:19. Заголовок: Буферизацию добавил...
Буферизацию добавил.
|
|
|
|
| moderator
|
Пост N: 1004
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 18:18. Заголовок: Еще добавил переменн..
Еще добавил переменную HBrowse :lBuffering ( .F. по умолчанию ), чтобы включать при необходимости буферизацию.
|
|
|
|
| постоянный участник
|
Пост N: 1203
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 20:40. Заголовок: alkresin пишет Еще д..
alkresin пишет цитата: | Еще добавил переменную HBrowse :lBuffering |
| Проверил оба режима на bc, все оч. хорошо . Msvc и сервер сейчас проверить не могу, не дома (где то через нельку только)
|
|
|
|
| постоянный участник
|
Пост N: 1211
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.09.16 23:21. Заголовок: alkresin пишет IF !E..
alkresin пишет цитата: | IF !Empty(::bColorBlock) .AND. hwg_isPtrEq(::handle,hwg_getFocus) Eval( ::bColorBlock, Self ) ENDIF Раз есть такой кодоблок для смены цвета по условию, надо его использовать при смене содержимого GET, имеющего фокус. |
| Этот блок кода надо выполнять всегда и в фокусе и не в фокусе. Пример: от выражения (см. выше для числа) уст. FontColor, одинаковый и для в фокусе и для не в фокусе, а BackColor для них разный oGet:Value( -100 ); oGet:Refresh() oGet:Value( 100 ); oGet:Refresh() oGet:Value( 1001 ); oGet:Refresh() и еще это труднозапоминаемое hwg_Isptreq( ::handle, hwg_Getfocus() ) может сделать ::lFocused переменную или ACCESS IsFocused INLINE hwg_Isptreq( ::handle, hwg_Getfocus() ) oGet:IsFocused oGet:lFocused как то лучше запоминается
|
|
|
|
| постоянный участник
|
Пост N: 1212
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.09.16 07:28. Заголовок: Понял, что меня все ..
Понял, что меня все время смущало в работе с цветом HEdit, переменные ::tColor и ::bColor все время меняют свои значения, т.е. ведут себя как рабочие переменные (::aColorOld), т.е. в классе нет переменных источников для цвета. Предложение: Скрытый текст
DATA nFColor DATA nBColor DATA lFocused INIT .F. METHOD SetColor( tcolor, bColor, lRepaint ) CLASS HEdit If ::nFColor == Nil ::nFColor := tcolor EndIf If ::nBColor == Nil ::nBColor := bColor EndIf If ::nFColor == Nil ::nFColor := 0 EndIf RETURN Super:SetColor( tcolor, bColor, lRepaint ) METHOD SetColorReal() CLASS HEdit LOCAL tC := ::nFColor LOCAL bC := ::nBColor LOCAL xC If ::lFocused .and. lColorinFocus tC := tColorinFocus bC := bColorinFocus EndIf If hb_IsBlock(tC) xC := Eval(tC, Self) If hb_IsNumeric(xC) tC := xC EndIf EndIf If hb_IsBlock(bC) xC := Eval(bC, Self) If hb_IsNumeric(xC) bC := xC EndIf EndIf Super:SetColor( tC, bC, .T. ) RETURN METHOD Refresh() CLASS HEdit LOCAL vari ::SetColorReal() IF hb_isBlock( ::bSetGet ) vari := Eval( ::bSetGet, , self ) IF vari == Nil vari := "" ENDIF IF !Empty( ::cPicFunc ) .OR. !Empty( ::cPicMask ) vari := Transform( vari, ::cPicFunc + iif( Empty(::cPicFunc ),""," " ) + ::cPicMask ) ELSE vari := iif( ::cType == "D", Dtoc( vari ), iif( ::cType == "N",Str(vari ),iif(::cType == "C",vari,"" ) ) ) ENDIF ::title := vari hwg_Setdlgitemtext( ::oParent:handle, ::id, vari ) ELSE hwg_Setdlgitemtext( ::oParent:handle, ::id, ::title ) ENDIF // IF ::bColorBlock != Nil .AND. hwg_Isptreq( ::handle, hwg_Getfocus() ) // Eval( ::bColorBlock, Self ) // ENDIF RETURN Nil и IF msg == WM_SETFOCUS ::lFocused := .T. ::Refresh() ELSEIF msg == WM_KILLFOCUS ::lFocused := .F. ::Refresh() тогда должны совместиться старые тексты с исп. hwg_SetColorinFocus( lColor, ... ) и ::SetColor(...) и добавится возможность ставить ::nFColor := {|o,v| v := o:Value(), iif(v < 0, ..., iif(v >=0 .and. v <= 1000, ... } ::nBColor := {|o| iif(o:lFocused, ..., ...) }
|
|
|
|
|
| постоянный участник
|
Пост N: 1213
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.09.16 07:41. Заголовок: PS в Refresh() ::Set..
PS в Refresh() ::SetColorReal() конечно надо вместо строк с //
|
|
|
|
| moderator
|
Пост N: 1005
Зарегистрирован: 06.07.06
|
|
Отправлено: 05.09.16 09:41. Заголовок: Добавил массивы кодо..
Добавил массивы кодоблоков в HColumn() и метод SetPaintCB( nId, block, cId ), чтобы их добавлять, менять и удалять. В guilib.ch - предопределенные значения nId: PAINT_LINE_ALL - рисует всю ячейку PAINT_LINE_BACK - рисует только фон и передает управление обратно HwGUI для рисования текста PAINT_LINE_ITEM - вызывается после того, как ячейка отрисована, чтобы нарисовать там дополнительные элементы То же самое для Header и Footer: PAINT_HEAD_ALL PAINT_HEAD_BACK PAINT_HEAD_ITEM PAINT_FOOT_ALL PAINT_FOOT_BACK PAINT_FOOT_ITEM Пример использования помещен в tutor. Секция "Advanced using of controls", модуль "Browse" - там простенький Super Header, смена порядка при щелчке по заголовку - и отображение его в заголовке, нарисованная ячейка.
|
|
|
|
| постоянный участник
|
Пост N: 1214
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 11:55. Заголовок: alkresin По документ..
alkresin По документации. цитата: | Дистрибутив HwGUI представляет собой архивный файл, без какой-либо установочной программы. Это может быть zip - архив, если он предназначен для Windows, или tar.gz, tar.bz2, если для Linux. Вам надо просто распаковать его в любое место, которое вы сочтете подходящим ... |
| Установка C:\BORLAND\BCC55 C:\MiniGUI\Harbour C:\HwGui с добавкой в bat файлы сборки set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour\bin не собирают libы, примеры собираются через hbmk2 (примеры) Скрытый текст
c:\HwGui\_hbmk2.bat @echo off cls set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour\bin echo ------- hwgui.hbp -------- > _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hwgui.hbp >> _hbmk2.txt echo ------- hbxml.hbp -------- >> _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hbxml.hbp >> _hbmk2.txt echo ------- hwgdebug.hbp -------- >> _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hwgdebug.hbp >> _hbmk2.txt echo ------- procmisc.hbp -------- >> _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace procmisc.hbp >> _hbmk2.txt C:\HwGui\contrib\_hbmk2.bat @echo off cls set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour\bin echo ------- hbactivex.hbp -------- > _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hbactivex.hbp >> _hbmk2.txt echo ------- hwg_extctrl.hbp -------- >> _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hwg_extctrl.hbp >> _hbmk2.txt echo ------- hwg_qhtm.hbp -------- >> _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace hwg_qhtm.hbp >> _hbmk2.txt C:\HwGui\samples\_hbmk2.bat @echo off cls if %1.==. goto e set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour\bin if not exist hwgui_xp.rc echo 1 24 "..\image\WindowsXP.Manifest" > hwgui_xp.rc echo -------------- %1 -------------------- > _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace ..\hwgui.hbc hwgui_xp.rc %1 >> _hbmk2.txt :e C:\HwGui\tutorial\_hbmk2.bat @echo off SET P=tutor.prg set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour\bin if not exist hwgui_xp.rc echo 1 24 "..\image\WindowsXP.Manifest" > hwgui_xp.rc echo ------- %P% -------- > _hbmk2.txt %hb_path%\hbmk2.exe -info -comp=bcc -trace ..\..\hwgui.hbc hwgui_xp.rc %P% >> _hbmk2.txt
|
|
|
|
|
| постоянный участник
|
Пост N: 1215
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 12:12. Заголовок: alkresin пишет Приме..
alkresin пишет цитата: | Пример использования помещен в tutor. |
| Бросается в глаза сразу: 1. Стиль прорисовки "Some data" отличается от "Age", "Salary" (даже по цвету) 2. "Name" не центровано по вертикали в своей колонке по умолчанию 3. Наведение мыши справа за текстом "Salary" (далеко еще до вертикальной разд.линии) превращает курсор мыши в вид, предназначенный для изменения ширины колонки. 4. Клик по "Salary" работает как клик по "Age", а не должен был бы так себя вести (как то надо различать эти клики) 5. Как заменить, предлагаемую индикацию уст. ордера, на свою bmp ?
|
|
|
|
| постоянный участник
|
Пост N: 1216
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 12:19. Заголовок: SergKis пишет 4. Кли..
SergKis пишет цитата: | 4. Клик по "Salary" работает как клик по "Age" |
| надо так 4. Клик по "Some data" работает как клик по "Age"
|
|
|
|
| постоянный участник
|
Пост N: 1285
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.09.16 14:09. Заголовок: SergKis пишет: set ..
SergKis пишет: цитата: | set hb_path=c:\minigui\harbour\bin |
| Так в документации (англ.) ж вроде просто SET HB_PATH=c:\harbour или SET HB_PATH=c:\minigui\harbour У меня собралось. вот в стандартные батники setlocal / endlocal добавить было бы не плохо (в помощь ленивому ).
|
|
|
|
| moderator
|
Пост N: 1006
Зарегистрирован: 06.07.06
|
|
Отправлено: 05.09.16 14:46. Заголовок: Петр пишет: SET HB_..
Петр пишет: Точно. И в русской тоже. цитата: | вот в стандартные батники setlocal / endlocal добавить было бы не плохо |
| А что это ?
|
|
|
|
| moderator
|
Пост N: 1007
Зарегистрирован: 06.07.06
|
|
Отправлено: 05.09.16 14:54. Заголовок: SergKis пишет: 1. С..
SergKis пишет: цитата: | 1. Стиль прорисовки "Some data" отличается от "Age", "Salary" (даже по цвету) |
| Потому что именно так и было задумано - в кодоблоке bBack. цитата: | 2. "Name" не центровано по вертикали в своей колонке по умолчанию |
| В HBrowse по умолчанию выравнивание влево. цитата: | 3. Наведение мыши справа за текстом "Salary".. |
| А.. ну да, это потому что колонка последняя, надо будет поправить. цитата: | 4. Клик по "Some data" работает как клик по "Age" |
| Значит, кликнули на header над "Age". цитата: | 5. Как заменить, предлагаемую индикацию уст. ордера, на свою bmp ? |
| В bDrawOrd использовать hwg_drawbitmap() или hwg_Drawtransparentbitmap() вместо hwg_DrawLine().
|
|
|
|
| постоянный участник
|
Пост N: 1286
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.09.16 15:42. Заголовок: alkresin пишет: А ч..
|
|
|
|
| moderator
|
Пост N: 1008
Зарегистрирован: 06.07.06
|
|
Отправлено: 05.09.16 16:44. Заголовок: Петр пишет: описан..
Петр пишет: цитата: | описание команды SETLOCAL |
| Спасибо. Не знал. Но пока не очень представляю, как это можно использовать.
|
|
|
|
| постоянный участник
|
Пост N: 1217
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 17:39. Заголовок: Петр пишет Так в док..
Петр пишет цитата: | Так в документации (англ.) ж вроде просто SET HB_PATH=c:\harbour или SET HB_PATH=c:\minigui\harbour У меня собралось. |
| Не собирается у меня. samples\bld.bat @echo off set path=c:\minigui\harbour\bin;c:\borland\bcc55\bin; set hb_path=c:\minigui\harbour set HRB_DIR=%HB_PATH% set HWGUI_INSTALL=.. ... запуск bld.bat Browse_1 > _.txt _0.txt Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland browse_1.c: Error E2209 c:\minigui\harbour\include\hbdefs.h 50: Unable to open include file 'stdarg.h' Error E2209 c:\minigui\harbour\include\hbdefs.h 51: Unable to open include file 'stdio.h' Error E2209 c:\minigui\harbour\include\hbdefs.h 52: Unable to open include file 'stdlib.h' Error E2209 c:\minigui\harbour\include\hbdefs.h 53: Unable to open include file 'string.h' Error E2209 c:\minigui\harbour\include\hbdefs.h 54: Unable to open include file 'limits.h' Error E2293 c:\minigui\harbour\include\hbdefs.h 517: ) expected Error E2188 c:\minigui\harbour\include\hbdefs.h 523: Expression syntax Error E2257 c:\minigui\harbour\include\hbdefs.h 555: , expected Error E2188 c:\minigui\harbour\include\hbdefs.h 583: Expression syntax Error E2257 c:\minigui\harbour\include\hbdefs.h 617: , expected Error E2451 browse_1.c 49: Undefined symbol 'NULL' Error E2141 browse_1.c 49: Declaration syntax error Error E2190 browse_1.c 49: Unexpected } Error E2190 browse_1.c 49: Unexpected } Error E2040 browse_1.c 49: Declaration terminated incorrectly Error E2190 browse_1.c 100: Unexpected } Error E2190 browse_1.c 100: Unexpected } Error E2109 browse_1.c 100: Not an allowed type in function hb_vm_SymbolInit_BROWSE_1 *** 18 errors in Compile *** Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Unable to open file 'C0W32.OBJ'
|
|
|
|
| moderator
|
Пост N: 1009
Зарегистрирован: 06.07.06
|
|
Отправлено: 05.09.16 19:38. Заголовок: SergKis пишет: Erro..
SergKis пишет: цитата: | Error E2209 c:\minigui\harbour\include\hbdefs.h 50: Unable to open include file 'stdarg.h' |
| Т.е., Харборовские *.h он находит, а *.h от Borland C не может найти. Такое впечатление, что у вас c:\borland\bcc55\bin\bcc32.cfg не настроен. там должно быть: -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" Странно. Вы этот компилятор не использовали с minigui ?
|
|
|
|
| постоянный участник
|
Пост N: 1287
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.09.16 19:58. Заголовок: alkresin пишет: Но ..
alkresin пишет: цитата: | Но пока не очень представляю, как это можно использовать. |
| Да нет это я так по привычке, зачем все усложнять SergKis пишет: цитата: | Не собирается у меня. samples\bld.bat |
| И у меня Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland hello.c: Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Unable to open file 'HWG_QHTM.LIB' Ну это понятно, м.б. лучше по аналогии с hbactivex.lib написать if exist %HWGUI_INSTALL%\lib\hwg_qhtm.lib echo %HWGUI_INSTALL%\lib\hwg_qhtm.lib + >> b32.bc
|
|
|
|
| постоянный участник
|
Пост N: 1218
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 20:25. Заголовок: alkresin пишет: Стра..
alkresin пишет: цитата: | Странно. Вы этот компилятор не использовали с minigui ? |
| Минигуи как раз им и пользую (примеры только). Там все хорошо. цитата: | c:\borland\bcc55\bin\bcc32.cfg |
| Его совсем нет. Обычно направление на include, lib, obj в bat задаются, но я по шагам инструкции шел.
|
|
|
|
| постоянный участник
|
Пост N: 1219
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.09.16 20:45. Заголовок: alkresin пишет: Т.е...
alkresin пишет: цитата: | Т.е., Харборовские *.h он находит, а *.h от Borland C не может найти |
| Это все понятно, понятно, что надо добавлять в bat set bc_path=..., но там и vc, mingw. Может отказаться уже от bat и перейти на hbmk2 ? Вроде работает.
|
|
|
|
| постоянный участник
|
Пост N: 1288
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.09.16 20:56. Заголовок: SergKis пишет: но я..
|
|
|
|
| постоянный участник
|
Пост N: 1220
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 00:50. Заголовок: Петр пишет А вот дру..
Петр пишет Совершенно верно, но устанавливать, пытаться что то сделать, могут люди разной квалификации. Многим она не нужна, сразу в тексты лезут и быстро врубаются, а кто то пробует, споткнулся, вроде мелочь, а в результате - грустно и время потеряно. Ясно же, надо или batы доводить (надеюсь посылать на инструкцию по написанию их тут не будем) или перходить на hbmk2, т.е. ткнули - получили положительный результат и полжительные эмоции.
|
|
|
|
| постоянный участник
|
Пост N: 5085
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.09.16 03:03. Заголовок: SergKis пишет: т.е...
SergKis пишет: цитата: | т.е. ткнули - получили положительный результат и положительные эмоции. |
| Люблю очень положительные эмоции !!!
|
|
|
|
| постоянный участник
|
Пост N: 1221
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 08:35. Заголовок: alkresin пишет: 3.5...
alkresin пишет: цитата: | 3.5. Обзор виджетов. ... Далее идут несколько виджетов, о которых мне почти нечего сказать. ... . Pager, Rebar, Animation - не очень представляю, где и зачем я мог бы их использовать... |
| Пример для Rebar http://my-files.ru/ubrt5z В меню "Dialog" смотреть
|
|
|
|
| moderator
|
Пост N: 1010
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 10:14. Заголовок: SergKis пишет: Ясно..
SergKis пишет: цитата: | Ясно же, надо или batы доводить (надеюсь посылать на инструкцию по написанию их тут не будем) или перходить на hbmk2, т.е. ткнули - получили положительный результат и полжительные эмоции. |
| Да кто ж мешает вам Hbmk использовать ? В новой локументации про это написано: 2.4. Сборка приложений с HwGUI В bat файлах все нормально, надо только с hwg_qhtm.lib поправить - правильно Петр написал. Просто bcc32.cfg и TLink32.cfg действительно должны присутствовать, это делается всегда при установке/настройке Borland C. Я предпочитаю использовать bat, потому что с ним вижу все, что делаю: что запускается, какие библиотеки используются, какие опции компилятора/линкера, ...
|
|
|
|
| постоянный участник
|
Пост N: 237
Зарегистрирован: 29.05.10
|
|
Отправлено: 06.09.16 10:44. Заголовок: alkresin пишет: Пр..
alkresin пишет: цитата: | Просто bcc32.cfg и TLink32.cfg действительно должны |
| или iLink32.cfg :)
|
|
|
|
| moderator
|
Пост N: 1011
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 10:47. Заголовок: SergKis пишет: Этот..
SergKis пишет: цитата: | Этот блок кода надо выполнять всегда и в фокусе и не в фокусе. Пример: от выражения (см. выше для числа) уст. FontColor, одинаковый и для в фокусе и для не в фокусе, а BackColor для них разный |
| Не надо примешивать сюда изменение цветов в зависимости от содержимого, это другая песня: все, о чем здесь шла речь - это ColorInFocus, цвет GET'a, находящегося в фокусе. цитата: | и еще это труднозапоминаемое hwg_Isptreq |
| hwg_IsPtrEq() - Is Pointer Equal - так легче запомнить. Можно было бы использовать просто ( :;handle == hwg_GetFocus() ), но, насколько я помню, в xHarbour нельзя сравнивать POINTER'ы, так что эта функция здесь для совместимости. Что насчет добавления нового метода или переменной в класс, я делаю это с большой осторожностью и неохотой, только когда это действительно очень полезно - иначе через какое-то время класс превратится в монстра.
|
|
|
|
| moderator
|
Пост N: 1012
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 11:17. Заголовок: SergKis пишет: Поня..
SergKis пишет: цитата: | Понял, что меня все время смущало в работе с цветом HEdit, переменные ::tColor и ::bColor все время меняют свои значения, т.е. ведут себя как рабочие переменные (::aColorOld), т.е. в классе нет переменных источников для цвета. |
| :tColor и :bColor определяют актуальные значения цвета виджета, точно так же, как, например, :nWidth и :nHeight - актуальные значения его размера, и :SetColor() меняет эти актуальные значения, так же, как и :Move() меняет актуальные значения размера. Если просто принять эту логику, то ничего не должно смущать. Реализовать все это можно множеством разных способов, но нужны действительно серьезные основания, чтобы менять существующую реализацию.
|
|
|
|
| постоянный участник
|
Пост N: 1222
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 12:50. Заголовок: alkresin пишет: Реал..
alkresin пишет: цитата: | Реализовать все это можно множеством разных способов, но нужны действительно серьезные основания, чтобы менять существующую реализацию |
| Я уже говорил, что принимать\менять - это вашо право, я излагаю (понятным мне языком чего я не понимаю в hwg) цитата: | все, о чем здесь шла речь - это ColorInFocus, цвет GET'a, находящегося в фокусе. |
| Возможно я беру шире, но пока не понимаю, как в GET (в фокусе\нет) реализовать чтобы циферки < 0 были красненькими, > 0 и <= 1000 синенькими и т.д., а фон для фокуса желтенький, не фокуса беленький. цитата: | hwg_IsPtrEq() - Is Pointer Equal - так легче запомнить |
| Я не понимаю, чем запись (это ж по всей проге такие конструкции писать) {|o| iif(hwg_Isptreq( o:handle, hwg_Getfocus() ), ..., ... ) } лучше к примеру {|o| iif(o:lFocused, ..., ...) }
|
|
|
|
| moderator
|
Пост N: 1013
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 14:15. Заголовок: SergKis пишет: Возм..
SergKis пишет: цитата: | Возможно я беру шире, но пока не понимаю, как в GET (в фокусе\нет) реализовать чтобы циферки < 0 были красненькими, > 0 и <= 1000 синенькими и т.д., а фон для фокуса желтенький, не фокуса беленький. |
| Примерно так: INIT DIALOG oDlg ... oDlg:bColorinFocus := желтенький ... @ ... GET ... VALID {|nVal,o|SetGetColor(nVal,o)} ... Function SetGetColor( nVal, oGet ) Local tColor := Iif(nVal... ) oGet:SetColor( tColor,, .T. ) oGet:Refresh() // чтобы можно было использовать SetGetColor() вместо oGet:Refresh() RETURN .T. цитата: | Я не понимаю, чем запись (это ж по всей проге такие конструкции писать) {|o| iif(hwg_Isptreq( o:handle, hwg_Getfocus() ), ..., ... ) } лучше к примеру {|o| iif(o:lFocused, ..., ...) } |
| Не лучше. Но если для каждого возможного улучшения создавать новые переменные и методы класса, ... - я об этом уже писал. К тому же, если вы не пишете для xHarbour, можете использовать iif( o:handle == hwg_Getfocus(), ... ). Ну и в крайнем случае, если реально очень надо, можно ведь сделать субкласс от Hedit() и добавить туда нужный вам метод, ООП для того и существует. И, конечно, насчет всей проги вы загнули )
|
|
|
|
| постоянный участник
|
Пост N: 1223
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 15:33. Заголовок: alkresin пишет: надо..
alkresin пишет: цитата: | надо, можно ведь сделать субкласс от Hedit() и добавить туда нужный вам метод, ООП для того и существует. |
| Этим всю весну и часть лета мы с товарищем и занимались, при этом сыпятся все ch команды (получается своя версия, с которой трудно слезть при изм. версий hwg). В основном мой товарищ, двигал (MDI, HBrowseEx свой, а до HEdit даже не дошли) по семейным обстоятельствам, меня хватило в основном на примеры. Сечас нас съела, текучка и срочные изменения законодательсва. В итоге решили, что переводим на 3.2 свою старую (уникодную версию Минигуи) и остаемся на ней, а hwg второй раз (при всех плюсах) откладывается в ящик. К нашему сожалению
|
|
|
|
| moderator
|
Пост N: 1014
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 15:53. Заголовок: SergKis пишет: Этим..
SergKis пишет: цитата: | Этим всю весну и часть лета мы с товарищем и занимались, при этом сыпятся все ch команды (получается своя версия, с которой трудно слезть при изм. версий hwg). |
| Это вы долго что-то. Команды, конечно, добавляют неудобства в использование собственных субклассов, но изменяются они очень редко и проблем с этим быть не должно, тем более, что вам ведь не надо заменять весь guilib.ch. Достаточно просто создать свой заголовочный файл mycommands.ch с парой измененных команд (HEdit():New(... -> HEditEx():New(... ) и вставить #include "mycommands.ch" ПОСЛЕ #include "hwgui.ch" - тогда даже переименовывать команду не надо, возьмется ваша.
|
|
|
|
| постоянный участник
|
Пост N: 1224
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 16:00. Заголовок: alkresin пишет: Прим..
alkresin пишет: Т.е. во WHEN ставим цвет для значения, поступающего в get, учитывая возврат .T.\.F., в VALID ставим цвет для значения, завершающего get, определяем фокус If hwg_Isptreq( oGet:handle, hwg_Getfocus() ) Else EndIf Если есть реальный алгоритм для значения по VALID его встраиваем, разделяя на ошибку\нет, встраиваем действия after Get (с учетом ошибки\нет) ... а Get не один, ... вернулись к "танцу с бубном" по кругу
|
|
|
|
| moderator
|
Пост N: 1016
Зарегистрирован: 06.07.06
|
|
Отправлено: 06.09.16 16:16. Заголовок: Что-то вы усложняете..
Что-то вы усложняете. Про WHEN вообще речи нет, а в VALID - да, надо вставить в кодоблок ваш алгоритм изменения цвета текста в зависимости от введенного значения. Куда-то же его все-равно придется вставить...
|
|
|
|
| постоянный участник
|
Пост N: 1225
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.09.16 16:25. Заголовок: alkresin пишет: Это ..
alkresin пишет: 1. Время на это есть только вечером и частично в выходные. 2. Mdi практически с 0 в реальной структуре mdi 3. Меню тоже надо было под себя 4. За рыбу взят HBrowseEx, но все практически с 0, на отладке остановились 5. Старались не трогать базовые классы 6. ch команды надо делать по минигуи (тексты переносить надо) вот и набралось, что не подняли. Пример mdi и только menu http://my-files.ru/23znwg
|
|
|
|
| moderator
|
Пост N: 1017
Зарегистрирован: 06.07.06
|
|
Отправлено: 07.09.16 10:59. Заголовок: В русскую документац..
В русскую документацию добавлен раздел про классы HwGUI: http://www.kresin.ru/hwgdoc_classes.html. Пока почти без пояснений и комментариев - будут добавляться по мере возможности, зато список классов, их переменных и методов полный и актуальный.
|
|
|
|
| moderator
|
Пост N: 1020
Зарегистрирован: 06.07.06
|
|
Отправлено: 16.09.16 17:21. Заголовок: Добавлен раздел про ..
|
|
|
Ответов - 94
, стр:
1
2
3
4
5
All
[только новые]
|
|