Zitat von
Danyel:
Ich erhalte folgende Fehlermeldung und finde keine Lösung:
[Fehler] Unit2.pas(244): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Vielleicht wird das elles verständlicher, wenn du dir mal die Deklaration von OnMouseDown anschaust:
Delphi-Quellcode:
type
TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer) of object;
TControl = class(TComponent)
private
// ...
FOnMouseDown: TMouseEvent;
// ...
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
// ...
end;
Sodale, was sehen wir hier?
1) Deine Procedure braucht folgende Parameter: Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer
2) Das ist eine Procedure
of Object, das heißt, diese Procedure muss ein Teil eines Objektes sein, in deinem Fall deiner Form.
Ein paar erklärende Worte: FOnMouseDown ist eine Variable, die einen Zeiger auf deine selbst erstellte Procedure enthält. Dies geht aber nur bei Objekten (warum wüsste ich auch gerne -.-). Mit
MyButton.OnMouseOver := MeineMouseOverProcedure;
setzt du diesen Zeiger auf deine Procedure. Später, wenn die Maus über den Button gefahren wird, bekommt der Button dies mit und muss nur noch folgendes aufrufen:
Delphi-Quellcode:
if Assigned(fOnMouseOver) then // Wenn der Zeiger keinen Mist erzählt
fOnMouseOver(Self, mbLeft, BlaBliBlub); // Deine Procedure aufrufen
Das ist das ganze Geheimnis der Events