Форум: "KOL";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизНаследник 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 вся ветка
Форум: "KOL";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c