On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
moderator


Пост N: 976
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 25.08.16 16:39. Заголовок: Документация по HwGUI


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

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 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, но без больших вложений (времени и труда) трудно применимо.



Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 977
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.08.16 10:34. Заголовок: Я разобью ответ на н..


Я разобью ответ на несколько частей, чтоб потом было удобнее.
SergKis пишет:

 цитата:
1. Задание стилей, помнить их и задавать, для многих, думаю, будет затруднительно


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

Спасибо: 0 
ПрофильЦитата Ответить
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 известен.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 979
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.08.16 10:47. Заголовок: SergKis пишет: 4. К..


SergKis пишет:

 цитата:
4. К сожалению, только INIT DIALOG оказался работоспособным, перенос примеров на child mdi не работают аналогично
диалоговому окну


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

Спасибо: 0 
ПрофильЦитата Ответить
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) они выглядят вполне прилично.


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 981
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.08.16 11:12. Заголовок: SergKis пишет: 8. В..


SergKis пишет:

 цитата:
8. В Get задание цвета через STATIC переменную, работает, но при наличии объектов, смотрится (может только мне) страно


Не понял, о какой STATIC переменной речь ?


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


Проблема в отсутствии адекватной документации, это я и пытаюсь сейчас исправить.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1170
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.08.16 12:24. Заголовок: alkresin пишет С дру..


alkresin пишет
 цитата:
С другой стороны: а какова альтернатива ? Возможных стилей великое множество и повторить


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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, приходится ставить контроль ситуации типа переменной.

Спасибо: 0 
ПрофильЦитата Ответить
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.


Спасибо: 0 
ПрофильЦитата Ответить
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.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 и понятно, создал, установил критерии и забыл.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1173
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.08.16 20:02. Заголовок: alkresin пишет hwg_G..


alkresin пишет
 цитата:
hwg_GetModalDlg():oButton. И никаких PUBLIC, PRIVATE, STATIC.


Скорее танцуем так, имеем одно-два окна карточки, находимся на модал диалог и на нем делаем манимуляции, отражающиеся на др. окнах.
Все окна собраны динамически от каких то установок (контролы-виджеты набраны динамически), т.е. надо
проверить наличие контрола(ов) на др.окне(х) и вк.\выкл. алгоритмы заплнения\расчетов и. т.д. от тек.модального

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 984
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.08.16 20:14. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это и смущает. Как сделать (в фокусе)



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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 985
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 26.08.16 20:21. Заголовок: SergKis пишет: Скор..


SergKis пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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, иначе как было и многие вопросы отпали


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1175
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.08.16 21:19. Заголовок: alkresin пишет метод..


alkresin пишет
 цитата:
метод HBrowse():Edit() - там вычисляются координаты ячейки, чтобы отредактировать ее. Кстати, а зачем они вам ? Мне ни разу не понадобились.


Это странно. У ячейки получить контекстное меню, др. окно для манипуляций (типа achoice, др. hbrowse, ... [с заголовком или без]), в footer ячейки (по клику или без)
положить Get для поисков, ну т.д.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1176
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.16 08:48. Заголовок: alkresin пишет MDI р..


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 в фокусе из пред. пункта


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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-м экране таблицы)
Когда будем перемещаться по узким колонкам эффект мерцания\гирлянды проявится (особенно, если подержать клавиши влево\вправо нажатыми)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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/

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1180
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.16 14:40. Заголовок: PS строки с текстом ..


PS
строки с текстом Pavisam - это footer, строки самые верхние (2-е) это Super header

Спасибо: 0 
ПрофильЦитата Ответить
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 ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 987
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.08.16 10:05. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример http://my-files.ru/4tcwwc (DbcHw.txt переименовать в DbcHw.exe


Увы, не успел скачать - файл удален как "вредоносный"

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 988
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.08.16 10:09. Заголовок: SergKis пишет: 1. м..


SergKis пишет:

 цитата:
1. многострочный заголовок есть
2. многострочный подвал есть


:) На днях задумывался, не убрать ли это дело, нужно ли оно кому-нибудь, знает ли кто о нем... Сам ни разу не пользовался.

