Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Abfragen von Komponenten Eigenschaften (https://www.delphipraxis.net/5900-abfragen-von-komponenten-eigenschaften.html)

Hotti 22. Jun 2003 18:44


Abfragen von Komponenten Eigenschaften
 
Hallo !

Ich möchte mit einer Komponente die auf einem Form liegt auf die Eigenschaften der anderen Komponenen zugreifen um deren Inhalt z.B in der Registry zu Speichern.

Mit dieser Procedur kann ich zwar alle Komponenten auslesen, allso Ihren
Type und Namen ermitteln aber nicht auf Ihre Eigenschaften wie Text,Checked etc. zugreifen!!

Wo liegt der Fehler oder bin ich mit meinem Lösungsansatz auf dem Holzweg !
Delphi-Quellcode:
procedure TEasy.Write;
 var
  I: Integer;
  Formy:TForm;
  Checking:Boolean;
  Edit:TEdit;
 begin
  T:='';
  Formy:=TForm(self.owner);
  for I:= 0 to Formy.ComponentCount -1 do
  begin
   If Formy.Components[i].ClassName = 'TEdit' then
     begin
      if Formy.FindComponent(Formy.Components[i].Name)<>nil then
       begin
        Edit:=TEDit(Formy.Components[i].Controls[i]);
        WriteString(Formy.Components[i].Name,Edit.text);
       end;
      end;
    If Formy.Components[i].ClassName = 'TCheckBox' then
     begin
        Checking:=TCheckBox(Formy.Components[i]).Checked;
        WriteBoolean(Formy.Components[i].Name,Checking);
       end;
      end;
    end;
  end;
MFG Hotti

praktiker 22. Jun 2003 22:23

Hi, bin durch einen Bruch des Schlüsselbeins lädiert, deswegen nur
kurz einen Ansatz

Beispiel: Formular mit drei labeln, namen label1,label2,label3
Delphi-Quellcode:
procedure teasy.test;
VAR fcomp:tcomponent;
begin
  fcomp:=findcomponent([color=#ff0000]'label2'[/color]);
  if (fcomp <> nil) then
  begin
   (fcomp as Tlabel).color:=clred; // Farbe invers auf rot
   (fcomp as Tlabel).text:=[color=#ff0000]'Neuer text'[/color]; // und anderer text
  end;
end;
Wenn du das mal austestest, und verstanden hast, ist es ein leichtes für dich, deinen Quelltext funktionell zu ändern.
hoffe geholfen zu haben

[edit=Daniel B]Delphi-Tags eingefügt und Code ausgerichtet. MfG Daniel B.[/edit]

Hotti 23. Jun 2003 22:40

Hi :)

Danke für die schnelle Antwort.
Dieser Tip mit der Typenunwandlung war mir zwar schon bekannt, aber die Sache funktioniert immer noch nicht. Ich vermute es hängt an der Zeile "Formy:=TForm(self.owner)". Da Formy anschließend den Wert eines leeren Forms ohne die auf ihn befindlichen Komponenten erhält.

Das einfach zuteilen von Formy:=Form1 hängt auch da die Komponente das Form ja noch nicht kennt auf welches jemals arbeiten soll.

Wer kennt die Lösung :?: :oops:

MFG Hotti

Christian Seehase 23. Jun 2003 23:08

Moin Hotti,

sagen wir mal so:
Wenn ich die Fragen verstehen würde, könnte ich vielleicht die Antwort geben ;-)
Ich versuch's mal soweit ich's verstanden hab'.

Zitat:

Zitat von Hotti
Da Formy anschließend den Wert eines leeren Forms ohne die auf ihn befindlichen Komponenten erhält.

Da Formy eine lokale Variable ist, ist ihr Wert zu Beginn der Prozudur unbestimmt, und nach verlassen der Prozedur existiert sie genaugenommen gar nicht mehr.

Zitat:

Zitat von Hotti
Das einfach zuteilen von Formy:=Form1 hängt auch da die Komponente das Form ja noch nicht kennt auf welches jemals arbeiten soll.

Daraus denke ich mir, dass TEasy eine Kompo ist die mit einem zu diesem Zeitpunkt noch unbekannten Formular etwas machen soll.
Was spricht denn dagegen, dieses Formular als Parameter zu übergeben?
Dann steht man auch nicht vor dem Problem, dass der Owner eventuell gar kein Formular ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 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 by Thomas Breitkreuz