Autor Beitrag
Christoph Englmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: 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
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 35

WIN XP
Delphi 2005 Archi.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: 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

ausblenden volle Höhe Delphi-Quelltext
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

//hier werden zuerst die Daten ermittelt...

     //Übertrag der Werte an das Formular
     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



BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click
          (Sender :TObject);
begin
  TButton(Sender).Caption              :='Geklickt';
    // Sender wird in TButton umgewandelt
  TForm(TButton(Sender).Owner).Caption :='Dieses Form wird aktualisiert';
    // Sender wird in TButton umgewandelt, danach die Eigenschaft Owner
    // von diesem TButton in TForm umgewandelt und wiederum dessen
    // Caption neu zugewiesen.
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. :wink: Viel Spaß noch ...


Zuletzt bearbeitet von Christian R. am Di 20.06.06 09:39, insgesamt 1-mal bearbeitet
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: 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