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 Von TComponent nach TStringGrid parsen (https://www.delphipraxis.net/116365-von-tcomponent-nach-tstringgrid-parsen.html)

Errraddicator 27. Jun 2008 13:17


Von TComponent nach TStringGrid parsen
 
Hiho,

hier wäre dann Frage die 3. :D
Ich erzeuge zur Laufzeit dynamisch Tabs in einer PageControl, diese enthalten jeweils ein StringGrid und ein LabeledEdit zur Darstellung von Daten und einer dazugehörigen Summe.

Wenn ich nun wieder darauf zurückgreifen möchte, habe ich ja nich wie normalerweise feste Variablen mit Namen die ich benutzen könnte.
Also dachte ich, ich realisiere dass über die Components-Tabelle des jeweiligen TabSheets.

Wie kann ich aber die unter "Components" gespeicherten Elemente wieder zurück in das wandeln, was es eigentlich ist, sprich in meinem Falle ein TStringGrid z.B.?

Wenn ich es direkt zuweise, bekomme ich logischerweise Compilerfehler.
Und eine Parsung im C++-Stil mit "(TStringGrid) dataTab.Components[accIndex];" z.B. ist nicht möglich.


Danke im Voraus

cu Patrick

DeddyH 27. Jun 2008 13:19

Re: Von TComponent nach TStringGrid parsen
 
Delphi-Quellcode:
if Components[accIndex] is TStringGrid then
  TStringGrid(Components[accIndex]).Cells[0,0] := 'Wuppdi';
So in der Art müsste das aber gehen.

Apollonius 27. Jun 2008 13:22

Re: Von TComponent nach TStringGrid parsen
 
Das heißt casten, nicht parsen.
In C/C++ gibt es zwei "casting-styles": Einmal den C Style (Typ)Ausdruck und den Function Style Typ(Ausdruck). In Pascal ist nur letzterer erlaubt.

Errraddicator 27. Jun 2008 13:23

Re: Von TComponent nach TStringGrid parsen
 
Also der Compiler meckert zumindest jetzt nich mehr.
Da hätte ich auch selbst drauf kommen können. :-/

Aber wird dann nicht ein neues TStringGrid erzeugt, wenn ich
Delphi-Quellcode:
TStringGrid(dataTab.Components[0])
aufrufe?

Oder wird nur ein neues Objekt erzeugt, wenn ich
Delphi-Quellcode:
TStringGrid.Create(dataTab)
z.B. aufrufe.

DeddyH 27. Jun 2008 13:28

Re: Von TComponent nach TStringGrid parsen
 
Du machst ja nur einen expliziten Cast und rufst nicht den Konstruktor auf.

Errraddicator 27. Jun 2008 13:30

Re: Von TComponent nach TStringGrid parsen
 
Das mach ich also nur mit .Create()?

Bei C++ wäre ja
Delphi-Quellcode:
"dataGrid = TStringGrid()"
wieder ein Konstruktoraufruf, oder?
Deswegen kam ich da jetzt drauf, bin halt noch neu in Delphi. *G*

Apollonius 27. Jun 2008 13:32

Re: Von TComponent nach TStringGrid parsen
 
Nein. In C++ bräuchtest du ein new, um einen Konstruktor explizit aufzurufen, ohne eine Variable zu deklarieren.

Errraddicator 27. Jun 2008 13:39

Re: Von TComponent nach TStringGrid parsen
 
Dann hätte ich aber automatisch nen Zeiger...
Ich meine wenn ich ne Instanz davon erzeugen wollte, dann würde doch ein "Instanz = Struktur()" reichen... :?:

Gut bei VCL-Komponenten geht das nich, da meckert der Compiler, aber ich mein jetzt allgemein gesehen. ^^

...

Aber is ja auch eigentlich egal, hab mein Problem ja erst ma gelöst und konnte die Daten in das Grid und die Summen in das entsprechende LabeledeEdit schreiben. :)

Apollonius 27. Jun 2008 13:40

Re: Von TComponent nach TStringGrid parsen
 
Probiere es aus. Es wird nicht funktionieren.

SirThornberry 27. Jun 2008 14:14

Re: Von TComponent nach TStringGrid parsen
 
sinnvoller als deine jetzige Variante fände ich es wenn du die dynamisch erzeugten Komponenten in deinem Array speicherst. Somit kannst du sie auch direkt über Variablen ansprechen ohne erst ein Array durchlaufen zu müssen worin du diese suchst.


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