![]() |
OnChange bei programmierten Komponenten?
Hi @all!
Bin nicht gerade der Delphiheld, deshalb hätte ich mal eine kleine Frage. Wenn ich auf einem Formular einige Textfelder während der Laufzeit erstelle, wie kann ich dann eine Prozedur schreiben, die ausgelöst wird, wenn man etwas in diese Textfelder reinschreibt? (also onChange Ereignis...) Hab das mal irgendwie so versucht..
Code:
und dann noch viel in der Art, doch irgendwie war das alles falsch ;) wer kann mir helfen??
procedure TEdit(Findcomponent('txtIrgendwas')).OnChange(Sender);
begin //Code... end; (...und lacht mich nicht aus.. *g*) |
Re: OnChange bei programmierten Komponenten?
Du darfst dazu einen eigenen Namen für die Prozedur erfinden wie z.B. "MeineEditsWurdenVeraendert" aber besser ist dann doch "EditChanged".
Delphi-Quellcode:
TForm1 = class(TForm)
... private procedure EditChanged(Sender: TObject); end; procedure TForm1.EditChanged(Sender: TObject); begin MachWas; end; procedure TForm1.FormCreate(Sender: TObject); var Edit: TEdit; begin // Edits werden hier erzeugt. Edit := TEdit.Create(Self); Edit.Parent := Self; // Eventhandler zuweisen: Edit.OnChange := EditChanged; end; |
Re: OnChange bei programmierten Komponenten?
Ups. Da hab ich wohl doppelt geklickt. :cry:
|
Re: OnChange bei programmierten Komponenten?
dankeschööööön :lol:
|
Re: OnChange bei programmierten Komponenten?
ich möchte nochmals was ähnliches machen, auch mit programmierten Komponenten, nur sollte die prozedur noch parameter enthalten, also etwas in der Art:
Delphi-Quellcode:
Hab schon viel versucht, doch immer Fehlermeldungen in diesem Stil erhalten:
...
private procedure Anzeigen(x: integer); end; procedure TForm2.Anzeigen(x: integer); begin showmessage(inttostr(x)); end; procedure TForm2.Button1Click(Sender: TObject); var Edit: TEdit; begin Edit := TEdit.Create(Self); Edit.Parent := Self; Edit.OnChange := Anzeigen(12); end; [Fehler] Unit2.pas(266): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' kann mir jemand helfen? was mache ich falsch? thx!! Greetz |
Re: OnChange bei programmierten Komponenten?
Moin Hobbyloser,
OnChange ist von Typ TNotifyEvent. Wenn Du nun also eine Prozdure (besser Methode) zuweisen willst muss sie den gleichen Aufbau haben, also in diesem Falle einen Parameter vom Typ TObject. Da Deine Methode Anzeigen, aber einen Integer als Parameter hat kannst Du die nicht als OnChange benutzen. Würde auch keinen Sinn machen, da ja der Sender automatisch gefüllt wird, nämlich mit der Kompo, die das Ereignis auslöst, wenn Du die Routine nicht "von Hand" aufrufst. |
Re: OnChange bei programmierten Komponenten?
ööööööhm...
kapiere ich jetzt nicht ganz! d.h. ich kann nicht eine Methode aufrufen, die zum Beispiel (ein besseres Beispiel als oben..) beim Klick auf einen programmierten Button dessen Caption ausgibt? (MyButton.OnClick -> showmessage(TButton(Findcomponent('Button1')).capt ion) oder nach diesem Prinzip? oder könntest du mir mal ein Beispiel posten.. danke! grüsse |
Re: OnChange bei programmierten Komponenten?
Moin Hobbyloser,
der Aufbau, also die Parameter müssen übereinstimmen. Was Du dann in der Prozedur machst spielt keine Rolle. TNotifyEvent ist ja so deklariert:
Delphi-Quellcode:
Ergo: Die Methode muss eine Prozedur sein, und genau einen Parameter vom Typ TObject haben.
type TNotifyEvent = procedure (Sender: TObject) of object;
Du könntest also schreiben:
Delphi-Quellcode:
TForm1 = class(TForm)
//... procedure MeineClickRoutine(MeinParameter : TObject); //... end; var Form1: TForm1; MeinButton : TButton; implementation procedure TForm1.MeineClickRoutine(MeinParameter : TObject); begin ShowMessage('Hallo'); end; procedure TForm1.FormCreate(Sender: TObject); begin MeinButton := TButton.Create(self); MeinButton.OnClick := MeineClickRoutine; end; |
Re: OnChange bei programmierten Komponenten?
hallo,
das ist ok. Aber ich brauche ja zum Beispiel die Caption das Buttons, der gedrückt wurde, und nicht Hallo. Man kann ja nicht sender.caption anstatt 'Hallo' oder ähnlich verwenden, um den Wert zu bekommen. Sonst ists egal, ich versuche es irgendwie anders :) danke für die Umstände. grüsse |
Re: OnChange bei programmierten Komponenten?
Moin Hobbyloser,
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin if (Sender is TButton) then begin ShowMessage((Sender as TButton).Caption); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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