Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Componenten in Forms und Frames finden (https://www.delphipraxis.net/191077-componenten-forms-und-frames-finden.html)

Ykcim 6. Dez 2016 12:39

Componenten in Forms und Frames finden
 
Hallo Zusammen,

ich schreibe gerade an einer Klasse, mit der ich die Forms und die Frames, die auf den Forms teilweise positioniert sind, finden kann.

Ich nutze dazu

Delphi-Quellcode:
for I := 0 to Form.ComponentCount -5  do begin
if Form.Controls[I] is TDBAdvEdit then
//Tu etwas;
end;
,

weil ich den Namen der Komponente erst einmal nicht kenne.

Wenn ich das ganze in einem Form ausführe, klappt das prima. Mein Problem besteht aber darin, dass ich in Forms und in Frames nach Componenten suchen muss. Kann mir jemand einen Tipp geben, wie ich das am besten anstelle?

Vielen Dank
Patrick

himitsu 6. Dez 2016 12:45

AW: Componenten in Forms und Frames finden
 
Zitat:

Zitat von Ykcim (Beitrag 1355472)
if Form.Controls[I] is TDBAdvEdit then
Wenn ich das ganze in einem Form ausführe, klappt das prima.

Kann mir jemand einen Tipp geben,

Tipp: Siehe Farben.

Zitat:

for I := 0 to Form.ComponentCount -5 do begin
if Form.Controls[I] is TDBAdvEdit then
Siehe ebenfalls Farben und ich würde das nicht "prima" funktionierend nennen ... eher potentiell gefährlich.


TComponent(xxx).Components findet alles, wo diese Komponente der Owner ist (das, was man beim Create angab, bzw. was man im FormDesigner auf die Form pappt, da ist immer die Form der Owner)

Und TWinControl(xxx).Controls oder . WinControls ist alles, wo diese Komponente der Parent ist.

PS: Delphi-Referenz durchsuchenFindComponent

Der schöne Günther 6. Dez 2016 13:04

AW: Componenten in Forms und Frames finden
 
for I := 0 to Form.ComponentCount - 5

Hast du dich vertippt oder bist du mit dem "-5" ganz, ganz sicher?

himitsu 6. Dez 2016 13:05

AW: Componenten in Forms und Frames finden
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1355475)
Hast du dich vertippt oder bist du mit dem "-5" ganz, ganz sicher?

Oder "klappt das prima" hatte mit -1 nicht so prima geklappt. :angle2:

Der schöne Günther 6. Dez 2016 13:06

AW: Componenten in Forms und Frames finden
 
Aah, jetzt sehe ich das auch (.Components[] vs. .Controls[]) :-D

Ykcim 6. Dez 2016 14:23

AW: Componenten in Forms und Frames finden
 
Hallo Zusammen,

vielen Dank für die Hinweise - ja, -1 hatte nicht so prima geklappt :oops: und da das erst einmal ein TestProjekt war, hatte ich das so gelöst.

Wenn ich das richtig verstehe, veranstalte ich ein Durcheinander mit Componenten und Controls :?. Da ich mit dem Unterschied nicht vertraut bin, werdet ihr recht haben und ich muss mich damit beschäftigen :!:.

Mein Ziel ist es, alle verwendeten Elemente (ich benutze jetzt mal bewusst weder das Wort Componente noch Controls) zu finden und ggf. Eigenschaften wie Captions etc zu verändern :?:.

Vielen Dank
Patrick

Ykcim 6. Dez 2016 15:35

AW: Componenten in Forms und Frames finden
 
Ok, ich habe hier noch eine gute Erklärung gefunden und werde das Ganze mal so testen:

Delphi-Quellcode:
for I := 0 to Form.ComponentCount -1 do begin
if Form.Components[I] is TDBAdvEdit then
//Tu etwas;
end;
Im TestProjekt hat das geklappt, ob das auch mit einer gekapselten Klasse und einem Projekt mit Forms und Frames funktioniert muss ich noch testen.

Vielen Dank
Patrick

Ykcim 6. Dez 2016 17:40

AW: Componenten in Forms und Frames finden
 
Ich muss jetzt doch noch einmal nachfragen:

Gibt es eine Möglichkeit, wie ich einer Procedure entweder ein TForm oder ein TFrame übergeben?

So nach dem Motto:
Delphi-Quellcode:
if form.components[I] is TButtom then
   ProcedureXY(Form)
else if form.components[I] is TFrame then
   ProcedureXY(Frame)
Ich kann natürlich zwei Mal die gleiche Procedure definieren mit dem Unterschied, dass die eine ein TForm und die andere ein TFrame bekommt, aber wer will das schon...
Am liebsten hätte ich etwas universelles, was ein TForm oder TFrame sein kann. Gibt es da eine Möglichkeit?

Vielen Dank
Patrick

Der schöne Günther 6. Dez 2016 17:55

AW: Componenten in Forms und Frames finden
 
Ja. Eine Form leitet sich von TWinControl ab. Ein Frame ebenfalls. Und ein Panel auch, und eine GroupBox auch, und ...

Entweder baust du dir eine Prozedur in welches du ein TWinControl reinstecken kannst (also deine Form, deinen Frame, ...).

Oder, wenn man es richtig cool haben möchte, machst du einen Klassenhelfer draus.

Und wenn du es so machen willst dass dir die Frauen gleich um den Hals fallen kommen noch Generics rein wie ein wie es z.B. dieser Poser hier macht:
http://www.delphipraxis.net/175655-g...ml#post1220959

Ykcim 6. Dez 2016 18:07

AW: Componenten in Forms und Frames finden
 
Das ist klasse! Ich denke, damit komme ich weiter.
Auf die Frauen am Hals muss ich verzichten, denn Generics übersteigen meine Kenntnisse...

Vielen Dank
Patrick

nahpets 6. Dez 2016 18:09

AW: Componenten in Forms und Frames finden
 
Du hast die Lösung doch schon geschrieben und genutzt.

Du fragst ab, ob irgendwas is tIrgendwas, wenn ja mach was.

Du übergibst halt als Parameter einen Vorfahrentyp, der bei allen gleich ist.

Da Du in der Schleife Components abfragst und damit nach allen Komponenten suchst, übergibst Du der Prozedure halt die Komponente, bei der Du alle Komponenten abfragst, die sie in Components enthält.
Delphi-Quellcode:
procedure WieSuchenNachKomponenten(a : TComponent);
var
  i : Integer;
begin
  if a is TForm then begin
    for i := 0 to a.Componentcount - 1 do begin
      if a.Components[i] is TWasweissIch then begin
        // TustduwasweissIch
      end else
      if a.Components[i] is TKannwasAnderesSein then begin
        // TustduKannwasAnderesSein
      end;
    end;
  end else
  if a is TFrame then begin
     // Wenn es was ganz anderes sein soll
  end else
  ...

end;
Ist es egal, ob nun ein TForm oder ein TFrame reinkommt, dann geht's auch ohne die Abfrage nach TForm bzw. TFrame.

Du willst ja schließlich was mit den Komponenten machen, die in Components enthalten sind. Dabei dürfte es (fast) egal sein, ob das Teil, dass Du in die Prozedur reingibst nun ein TFrom oder ein TFrame oder ein TPanel oder TEinWasWeissIch ist, dessen Komponenten aus Components "verarbeitet" werden sollen.

Ykcim 9. Dez 2016 12:29

AW: Componenten in Forms und Frames finden
 
Hallo Zusammen,

war beruflich unterwegs, daher die Funkstille...

Vielen Dank für Eure Antworten. Ich denke, dass ich es genauso hinbekommen werde.

Vielen Dank
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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