Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnChange bei programmierten Komponenten? (https://www.delphipraxis.net/6619-onchange-bei-programmierten-komponenten.html)

hobbyloser 16. Jul 2003 23:29


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:
procedure TEdit(Findcomponent('txtIrgendwas')).OnChange(Sender);
begin
//Code...
end;
und dann noch viel in der Art, doch irgendwie war das alles falsch ;) wer kann mir helfen??

(...und lacht mich nicht aus.. *g*)

jbg 16. Jul 2003 23:38

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;

jbg 16. Jul 2003 23:38

Re: OnChange bei programmierten Komponenten?
 
Ups. Da hab ich wohl doppelt geklickt. :cry:

hobbyloser 17. Jul 2003 00:27

Re: OnChange bei programmierten Komponenten?
 
dankeschööööön :lol:

hobbyloser 19. Sep 2003 23:38

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:
...
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;
Hab schon viel versucht, doch immer Fehlermeldungen in diesem Stil erhalten:
[Fehler] Unit2.pas(266): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

kann mir jemand helfen? was mache ich falsch? thx!!
Greetz

Christian Seehase 19. Sep 2003 23:46

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.

hobbyloser 20. Sep 2003 00:00

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

Christian Seehase 20. Sep 2003 00:06

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:
type TNotifyEvent = procedure (Sender: TObject) of object;
Ergo: Die Methode muss eine Prozedur sein, und genau einen Parameter vom Typ TObject haben.

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;

hobbyloser 20. Sep 2003 00:29

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

Christian Seehase 20. Sep 2003 00:35

Re: OnChange bei programmierten Komponenten?
 
Moin Hobbyloser,

Zitat:

Zitat von Hobbyloser
Man kann ja nicht sender.caption anstatt 'Hallo' oder ähnlich verwenden, um den Wert zu bekommen.

Im Prinzip schon, Du musst den Sender nur richtig auswerten:

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:15 Uhr.
Seite 1 von 2  1 2      

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