Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TFrames auf Scrollbar --> FindComponent (https://www.delphipraxis.net/49599-tframes-auf-scrollbar-findcomponent.html)

jaikai 13. Jul 2005 15:08


TFrames auf Scrollbar --> FindComponent
 
Hallo Leute,

ich hab'n Problem mit meinen Frames.

Code:
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 Procedure "Neues_Blatt" wird ein gegebener TFrame erzeugt und (anscheinend) 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. 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

shmia 13. Jul 2005 15:51

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

jaikai 13. Jul 2005 16:58

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

shmia 13. Jul 2005 17:12

Re: TFrames auf Scrollbar --> FindComponent
 
Beim Erzeugen der Frames gibst du als Owner die Komponente Scrollbox1 an.
Delphi-Quellcode:
Anzeige := TFrameAnzeige.Create(ScrollBox1);
Also müsstest du auch die Komponente als Startpunkt für Findcomponent verwenden.
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;

jaikai 13. Jul 2005 19:21

thx
 
Danke,

ich könnt' dich knutschen...


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