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

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