Einzelnen Beitrag anzeigen

dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#13

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 9. Apr 2010, 17:20
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
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat