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 Komponente existiert? (https://www.delphipraxis.net/123690-komponente-existiert.html)

ecHo89 6. Nov 2008 18:34


Komponente existiert?
 
Hallo,

ich habe versucht über FindComponent zu gucken, ob eine spezielle Komponente existiert. Und wenn sie nicht existiert, soll eine neue Komponente erstellt werden (funktioniert). Aber da liegt der Haken. Wenn FindComponent fehl schlägt kommt eine Zugriffsverletzung, wobei auch kein try/except hilft (in und außerhalb der IDE).

Gibts eine gute Alternative?

DeddyH 6. Nov 2008 18:39

Re: Komponente existiert?
 
Du könntest doch mittels Assigned(Komponente) prüfen, ob sie erzeugt wurde. Und FindComponent sollte nil zurückgeben, wenn die Komponente nicht gefunden wird, anstatt Fehler zu verursachen. Aber ohne Code kann man da nichts Genaueres zu sagen.

ecHo89 6. Nov 2008 18:43

Re: Komponente existiert?
 
Okay, habe über die Methode .Name gesucht :wall: aber klar = nil funktioniert.
Was ist besser bzw. der Unterschied (bin noch lernfähig ^^).

Assigned(Component)
oder if FindComponent('Component) = nil

DeddyH 6. Nov 2008 18:45

Re: Komponente existiert?
 
Wenn Du weißt, wie die Komponente heißt, ist Assigned() vorzuziehen. FindComponent() arbeitet intern mit einer Schleife, das verwendet man z.B., wenn man über alle Edits iterieren möchte.

ecHo89 6. Nov 2008 18:56

Re: Komponente existiert?
 
Okay, ist vollstreck :)

Delphi-Quellcode:
procedure TFormMain.TBXItem34Click(Sender: TObject);   // Andere Apps
begin
  if TBXItem34.Checked then
  begin
   TBXDockablePanel4.hide;
   TBXItem34.Checked := false;
  end
  else
  begin
   if Assigned(TBXDockablePanel4) = false then
  // if FindComponent('TBXDockablePanel4') = nil then
   begin
    createDockablePanel(4);
    TBXItem34.Checked := true;
   end
   else
   begin
    TBXDockablePanel4.Show;
    TBXItem34.Checked := true;
   end;
  end;
end;
Kann man eig. solche Prozeduren auch zusammenfassen und irgendwie die Zahl 4 mit einer anderen Ersetzen, obwohl es sich um Komponenten handelt?

Will jetzt mein neues Projekt vernünftig angehen und gerne neues lernen.

DeddyH 6. Nov 2008 19:00

Re: Komponente existiert?
 
Welche 4 meinst Du jetzt?

ecHo89 6. Nov 2008 19:02

Re: Komponente existiert?
 
Alle, habe

TBXDockablePanel4
TBXItem34.Checked

Matze 6. Nov 2008 19:11

Re: Komponente existiert?
 
Zitat:

Zitat von ecHo89
Kann man eig. solche Prozeduren auch zusammenfassen und irgendwie die Zahl 4 mit einer anderen Ersetzen, obwohl es sich um Komponenten handelt?

Mit Delphi-Referenz durchsuchenFindComponent geht das. Da kannst du dann einen Integer-Wert übergeben. Du wirst sicher im Forum fündig.

Edit: Ich hatte "FineComponent" geschrieben. *g*

ecHo89 6. Nov 2008 22:02

Re: Komponente existiert?
 
klappt alles. closed

ecHo89 6. Nov 2008 22:04

Re: Komponente existiert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Habe mehrere TBXMultiDocks mit AlignmentPanel und Komponenten drauf. Wenn ich ein MultiDock schließe (OnClose) und dann während der Laufzeit neu erstelle, wird es in die gleiche Zeile eingefügt.

Wie kann man das einstellen, dass jedes TBXMultiDock nur 1 Zeile benutzen und sich immer oben an dockt?

Gruß


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