![]() |
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:
Das Beispiel von Helmi müsste funktionieren, ändere es bitte mal so ab:
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;
Delphi-Quellcode:
Und dann überprüfe, ob die Werte von Name und Tag mit dem von Dir Erwarteten übereinstimmen.
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; |
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.
|
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:
|
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 |
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; |
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; |
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 |
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:
Wenn ich das hinkriege dann schaff ich den Rest mit der Datenbank auch. Und gleich nochmal ein Dankeschön!! :-)
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 Gruß beanbear |
AW: D7 FindComponent über .tag und Caption
Zitat:
|
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. |
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