Habe das anders gelöst!
Da ich eine GroupBox und ein Label darin haben wollte und das mit dem Code
CreateWindowEx(...)
nicht geklappt hatte habe ich rausgefunden das es auch mit der
VCL geht.
Ich habe das folgendermasen gelöst :
Delphi-Quellcode:
type
dOpenSLD: TOpenDialog;
procedure TfMain.dOpenSLDShow(Sender: TObject);
var
hParent: THandle;
rect: TRect;
pInfo: TGroupBox;
lInfo: TLabel;
begin
// Fensterhandle holen
hParent := GetParent(dOpenSLD.Handle);
// Position und Größe ermitteln
GetWindowRect(hParent, rect);
// Dialog vergrößern für Info
SetWindowPos(hParent, 0, 0, 0, rect.Right - rect.Left+250, rect.Bottom - rect.Top
, SWP_NOMOVE);
// Groupbox in Opendialog erstellen und anpassen
pInfo:=TGroupBox.Create(dOpenSLD);
// musste gesetzt werden sonst sah es aus wie zu Win 3.11 zeiten
pInfo.Ctl3D:=True;
pInfo.Color:=clBtnFace;
// GroupBox auf OpenDialog Fenster verschieben
pInfo.ParentWindow:=hParent;
// Namen zum wiederfinden zuweisen
pInfo.Name:='gbInfo';
// GroupBox positionieren
pInfo.Left:=rect.Right - rect.Left-5;
pInfo.Top:=10;
pInfo.Width:=240;
pInfo.Height:=rect.Bottom - rect.Top-50;
// Caption der GroupBox zuweisen
pInfo.Caption:='Datei Informationen';
// Label in GroupBox erstellen und anpassen
lInfo:=TLabel.Create(pInfo);
// Parent auf GroupBox
lInfo.Parent:=pInfo;
// Namen zum wiederfinden zuweisen
lInfo.Name:='lblInfo';
lInfo.Align:=alClient;
lInfo.Transparent:=True;
end;
procedure TfMain.dOpenSLDClose(Sender: TObject);
var pInfo: TGroupBox;
lInfo: TLabel;
begin
// GroupBox finden
pInfo:=(dOpenSLD.FindComponent('gbInfo') as TGroupBox);
//Label Finden
lInfo:=(pInfo.FindComponent('lblInfo') as TLabel);
// wenn gefunden löschen
if lInfo <> nil Then lInfo.Destroy;
if pInfo <> nil Then pInfo.Destroy;
end;
procedure TfMain.dOpenSLDSelectionChange(Sender: TObject);
var pInfo: TGroupBox;
lInfo: TLabel;
tInfo: TSLDFileInfo;
begin
// GroupBox finden
pInfo:=(dOpenSLD.FindComponent('gbInfo') as TGroupBox);
//Label Finden
lInfo:=(pInfo.FindComponent('lblInfo') as TLabel);
if lInfo = nil then Exit;
// SLDFileInfo Namen übergeben
tInfo.Filename:=dOpenSLD.FileName;
// und Info bekommen
if GetSLDFileInfo(tInfo) Then
// Info formatieren
lInfo.Caption:=Format(capOpenInfo,[tInfo.Name,tInfo.Datenpfad,
tInfo.Count,tInfo.Length])
Else
// wenn keine info dann Label leer
lInfo.Caption:='';
end;