Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наследник KOLEditBox и метод OnPaint [Delphi, Windows]


Андрей ©   (2004-07-06 20:29:00) 

Доброго времени суток!

Пытаюсь написать свой первый KOL-компонент - EditBox со своеобразным поведением.

Создается он вот так

function NewEditInteger(AParent: PControl): PEditInteger;
begin
//  Result := PEditInteger(NewEditBox( AParent, [] ));
{**}
 Result := PEditInteger(_NewControl( AParent, 'EDIT', WS_VISIBLE or WS_CHILD or WS_TABSTOP
                        or WS_BORDER, True, nil ));
 Result.fCursor := LoadCursor( 0, IDC_IBEAM );
 with Result.fBoundsRect do
 begin
   Right := Left + 100;
   Bottom := Top + 22;
 end;
{**}
 Result.OnPaint := Result.MyPaint;
 Result.OnChar := Result.MyChar;
 Result.OnDestroy := Result.MyDestroy;

end;

Закоментирован первый вариант, а второй - кусок из KOL.pas

Если накрыть форму другой или переключить задачи, выполняется
MyPaint, если ткнуть мышкой прямо в контрол, выполняется стандартная отрисовка EditBox.
Если в MyChar поставить Invalidate, при редактировании отрисовывает MyPaint, если не поставить - стандартная отрисовка.

1. Где грабли?

2. Кое-что выполняется в MyChar. Стоит написать свой WndProc?


Gandalf   (2004-07-12 19:04:00) [1]

Да незачто. Эти не самые удачные. А принцип верный - там была задача набацать темы для ОС которые их не держат - вообще зря я повелся на это...


Андрей   (2004-07-11 17:39:00) [2]

Спасибо, заценил.

Вообще, я уже списался с Кладовым, и он мне пояснил, точнее, напомнил главный принцип KOL - минимальность кода.

Это также означает, что не надо писать код для отрисовки элементов, если аналоги уже есть в Windows. Пусть их операционка рисует.

В итоге я наколбасил такой OnChar, что самому страшно. Но все работает. И рисуется, как надо, и темы XP учитывает.

Зато по твоим исходникам я изучаю особенности работы с KOL :)).


Gandalf   (2004-07-09 14:12:00) [3]

Зацени как работает MHStyleXP, вариант не лучший правда... но работает.


Андрей   (2004-07-07 10:01:00) [4]

Ну всяко уже перепробовал.

Если в _NewControl класс поменять на 'STATIC' - фокус не ловит и не перерисовывается, если 'EDIT' - рисует свойство Text.

Даже WndProc добавил, с ловушкой на WM_PAINT, WM_NCPAIN, и результат возвращаю, что обработал эти события - не помогает.


Андрей   (2004-07-07 05:59:00) [5]

Рад бы поверить на слово, но проверял неоднократно - не работает.
Выглядит это так:

Свойство Text в обьекте не используется, операции с данными производятся через CustomData. Оттуда и выполняется отрисовка в OnPaint. А в поле Text автоматически попадает имя обьекта. Ну и фиг бы с ним :)).

Если перекрыть форму, например покатав по экрану другое окно, OnPaint отрисовывает корректно. Если контрол поймал фокус (неважно как - табом, мышкой, как контрол по умолчанию), то в контроле выводится его имя (Свойство Text), оно же и редактируется.


SPeller   (2004-07-07 03:16:00) [6]

Вообще если назначен OnPaint, то собственная отрисовка контрола не производится.


Наверх

Титульная страница Поиск, карта сайта Написать письмо