Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1106311935
Yr2
2005-01-21 15:52
2005.02.06
Протокол работы PC с мобильным телефоном


6-1100863537
AlekseyUpstar
2004-11-19 14:25
2005.02.06
Удалленное управление компьютером


14-1105405127
Поручик
2005-01-11 03:58
2005.02.06
Как вы думаете


14-1105993542
Некто
2005-01-17 23:25
2005.02.06
Прокси


1-1106668601
CAMCOH
2005-01-25 18:56
2005.02.06
Русские буквы в форме





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский