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

Вниз

procedure of object   Найти похожие ветки 

 
webpauk ©   (2008-04-03 15:49) [0]

Есть несколько ComboBox на нескольких формах. У всех одинаково определено событие OnDrawItem.
Подскажите как правильно 1 раз определить процедуру, чтобы у всех ComboBox при создании формы записать: Combo.OnDrawItem:=MyDrawItem


 
Ega23 ©   (2008-04-03 16:00) [1]

type TDrawItemEvent = procedure(Control: TWinControl; Index: Integer Rect: TRect; State: TOwnerDrawState) of object;


 
webpauk ©   (2008-04-03 16:10) [2]


> Ega23 ©   (03.04.08 16:00) [1]

это и козе понятно.
а вот как описать процедуру?


 
clickmaker ©   (2008-04-03 16:16) [3]


> а вот как описать процедуру?

а в [1] что?
я уж не говорю о том, что можно даблкликом шаблон сгенерить


 
webpauk ©   (2008-04-03 16:18) [4]

вот код, который мне нужен.
как его запихнуть в:
type TDrawItemEvent = procedure(Control: TWinControl; Index: Integer Rect: TRect; State: TOwnerDrawState) of object;

 with TComboBox(Control).Canvas do
 begin
   Font.Color:=clBlack;

   Brush.Color:=cColors[Index mod 2 = 1];

   if odSelected in state then
   begin
     Font.Color:=clHighlightText;
     Brush.Color:=clHighlight;
   end;

   FillRect(Rect);

   TextOut(Rect.Left+5, Rect.Top, TComboBox(Control).Items[Index]);
 end;


 
Ega23 ©   (2008-04-03 16:18) [5]


> а вот как описать процедуру?


А чего непонятно-то? Как процедуру вместо метода использовать?


 
Reindeer Moss Eater ©   (2008-04-03 17:42) [6]

Встаем на поле OnDrawIntem любого из комбо.
Рисуем в нем имя OnAnyComboDrawItem и жмем enter
(Либо вообще без ввода имени даблкликом.)
Для остальных комбо просто выбираем созданный обработчик из списка.


 
Apollon ©   (2008-04-03 17:45) [7]


procedure MyDrawItem(Control: TWinControl; Index: Integer Rect: TRect; State: TOwnerDrawState);
begin
 <код отрисовки>
end;

в каждой форме при создании
 Combo.OnDrawItem := MyDrawItem;


 
{RASkov} ©   (2008-04-03 17:47) [8]

> [7] Apollon ©   (03.04.08 17:45)

Не верно. Не откомпилится....) метод класса нужен, а не просто процедура...


 
MBo ©   (2008-04-03 17:47) [9]

>Apollon
А где учтено " of object" ?


 
Apollon ©   (2008-04-03 17:50) [10]


> {RASkov} ©   (03.04.08 17:47) [8]


ну значит сделать ее методом класса... долго ли :)


 
Сергей М. ©   (2008-04-03 17:56) [11]

Тут, похоже, засада в другом - автор желает, чтобы метод-обработчик был единый, но при этом никак не оговаривает время жизни объекта, чей метод-обработчик должен фигурировать в качестве единого централизованого обработчика для любых комбобоксов.

В этих условиях очевидно простейшее решение - описать/реализовать любой класс с этим обработчиком, создать экз-р этого класса в секции иниц-ции любого юнита и записать ссылку на этот экз-р в глобальную переменную.

Тогда при создании любой формы:

MyCombo.OnDrawItem := MyGlobalObject.MyDrawItem


 
guav ©   (2008-04-03 18:09) [12]

> [11] Сергей М. ©   (03.04.08 17:56)
> В этих условиях очевидно простейшее решение - описать/реализовать
> любой класс с этим обработчиком, создать экз-р этого класса
> в секции иниц-ции любого юнита и записать ссылку на этот
> экз-р в глобальную переменную.

Если так, есть решение ещё проще - class method и не создавать экземпляр класса


 
clickmaker ©   (2008-04-03 18:13) [13]


> class method и не создавать экземпляр класса


?


 
{RASkov} ©   (2008-04-03 18:34) [14]

> [13] clickmaker ©   (03.04.08 18:13)

 TMyClass = class
  class procedure DrawItem(Sender: TObject......);
 end;

ну и:
MyCombo.OnDrawItem := TMyClass.DrawItem;
без создания экземпляра TMyClass


 
clickmaker ©   (2008-04-04 09:34) [15]


>  [14] {RASkov} ©   (03.04.08 18:34)

проверял?


 
clickmaker ©   (2008-04-04 09:46) [16]

а вообще да, там self просто будет типа "класс"


 
webpauk ©   (2008-04-04 11:54) [17]


> {RASkov} ©   (03.04.08 18:34) [14]

спасибо



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

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

Наверх




Память: 0.5 MB
Время: 0.019 c
2-1207311044
TCrash
2008-04-04 16:10
2008.04.27
Размеры меню


2-1207038671
Alex8
2008-04-01 12:31
2008.04.27
ComboBox


3-1196335571
abhtr
2007-11-29 14:26
2008.04.27
Помогите составить запрос


4-1188057354
Cardinal
2007-08-25 19:55
2008.04.27
Определение нового устройства


2-1206789039
alex_kasycky
2008-03-29 14:10
2008.04.27
TRichEdit