Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi D7 FindComponent über .tag und Caption (https://www.delphipraxis.net/189354-d7-findcomponent-ueber-tag-und-caption.html)

nahpets 3. Jun 2016 18:33

AW: D7 FindComponent über .tag und Caption
 
Nach welchen Kriterien sollen denn die Captions geändert werden.

Was bezweckst Du überhaupt mit der Abfrage von Tag und der Änderung der Caption?

'ne Hitliste für ein Spiel?
'ne Liste von (Programm-)Abläufen?

Gib' uns mal eine (möglichst) genaue Beschreibung dessen, was Du umsetzen möchtest.

Eventuell können wir dann zielgerichtet antworten und nicht nur so ins Blaue, wie so ein Problem eventuell theoretisch gelöst werden könnte.

Statt der Case-Abfrage aus meinen Beispielen oben, könntest Du dort ja auch beliebige If-Abfragen einfügen, Funktionsaufrufe (für was auch immer).

Dashier dürfte relativ nahe an Deine Idee kommen:
Delphi-Quellcode:
var
  myComp : TComponent;
  x     : Integer;
begin
  for x := 1 to 10 do begin
    myComp := Findcomponent(Format('Panel%d',[x]));
    if Assigned(myComp) and (myComp is TPanel) then begin
      TPanel[myComp].Caption = 'bla bla';
    end;
  end;
end;
Das Beispiel von Helmi müsste funktionieren, ändere es bitte mal so ab:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  Component: TComponent;

begin
  for i := 1 to 10 do
    begin
      Component := Findcomponent('Panel'+ IntToStr(i));

      If Assigned(Component) then
        If Component.ClassType = TPanel then
  ShowMessage(Format('Caption: %s, Name: %s, Tag: %d, i = %d',
  [TPanel(Component).Caption,Component.Name,Component.Tag,i]));
    end;
end;
Und dann überprüfe, ob die Werte von Name und Tag mit dem von Dir Erwarteten übereinstimmen.

DeddyH 3. Jun 2016 18:36

AW: D7 FindComponent über .tag und Caption
 
Ich würde mir das Geraffel vereinfachen, indem ich die betreffenden Panels in einer eigenen Liste (TObjectList/TComponentList) oder einem Array ablege, dann kann ich auch ohne FindComponent indiziert darauf zugreifen.

Helmi 3. Jun 2016 18:37

AW: D7 FindComponent über .tag und Caption
 
Wie nahpets schon richtig erwähnte, wir rätseln mehr...

All unsere Beispiele funktionieren, nur kommt es auf die Anforderung drauf an.

Wir prüfen auch die Panels auf 2x das gleiche, die Ziffer im Namen und Tag müssen übereinstimmen
Brauchen wir das?
Reicht es nicht, wenn wir die Panels finden, die als Tag 1-10 haben?
Gibt es mehr als die 10 Panels? - und die anderen sind für was anderes gedacht, haben aber auch einen beschriebenen Tag?

Zitat:

Zitat von DeddyH (Beitrag 1339498)
Ich würde mir das Geraffel vereinfachen, indem ich die betreffenden Panels in einer eigenen Liste (TObjectList/TComponentList) oder einem Array ablege, dann kann ich auch ohne FindComponent indiziert darauf zugreifen.

An so was hab ich auch schon gedacht, aber irgendwie wissen wir nicht wirklich was gewollt ist

beanbear6 3. Jun 2016 18:39

AW: D7 FindComponent über .tag und Caption
 
Hi zusammen,
uups... nun ist mir was aufgefallen... ich melde mich dann nochmal...
nene es genügt wenn die Panels über i (also tag1, tag2, usw.) gefunden werden und ich dann die caption ändern kann...

Also: Ich hab 10 Panels (mit Caption) und möchte die Caption über einen Zähler 1..10 leeren. Wenn das Passiert ist hol ich mir aus einer Datenbank (Spalte1 = Nummer von 1..10 und spalte2 ist Bezeichnung für die Panels) die neue Beschriftung. Ziel des Ganzen ist, dass ich Panels aus einer Datenbank raus beschriften kann. Im OnShow Ergebnis der Form leere ich also die Beschriftungen der 10 Panels und hol mir die neue Beschriftung aus der Datenbank. Is bissl schwierig zu erklären ich hoffe i habs hingekriegt...

Gruß Reiner

Helmi 3. Jun 2016 18:52

AW: D7 FindComponent über .tag und Caption
 
Dann vielleicht so:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
  TempPanel: TPanel;

begin
  for i := 0 to Pred(ComponentCount) do
    If Components[i].ClassType = TPanel then
      begin
        TempPanel := TPanel(Components[i]);

        If TempPanel.Tag in [1..10] then
          TempPanel.Caption := Format('Ich bin Panel-Nr. %d!', [TempPanel.Tag]);
      end;
end;

nahpets 3. Jun 2016 18:53

AW: D7 FindComponent über .tag und Caption
 
Oder suchst Du sowas? (nicht getestet)
Delphi-Quellcode:
var
   myComp : TComponent;
begin
  while not qry.Eof Do begin
    myComp := FindComponent(Format('Panel%d',[qry.FieldByName('Spalte1').AsInteger]));
    if Assigned(myComp) and (myComp is TPanel) then begin
      TPanel(myComp).Caption := qry.FieldByName('Spalte2').AsString;
    end;
    qry.Next;
  end;
end;

beanbear6 3. Jun 2016 18:58

AW: D7 FindComponent über .tag und Caption
 
Hi zusammen,
ich teste das mal ab und melde mich... Gleich aber mal ein großes Dankeschön für Eure Mühe...
Gruß Reiner

beanbear6 3. Jun 2016 19:08

AW: D7 FindComponent über .tag und Caption
 
Hi zusammen,
also ich nochmal... Ich dachte mir schon dass das wenn ich nun noch mit Datenbank ankommen ausartet und ich Eure Geduld sehr strapaziere. Also ich versuch das nochmal mit folgendem Beispiel (z.B. für 100 Panels - die Panels haben die tags von 1 bis 100):

Delphi-Quellcode:
for x = 1 to 100 do
  // suche Panels mit den tags 1 bis 100
  // Setze auf Panels 1 bis 100 den Text: nicht verfügbar
Wenn ich das hinkriege dann schaff ich den Rest mit der Datenbank auch. Und gleich nochmal ein Dankeschön!! :-)
Gruß beanbear