[quote]3. многострочной строки нет (однострочная)
4. Super header отсутствует [.quote]
Отсутствует. Если бы кто-нибудь попросил, подумал бы на эту тему.

Спасибо: 0 
ПрофильЦитата Ответить
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-элемента. Сам я никогда этим не пользовался (и не я это реализовывал), поэтому и не сразу даже понял, о чем речь. Да, тут есть о чем подумать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 объекте


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 встроилось на ура и большой респект за проделанную работу)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1183
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.08.16 12:31. Заголовок: alkresin пишет Увы, ..


alkresin пишет
 цитата:
Увы, не успел скачать - файл удален как "вредоносный"


Это у была утилита dbc с LV866 и база с лат., рус. языками в которой 201 поле первое 10 байт, второе 40, остальные поля 2-3 байта (на первом экране). Эффект мерцания проявляется на selected строке при движении курсора по узким плям.
Причина, вероятно в прорисовке цветов всей строки, а не только ячеек, учавствующих в смене цветов фокус\не фокус, но в целом это мелочь.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 990
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.08.16 16:21. Заголовок: Запостил сейчас изме..


Запостил сейчас изменения. касающиеся ColorInFocus, сделал 3 уровня:
1) глобальный: все работает как раньше, для всех GET, для всех окон;
2) уровень окна: можно определить эти цвета для конкретного окна той же функцией hwg_SetColorinFocus(), только в качестве первого параметра передается объект окна;
3) уровень отдельного GET: для него добавлена новая переменная :bColorBlock. Этот кодоблок вызывается при получении фокуса и ему передается в качестве параметра объект соответствующего GET. Кодоблок должен, по идее, использовать :setColor() для установки нужных цветов.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 $
*/


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 991
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.08.16 20:16. Заголовок: На SVN, конечно. Нов..


На SVN, конечно. Новый релиз я еще не формировал.
Впрочем, можно скачать так называемый "снапшот": https://sourceforge.net/p/hwgui/code/HEAD/tree/ и там нажать на "Download Snapshot".

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1185
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.08.16 22:28. Заголовок: alkresin Спасибо за..


alkresin
Спасибо за ссылку.
Нашел свои опыты с hbrowse, где видно, как мерцает переотображение selected строки при горизонтальном перемещении
http://my-files.ru/h192y7

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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)


Спасибо: 0 
ПрофильЦитата Ответить
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 ).
Я исповедую минималистический подход. На мой взгляд, класс должен предоставлять минимальный, но достаточный инструментарий для разработчика, а уж его дело использовать этот инструментарий в соответствии со своими вкусами и потребностями. Ну а баланс между минимальным и достаточным - дело тонкое, конечно, и иногда субъективное ).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 такие карточки были.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 993
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.16 15:33. Заголовок: Что-то не отображает..


Что-то не отображается у меня эта картинка, ну да ладно. Согласен, бывает такое, чего только не бывает).
В любом случае простенькая ф-я типа приведенной выше RefreshColor() решит этот вопрос, а железно прописывать подобную функциональность в HEdit(), по-моему, будет неправильно.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5988
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.08.16 15:42. Заголовок: alkresin пишет: Чт..


alkresin пишет:

 цитата:

Что-то не отображается у меня эта картинка, ну да ладно


А так ?


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 994
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.16 16:38. Заголовок: Это она и есть ? Я п..


Это она и есть ? Я подумал, что какое-то сопутствующее бизнес-предложение от qip.ru. Но где тут текстовый GET, все равно не вижу.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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()

на скорую руку делал, может пропустил\не учел что, тогда сори

Спасибо: 0 
ПрофильЦитата Ответить
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() может быть вызван в любое время.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 (дома ремонт, к компу набегаю с зачумленной головой)



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1190
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.16 11:01. Заголовок: alkresin пишет: Стра..


alkresin пишет:
 цитата:
Странно. Всматривался во все глаза несколько раз, но светлозеленых клеточек не увидел.


