AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OnChange für OnActivate erstellte Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

OnChange für OnActivate erstellte Komponenten

Ein Thema von qb-tim · begonnen am 18. Mai 2007 · letzter Beitrag vom 19. Mai 2007
Antwort Antwort
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#1

OnChange für OnActivate erstellte Komponenten

  Alt 18. Mai 2007, 14:09
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OnChange für OnActivate erstellte Komponenten

  Alt 18. Mai 2007, 14:14
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
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#3

Re: OnChange für OnActivate erstellte Komponenten

  Alt 18. Mai 2007, 14:21
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!
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: OnChange für OnActivate erstellte Komponenten

  Alt 18. Mai 2007, 20:33
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;
 ...
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#5

Re: OnChange für OnActivate erstellte Komponenten

  Alt 19. Mai 2007, 08:48
OK.. Vielen Dank... Es funktioniert jetzt

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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