Hallo,
ich möchte die Prozedur, die einem Event zuegwiesen wurde zwischenspeichern, selbst neu zuweisen und in meiner Eventprozedur die zwischengespeicherte Prozedur aufrufen.
Ich habe also folgendes gemacht(Szenario TPaintBox und OnMouseDown Event):
Beim zuweisen der PaintBox in einer eigenen Klasse wird überprüft, ob der PaintBox bereits eine Prozedur zugewisen wurde.
Delphi-Quellcode:
TOnMouseDown = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: integer);
...
private
FInitialOnMouseDown: TOnMouseDown;
...
if Assigned(FPaintBox.OnMouseDown) then
FInitialOnMouseDown := @FPaintBox.OnMouseDown;
FPaintBox.OnMouseDown := OnPaintBoxMouseDown;
...
procedure TOwnClass.OnPaintBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X,Y: integer);
begin
if Assigned(FInitialOnMouseDown) then
FInitialOnMouseDown(Sender, Button, Shift, X,Y);
end;
Dies scheint auch gut zu klappen, bis auf das teilweise die Parameter die übergeben werden beim Aufruf nicht mehr übereinstimmen.
Setzte ich also nen Breakpoint in der Zeile in der die alte Event Prozedur aufgerufen wird, werden die richtigen Werte angezeigt. Springt man dann jedoch in diese Prozedur rein, so sind andere Werte für Button und Shift vorhanden! Sender,X und Y stimmen überein.
in Button wird mbLeft(0) übergeben und es kommt eine 8 an.
Wieso ist es so?
Gruß
pustekuchen