AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch Erzeugte Frames finden

Ein Thema von jacky213 · begonnen am 28. Jun 2019 · letzter Beitrag vom 29. Jun 2019
 
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Dynamisch Erzeugte Frames finden

  Alt 29. Jun 2019, 08:37
wie findet man Dynamisch erzeugte Frames auf einer Form?

im Normalfall mache ich das mit for i := 0 to FindComponent... und sofern ich den Frame über Delphi auf die Form lege funktioniert das auch. Allerdings nicht mehr sobald ich den Frame Dynamisch zur Laufzeit auf der Hauptform erzeuge.
Einfache Antwort: Gib dem Frame einen eindeutigen Namen, dann funktioniert FindComponent auch damit.

Kompliziertere Antwort:

Das kommt darauf an, wie Du sie erzeugst. Z.B.:
Delphi-Quellcode:
procedure TMyForm.OnCreate(_Sender: TObject);
var
  Frame: TFrame;
begin
  Frame := TSomeFrame.Create(Self);
  // ab hier steht der Frame in der Components-Liste der Form
  Frame.Name := 'SomeMeaningfulName';
  // und jetzt hat er einen Namen, über den man ihn finden kann.
  Frame.Parent := Self;
  // jetzt steht er auch in der Controls-Liste der Form
  // Alternativ:
  // Frame.Parent := SomePanel;
  // Jetzt steht er in der Controls-Liste von SomePanel
end;
Um den Frame dann zu finden kann man folgenden Code nehmen:
Delphi-Quellcode:
function TMyForm.FindSomeFrame: TSomeFrame;
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do begin
    if Components[i] is TSomeFrame then begin
      // das isser!
      Result := TSomeFrame(Components[i]);
      // falls es mehrere Frames dieser Klasse gibt, auch noch den
      // Namen überpruefen
      if Result.Name = 'SomeMeaningfulNamethen
        Exit; //==> raus
    end;
  end;
  // nicht gefunden?
  raise Exception.Create('Frame nicht gefunden');
end;
Wenn Du aber schon von vorneherein weißt, dass Du später auf den Frame zugreifen willst, dann deklarierst Du einfach ein Field dafür:

Delphi-Quellcode:
 
type
  TMyForm = class(TForm)
    // [...]
  private
    FSomeFrame: TSomeFrame;
    // [...]
  end;

// [...]

procedure TMyForm.OnCreate(_Sender: TObject);
begin
  FSomeFrame := TSomeFrame.Create(Self);
  FSomeFrame.Name := 'SomeMeaningfulName';
  FSomeFrame.Parent := Self;
end;

// diese Function kann man sich dann eigentlich schenken:
function TMyForm.FindSomeFrame: TSomeFrame;
begin
  Result := FSomeFrame;
end;
Thomas Mueller
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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