![]() |
TFrames auf Scrollbar --> FindComponent
Hallo Leute,
ich hab'n Problem mit meinen Frames.
Code:
In der Procedure "Neues_Blatt" wird ein gegebener TFrame erzeugt und (anscheinend) korrekt auf die Scrollbox gelegt. Name ist eindeutig und sollte doch wieder-findbar sein.
procedure TMainForm.Neues_Blatt(Sender: TObject);
// ... erzeugt neuen Frame innerhalb Scrollbox // ... TFrameAnzeige = class(TFrame) in separater Unit var Child: TFrameAnzeige; begin ... Child := TFrameAnzeige.Create(ScrollBox1); Child.name := 'Frame' + IntToStr(Anzahl_Neu); Child.Caption := Name; Child.Parent := MainForm.ScrollBox1; Child.SetBounds (0, 0, ScrollBox1.Width -5, 116); // Links, Oben, Weite, Höhe with Child.PanelAnzeige do begin //(... Größen anpassen) end; end; procedure TMainForm.Anordnen(Sender: TObject); var i, k : integer; begin // ... // Anzahl_neu ist der Strtoint-Wert der dem Namen angehängt wird // ... for i := 0 to Anzahl_Neu do if (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) <> nil then with (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) do begin // ... nur Positionen lesen und neu setzen - hier unwichtig... end; end; In der zweiten Procedure "Anordnen" müßte dieser Frame als Komponente anundfürsich gefunden werden können. Tausche ich das "TFrameAnzeige" gegen "TFrame" aus, passiert auch nichts. "uses (Unit mit dem Frame) ist auch gesetzt. Bei mir wird er aber nicht gefunden! Warum, wo liegt der Fehler? Kann mir bitte jemand helfen? Danke |
Re: TFrames auf Scrollbar --> FindComponent
Delphi-Quellcode:
procedure TMainForm.Neues_Blatt(Sender: TObject);
// Hier schreibst du 'Frame' Child.name := 'Frame' + IntToStr(Anzahl_Neu); ... // und hier wird nach 'Anzeige' gesucht !!!! if (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) <> nil then with (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) do begin |
Erratum meinerseits....
Danke,
das war aber bloß ein Kopierfehler! Ärgerlich - Asche auf mein Haupt... Richtiger:
Code:
---
procedure TMainForm.Neues_Blatt(Sender: TObject);
// ... erzeugt neuen Frame innerhalb Scrollbox // ... TFrameAnzeige = class(TFrame) in separater Unit var Anzeige : TFrameAnzeige; // ob global oder hier müßte egal sein begin ... Anzeige := TFrameAnzeige.Create(ScrollBox1); Anzeige.name := 'Anzeige' + IntToStr(Anzahl_Neu); Anzeige.Parent := MainForm.ScrollBox1; Anzeige.SetBounds (0, 0, ScrollBox1.Width -5, 116); // Links, Oben, Weite, Höhe // ... Name eindeutig, Positionierung auf Defaultwerte 0,0 .. end; procedure TMainForm.Anordnen(Sender: TObject); var i : integer; begin // Anzahl_neu ist der Strtoint-Wert der dem Namen angehängt wird for i := 0 to Anzahl_Neu do if (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) <> nil then with (FindComponent('Anzeige' + IntToStr(i)) as TFrameAnzeige) do begin // ... nur Positionen lesen und neu setzen - hier unwichtig... end; end; Aber die Korrektur dessen bringt mir auch keinen Erfolg. In der Procedure "Neues_Blatt" wird ein gegebener TFrame erzeugt und korrekt auf die Scrollbox gelegt. Name ist eindeutig und sollte doch wieder-findbar sein. In der zweiten Procedure "Anordnen" müßte dieser Frame als Komponente anundfürsich gefunden werden können. Meineserachtens ist "TFrameAnzeige" immer noch richtig in FindComponent und muß nicht durch TFrame ersetzt werden. Muß denn irgendwas verbogen werden, damit damit das Prog meine Komponenten wiederfindet? Alle 'Align' sind auf "alNone" gesetzt und ich will doch nur nach gewissen Kriterien manuell sortieren. 2. Frage: Müssen die Komponenten aus "TFrameAnzeige" (type TFrameAnzeige = class(TFrame)...) ggf. oben im Hauptprogramm wiederholt werden, doch wohl nicht? Ich bin betriebsblind... Danke |
Re: TFrames auf Scrollbar --> FindComponent
Beim Erzeugen der Frames gibst du als Owner die Komponente Scrollbox1 an.
Delphi-Quellcode:
Also müsstest du auch die Komponente als Startpunkt für Findcomponent verwenden.
Anzeige := TFrameAnzeige.Create(ScrollBox1);
Ausserdem kann man du Verwenden der lokalen Variablen compi & frameanzeige viel bequemer arbeiten.
Delphi-Quellcode:
var i : integer;
compi : TComponent; frameanzeige : TFrameAnzeige begin // Anzahl_neu ist der Strtoint-Wert der dem Namen angehängt wird for i := 0 to Anzahl_Neu do begin compi := ScrollBox1.FindComponent('Anzeige' + IntToStr(i)); if Assigned(compi) then begin frameanzeige := compi as TFrameAnzeige; // ... nur Positionen lesen und neu setzen - hier unwichtig... end; end; end; |
thx
Danke,
ich könnt' dich knutschen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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