![]() |
OnChange für OnActivate erstellte Komponenten
Hi,
ich habe in meiner TForm2.OnActivate Prozedur mehrere TEdit Komponenten erstellen lassen und möchte für alle eine OnChange Prozedur erstellen. Wie macht man das?
Delphi-Quellcode:
PS: Meine Edits werden als 9 x 9 Feld erstellt... var Form2: TForm2; Edit: Array[1..9, 1..9] of TEdit; x, y, i: Integer; ... procedure TForm2.FormActivate(Sender: TObject); begin for y := 1 to 9 do for x := 1 to 9 do begin Edit[x, y] := TEdit.Create(Self); Edit[x, y].Parent := Form2; Edit[x, y].Width := 25; Edit[x, y].Text := ''; Edit[x, y].Top := 56 + ( y * 21 ) - 21 + ( StrToInt ( FloatToStr( Int( y / 3.3 ) ) ) * 5 ); Edit[x, y].Left := 8 + ( x * 25 ) - 25 + ( StrToInt ( FloatToStr( Int( x / 3.3 ) ) ) * 5 ); ... end; ... end; ... |
Re: OnChange für OnActivate erstellte Komponenten
Du definierst dir deine eigene Eventprozedur, also oben im Interface:
Delphi-Quellcode:
Wichtig ist, dass die Parameterliste genau einen Parameter (Der Name ist egal, aber "sender" ist Standard) vom Typ TObject hat.
TForm1=Class(TForm)
//alle möglichen Deklarationen procedure myevent(sender:TObject); end; In der Implementation dann:
Delphi-Quellcode:
In deine Initialisierungsroutine musst du dann nur noch Edit[x,y].onclick:=myevent schreiben.
procedure TForm1.myevent(sender:TObject);
begin //dein Code end; Hoffe geholfen zu haben Apollonius |
Re: OnChange für OnActivate erstellte Komponenten
OK... ich habe jetzt main Code geändert aber er erkennt "Sender" nicht als ein Edit an:
Zitat:
Delphi-Quellcode:
CheckValues soll überprüfen ob der Edit nach und beim ändern entweder leer oder eine Zahl 1-9 enthält aber er erkennt "Sender" nicht als Edit an!... type TForm2 = class(TForm) ... procedure CheckValues(Sender: TObject); ... private { Private-Deklarationen } public { Public-Deklarationen } end; ... var Form2: TForm2; Edit: Array[1..9, 1..9] of TEdit; x, y, i: Integer; ... procedure TForm2.FormActivate(Sender: TObject); begin for y := 1 to 9 do for x := 1 to 9 do begin Edit[x, y] := TEdit.Create(Self); Edit[x, y].Parent := Form2; Edit[x, y].Width := 25; Edit[x, y].Text := ''; Edit[x, y].Top := 56 + ( y * 21 ) - 21 + ( StrToInt ( FloatToStr( Int( y / 3.3 ) ) ) * 5 ); Edit[x, y].Left := 8 + ( x * 25 ) - 25 + ( StrToInt ( FloatToStr( Int( x / 3.3 ) ) ) * 5 ); Edit[x, y].OnChange := CheckValues; ... end; ... end; ... procedure TForm2.CheckValues(Sender: TObject); begin if Sender.Text = '' then exit; if Sender.Text <> '' then for i := 1 to 9 do begin s := IntToStr(i); if Sender.Text = s then exit; end; Sender.Text := ''; end; |
Re: OnChange für OnActivate erstellte Komponenten
Zitat:
wie wäre es mit einem Typecast?
Delphi-Quellcode:
procedure TForm2.CheckValues(Sender: TObject);
begin if Sender is TEdit then begin if TEdit(Sender).Text = '' then exit; ... |
Re: OnChange für OnActivate erstellte Komponenten
OK.. Vielen Dank... Es funktioniert jetzt
:dp: :cheers: :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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