Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnChange für OnActivate erstellte Komponenten (https://www.delphipraxis.net/92357-onchange-fuer-onactivate-erstellte-komponenten.html)

qb-tim 18. Mai 2007 14:09


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:

...

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;

...
PS: Meine Edits werden als 9 x 9 Feld erstellt

Apollonius 18. Mai 2007 14:14

Re: OnChange für OnActivate erstellte Komponenten
 
Du definierst dir deine eigene Eventprozedur, also oben im Interface:
Delphi-Quellcode:
TForm1=Class(TForm)
 //alle möglichen Deklarationen
 procedure myevent(sender:TObject);
end;
Wichtig ist, dass die Parameterliste genau einen Parameter (Der Name ist egal, aber "sender" ist Standard) vom Typ TObject hat.
In der Implementation dann:
Delphi-Quellcode:
procedure TForm1.myevent(sender:TObject);
begin
//dein Code
end;
In deine Initialisierungsroutine musst du dann nur noch Edit[x,y].onclick:=myevent schreiben.
Hoffe geholfen zu haben
Apollonius

qb-tim 18. Mai 2007 14:21

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:

Undefinierter Bezeichner: 'Text'
Delphi-Quellcode:

...

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;
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!

bitsetter 18. Mai 2007 20:33

Re: OnChange für OnActivate erstellte Komponenten
 
Zitat:

Zitat von qb-tim
OK... ich habe jetzt main Code geändert aber er erkennt "Sender" nicht als ein Edit an:

Hi,

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;
 ...

qb-tim 19. Mai 2007 08:48

Re: OnChange für OnActivate erstellte Komponenten
 
OK.. Vielen Dank... Es funktioniert jetzt

:dp: :cheers: :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.

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