Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Наследник KOLEditBox и метод OnPaint   Найти похожие ветки 

 
Андрей   (2004-07-06 20:29) [0]

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

Пытаюсь написать свой первый 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?


 
SPeller ©   (2004-07-07 03:16) [1]

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


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

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

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

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


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

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

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

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


 
Gandalf ©   (2004-07-09 14:12) [4]

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


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

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

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

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

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

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


 
Gandalf ©   (2004-07-12 19:04) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-1106289423
NewDelpher
2005-01-21 09:37
2005.02.06
как найти причину AV в vcl50.bpl?


9-1099683392
Xenon
2004-11-05 22:36
2005.02.06
Как организовать перемещение


1-1106643951
ShotGuN
2005-01-25 12:05
2005.02.06
Как делать патчи?


1-1106565979
Mutniy
2005-01-24 14:26
2005.02.06
Почему в компоненте не находит ресурс ?


4-1103105914
-=SS=-
2004-12-15 13:18
2005.02.06
Странное поведение Dll