Форум: "Начинающим";
Текущий архив: 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.46 MB
Время: 0.011 c