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 FindComponent für dynamische Komponente auf dyn. Formular (https://www.delphipraxis.net/106119-findcomponent-fuer-dynamische-komponente-auf-dyn-formular.html)

BetaBot 5. Jan 2008 19:56


FindComponent für dynamische Komponente auf dyn. Formular
 
Hallo Gemeinde,

hier mein 'grausiges' Problem.
Ich habe ein MainForm (Form1). Von dem aus erstelle ich zur Laufzeit Form2. Auf Form2 erstelle ich eine PageControl, auf dieser 5 TabSheets und auf jedem TabSheet ein StringGrid.
Wenn ich jetzt von Form1 aus versuche mit
Delphi-Quellcode:
(Form2.FindComponent('StringGrid' + IntToStr(x))as TStringGrid).Cells[0,0] := 'mein Text';
etwas in diese StringGrids zu schreiben, kommt jedes Mal eine 'Access Violation'. Ich bin frustriert und ratlos.

Hoffe mir kann geholfen werden.

Danke im Voraus.

mkinzler 5. Jan 2008 20:01

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
Wer ist Owner der ereugten Komponente?

Bernhard Geyer 5. Jan 2008 20:04

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
1, Wenn du schon dynamisch Formular und Komponenten erstellst dann nimm bitte vernünftige Namen. TForm1 (bzw. Form1) ist 'ne IDE-Vorgabe und sollte geändert werden. TMainForm oder TFormLoader oder ähnliches ist verständlicher und sagt im Groben aus was das Formular macht.

2, Nimm niemals bei dynamisch erstellten Formularen die von der IDE angelegte globale Variable im interface-Abschnitt. Am besten löscht du diese gleiche damit du nicht in versuchung kommst.

3, Auch für deine dynamisch erstellten Komponenten überleg dir einen besseren "Merkmechanismus" (z.B. Array of TPageControl, ...) um nicht auf die FindComponent-Methode zurückfallen zu müssen

4, Greif nicht Kreuz- & Quer- auf die verschiedenen Fomularelemente von anderen Formularen darauf zu. Definier dir Zugriffsmethoden (z. B. procedure SetGridCell(Index, x, y: Integer; const Text: String);


Dein Fehler wird mit Punkt 2 zusammenhängen.

BetaBot 5. Jan 2008 20:13

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
Hallo MKinzler,

Owner Form2 ist Keiner (self), Pagecontrol ist Form2, Tabsheet ist Pagecontrol und StringGrid ist Keiner (self).

Mit Owner meinst du doch das hinter Create und nicht parent, oder?

Sorry für meine Laiensprache.

sirius 5. Jan 2008 20:18

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
Mit dem owner stellst du genau die Liste in den von Tcomponent (also alle die du verwendest) abgeletet Klassen her, auf die du mittels Findcomponent zugreifst.
Deswegen ist es für Findcomponent, dass du im Constrcutor auch immer den für dich gewünschten Owner angibst. Und "self" ist nicht "kein owner" (das wäre nil) sondern die Komponente in der du dich gerade befindest.

BetaBot 5. Jan 2008 20:22

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
Also wenn sollte ich den nun als Owner für Form2, pagecontrol, tabsheet und stringgrid angeben, damit ich mit findcomponent zum Ziel gelange?
Oder kann man das nicht pauschal sagen?

mkinzler 5. Jan 2008 20:35

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
Wenn du später Form2 befragst muss es Form2 sein

DP-Maintenance 5. Jan 2008 20:37

DP-Maintenance
 
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "VCL / WinForms / Controls" verschoben.
FF - Falsches Forum

BetaBot 5. Jan 2008 21:07

Re: FindComponent für dynamische Komponente auf dyn. Formula
 
ES FUNTIONIERT!!

Vielen Dank an MKinzler und alle anderen für eure schnellen Antworten.

Tolles Forum!


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