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

Вниз

События в компоненте   Найти похожие ветки 

 
mfender ©   (2006-04-27 17:12) [0]

Есть компонент:


type
 {TpicOne}
 TpicOne = class(TPanel)
   public
   PicRecord: PPicRecord;
   InternalOID: Integer;
   FImage: TImage;
   constructor Create(AOwner: TComponent); override;
   procedure LoadPicture;
 end;
........

constructor TpicOne.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Parent := TWinControl(AOwner);
 New(PicRecord);
 FImage := TImage.Create(Self);
 FImage.Parent := Self;
..........
end;


В цикле создаю его объекты (вобщем, они потом складываются в TObjectList):

 
for i:=0 to CalculatePicCount(Query.RecordCount, FPicsOnRow)-1 do
 begin
   Pic := TpicOne.Create(GroupPics);
   Pic.InternalOID := i;
   Pic.FImage.OnClick := PicClick;
   Pic.FImage.OnDblClick := DblPicClick;
   Pic.FImage.OnMouseDown := Self.MouseDown;
   Pic.FCloseButton.OnClick := CloseButtonClick;
....
 end;


Так вот, события OnClick и OnDblClick назначил, а вот OnMouseDown - никак не получается... Догадываюсь, что с OnDragOver и OnDragDrop будет такая же беда. Что делать?

И ещё вопрос: как перетащить (DragDrop) файл (точнее, его имя - путь с именем) в свой компонент из "Проводника"?


 
SuperBUG ©   (2006-04-27 17:35) [1]

а что у тебя Self.MouseDown?? вроде у TpicOne = class(TPanel) никаких методов типа MouseDown не описано...???? или я ошибаюсь???


 
mfender ©   (2006-04-27 17:59) [2]


> а что у тебя Self.MouseDown?? вроде у TpicOne = class(TPanel)
> никаких методов типа MouseDown не описано...???? или я ошибаюсь?
> ??

Она в другом компоненте:


 TpicGroup = class(TPanel)
 private
   function GetPicList(Query: TzQuery): TList;
   function CalculatePicCount(RecCount, PicsInRowCount: Integer): Integer;
   procedure PicClick(Sender: TObject);
   procedure DblPicClick(Sender: Tobject);
   procedure SetSelect(var Internal: TpicOne);
 public
   constructor Create(AOwner: TComponent); override;
   procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
                                         X, Y: Integer); override;    
 end;


 
SuperBUG ©   (2006-04-27 18:42) [3]

прости,ты не написал где именно находится этот цикл по созданию,поэтому было не понятно кто такой self который Self.MouseDown,а на вскидку ты похоже перевираешь описание процедуры, вместо
  procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
                                        X, Y: Integer); override; должно быть
  procedure MouseDown(Sender:TObject;Button: TMouseButton; Shift:          TShiftState;X, Y: Integer); override;


 
mfender ©   (2006-04-27 19:04) [4]


> прости,ты не написал где именно находится этот цикл по созданию,
> поэтому было не понятно кто такой self который Self.MouseDown

Прошу прощения, не подумал, что это может понадобиться...
Self в данном случае - TpicGroup. Он тоже создаётся в цикле.

Действительно, как-то странно я написал... без Sender"а...

Но всё-равно:
procedure MouseDown(Sender:TObject; Button: TMouseButton; Shift:          TShiftState;X, Y: Integer); override;

Но компилятор пишет "Declaration of "MouseDown" differs from previous declaration". Отчего-почему - ничего не пойму... :(((


 
Юрий Зотов ©   (2006-04-27 19:18) [5]

А что, справку и исходники уже отменили? Заглянуть не судьба?

Из справки по методам TControl:
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;

Так что никаких Sender"ов там нет и быть не должно. А вот для события OnMouseDown как раз нужен обработчик с Sender"ом:
type
TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;

Так что сначала Вы пытались назначить событию обработчик не того типа, а потом пытались перекрыть метод, изменив его параметры. Переименуйте свой метод MouseDown во что-то другое, уберите у него override и укажите в нем правильный список параметров.

И так - со всеми событиями. И все назначится.


 
mfender ©   (2006-04-27 21:05) [6]


> Юрий Зотов ©   (27.04.06 19:18) [5]

Спасибо большое. Я уже так и сделал. Всё получилось. Спасибо.



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

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

Наверх




Память: 0.48 MB
Время: 0.041 c
8-1134720539
Вечный студент
2005-12-16 11:08
2006.05.14
Вопрос глупый, но доставший...


3-1142418789
Капибара (бр)
2006-03-15 13:33
2006.05.14
FB ругается на поле с именем Value


2-1145784517
Mark86
2006-04-23 13:28
2006.05.14
как забить массив значений в Combobox?


2-1145588748
Tans
2006-04-21 07:05
2006.05.14
Help!


3-1143008249
abhtr
2006-03-22 09:17
2006.05.14
Последующий поиск