Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit dynamischem panel (https://www.delphipraxis.net/180071-problem-mit-dynamischem-panel.html)

globalenemy 21. Apr 2014 03:29

Delphi-Version: XE5

Problem mit dynamischem panel
 
Code:
//Line = 1 (Integer)
//LastLine = 1 (Integer)
InnerPanel := TPanel.Create(OuterPanel);
with InnerPanel do begin
  Parent := OuterPanel;
  Name := 'InnerPanel' + IntToStr(Line);
  Left := 1;
  Top := LastLine;
  Width := 209;
  Height := 57;
  Caption := '';
  ShowCaption := False;
  BevelOuter := bvNone;
  Visible := True;
end;
ShowMessage(TPanel('InnerPanel' + IntToStr(Line)).Name);
Das Dialog-Fenster bleibt leer, weil 'InnerPanel1' nicht gefunden wird. Aber wieso eigentlich nicht?

globalenemy 21. Apr 2014 04:07

AW: Problem mit dynamischem panel
 
okay sorry, das Problem ließ sich einfacher lösen als erwartet. :\

Code:
TPanel(OuterPanel.FindComponent('InnerPanel' + IntToStr(Line)))
Immer dieses hin und her, ich komm irgendwie nicht wirklich drauf klar wann ich was machen muss. Also beim ansprechen von Komponenten meine ich. Ob man sie jetz mit ihren Parents anspricht oder nicht. OuterPanel hat z.B. eine Scrollbox als Parent, welche wiederum ein Panel zum Parent hat, wieso da nicht?

himitsu 21. Apr 2014 08:10

AW: Problem mit dynamischem panel
 
Wenn man sich merkt wer/was der Besitzer ist, dann sollte das doch verständlich sein?

Delphi-Quellcode:
Abc := TXyz.Create(Besitzer);
Abc.Name := 'Def';

Besitzer.FindComponent('Def')
Delphi-Quellcode:
Abc := TXyz.Create(Self);
Abc.Name := 'Def';

{Self.}FindComponent('Def')
Außer man ruft FindComponent in einem anderem Kontext auf (in einer anderen Klassen-Instanz), dann kann es sein, daß der Name/Pfad vom Besitzer entsprechend anders lautet.


Abgesehn davon, daß in deinem ersten Code das FindComponent fehlt.
Selbst wenn das kompiliert, dann wirft der Compiler eine Fehlermeldung, wegen des falschen Typcasts, und mit etwas Glück wirft der Code auch "nur" eine nette Exception.

globalenemy 21. Apr 2014 13:46

AW: Problem mit dynamischem panel
 
danke, ääh hat mir garnich geholfen.
TPanel('somstring') = TPanel(FindComponent('somstring'))

Ich hab da übrigens wieder ein ähnliches Problem:

Code:
ShowMessage(TPanel(OuterPanel.FindComponent('InnerPanel1')).Name);
TPanel(OuterPanel.FindComponent('InnerPanel1')).BevelInner := bvNone;
(Line 1 dient als funktionierendes Beispiel)
Line 2 gibt access violation, warum? O,o

ps: OuterPanel wurde ebenfalls in runtime erstellt, kriegt aber keinen neuen Namen. Nur falls das wichtig is.


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