Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TStringGrid zur Laufzeit erzeugen


torstena - Mo 11.09.06 21:22
Titel: TStringGrid zur Laufzeit erzeugen
Mein Problem - wenn es für viele sicher auch lachhaft ist: Ich möchte zu Testzwecken zur Laufzeit ein StringGrid auf einem Form erzeugen.
Habe also zu diesem Zweck ein neues Projekt mit folgendem Code erzeugt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
program StringGridTest;

uses
  Forms,
  TestUnit in 'TestUnit.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
unit TestUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  aGrid: TStringGrid;

implementation

{$R *.dfm}

procedure TForm1.FormClick(Sender: TObject);
begin
  aGrid.Create(Self);
end;

end.


Bekomme aber beim Klick in das Form zur Laufzeit die Meldung, dass eine EAccessViolation beim Lesen von Adresse 00000000
aufgetreten ist. Wo liegt mein Fehler?

Gruß
Torsten


Marc. - Mo 11.09.06 21:28


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var sg: TStringGrid;
begin
 sg := TStringGrid.Create(nil);
 sg.ColCount := 10;
 sg.RowCount := 10;
 sg.Parent := Form1;
 // ...
 sg.free;
end;


1. Instanz erzeugen
2. Konstrukor wie oben aufrufen
3. parent setzen
4. mit free später wieder freigeben

Marc ;)


Carl Johnson - Mo 11.09.06 21:39

Dem ist nicht viel hinzuzufügen, ausser, dass du dabei auch noch andere Eigenschaften setzten kannst(ausser RowCount usw.).


torstena - Sa 16.09.06 10:27
Titel: Danke!
Vielen Dank für die schnellen, zielführenden Tipps, haben mir toll weitergeholfen.

Gruß
Torsten