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 prüfen ob panel existiert! (https://www.delphipraxis.net/112048-pruefen-ob-panel-existiert.html)

Privateer3000 14. Apr 2008 12:18


prüfen ob panel existiert!
 
Hello,
mit folgenden code werden panels gezeichnet.
Allerdings muss vorher geprüft werden ob schon
existiert.
Es funktioniert aber nicht und kommt zur exception
wenn das Panel schon existiert.
Delphi-Quellcode:
while not panelquer.Eof do begin
  if not Assigned(panelen.pans.FindComponent(panelquer.fieldbyname('anzeige').AsString)as TPanel) then begin
  tpa:=TPanel.Create(Self);
  tpa.Parent:=pan0;
  tpa.Visible:=true;
  tpa.Left:=0;
  tpa.Top:=0;
  tpa.Height:=393;
  tpa.Width:=689;
  tpa.Name:=panelquer.fieldbyname('anzeige').AsString;
  tpa.Caption:=panelquer.FieldByName('anzeige').AsString;
  panelquer.Next;
end;
Was ist falsch?

Hawkeye219 14. Apr 2008 12:31

Re: prüfen ob panel existiert!
 
Hi,

ist panelen.pans wirklich der owner der Panels? Nur dieser kann dir über FindComponent eine Referenz liefern.

Warum merkst du dir die erzeugten Panels nicht in einer Liste anstatt immer wieder mit FindComponent danach zu suchen?

Gruß Hawkeye

Privateer3000 14. Apr 2008 12:43

Re: prüfen ob panel existiert!
 
Gute Idee mit der Liste,
wenn ich wüßte wie das geht?!

hoika 14. Apr 2008 13:50

Re: prüfen ob panel existiert!
 
Hallo,

irgendie ist dein Code komisch

Delphi-Quellcode:
while not panelquer.Eof do
panelquer ist also ein DataSet (?).

Delphi-Quellcode:
while not panelquer.Eof do
begin
  if not Assigned(panelen.pans.FindComponent() then
  begin
   ...
    tpa.Name:=panelquer.fieldbyname('anzeige').AsString;
    tpa.Caption:=panelquer.FieldByName('anzeige').AsString;
  end;
  panelquer.Next;
end;
Du gehst durch panelquer und legst Panel mit immer gleicher Position an, wozu ?

Delphi-Quellcode:
if not Assigned(panelen.pans.FindComponent(panelquer.fieldbyname('anzeige').AsString)as TPanel) then begin
  tpa:=TPanel.Create(Self);
Self ist also der Owner.
Self enthält das Panel also in seiner FindComponent-Liste.

Delphi-Quellcode:
if not Assigned(Self.FindComponent(panelquer.fieldbyname('anzeige').AsString)as TPanel) then
Als Optimierung würde ich panelquer.fieldbyname('anzeige').AsString
in eine lokale Variable packen.
Das amcht auch das Debuggen einfacher.

Heiko

Privateer3000 14. Apr 2008 13:55

Re: prüfen ob panel existiert!
 
die panels liegen übereinander und werden mit tabcontrol
nach vorn geholt, wenn nötig
aber das ist doch jetzt nicht von wichtigkeit.

wie macht man das mit der Liste?
über TObjectlist finde ich nur wirres Zeug


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