Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zeiger auf ein StringGrid an eine Klasse übergeben


logos - Mi 04.02.04 19:38
Titel: Zeiger auf ein StringGrid an eine Klasse übergeben
Hallo,

ich hab jetzt schon längere Zeit in diesem Forum herumgesucht, bin aber bis jetzt noch auf keine Lösung gestoßen. Deshalb frage ich nun selbst: Wie stelle ich es an, dass ich einer Klasse einen Zeiger auf ein externes StringGrid übergebe, damit diese Klasse später darauf zugreifen kann. Mit extern meine ich ein StringGrid, das sich nicht innerhalb der Klasse befindet.
Hoffe es gibt hier jemand der mir da etwas weiterhelfen kann.
Vielen Dank schon mal im Voraus.

Gruß

logos


MaxiTB - Mi 04.02.04 19:40

Empfehle: property !


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type CLustig=class
 private:
 
  mGrid: TStringGrid;

 public:

  property Grid: TStringGrid read mGrid write mGrid;
end;


Setzen von außen kannst du es mit dem property Grid und intern hast du den member mGrid.


logos - Mi 04.02.04 20:23

Hm.... aber wenn ich dann innerhalb der Klasse etwas an diesem StringGrid ändere, dann hat es ja keine Auswirkung auf das äußere StringGrid. Oder versteh ich da was falsch?

Gruß

logos


MaxiTB - Mi 04.02.04 20:26

Da du nur eine Referenz übergibtst sind die beiden StringGrids identisch.

Oder sagen wir besser so: Es gibt nur eine StringGrid Instanz und zwei Objektreferenzen drauf. Welche Referenz du verwendest ist ja egal, weil beide auf die selber Instanz verweisen :wink: Probiers einfach mal aus.


Christian S. - Mi 04.02.04 20:27

Hallo!

Das StringGrid in der Klasse wurde ja nicht mit einem "Create" erzeugt. Durch die Zuweisung vom externen StringGrid zu dem StringGrid in der Klasse wird keine Kopie erzeugt, sondern in der Klasse lediglich eine Referenz auf das externe StringGrid hinterlegt.

Nehmen wir z.B. an, dass das extrene StringGrid "gridExt" heißt und folgender Code verwendet wird:

Delphi-Quelltext
1:
2:
PeterLustig := CLustig.Create;
PeterLustig.Grid := gridExt;

Dann ist es nun egal, ob Du über "PeterLustig.Grid" oder über "gridExt" auf das StringGrid zugreifst. Die beiden zeigen beide auf das selbe Grid. Es sind sozusagen nur zwei Namen für dasselbe Grid.

MfG
Peter


logos - Mi 04.02.04 20:33

Hallo,

vielen Dank für eure schnellen Antworten. Habs so gemacht, wie es MaxiTB vorgeschlagen hat und es hat funktioniert. Vielen Dank an dich MaxiTB.
Vielen Dank auch an Peter Lustig für die gute Erklärung.

Gruß

logos