![]() |
Eigene Kompo von TButton ableiten? Wie OnClick realisieren?
Hallo,
wenn ich mir selbst ne Komponente schreibe und diese von TButton ableiten möchte, klappt bisher fast alles. Nun möchte ich jedoch, bei einem Klick auf den Button meine abgeleitet Kompo aufrufen. Wie muß ich dazu das OnClick Ereignis des Buttons ableiten?
Delphi-Quellcode:
Danke,
//...
type TMyButton = class(TButton) private fActionGroup : TActionGroup; protected public property Actiongroup: TActionGroup read factiongroup write fActionGroup; procedure Click();override; //Geht Nicht published { Published declarations } end; procedure Register; //... implementation winx |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
OnClick ableiten? OnClick ist doch nur eine Property für ein closure... - hä?
Und was heisst "geht nicht?"? |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
nein, was ich möchte ist, dass ich, wenn ich auf den Button klicke, in meine eigene Funktion springe, die ich in der MyButton Klasse deklariert habe.
|
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Verstanden, aber...
Zitat:
|
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Hi
sollte es nich so heißen?
Delphi-Quellcode:
TButton stammt von TButtonControl ab und das wiederum von TWinControl und damit ist Click -> protected.
//...
type TMyButton = class(TButton) private fActionGroup : TActionGroup; protected procedure Click();override; public property Actiongroup: TActionGroup read factiongroup write fActionGroup; published { Published declarations } end; ... Gruß |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Ausserdem macht die Methode etwas anderes, nämlich den Klick auslösen
|
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Zitat:
Grundlegend ist an dem Code nichts falsch, von daher möchste ich endlich mal geklärt wissen, was "geht nicht" heisst! /EDIT: richtig, und wenn wir endlich mal die schon vermutete Fehlerbeschreibung haben, dann können wir auf ![]() ![]() ![]() |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
du musst dem Button.onclick ne methode zuweisen wenn du den button creates, geht aber später glaub ich auch noch....
Delphi-Quellcode:
//edit: wenn du kleinlich mit hobbyprogrammierern sein willst muetze...bitte
...
Button.OnClick:=deine_procedure; ... end; procedure deine_procedure(Sender: TObject); begin // Das hier wird ausgeführt... end; |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Zitat:
|
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Zitat:
2. Schön wenn im Objektinspektor das OnClick Ereignis nicht mehr nutzbar ist, da die Komponente sich selbst belegt. Die ist doch dann recht schlecht nutzbar, oder? |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
danke!!!
ich habs jetzt mal beides und zwar so:
Delphi-Quellcode:
Wenn ich nun jedoch einen MyButton erzeuge und auf diese klicke, passiert nix!public property Actiongroup: TActionGroup read factiongroup write fActionGroup; constructor Create(); procedure Clicked(Sender:TObject); procedure Click();override; published ... procedure TAdvActionGlowButton.Click; begin inherited; showmessage('CLICKED'); end; constructor TAdvActionGlowButton.Create; begin self.onClick := Clicked; end; Muß ich noch irgendwas verknüpfen??? |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Hi winx,
Du solltest es am besten so machen, wie Muetze es vorgeschlagen hat. Fange die WM_COMMAND (CN_COMMAND ?) und überprüfe auf BN_CLICKED und führe dann eine Methode aus. Dann bleibt das OnClick Ereignis unangetastet, was mit Sicherheit im Sinne des Benutzers und auch in deinem Sinne sein dürfte. Gruß Neutral General |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Hi,
das Problem mit dem Objektinspektor wäre mir erstmals egal, da ich die Buttons dynamisch erzeuge. Was mich wundert, ist, dass es nicht funktioniert, wenn ich im Konstruktor das onClick Ereigniss neu zuweise: constructor TAdvActionGlowButton.Create; begin self.onClick := Clicked; end; will das jetzt irgendwie verstehen :-) |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Hi,
also, ich bin etwas verwirrt. Eigentlich so verwirrt, dass ich es schnell mal ausprobiert habe. Wo ist das Problem? Procedure Click vererben und alles ist gut. Klicke ich im folgenden Bsp. auf den Button, dann kommt mein Hallo. Das OnClick muss dabei nicht vergewaltigt werden.
Delphi-Quellcode:
Gruß oki
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyButton = class(TButton) public procedure Click; override; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private public Button2 : TMyButton; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Button2 := TMyButton.Create(self); Button2.parent := self; Button2.top := 50; Button2.Left := 50; end; { TMyButton } procedure TmyButton.Click; begin inherited; MessageDlg('Hallo', mtInformation, [mbOK], 0); end; end. |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Also ich hab bei einem Panel (das macht aber keinen unterschied) die proceduren DoMouseDown und DoMouseUp überschrieben.
Hab als erstes inherited gemacht und dan meine eigenen Funktionen eingebaut. Es funkt super :mrgreen: :zwinker: |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
Viele Wege führen nach Rom.
Man sollte nur nich Published-Events auf eigene Proceduren der Klasse umleiten. Die sind eben mal dafür gedacht, dass der Benutzer der Klasse auf Ereignisse reagieren kann. Die Klasse selbst arbeitet ja mit ihren Methoden. Dafür gibt es ja nun mal die Vererbung. Gruß oki |
Re: Eigene Kompo von TButton ableiten? Wie OnClick realisier
bei mir jetzt auch, hab nur das inherited im Konstruktor vergessen ich volldepp
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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