AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein CHM-Datei im eigenen Formular anzeigen

CHM-Datei im eigenen Formular anzeigen

Ein Thema von joehoehal · begonnen am 7. Sep 2012 · letzter Beitrag vom 13. Sep 2012
Antwort Antwort
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#1

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 12. Sep 2012, 18:47
Hallo CCRDude,
danke für den Tipp. Das hat mich schon weiter gebracht, aber leider noch nicht ans Ziel.
Ich kann mit deinem Code das Hilfe-Fenster im Client-Bereich meines Formulars anzeigen. Allerdings sehe ich dann immer noch den Rahmen, der nicht zu meinem Style passt. Ich habe versucht, die störenden Bereiche mit Panels abzudecken. Das funktionert mit BringToFront auch. Aber sobald ich einmal außerhalb des Hilfe-Bereichs und dann wieder zurück klicke, kommen die abgedeckten Bereiche wieder zum Vorschein. Ich kann die Panels auch nicht wieder nach vorn bringen, weil ich kein Ereignis finde, das beim Klicken auf den Hilfe-Bereich ausgelöst wird.
Am besten wäre es, wenn man nicht das gesamte Hilfe-Fenster, sondern nur den Client-Bereich in ein ein anderes Formular einfügen könnte. Dafür habe ich aber weder in SetWindow einen geeigneten Parameter noch sonst eine brauchbare Prozedur gefunden.
Gruß! joehoehal
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 13. Sep 2012, 07:49
Das mit dem Client-Bereich meinte ich mit dem "Inhalt rausholen"

Mal kurz zwei Ansätze skizziert:
  1. Fenster größer machen als das Parent-Control, dann verschwindet der Rahmen auch. Siehe Ansatz mit rpmMain.
  2. Alle Kindelemente mit verschieben (das meintest Du, und auch schon ich mit "Inhalte rausholen). Mit viel Arbeit besser, aber da hat mein Code noch große Lücken (richtige Positionierung, vor allem aber das Message-Handling).

Nutzung in meinem Beispielprojekt:
Delphi-Quellcode:
procedure TForm1.bn1Click(Sender: TObject);
begin
   Application.HelpShowTableOfContents;
   FHelper.Control := panel2;
   FHelper.Attach('titel meiner hilfedatei');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   FHelper := THTMLHelpViewerHelper.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   FHelper.Free;
end;

procedure TForm1.panel2Resize(Sender: TObject);
begin
   FHelper.ReAlign;
end;
Hab's mal angehängt
Angehängte Dateien
Dateityp: pas snlHTMLHelpEmbedded.pas (9,5 KB, 24x aufgerufen)

Geändert von CCRDude (13. Sep 2012 um 07:49 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 13. Sep 2012, 07:59
Zitat:
Allerdings sehe ich dann immer noch den Rahmen,
Na ja wenn das alles ist?

Style := Style and not WS_BORDER;

gruss
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#4

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 13. Sep 2012, 08:12
Ok, mit der Methode von EWeiss geht es auch Nur auch WS_SIZEBOX ausschließen... in meiner Beispiel-Unit sähe die Methode RefreshChildHandles dann so aus:

Delphi-Quellcode:
procedure THTMLHelpViewerHelper.RefreshChildHandles;
var
   rClient, rWindow: TRect;
   iFrameWidth, iFrameHeight: integer;
   iStyle: integer;
begin
   if FMainWindowHandle > 0 then begin
      case FMethod of
         rpmMain: begin
               // get window dimensions to hide frame
               FMainWindowDiff.Left := 0;
               FMainWindowDiff.Right := 0;
               FMainWindowDiff.Top := 0;
               FMainWindowDiff.Bottom := 0;
               iStyle := GetWindowLong(FMainWindowHandle, GWL_STYLE);
               iStyle := iStyle and (not WS_BORDER) and (not WS_SIZEBOX);
               SetWindowLong(FMainWindowHandle, GWL_STYLE, iStyle);
               Windows.SetParent(FMainWindowHandle, FControl.Handle);
            end;
         rpmChilds: begin
               // we're resizing this to have e.g. toolbar wrapped according to target size
               Windows.SetWindowPos(FMainWindowHandle, 0, 0, 0, FControl.ClientWidth, FControl.ClientHeight, 0);
               // need to hide since it won't contain any further controls
               Windows.ShowWindow(FMainWindowHandle, SW_HIDE);
               // TODO : we need to change message loops etc. for this to work!
                // now moving all childs
               EnumChildWindows(FMainWindowHandle, @HelpWindowChildsEnum, integer(Self));
            end;
      end;
      ReAlign;
   end;
end;
  Mit Zitat antworten Zitat
joehoehal

Registriert seit: 5. Aug 2012
Ort: Halle (Saale)
21 Beiträge
 
Delphi XE2 Starter
 
#5

AW: CHM-Datei im eigenen Formular anzeigen

  Alt 13. Sep 2012, 09:25
Ich habe inzwischen eine ganz einfache Lösung gefunden:
  • Hilfe-Fenster nicht direkt im Client-Bereich des Formulars, sondern mit SetWindow / SetWindoPos auf einem Panel anzeigen.
  • Größe und Position des Panels so einstellen, dass der Rahmen des Hilfe-Fensters nicht sichtbar ist. So lässt sich auch das Resizing leicht reakisieren.
Sicher nicht die eleganteste Lösung, aber sie funktioniert und ist für meine Bedürfnisse ausreichend.

Geändert von joehoehal (13. Sep 2012 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz