AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Event Prozedur zwischenspeichern und aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Event Prozedur zwischenspeichern und aufrufen

Ein Thema von pustekuchen · begonnen am 17. Dez 2012 · letzter Beitrag vom 17. Dez 2012
Antwort Antwort
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#1

Event Prozedur zwischenspeichern und aufrufen

  Alt 17. Dez 2012, 12:02
Delphi-Version: XE2
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
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Event Prozedur zwischenspeichern und aufrufen

  Alt 17. Dez 2012, 12:11
Erstens gibt es schon einen Typ für den Event (man beachte in desse Deklaration das of object) und zweitens lässt du bei der Zuweisung dann besser das @ weg:

Delphi-Quellcode:
private
    FInitialOnMouseDown: TMouseEvent;

...

    if Assigned(FPaintBox.OnMouseDown) then
      FInitialOnMouseDown := FPaintBox.OnMouseDown;
    FPaintBox.OnMouseDown := OnPaintBoxMouseDown;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Event Prozedur zwischenspeichern und aufrufen

  Alt 17. Dez 2012, 13:13
Ah, Vielen Dank so klappt es natürlich.
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz