Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Komponenten durchgehen und darauf zugreifen? (https://www.delphipraxis.net/210332-komponenten-durchgehen-und-darauf-zugreifen.html)

Nine9 7. Apr 2022 11:45

Komponenten durchgehen und darauf zugreifen?
 
wie kann ich alle Komponenten durchgehen und dann jedes einzelne dessen Left wert dem panel als ausgabe geben
also eigentlich sollte dann immer die letzte komponente dessen left wert ausgegeben werden.
Sinn dahinter am ende sollen alle neuen verschobenen Images dessen leftwerte in einer Datenbank gespeichert werden.
Hat da jemand eine Idee?


Delphi-Quellcode:
for i := FOGantt.ComponentCount - 1 downto 0 do
   begin



   
    if FOGantt.Components[i] is Timage then
    begin

     Panel3.caption := inttostr( Components[i].left) ;

Papaschlumpf73 7. Apr 2022 14:39

AW: Komponenten durchgehen und darauf zugreifen?
 
Hier mal ein Ansatz - ungetestet:
Delphi-Quellcode:
for I := 0 to FOGantt.ComponentCount-1 do
 if FOGantt.Components[I].ClassType = TImage then
  with TImage(FOGantt.Components[I]) do //irgendwas

haentschman 8. Apr 2022 07:02

AW: Komponenten durchgehen und darauf zugreifen?
 
Moin...8-)
...ist zwar nur ein Beispiel. Aber bitte nicht with. :kotz:

:wink:

BerndS 8. Apr 2022 07:54

AW: Komponenten durchgehen und darauf zugreifen?
 
So sollte es funkionieren. Nachdem per is TImage sichergestellt ist, das es ein Image ist, muss danach noch ein Cast TImage(Components[i]) folgen.
Delphi-Quellcode:
for i := FOGantt.ComponentCount - 1 downto 0 do
    if FOGantt.Components[i] is TImage then
      Panel3.caption := TImage(Components[i]).Left.ToString;

venice2 8. Apr 2022 08:39

AW: Komponenten durchgehen und darauf zugreifen?
 
Zitat:

Zitat von BerndS (Beitrag 1504428)
So sollte es funkionieren. Nachdem per is TImage sichergestellt ist, das es ein Image ist, muss danach noch ein Cast TImage(Components[i]) folgen.
Delphi-Quellcode:
for i := FOGantt.ComponentCount - 1 downto 0 do
    if FOGantt.Components[i] is TImage then
      Panel3.caption := TImage(Components[i]).Left.ToString) ;

Denke ich mal nicht.
Wenn überhaupt dann
Delphi-Quellcode:
Panel3.caption := IntToStr(TImage(Components[i]).Left)) ;


Delphi 10 Seattle Professional kennt .ToString nicht.
Oder doch :) opps sehe gerade bin von Delphi 2010 ausgegangen. :stupid:
Brauche wohl neue Brille!

DeddyH 8. Apr 2022 09:22

AW: Komponenten durchgehen und darauf zugreifen?
 
Mir erschließt sich der Sinn nicht, in einer Schleife die Caption eines Labels zu ändern. Das sieht man am Ende sowieso nicht bis auf den letzten Wert.

Delphi.Narium 8. Apr 2022 09:35

AW: Komponenten durchgehen und darauf zugreifen?
 
Das war nur ein Beispiel, um überhaupt erstmal an den Wert von Left zu kommen.
Zitat:

Zitat von Nine9
Sinn dahinter am ende sollen alle neuen verschobenen Images dessen leftwerte in einer Datenbank gespeichert werden.

Statt der Zuweisung auf Panel3.caption wird da später mal was anderes stehen.

Uwe Raabe 8. Apr 2022 12:26

AW: Komponenten durchgehen und darauf zugreifen?
 
Weil ich ja so'n bisschen bequem bin habe ich mir für solche Zwecke einen Helper geschrieben:
Delphi-Quellcode:
type
  TComponentHelper = class helper for TComponent
  public
    function FindComponentOf<T: class>(const AName: string): T;
    procedure ForAllComponentsOf<T: class>(DoProc: TProc<T>);
  end;

...

function TComponentHelper.FindComponentOf<T>(const AName: string): T;
begin
  result := FindComponent(AName) as T;
end;

procedure TComponentHelper.ForAllComponentsOf<T>(DoProc: TProc<T>);
var
  cmp: TComponent;
begin
  for cmp in Self do
    if cmp is T then
      DoProc(T(cmp));
end;
Das Beispiel mit dem TImage würde damit dann in etwa so aussehen:
Delphi-Quellcode:
  ForAllComponentsOf<TImage>(
    procedure(Arg: TImage)
    begin
      Panel3.caption := Arg.Left.ToString;
    end);


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