Автор | Сообщение |
|
| 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: 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() может быть вызван в любое время.
|
|
|
Ответов - 94
, стр:
1
2
3
4
5
All
[только новые]
|
|