Повторю др. карточку - аналог (в той задаче есть рус. яз., хотел чтоб понятней было). В текстовом файле кусок кода реализации
http://my-files.ru/xtcnl1

Спасибо: 0 
ПрофильЦитата Ответить
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, имеющего фокус.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 997
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.08.16 13:19. Заголовок: SergKis пишет: Наше..


SergKis пишет:

 цитата:
Нашел свои опыты с hbrowse, где видно, как мерцает переотображение selected строки при горизонтальном перемещении


Убрал мерцание.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1191
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.16 15:22. Заголовок: alkresin пишет: Надо..


alkresin пишет:
 цитата:
Надо еще :aColorOld задействовать


Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются. Но вам виднее, я что то пропускаю, наверно (башка забита ремонтом).

 цитата:
на котором я по-прежнему настаиваю


это ваше право, я только предложил.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 998
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.08.16 16:35. Заголовок: SergKis пишет: Не о..


SergKis пишет:

 цитата:
Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются.


В том-то и дело, что меняются. Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1192
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.16 16:49. Заголовок: alkresin пишет: Мето..


alkresin пишет: [quote]Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.[quote]
Тогда не надо исп. SetColor(...) из CLASS HCustomWindow, надо SetColorReal, сделать SetColor(...) и произвести все действия от пполученных переменных tC, bC - добавиться несколько строк.

Спасибо: 0 
ПрофильЦитата Ответить
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, уж так он сделан.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1193
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.16 22:24. Заголовок: alkresin пишет: при..


alkresin пишет:
 цитата:
при обработке сообщения WM_CTLCOLOREDIT


Увидел обработчик, да без :aColorOld не обойтись. Немного понятней стала организация, спасибо за разъяснения.

Спасибо: 0 
ПрофильЦитата Ответить
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" автоматически размещался по центру двух колонок.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1194
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.16 14:57. Заголовок: alkresin пишет: Т.е..


alkresin пишет:
 цитата:
Т.е., если мы хотим в Super header объединить 2 и 3-ью колонки, то можем написать:


Такая штука, вроде, и реализована в HBrowseEx. Точно не скажу, уже отключился от hwg

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1195
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.16 15:58. Заголовок: alkresin пишет: Един..


alkresin пишет:
 цитата:
Единственно, что надо сделать - чтобы в этом случае текст "Super header" автоматически размещался по центру двух колонок


Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2 (для индикации уст. ордера, например) ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1001
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 01.09.16 17:05. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2


Думал недавно на эту тему. Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо и будет вызываться при прорисовывании заголовка. При необходимости ( смене ордера, например ) его надо будет просто переставить из одного oColumn в другой. А можно сделать массив таких кодоблоков - как сделал недавно в HPanel - разные фрагменты программы могут добавлять туда свои рисующие кодоблоки.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1196
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.16 17:48. Заголовок: alkresin пишет: Хочу..


alkresin пишет:
 цитата:
Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо


Если на нем, делать строки, header, footer и т.д., то это замечательно, а если заложить в HBrowse двойную буферизацию ("раз пошла такая пъянка") - это вооооооооще SUPER !

Спасибо: 0 
ПрофильЦитата Ответить
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 и сейчас, вроде, мерцания нет.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1200
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.09.16 11:24. Заголовок: alkresin пишет: но н..


alkresin пишет:
 цитата:
но надо ли ?


Работа с сервером напрямую (без skipов, медленное соединение...).
В минигуи мы вынуждены были сделать такое (старая версия) в browse (ListView). Мне думается это облегчит жизнь всем, тем более
 цитата:
Ну это нетрудно - всего несколько строк добавить



 цитата:
Поэтому я думаю сделать массив кодоблоков


Наверно, да. Возможно такой массив (объект) организовать для ячейки и далее распространить его на строку и механизм строки распространить на hedar, super header, footer, тогда и super footer получится автоматом. Заложить средние (это условно) возможности в общее поведение browse, а т.к. это скорее всего будут классы, то наследованием можно усложнить поведение до нужных кондиций по надобности

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1201
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.09.16 11:38. Заголовок: alkresin пишет: Боюс..


alkresin пишет:
 цитата:
