Danke. Es wird langsam klarer und zeigt sich, dass es für Gelegenheitprogrammierer wie mich schwer werden dürfte. Ich habe jetzt folgendes zusammengebastelt. Allerdings weiß ich nicht, wie ich herausbekomme, ob der Benutzer ein Form selbst mit Close "zerstört" hat:
Delphi-Quellcode:
Type
TMainForm = Class(TForm)
BtnAdd : TButton;
BtnInfo : TButton;
PCPics : TPageControl;
Procedure FormCreate(Sender: TObject);
Procedure BtnAddClick(Sender: TObject);
Procedure BtnInfoClick(Sender: TObject);
Procedure FormDestroy(Sender: TObject);
Protected
fCount : Integer;
fPicList : TList;
End;
Var
MainForm : TMainForm;
Implementation
{$R *.dfm}
Procedure TMainForm.FormCreate(Sender: TObject);
Begin
fCount:=0;
fPicList:=TList.Create;
End;
Procedure TMainForm.BtnAddClick(Sender: TObject);
Var
aPNG : TPngImage;
lForm : TDockForm;
Begin
aPNG:=TPngImage.Create;
Try
aPNG.LoadFromFile('.TestBilder\_0001.png');
aPNG.RemoveTransparency;
lForm:=TDockFormClass.Create(PCPics);
Try
lForm.ManualDock(PCPics, nil, alClient);
lForm.Visible:=True;
LForm.IMGScan.Picture.Bitmap.Assign(aPNG);
Inc(fCount);
lForm.Caption:='Bild ' + FormatFloat('0,', fCount);
fPicList.Add(lForm); // <- in Liste merken
lForm:=nil; // 1:1 übernommen
Finally
lForm.Free; // 1:1 übernommen
PCPics.ActivePageIndex:=Pred(PCPics.PageCount);
End;
Finally
aPNG.Free;
End;
End;
Procedure TMainForm.BtnInfoClick(Sender: TObject);
Var
I : Integer;
lDockForm : TDockForm;
Begin
If (fPicList.Count = 0) Then Exit;
I:=PCPics.ActivePageIndex;
lDockForm:=fPicList.Items[I];// <- so greife ich jetzt zu.
With lDockForm Do
Try
ShowMessage('Original' + #09 + BoolToStr(RBorgjpg.Checked, True));
Finally
End;
End;
Procedure TMainForm.FormDestroy(Sender: TObject);
Begin
Try
While (fPicList.Count > 0) Do fPicList.Delete(0);
Finally
fPicList.Free;
End;
End;
End.
[edit]
Also der Zugriff klappt.
Bleibt die Frage, wie ich herausbekomme, ob der Benutzer eine Form gelöscht hat...
[/edit]