Einzelnen Beitrag anzeigen

taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: HtmlHelp-API - HH_Set_Win_Type / HH_Get_Win_Type

  Alt 12. Jan 2008, 19:32
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
Ralph
  Mit Zitat antworten Zitat