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

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