Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
2-1145793355
inri13666
2006-04-23 15:55
2006.05.14
System menu


15-1145367537
worldmen
2006-04-18 17:38
2006.05.14
Где скорость больше?


1-1144177982
Yozch1
2006-04-04 23:13
2006.05.14
Динамическая загрузка DLL при работе с CD


15-1144404805
MBo
2006-04-07 14:13
2006.05.14
Пятничные задачки


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский