| Autor |
Beitrag |
Christoph Englmann
      
Beiträge: 276
|
Verfasst: Mo 19.06.06 14:16
hallo,
ich weiss, dass ich mit hilfe von arrays die formen unterscheiden kann....
dachte mir nur es gibt vielleicht noch nen einfacheren weg:
hab eine form auf welcher es einen button "aktualisieren" gibt.
Nun wird diese Form zur laufzeit öfters erstellt. wie krieg ich es am einfachsten hin, dass beim drücken des buttons aktualisieren auch immer genau die form aktualisiert wird, auf welcher sich der gedrückte button befindet und nicht die zuletzt erstellte??
muchas gracias
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mo 19.06.06 17:47
Ich hätte gedacht, dass es dazu was bei TApplicationgibt aber das ist außer Mainformnicht der Fall 
|
|
Stego
      
Beiträge: 35
WIN XP
Delphi 2005 Archi.
|
Verfasst: Mo 19.06.06 21:09
Wenn ich die Frage richtig verstehe, dann willst du das wenn auf den Buitton gedrückt wird, die Form aktualisieren, auf der der Button liegt?
Versuchs mal mit Self , vielleicht hilft dir das weiter, wobei ich deine Frage auch nicht so ganz kapiere. Wenn der Button doch wieso auf dem selben Form liegt, warum willst / musst du dann noch die Form direkt ansprechen ?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 19.06.06 21:14
Mit dem Parameter Sender bekommst du ja eine Referenz auf den Button geliefert. Dann ist Sender.Owner die Form.
_________________ Markus Kinzler.
|
|
Christoph Englmann 
      
Beiträge: 276
|
Verfasst: Di 20.06.06 08:53
also erstmal danke ihr zwei...
@stego:
mit self funktionierts leider nicht -> hier wird immer die zuletzt erstellte Form aktualisiert und nicht die, auf welcher der button gedrückt wurde (sollte auch Deine Frage beantworten, es wird eben nicht die Form auf welcher der Button gedrückt wird aktualisiert sondern eben die zuletzt erstellte (natürlich vom gleichen Typ))
@mkinzler
der Parameter sender kennt bei mir (delphi7) die Eigenschaft owner leider nicht.
gruß
christoph
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 20.06.06 09:03
verstehe ich dies richtig:
Du hast x-Mal ein TForm mit je einem Schalter "Aktualisieren". Da sollte doch bei Klick die Form aktualisert werden, auf der der Button liegt, es sei denn, Deine Quellen nutzen FormVariable.??? ! Vielleicht zeigst Du uns mal, was Du in OnClick machst!
PS: TButton(Sender).Owner
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Christoph Englmann 
      
Beiträge: 276
|
Verfasst: Di 20.06.06 09:33
danke wiederum...
ja, ich denke ich mache es (falsch) wie Du erwähnt hast mit formvariable. (weiss leider nicht wie ich es anders machen soll...
hier der vereinfachte Quellcode mit den wichtigsten passagen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure TFormAktuelleLZADaten.cmdAktualisierenClick(Sender: TObject); begin
FormAktuelleLZADaten.Aktuelle_Schaltdaten_ermitteln(StrToInt(lblLZANR.Caption));
end;
procedure TFormAktuelleLZADaten.Aktuelle_Schaltdaten_ermitteln(LZANR :integer); var Query :TQuery; Zentrale :string; Zeitstempel :string;
begin
DateTimeToString(Zeitstempel,'DD.MM.YYYY HH:NN:SS',now); FormAktuelleLZADaten.Caption := 'Aktuelle Daten zur LZA '+IntToStr(LZANR)+' '+LZA_Name+' Zeitstempel: '+Zeitstempel+'Uhr';
FormAktuelleLZADaten.lblLZANr.Caption := IntToStr(LZANR); FormAktuelleLZADaten.lblLZAName.Caption := LZA_NAme; FormAktuelleLZADaten.lblZeitstempel.Caption := Zeitstempel+'Uhr'; FormAktuelleLZADaten.txtPRgNr.Text := Query.fieldbyName('SP_NR').AsString; FormAktuelleLZADaten.txtBTFKT.Text := Query.fieldbyName('BETRIEBSFUNKTION').AsString; FormAktuelleLZADaten.txtUmlaufzeit.Text := Query.fieldbyName('SP_TU').AsString; FormAktuelleLZADaten.txtPrioritaet.Text := Query.fieldbyName('PRIORITAET').AsString; FormAktuelleLZADaten.txtOffset.Text := Query.fieldbyName('OFFSET_ZEIT').AsString; FormAktuelleLZADaten.txtSynchronisierung.Text := Query.fieldbyName('SYNCHRONISIERUNG').AsString;
Query.Free
... |
die Prozedur
Aktuelle_Schaltdaten_ermitteln(LZANR :integer);
ist auf dem Form als private deklariert
|
|
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 20.06.06 09:35
@Kinzler:
Die Eigenschaft Owner muss nicht unbedingt die Form sein, z. Bsp. wenn der Button noch auf einem Panel liegt. Ich weise beispielsweise während der Laufzeit immer die übergeordnete Container-Control als Owner zu.
@Christoph:
Du musst ein sog. TypeCast anwenden. Sender ist vom Typ TObject. TButton ist ein späterer Nachkomme von TObject, d. h. Du kannst Sender als einen Button ansprechen. Und TButton kennt die Eigenschaft Owner.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click (Sender :TObject); begin TButton(Sender).Caption :='Geklickt'; TForm(TButton(Sender).Owner).Caption :='Dieses Form wird aktualisiert'; end; |
Der Typ von Owner in allen Objekten mit Owner als Eigenschaft ist immer ein Vorfahre von allen sichtbaren Controls auf Deinen Formularen.
Schau mal in die Delphi-Hilfe. Nimm meinetwegen TButton und klick dann mal auf Hierarchie. Dort kannst Du sehen, welche Klassen Vorfahren von TButton sind.
Mit ein wenig rumprobieren kannst Du ziemlich viele nette Dinge anstellen.  Viel Spaß noch ...
Zuletzt bearbeitet von Christian R. am Di 20.06.06 09:39, insgesamt 1-mal bearbeitet
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 20.06.06 09:36
lass mal in beiden Prozeduren das "FormAktuelleLZADaten" weg!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 20.06.06 09:50
| Zitat: | @Kinzler:
Die Eigenschaft Owner muss nicht unbedingt die Form sein, z. Bsp. wenn der Button noch auf einem Panel liegt. Ich weise beispielsweise während der Laufzeit immer die übergeordnete Container-Control als Owner zu. |
Sollte man nicht, als parent ok, aber Owner sollte eigentlich die Form sein. Sonst müßtest du halt rekursiv zurückgehen bis Klasse ne Form ist.
_________________ Markus Kinzler.
|
|
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 20.06.06 12:24
Für diese Rekursion habe ich mir eine Prozedur geschrieben, doch Du hast recht, denn die Rekursion braucht Rechenzeit. Aber ist TWinControl.Controls denn nicht von Owner abhängig? Oder täusche ich mich?
|
|
Christoph Englmann 
      
Beiträge: 276
|
Verfasst: Di 20.06.06 13:02
@neurologic Scientists...
danke, Dein weg scheint mir der beste/logischste zu sein.
scheint prinzipiell auch zu funktionieren, muss nur noch ein wenig probieren, wie ich das ganze aktualsieren in eine unterprozedur bekomme...
danke
christoph
|
|