Вопрос о совместимости Delphi и Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение debi12345 » 11.05.2006 13:52:44

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" для той-же кнопки, если не поможет - тогда уже пишите "обвязку".
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение STAKANOV » 11.05.2006 15:31:34

У визуальных компонентов НЕТУ это свойства в паблике! Я не могу придать приличный вид не кнопке на форме не чекбоксу не комбобоксу не гриду! Вот в чем проблема!


Помучем Мартина в конференции. Может что и выйдет ;)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV » 11.05.2006 18:37:37

Для своего рисования Мартин предлагает применить классический объектно-ориентированный подход:
<!--QuoteBegin-Martin Schreiber+--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (Martin Schreiber)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Aleksey Y. Ulasevich (STAKANOV) wrote:

> It's question about how to change standard drawning for visual components,
> I think.
>

type
tmy<visual component> = class(t<visual component>)
  protected
   procedure dopaint(const canvas: tcanvas); override;
end;

implementation

procedure tmy<visual component>.dopaint(const canvas: tcanvas);
begin
//draw the visual component
end;

end.
[/quote]
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение debi12345 » 11.05.2006 18:51:37

STAKANOV писал(а):Для своего рисования Мартин предлагает применить классический объектно-ориентированный подход:
<!--QuoteBegin-Martin Schreiber+--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (Martin Schreiber)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Aleksey Y. Ulasevich (STAKANOV) wrote:

> It's question about how to change standard drawning for visual components,
> I think.
>

type
tmy<visual component> = class(t<visual component>)
  protected
   procedure dopaint(const canvas: tcanvas); override;
end;

implementation

procedure tmy<visual component>.dopaint(const canvas: tcanvas);
begin
//draw the visual component
end;

end.
[/quote]
Кстати, чем не вариант для желающих переписать под Win32-look ?

Новая закладка - "Win32", в названиях классов - вместо "my" -> "win32", и ушел рисовать через comctrl/comdlg/...


Кстати, нежелание Мартина выносить прорисовку MSEGUI в published - более чем обоснованное. Это его библиотека - и он хочет, чтобы она выглядела так, как он задумал. И зачем рядовому програмисту лезть в низкоуровневое рисование, елси за него это сделано другими ( тем же Мартином ) - разве что от из праздного любопытства.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение STAKANOV » 11.05.2006 19:00:24

Кстати, чем не вариант для желающих переписать под Win32-look ?

Новая закладка - "Win32", в названиях классов - вместо "my" -> "win32", и ушел рисовать через comctrl/comdlg/...

Так не получиться. Точнее родителем будет компонент MSEgui, но думаю какойнибудь один и простейший. Тот же, что и родительский для компонентов MSEgui. Пока еще сильно в подробностях по иерархии не копался и название не скажу.
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение debi12345 » 11.05.2006 22:05:52

STAKANOV писал(а):
Кстати, чем не вариант для желающих переписать под Win32-look ?

Новая закладка - "Win32", в названиях классов - вместо "my" -> "win32", и ушел рисовать через comctrl/comdlg/...

Так не получиться. Точнее родителем будет компонент MSEgui, но думаю какойнибудь один и простейший. Тот же, что и родительский для компонентов MSEgui. Пока еще сильно в подробностях по иерархии не копался и название не скажу.

Ну это Мартин решил страху нагнать ;) Помнится, ваш покорный слуга поддержку PostGres прикрутил за 5 минут - прописал в компонентах прямо из FPC/fcl/db/sqldb/*.
Из чего сделал вывод, что главное - быть наследником TComponent(->TPersistent), то бишь уметь сохранять и восстанавливать свои настройки в форм-файлах.

Раскажете потом, ладно ? Просто интересно...
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение STAKANOV » 11.05.2006 23:35:51

Раскажете потом, ладно ? Просто интересно...

Идея у меня уже пару месцев, руки не доходят. Может кто еще попробует. Судя по вопросу с манифестом - смысл есть.
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru