haword писал(а):STAKANOV писал(а):Иван Шихалев писал(а):и MSEGUI делался 9 лет
Серьезно??? Тогда ж еще FPC 1.0 даже не было…
Так он и не с fpc начинал. Да и наверно всетаки 6-7, а не 9.
Народ! Я что-то не понял про OnPaint. Может моя статья поможет - <a href='http://freepascal.ru/article//mse/20060205191314/' target='_blank'>http://freepascal.ru/article//mse/20060205191314/</a> ?
У визуальных компонентов НЕТУ это свойства в паблике! Я не могу придать приличный вид не кнопке на форме не чекбоксу не комбобоксу не гриду! Вот в чем проблема!
Опять мы, братья-славяне-и-азиаты, своей леностью позоримся - перед тем же автором MSEGUI... В исходники глянуть влом ?
Схема вызова обработчиков событий примерно такая:
=================
interface
type
// forward declaration
tsuperclass = class;
// for autgeneration of the event skeleton
<dosmth>eventty: procedure(who: tsuperclass);
tsuperclass = class (...)
private:
fon<dosmth> : <dosmth>eventty;
...
protected:
procedure doon<dosmth>;
...
published:
property on<dosmth>: <dosmth>eventty read fon<dosmth> write fon<dosmth>;
...end;
implementation
...
procedure tsuperclass.doon<dosmth>;
begin
// вызов пользовательского кода, если он прописан
if canevent(tmethod(fon<dosmth>)) then begin
fon<dosmth>(self);
end;
// и затем - авторского кода
inherited;
end;
...
=================
И еще - этот DoOnPaint должен вызываться в нужных по сценарию местах, иначе надобность в нем (да и в OnPaint-обработчике ) отпадает.
То есть, OnPaint есть у тех компонентов, у которых прописан DoOnPaint, и таковые - TPaintBox, и что-то еще не помню. По аналогии - для всех остальных обработчиков.
Поэтому, если нужен доступ к OnPaint других компонентов (кнопок и т.п. ) - то нужно у них прописать(или override) DoOnPaint в "protected"( в примерно таком виде, как выше) , а OnPaint - переопубликовать как "published".
Возможен и другой способ, если автор позабыл написать DoOnPaint - не определять DoOnPaint, а просто расширять ее код в местах, где ее вызов подразумевается - в самой процедуре прорисовки нужного компонента.
Для начала, чтобы не закопаться в "потрохах" - пробуйте просто переопубликовать OnPaint как как "published" для той-же кнопки, если не поможет - тогда уже пишите "обвязку".