Боюсь только, не слишком ли это будет "накручено" для пользователя.


Думаю, пользователей обрадует, расширение возможностей.
"Упрощенный" вариант ляжет в #xcommand ..., а "развитой" в объектах. Это от трудоемкости реализации зависит.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1003
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 02.09.16 15:19. Заголовок: Буферизацию добавил...


Буферизацию добавил.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1004
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 02.09.16 18:18. Заголовок: Еще добавил переменн..


Еще добавил переменную HBrowse :lBuffering ( .F. по умолчанию ), чтобы включать при необходимости буферизацию.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1203
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.09.16 20:40. Заголовок: alkresin пишет Еще д..


alkresin пишет
 цитата:
Еще добавил переменную HBrowse :lBuffering


Проверил оба режима на bc, все оч. хорошо . Msvc и сервер сейчас проверить не могу, не дома (где то через нельку только)


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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
как то лучше запоминается


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1212
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.09.16 07:28. Заголовок: Понял, что меня все ..


Понял, что меня все время смущало в работе с цветом HEdit, переменные ::tColor и ::bColor все время меняют свои значения, т.е. ведут себя как рабочие переменные (::aColorOld), т.е. в классе нет переменных источников для цвета.
Предложение:Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1213
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.09.16 07:41. Заголовок: PS в Refresh() ::Set..


PS
в Refresh() ::SetColorReal() конечно надо вместо строк с //

Спасибо: 0 
ПрофильЦитата Ответить
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, смена порядка при щелчке по заголовку - и отображение его в заголовке, нарисованная ячейка.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 (примеры) Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1216
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.16 12:19. Заголовок: SergKis пишет 4. Кли..


SergKis пишет
 цитата:
4. Клик по "Salary" работает как клик по "Age"


надо так
4. Клик по "Some data" работает как клик по "Age"


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 добавить было бы не плохо (в помощь ленивому ).


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1006
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 05.09.16 14:46. Заголовок: Петр пишет: SET HB_..


Петр пишет:

 цитата:
SET HB_PATH=c:\harbour


Точно. И в русской тоже.

 цитата:
вот в стандартные батники setlocal / endlocal добавить было бы не плохо


А что это ?

Спасибо: 0 
ПрофильЦитата Ответить
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().

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1286
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.09.16 15:42. Заголовок: alkresin пишет: А ч..


alkresin пишет:

 цитата:
А что это ?



описание команды SETLOCAL


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1008
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 05.09.16 16:44. Заголовок: Петр пишет: описан..


Петр пишет:

 цитата:

описание команды SETLOCAL


Спасибо. Не знал.
Но пока не очень представляю, как это можно использовать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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'


Спасибо: 0 
ПрофильЦитата Ответить
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 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1218
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.16 20:25. Заголовок: alkresin пишет: Стра..


alkresin пишет:
 цитата:
Странно. Вы этот компилятор не использовали с minigui ?


Минигуи как раз им и пользую (примеры только). Там все хорошо.

 цитата:
c:\borland\bcc55\bin\bcc32.cfg


Его совсем нет. Обычно направление на include, lib, obj в bat задаются, но я по шагам инструкции шел.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1219
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.16 20:45. Заголовок: alkresin пишет: Т.е...


alkresin пишет:
 цитата:
Т.е., Харборовские *.h он находит, а *.h от Borland C не может найти


Это все понятно, понятно, что надо добавлять в bat set bc_path=..., но там и vc, mingw. Может отказаться уже от bat и перейти на hbmk2 ? Вроде работает.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1288
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.09.16 20:56. Заголовок: SergKis пишет: но я..


SergKis пишет:

 цитата:
но я по шагам инструкции шел.


Но ведь это не инструкция по установке борландовского компилятора, да?
Предполагается, что компилятор уже установлен.

А вот другая инструкция How-To: Install and Configure Borland® Free Command Line Tools

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1220
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.16 00:50. Заголовок: Петр пишет А вот дру..


Петр пишет
 цитата:
А вот другая инструкция


Совершенно верно, но устанавливать, пытаться что то сделать, могут люди разной квалификации. Многим она не нужна, сразу в тексты лезут и быстро врубаются, а кто то пробует, споткнулся, вроде мелочь, а в результате - грустно и время потеряно.
Ясно же, надо или batы доводить (надеюсь посылать на инструкцию по написанию их тут не будем) или перходить на hbmk2, т.е. ткнули - получили положительный результат и полжительные эмоции.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5085
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.09.16 03:03. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. ткнули - получили положительный результат и положительные эмоции.


Люблю очень положительные эмоции !!!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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" смотреть

Спасибо: 0 
ПрофильЦитата Ответить
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, потому что с ним вижу все, что делаю: что запускается, какие библиотеки используются, какие опции компилятора/линкера, ...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 237
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 06.09.16 10:44. Заголовок: alkresin пишет: Пр..



alkresin пишет:

 цитата:
Просто bcc32.cfg и TLink32.cfg действительно должны



или iLink32.cfg :)

Спасибо: 0 
ПрофильЦитата Ответить
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'ы, так что эта функция здесь для совместимости. Что насчет добавления нового метода или переменной в класс, я делаю это с большой осторожностью и неохотой, только когда это действительно очень полезно - иначе через какое-то время класс превратится в монстра.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1012
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.09.16 11:17. Заголовок: SergKis пишет: Поня..


SergKis пишет:

 цитата:
Понял, что меня все время смущало в работе с цветом HEdit, переменные ::tColor и ::bColor все время меняют свои значения, т.е. ведут себя как рабочие переменные (::aColorOld), т.е. в классе нет переменных источников для цвета.


:tColor и :bColor определяют актуальные значения цвета виджета, точно так же, как, например, :nWidth и :nHeight - актуальные значения его размера, и :SetColor() меняет эти актуальные значения, так же, как и :Move() меняет актуальные значения размера. Если просто принять эту логику, то ничего не должно смущать.
Реализовать все это можно множеством разных способов, но нужны действительно серьезные основания, чтобы менять существующую реализацию.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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, ..., ...) }


Спасибо: 0 
ПрофильЦитата Ответить
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() и добавить туда нужный вам метод, ООП для того и существует. И, конечно, насчет всей проги вы загнули )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1223
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.16 15:33. Заголовок: alkresin пишет: надо..


alkresin пишет:
 цитата:
надо, можно ведь сделать субкласс от Hedit() и добавить туда нужный вам метод, ООП для того и существует.


Этим всю весну и часть лета мы с товарищем и занимались, при этом сыпятся все ch команды (получается своя версия, с которой трудно слезть при изм. версий hwg). В основном мой товарищ, двигал (MDI, HBrowseEx свой, а до HEdit даже не дошли)
по семейным обстоятельствам, меня хватило в основном на примеры. Сечас нас съела, текучка и срочные изменения законодательсва.
В итоге решили, что переводим на 3.2 свою старую (уникодную версию Минигуи) и остаемся на ней, а hwg второй раз (при всех плюсах) откладывается в ящик. К нашему сожалению

Спасибо: 0 
ПрофильЦитата Ответить
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" - тогда даже переименовывать команду не надо, возьмется ваша.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 не один, ...
вернулись к "танцу с бубном" по кругу


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1016
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.09.16 16:16. Заголовок: Что-то вы усложняете..


Что-то вы усложняете. Про WHEN вообще речи нет, а в VALID - да, надо вставить в кодоблок ваш алгоритм изменения цвета текста в зависимости от введенного значения. Куда-то же его все-равно придется вставить...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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




Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1017
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 07.09.16 10:59. Заголовок: В русскую документац..


В русскую документацию добавлен раздел про классы HwGUI: http://www.kresin.ru/hwgdoc_classes.html.
Пока почти без пояснений и комментариев - будут добавляться по мере возможности, зато список классов, их переменных и методов полный и актуальный.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1020
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.09.16 17:21. Заголовок: Добавлен раздел про ..


Добавлен раздел про функции HwGUI: http://www.kresin.ru/hwgdoc_functions.html.
Комментариев на русском пока нет, зато список - полный.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 94 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 229
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет