Autor Beitrag
rmasterb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71



BeitragVerfasst: Fr 18.04.03 10:01 
Hallo Leutz,

ich hab wiedermal ein kleines aber feines Problemchen, welches ich nicht alleine lösen kann. ich übergebe einer onclick-methode (aus Form2) eine procedure einer anderen Form:
ausblenden Quelltext
1:
ok.OnClick := Form1.NeuerTabsheet;					

so in der Form1 wird auch dieser Tabsheet (name:=pages[i]) erstellt,
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.NeuerTabsheet(Sender: TObject);
begin
 form2.Hide;
 setlength(pages,Pagecontrol1.PageCount+2);
 Pages[length(Pages)] := TTabsheet.Create(self);
 Pages[length(Pages)].PageControl := Pagecontrol1;
 Pagecontrol1.ActivePage := Pages[length(Pages)];

 form2.close;
end;

doch wenn ich dann das Programm schließe zeigt er einen (für mich undeutbaren) Fehler an:
Zitat:
Exception EInvalidPointer in Modul Project1.exe bei 0000270C.
Ungültige Zeigeroperation
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 18.04.03 10:07 
Wenn Du das so machst, solltest Du beim Beenden des Programms die TabSheets auch wieder freigeben. Das musst Du schließlich bei allen selbst erstellten Objekten machen.

Gruß
rmasterb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71



BeitragVerfasst: Fr 18.04.03 10:37 
hab ich gemacht funzt aber trotzdem nicht
es kommt immer noch derselbe felher
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 18.04.03 10:39 
Ist es eigentlich von Dir beabsichtigt, dass Du den Pages-Array um 2 vergrößerst, aber nur ein TabSheet dann wirklich erstellst?
rmasterb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71



BeitragVerfasst: Fr 18.04.03 11:06 
ja warum ich das machen muß verstehe ich zwar auch nicht, aber wenn ich es nicht mache kommt wieder ein fehler;warum auch immer :nixweiss:
auf jeden fall weiß ich,dass er den array mit [0..1] beginnt und immer nur eins erhöht.

ich poste jetzt einfach mal den code:
ausblenden volle Höhe 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:
32:
33:
var
  Form1: TForm1;
  TSPages:array of TTabsheet;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Neu1Click(Sender: TObject);
begin
 Form2.show;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
var i:integer;
begin
 close;
 for i:=0 to Pagecontrol1.PageCount do
  Pagecontrol1.Pages[i].Free;
end;

procedure TForm1.NeuerTabsheet(Sender: TObject);
begin
 form2.Hide;
 setlength(TSPages,Pagecontrol1.PageCount+2);
 TSPages[length(TSPages)] := TTabsheet.Create(self);
 TSPages[length(TSPages)].PageControl := Pagecontrol1;
 Pagecontrol1.ActivePage := TSPages[length(TSPages)];

end;
end.


das war die form1 und jetzt die form2:


ausblenden volle Höhe 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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
 // Code ... 
  private
    procedure clicken(Sender: TObject);
    { Private-Deklarationen }
  end;

var
  Form2: TForm2;
  mannschaft,einzel,man,weib : tcheckbox;
  geret: array [1..8]of tcheckbox;
implementation

uses Unit1;

{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin

// Komponeneten erstellen + Code ....

mannschaft.OnClick := clicken;
einzel.OnClick := clicken;
man.OnClick := clicken;
weib.OnClick := clicken;
ok.OnClick := Form1.NeuerTabsheet;
end;

procedure TForm2.clicken(Sender: TObject);
begin
 // Code ....
end;


procedure TForm2.FormDestroy(Sender: TObject);
var i:integer;
begin
 ok.OnClick := clicken;
 mannschaft.Free;
 einzel.Free;
 man.Free;
 weib.free;
 for i:=i to 8 do
 geret[i].Free;
end;

end.
rmasterb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71



BeitragVerfasst: Fr 18.04.03 16:02 
ok hab den fehler gefunden