Helmi 3. Jun 2016 19:11

AW: D7 FindComponent über .tag und Caption
 
Zitat:

Zitat von beanbear6 (Beitrag 1339504)
Hi zusammen,
also ich nochmal... Ich dachte mir schon dass das wenn ich nun noch mit Datenbank ankommen ausartet und ich Eure Geduld sehr strapaziere. Also ich versuch das nochmal mit folgendem Beispiel (z.B. für 100 Panels - die Panels haben die tags von 1 bis 100):

Delphi-Quellcode:
for x = 1 to 100 do
  // suche Panels mit den tags 1 bis 100
  // Setze auf Panels 1 bis 100 den Text: nicht verfügbar
Wenn ich das hinkriege dann schaff ich den Rest mit der Datenbank auch. Und gleich nochmal ein Dankeschön!! :-)
Gruß beanbear

Die Lösung steht schon da - einfach mal die Codes verstehen versuchen und schon kommst auf die Lösung

nahpets 3. Jun 2016 19:16

AW: D7 FindComponent über .tag und Caption
 
Delphi-Quellcode:
var
  i : Integer;
begin
  while not qry.Eof Do begin
    for i := 0 to ComponentCount - 1 do begin
      if not (Component[i] is TPanel) then continue;
      if TPanel(Component[i]).Tag = qry.FieldByName('Spalte1').AsInteger then begin
        TPanel(Component[i]).Caption := qry.FieldByName('Spalte2').AsString;
      end;
    end;
    qry.Next;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr.
Seite 2 von 4     12 34      

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