Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigenes OnClick-Event (https://www.delphipraxis.net/96243-eigenes-onclick-event.html)

Andreas L. 20. Jul 2007 15:47


Eigenes OnClick-Event
 
Hi,
bin gerade dabei ein OnClick-Event meiner Komponente zu implementieren. Dummerweise weiß ich nicht, welche Message ich brauche. Hab CM_CLICK probiert, die gibts aber anscheinend nicht. Auch nach einer halben Stunde suchen in Coontrols.pas weiß ich nicht weiter. Hier mal ein paar Zeilen Code:

Delphi-Quellcode:
...
 private
    fOnClick: TNotifyEvent;
    procedure CMClick(var Message: TMessage); message CM_CLICK; //CM_CLICK gibts net
...
...
 published
    property OnClick: TNotifyEvent read fOnClick write fOnClick;
...
...
procedure TCubeNavigationButton.CMClick(var Message: TMessage);
begin

 if not Active then
  begin

   fActive := True;
   Color := fActiveBarColor;
   fButtonShape.Pen.Color := fActiveBorderColor;
   fButtonShape.Brush.Color := fActiveButtonColor;
   fCaptionLabel.Font.Assign(fActiveButtonFont);
   fGlyphImage.Picture.Assign(fGlyphActive);

  end;

 if assigned(fOnClick) then
  begin

   fOnClick(Self);

  end;

end;
Welche Message brauch ich?

EDIT: Wenn ich BN_CLICKED verwende, meldet der Compiler: "[Pascal Fehler] CubeNavigationButton.pas(55): E2139 Ungültiger Botschaftsmethoden-Index"

FAlter 20. Jul 2007 15:53

Re: Eigenes OnClick-Event
 
Hi,

Wovon hast du es denn abgeleitet? Bestimmt reicht es, im published-Abschnitt
Delphi-Quellcode:
property OnClick;
einzufügen (eigentlich schon bei beliebigen TControl-Nachfahren). Und das wären alle visuellen Komponenten. Es ist eben nur protected und muss erst noch published - veröffentlicht - werden.

Mfg
FAlter

Andreas L. 20. Jul 2007 15:54

Re: Eigenes OnClick-Event
 
Zitat:

Zitat von FAlter
Hi,

Wovon hast du es denn abgeleitet? Bestimmt reicht es, im published-Abschnitt
Delphi-Quellcode:
property OnClick;
einzufügen (eigentlich schon bei beliebigen TControl-Nachfahren). Und das wären alle visuellen Komponenten. Es ist eben nur protected und muss erst noch published - veröffentlicht - werden.

Mfg
FAlter

Von TCustomPanel. Aber es geht darum, im OnClick noch etwas auszuführen bevor User's Code ausgeführt wird.

FAlter 20. Jul 2007 15:57

Re: Eigenes OnClick-Event
 
Hi,

dann mach es so:

Delphi-Quellcode:
  ...
  protected
    procedure Click; override; //ist als dynamic gekennzeichnet
  ...

procedure TMyComponent.Click;
begin
  //Hier dein Code - vorher
  inherited;
  //Hier dein Code - nachher
end;
Mfg
FAlter

[edit]Genau diese Empfehlung gibt es in der OH: Delphi-Referenz durchsuchenTControl.Click ;) Überschreiben, wenn mehr gertan werden soll.[/edit]

Andreas L. 20. Jul 2007 16:48

Re: Eigenes OnClick-Event
 
Wenn ich es so mache wird bei einem Klick mein Code nicht ausgeführt und der User hat außerdem im OI kein OnClick-Eregnis...

Muetze1 20. Jul 2007 17:06

Re: Eigenes OnClick-Event
 
1. hast du denn nun im published Abschnitt
Delphi-Quellcode:
property OnClick;
hinzugefügt?
2. Wo steht denn nun dein Code (der nun nicht mehr ausgeführt wird)? vor dem Inherited in der oben genannten Click Methode?

Andreas L. 20. Jul 2007 17:37

Re: Eigenes OnClick-Event
 
Zitat:

Zitat von Muetze1
1. hast du denn nun im published Abschnitt
Delphi-Quellcode:
property OnClick;
hinzugefügt?
2. Wo steht denn nun dein Code (der nun nicht mehr ausgeführt wird)? vor dem Inherited in der oben genannten Click Methode?

1. Wenn ich die property deklariere meldet der Compiler: "[Pascal Fehler] CubeNavigationButton.pas(69): E2174 'Click' wurde vorher nicht als PROPERTY deklariert"

2. Vor dem inherited

FAlter 20. Jul 2007 17:57

Re: Eigenes OnClick-Event
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

1. es heißt nicht property Click sondern property OnClick, aber procedure Click [edit] und override nicht vergessen [/edit]
2. Das funktioniert (siehe Anhang), getestet mit D7Pers, also hast du meine Anweisungen nicht richtig gelesen.

Mfg
FAlter


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.

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