Hallo Chris, Hallo Achim!
Vielen Dank für die Denkansätze!
Es funktioniert jetzt!
Diese "Zeigergeschichten" sind mir (leider) immer noch ein Graus
Da war eure Unterstützung und das Gefühl nicht allein zu sein, schon sehr wertvoll! Für die Nachwelt hier noch mal beide Prozeduren in einer leicht verallgemeinerten Form ...
Delphi-Quellcode:
procedure ~~.SetHtmlWindowPos(NewCaption:String;
Top,Left,Width,Height:Integer); // Aufruf unmittelbar VOR
var WT : HH_WinType; // Hilfeaufruf, sonst wird
begin // Fenster an vordefinierter
fillchar(WT,SizeOf(WT),0); // Position geöffnet
with WT do begin
cbStruct :=SizeOf(WT);
pszType :=PChar('MainWindow'); // << Name des FensterTyps an DIESER Stelle übergeben!
fsValidMembers:=HHWin_Param_Rect; // NICHT im Aufruf von HtmlHelp()
pszCaption :=PChar(NewCaption);
rcWindowPos.Top :=Top;
rcWindowPos.Left :=Left;
rcWindowPos.Right :=Left+Width;
rcWindowPos.Bottom:=Top+Height;
end;
HtmlHelp(0,PChar(Application.HelpFile),HH_Set_Win_Type,DWord(@WT));
end;
function ~~.GetHtmlWindowPos(var iLeft,
iTop,
iWidth,
iHeight:Integer):Boolean; // Ermittelt NUR die aktuell
var WT : HH_WinType; // gültige "Startposition/-größe"
pWT : ^HH_WinType; // Werte eines von Anwender
Hnd : HWND; // verschobenen/in der Größe veränderten
begin // Fensters werden NICHT zurückgeliefert!
Result:=false;
pWT:=@WT;
fillchar(pWT^,SizeOf(pWT^),0);
pWT^.cbStruct:=SizeOf(pWT^);
// v- Name des FensterTyps an DIESER Stelle übergeben!
Hnd:=HtmlHelp(0,PChar(Application.HelpFile+'>MainWindow'),HH_Get_Win_Type,DWord(@pWT));
if Hnd>0 then
with pWT^.rcWindowPos do begin
iLeft :=Left;
iTop :=Top;
iWidth :=succ(Right-Left);
iHeight:=succ(Bottom-Top);
Result:=true;
end;
end;
Gruß Ralph
//edit: Tippfehler beseitigt