Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnMouseDown Methode hinzufügen->Label wird per Code erstellt (https://www.delphipraxis.net/149684-onmousedown-methode-hinzufuegen-label-wird-per-code-erstellt.html)

Danyel 9. Apr 2010 14:30

Re: OnMouseDown Methode hinzufügen->Label wird per Code e
 
Ich stehe gerade echt auf dem Schlauch.
Beim Erstellen der Lables habe ich angegeben:
Delphi-Quellcode:
mylabel.onmousedown:=aktivieren;

Über der Procedure welche die Labels erstellt habe ich folgende Procedure:

Delphi-Quellcode:
procedure aktivieren(Sender:TObject);
begin
      move:=true;
end;
Ich erhalte folgende Fehlermeldung und finde keine Lösung:

[Fehler] Unit2.pas(244): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'


:wall: :wiejetzt:

[edit=mkinzler]Delphi-Tags eingefühgt Mfg, mkinzler[/edit]

DeddyH 9. Apr 2010 14:34

Re: OnMouseDown Methode hinzufügen->Label wird per Code e
 
Delphi-Quellcode:
type
  TForm1= class(TForm)
  private
    procedure aktivieren(Sender: TObject);
    ...

implementation

procedure TForm1.aktivieren(Sender: TObject);
begin
  //Code
end;

dominikkv 9. Apr 2010 17:20

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

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
Delphi-Quellcode:
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 :zwinker:

Danyel 11. Apr 2010 14:04

Re: OnMouseDown Methode hinzufügen->Label wird per Code e
 
ahhhhh vielen dank! :wall:
haha ich hatte meine procedure schonmal mit den Variablen erstellt (die Originale kopiert und name geändert) aber
vergessen diese oben über der Implementation einzutragen.
Auf jeden Fall habe ich es nun besser verstanden denn je und werde bald möglichst hoffentlich von
weiteren Erfolgen berichten können.
Bis dahin noch einen schönen Sonntag.

EDIT
DANKE! Nun klappt es, werde heute die Bewegung der Labels in Angriff nehmen, gefolgt von der
Verknüpfung mit dem Starten der gewählten EXE Dateien.
Sollte eigentlich kein Problem mehr darstellen. Ich meld' mich

Danyel 28. Apr 2010 12:40

Re: OnMouseDown Methode hinzufügen->Label wird per Code e
 
Ich mache einen 2ten Doppelpost, damit man erkennt, dass hier was geändert wurde.
Das Thema kann geschlossen werden, alles hat geklappt.
Ist der funktioniernde Code erwünscht? Kann den nachreichen, sobald ich zu Hause bin.
MfG Danyel S.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz