Автор | Сообщение |
|
| 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: 1189
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 10:34. Заголовок: alkresin пишет: нуж..
alkresin пишет: цитата: | нужна обработка WM_KILLFOCUS. Нужна также и обработка WM_SETFOCUS |
| Я Имел ввиду в том виде, как было. Как сбросил текст метода, увидел, что пропустил добавляем в класс DATA tColorinFocus DATA bColorinFocus DATA lFocused INIT .F. METHOD SetColorReal( lFocus ) CLASS HEdit LOCAL tC := ::tColor LOCAL bC := ::bColor LOCAL xC ::lFocused := ! empty(lFocus) If ::lFocused If lColorinFocus tC := tColorinFocus bC := bColorinFocus Else If ::tColorinFocus != NIL tC := ::tColorinFocus EndIf If ::bColorinFocus != NIL bC := ::bColorinFocus EndIf EndIf EndIf If hb_IsBlock(tC) xC := Eval(tC, Self) If hb_IsNumeric(xC) tC := xC EndIf EndIf If hb_IsBlock(bC) xC := Eval(bC, Self) If hb_IsNumeric(xC) bC := xC EndIf EndIf ::Setcolor( tC, bC, .T. ) RETURN и IF msg == WM_SETFOCUS ::SetColorReal(.T.) ::Refresh() ELSEIF msg == WM_KILLFOCUS ::SetColorReal(.F.) ::Refresh() тогда все что работало по старой схеме (STATIC переменные), должно работать и без них можно работать со свойствами объекта, согласен, в Refresh() вставлять не надо. alkresin пишет: Возможно. Я только вчера бегло глянул на содержимое HEdit (дома ремонт, к компу набегаю с зачумленной головой)
|
|
|
|
| постоянный участник
|
Пост N: 1190
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 11:01. Заголовок: alkresin пишет: Стра..
alkresin пишет: цитата: | Странно. Всматривался во все глаза несколько раз, но светлозеленых клеточек не увидел. |
| Повторю др. карточку - аналог (в той задаче есть рус. яз., хотел чтоб понятней было). В текстовом файле кусок кода реализации http://my-files.ru/xtcnl1
|
|
|
|
| moderator
|
Пост N: 996
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 13:16. Заголовок: SergKis пишет: тогд..
SergKis пишет: цитата: | тогда все что работало по старой схеме (STATIC переменные), должно работать и без них можно работать со свойствами объекта, согласен, в Refresh() вставлять не надо. |
| Надо еще :aColorOld задействовать - словом, получается примерно то, что я и сделал, только с двумя отдельными кодоблоками для текста и фона вместо одного, на котором я по-прежнему настаиваю. А вот в Refresh(), наверное, надо все-таки вставить что-то вроде: IF !Empty(::bColorBlock) .AND. hwg_isPtrEq(::handle,hwg_getFocus) Eval( ::bColorBlock, Self ) ENDIF Раз есть такой кодоблок для смены цвета по условию, надо его использовать при смене содержимого GET, имеющего фокус.
|
|
|
|
| moderator
|
Пост N: 997
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 13:19. Заголовок: SergKis пишет: Наше..
SergKis пишет: цитата: | Нашел свои опыты с hbrowse, где видно, как мерцает переотображение selected строки при горизонтальном перемещении |
| Убрал мерцание.
|
|
|
|
| постоянный участник
|
Пост N: 1191
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 15:22. Заголовок: alkresin пишет: Надо..
alkresin пишет: цитата: | Надо еще :aColorOld задействовать |
| Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются. Но вам виднее, я что то пропускаю, наверно (башка забита ремонтом). цитата: | на котором я по-прежнему настаиваю |
| это ваше право, я только предложил.
|
|
|
|
| moderator
|
Пост N: 998
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 16:35. Заголовок: SergKis пишет: Не о..
SergKis пишет: цитата: | Не очень понимаю, для чего. В фокусе идет со static переменных, если назначено (или новых свойств), не в фокусе из ::tColor, ::bColor и источники не меняются. |
| В том-то и дело, что меняются. Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.
|
|
|
|
| постоянный участник
|
Пост N: 1192
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 16:49. Заголовок: alkresin пишет: Мето..
alkresin пишет: [quote]Метод :SetColor() устанавливает новые значения ::tColor, ::bColor.[quote] Тогда не надо исп. SetColor(...) из CLASS HCustomWindow, надо SetColorReal, сделать SetColor(...) и произвести все действия от пполученных переменных tC, bC - добавиться несколько строк.
|
|
|
|
| moderator
|
Пост N: 999
Зарегистрирован: 06.07.06
|
|
Отправлено: 31.08.16 20:18. Заголовок: SergKis пишет: Тогд..
SergKis пишет: цитата: | Тогда не надо исп. SetColor(...) из CLASS HCustomWindow, надо SetColorReal, сделать SetColor(...) и произвести все действия от пполученных переменных tC, bC - добавиться несколько строк. |
| Увы, это невозможно. :SetColor() не раскрашивает control самостоятельно, он устанавливает новые значения :tColor, :bColor, которые используются уже в другое время и в другом месте: методом :onCtlColor() при обработке сообщения WM_CTLCOLOREDIT, это особенности WinAPI, уж так он сделан.
|
|
|
|
| постоянный участник
|
Пост N: 1193
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.16 22:24. Заголовок: alkresin пишет: при..
alkresin пишет: цитата: | при обработке сообщения WM_CTLCOLOREDIT |
| Увидел обработчик, да без :aColorOld не обойтись. Немного понятней стала организация, спасибо за разъяснения.
|
|
|
|
| moderator
|
Пост N: 1000
Зарегистрирован: 06.07.06
|
|
Отправлено: 01.09.16 13:57. Заголовок: SergKis пишет: 4. S..
SergKis пишет: цитата: | 4. Super header отсутствует и сделать, что то похожее (на картинке нижнее окно) не получится |
| Посмотрел это дело внимательнее, и выяснилось, что возможность сделать этот Super header все же есть. Еще в 2003 году ( полезная вещь Changelog) ) Павел Царенко прислал код для расчерчивания ячеек заголовка. В принципе, все достаточно просто. Для каждой колонки указывается :cGrid, там информация по каждой строке заголовка отделяется точкой с запятой ( так же делятся строки и в тексте заголовка. Так вот, в этом :cGrid указывается, с какой стороны рисовать разделительную линию с помощью букв N(North), S(South), W(West), E(East). Т.е., если мы хотим в Super header объединить 2 и 3-ью колонки, то можем написать: oBrw:aColumns[2]:cGrid := "W;WN" oBrw:aColumns[2]:heading := "Super header;col1" oBrw:aColumns[3]:cGrid := "E;EN" oBrw:aColumns[3]:heading := ";col2" Единственно, что надо сделать - чтобы в этом случае текст "Super header" автоматически размещался по центру двух колонок.
|
|
|
|
| постоянный участник
|
Пост N: 1194
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 14:57. Заголовок: alkresin пишет: Т.е..
alkresin пишет: цитата: | Т.е., если мы хотим в Super header объединить 2 и 3-ью колонки, то можем написать: |
| Такая штука, вроде, и реализована в HBrowseEx. Точно не скажу, уже отключился от hwg
|
|
|
|
|
| постоянный участник
|
Пост N: 1195
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 15:58. Заголовок: alkresin пишет: Един..
alkresin пишет: цитата: | Единственно, что надо сделать - чтобы в этом случае текст "Super header" автоматически размещался по центру двух колонок |
| Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2 (для индикации уст. ордера, например) ?
|
|
|
|
| moderator
|
Пост N: 1001
Зарегистрирован: 06.07.06
|
|
Отправлено: 01.09.16 17:05. Заголовок: SergKis пишет: Как ..
SergKis пишет: цитата: | Как быть с image в таком Super header (слева\справа от текста) и image в колонке col1 и col2 |
| Думал недавно на эту тему. Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо и будет вызываться при прорисовывании заголовка. При необходимости ( смене ордера, например ) его надо будет просто переставить из одного oColumn в другой. А можно сделать массив таких кодоблоков - как сделал недавно в HPanel - разные фрагменты программы могут добавлять туда свои рисующие кодоблоки.
|
|
|
|
| постоянный участник
|
Пост N: 1196
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.09.16 17:48. Заголовок: alkresin пишет: Хочу..
alkresin пишет: цитата: | Хочу сделать для колонки (oColumn) пользовательский кодоблок, который рисует все, что надо |
| Если на нем, делать строки, header, footer и т.д., то это замечательно, а если заложить в HBrowse двойную буферизацию ("раз пошла такая пъянка") - это вооооооооще SUPER !
|
|
|
|
| moderator
|
Пост N: 1002
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 10:15. Заголовок: По идее, нужны отдел..
По идее, нужны отдельные кодоблоки для строк, header, footer. Кроме того, хорошо бы иметь кодоблок, который рисует весь объект, скажем, header, и кодоблок, который рисует только фон - если вы хотите по-своему нарисовать фон, но не хотите заморачиваться с рисованием всего остального. А еще кодоблоки, которые рисуют отдельные элементы. Скажем, вас устраивает стандартный header, но вы хотите после того как он нарисуется пририсовать какой-либо значок (тот же знак установки сортировки) - причем, теоретически, таких кодоблоков может быть больше одного. Поэтому я думаю сделать массив кодоблоков, куда можно будет добавлять их, например, так: oColumn:SetPaint( PAINT_HEADER_ALL, block1 ) oColumn:SetPaint( PAINT_LINE_BACKGROUND, block2 ) а HwGUI будет находить и запускать их в соответствующие моменты времени вместо каких-то своих стандартных действий. Боюсь только, не слишком ли это будет "накручено" для пользователя. цитата: | а если заложить в HBrowse двойную буферизацию |
| Ну это нетрудно - всего несколько строк добавить, как это сделано в source/common/hcedit.prg, например: hDCReal := hwg_BeginPaint( ::handle, pps ) aCoors := hwg_GetClientRect( ::handle ) hDC := hwg_CreateCompatibleDC( hDCReal ) hBitmap := hwg_CreateCompatibleBitmap( hDCReal, aCoors[3]-aCoors[1], aCoors[3]-aCoors[1] ), aCoors[4]-aCoors[2] ) hwg_Selectobject( hDC, hBitmap ) ... hwg_BitBlt( hDCReal, 0, 0, aCoors[3] - aCoors[1], aCoors[4] - aCoors[2], hDC, ::nShiftL, 0, SRCCOPY ) hwg_DeleteDC( hDC ) hwg_DeleteObject( hBitmap ) hwg_EndPaint( ::handle, pps ) но надо ли ? Я убрал многие моменты, которые могли приводить к перерисовке фрагментов browse и сейчас, вроде, мерцания нет.
|
|
|
|
| постоянный участник
|
Пост N: 1200
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 11:24. Заголовок: alkresin пишет: но н..
alkresin пишет: Работа с сервером напрямую (без skipов, медленное соединение...). В минигуи мы вынуждены были сделать такое (старая версия) в browse (ListView). Мне думается это облегчит жизнь всем, тем более цитата: | Ну это нетрудно - всего несколько строк добавить |
| цитата: | Поэтому я думаю сделать массив кодоблоков |
| Наверно, да. Возможно такой массив (объект) организовать для ячейки и далее распространить его на строку и механизм строки распространить на hedar, super header, footer, тогда и super footer получится автоматом. Заложить средние (это условно) возможности в общее поведение browse, а т.к. это скорее всего будут классы, то наследованием можно усложнить поведение до нужных кондиций по надобности
|
|
|
|
| постоянный участник
|
Пост N: 1201
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 11:38. Заголовок: alkresin пишет: Боюс..
alkresin пишет: цитата: | Боюсь только, не слишком ли это будет "накручено" для пользователя. |
| Думаю, пользователей обрадует, расширение возможностей. "Упрощенный" вариант ляжет в #xcommand ..., а "развитой" в объектах. Это от трудоемкости реализации зависит.
|
|
|
|
| moderator
|
Пост N: 1003
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 15:19. Заголовок: Буферизацию добавил...
Буферизацию добавил.
|
|
|
|
| moderator
|
Пост N: 1004
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.09.16 18:18. Заголовок: Еще добавил переменн..
Еще добавил переменную HBrowse :lBuffering ( .F. по умолчанию ), чтобы включать при необходимости буферизацию.
|
|
|
|
| постоянный участник
|
Пост N: 1203
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 20:40. Заголовок: alkresin пишет Еще д..
alkresin пишет цитата: | Еще добавил переменную HBrowse :lBuffering |
| Проверил оба режима на bc, все оч. хорошо . Msvc и сервер сейчас проверить не могу, не дома (где то через нельку только)
|
|
|
Ответов - 94
, стр:
1
2
3
4
5
All
[только новые]
|
|