AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Hilfe einbinden - klappt nur halb ?!
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe einbinden - klappt nur halb ?!

Ein Thema von moelski · begonnen am 16. Mai 2005 · letzter Beitrag vom 18. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 10:48
Moin !

Ich versuche gerade eine Hilfe in meine Anwendung einzubauen. So irgendwie funzt das schon, aber nicht so recht.

Also, ich nutze folgendes:
Tutorial: http://www.dsdt.info/tutorials/htmlhelp/
Header bzw. Fix von hier: http://www.helpware.net/delphi/index.html
Popup Info hier: http://www.helpware.net/htmlhelp/how_to_whatsthis.htm
Achja und ich nutze D6.

Soweit so gut. Nun habe ich zum Erstellen von der CHM-Hilfe das Tool Help & Manual. Aber das ist sicherlich erstmal Nebensache. Nun verwende ich folgenden Code in meinem Projekt (biHelp ist auf True gesetzt!):

Delphi-Quellcode:
{Alle 'Whats This' und F1 Help_ContextPopup WinHelp-Ereignisse werden
hier ankommen}

procedure F1HelpEvent(ContextHelpID: Longint; X, Y: Integer);
var hhpopup: HH.THHPopup;
begin
  with hhpopup do begin
    // Größe dieser Struktur
    cbStruct := SizeOf(hhpopup);

    // Instanz-Handle für String-Ressource
    hinst := 0;

    // Enthält 0, eine Ressourcen-ID oder eine Topic-ID in
    // einer Textdatei
    idString := ContextHelpID;

    // Enthält den Text, der angezeigt werden soll, wenn idString 0 ist
    pszText := nil;

    // top center (in Pixeln) des Popup-Fensters
    pt := Point(x,y);

    // Textfarbe, verwende -1 für Standard; RGB-Wert (hier rot)
    clrForeground := COLORREF($000000FF);

    // Hintergrundfarbe, verwende -1 für Standard; RGB-Wert
    clrBackground := COLORREF(-1);

    // Anzahl an Leerzeichen zwischen Fensterrand und Text, -1 für
    // jeden Teil zum Ignorieren
    rcMargins := Rect(-1,-1,-1,-1);

    // Schrift: facename, point size, char set, BOLD ITALIC UNDERLINE
    pszFont := '';
  end;
  HtmlHelp(Form1.Handle,
    PChar(ExtractFilePath(ParamStr(0))+'Hilfe\Hilfe.chm::/Cshelp.txt'),
    HH_DISPLAY_TEXT_POPUP, DWORD(@hhpopup));
end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var chmFile: string;
begin
  chmFile := ExtractFilePath(ParamStr(0))+'Hilfe\Hilfe.chm';

  mHHelp := nil;

  if not FileExists(chmFile) then
    ShowMessage('Hilfe-Datei nicht gefunden'#13+chmFile);

  {HH 1.2 oder höher Versionskontrolle}
  if (hh.HHCtrlHandle = 0)
    or (hh_funcs._hhMajVer < 4)
    or ((hh_funcs._hhMajVer = 4) and (hh_funcs._hhMinVer < 73)) then
      ShowMessage('Diese Anwendung erfordert die Installation der '+
      'MS HTML Help 1.2 oder höher');

  {Hook - verwendet HH_FUNCS.pas}
  mHHelp := hh_funcs.THookHelpSystem.Create(chmFile, '', htHHAPI);
  mHHelp.HelpCallback2 := F1HelpEvent;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  HHCloseAll; // Schließt alle Hilfe-Fenster
  if Assigned(mHHelp) then
    mHHelp.Free;
end;

procedure TForm1.TBXItem2Click(Sender: TObject);
begin
  DefWindowProc(handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
end;
Nun passieren aber ganz seltsame Dinge ... Wenn ich z.B. die F1 Taste drücke dann kommt ein Popup. An dieser Stelle (also direkt nach dem Programmstart) sollte aber doch dann die Hilfe aufgehen, oder sehe ich da was falsch?
Eigentlich will ich die Popups doch nur, wenn ich auch den Button TBXItem2 angeklickt habe. Dieser Button hat bei mir aber garkeine Funktion.
Und dann noch eine Frage im Zusammenhang mit den Popups ... Angenommen ich habe da jetzt ein Label wo ich eine HilfeID vergebe. Nun kann ich ja auf die ID ein Popup "binden". Bedeutet das dann, das ich jetzt keine "normale" Hilfe mehr zu dem Label haben kann? Also ein Text in der HTML-Hilfe.

Und ich verstehe auch nicht so ganz die Sache mit den Popuptexten. Werden die jetzt in das CHM File mit reinkompiliert, oder muss ich die Datei extra mitliefern!?

Hoffe jemand kann mir ein paar Tips geben
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 11:04
Die Popups werden entweder in die Hilfedatei kompiliert, oder du rufst die Texte mit Hilfe der zuerst gezeigten Funktion auf. Im ersten Fall erfolgt die Zuordnung über die besagte numerische ID, die du im Objektinspektor einschaltest. Ansonsten kann man auch einen Text benutzen. Die Kommentare der Funktion "F1HelpEvent" sind IMHO aussagekräftig genug.


Dass bei F1 der Popup zu einem Control erscheint, liegt IMHO in der Natur der Sache. Im Beispiel aus den Win32-API-Tutorials von Luckie habe ich überprüft, ob es eine Kontext-ID gibt. Wenn Ja, dann wurde das Popup angezeigt. Wenn nicht, dann wurde/wird die Hilfedatei aufgerufen.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 12:50
Moin !

Zitat:
Dass bei F1 der Popup zu einem Control erscheint, liegt IMHO in der Natur der Sache. Im Beispiel aus den Win32-API-Tutorials von Luckie habe ich überprüft, ob es eine Kontext-ID gibt. Wenn Ja, dann wurde das Popup angezeigt. Wenn nicht, dann wurde/wird die Hilfedatei aufgerufen.
Aber das geht bei mir schon nicht ...

Also ich habe folgendes:
- Form1 hat HelpContext 0
- in meinem CHM ist eine Seite auf ID 0

Wenn ich nun F1 drücke, dann sollte doch die Hilfe aufgehen, oder?
Aber das passiert bei mir nix.

Weiter im Text ...
Habe z.B. ein Bild (TImage). HelpContext ist auf 2000.
In meinem CHM ist auch ein Part mit ID 2000.

Wenn ich nun den Button "What´s This" drücke kriege ich diesen Pfeil + Fragezeichen. Klicke ich auf das Bild, dann sollte doch eigentlich entweder die Hilfe aufgehen oder ein Popup kommen.
Aber es passiert auch hier rein gonix.

Und noch Misteriöser wird es wenn ich folgendes Mache ...
Button hat keine Help ID. Drücke ich den Button und halte die Maustaste gedrückt und betätige dann F1, dann kriege ich ein Popup mit der Meldung "keine Hilfe da ...". Und das auch noch ganz oben links auf dem Monitor. Nichtmal bei der Mausposition.

Also irgendwas ist doch da oberfaul, oder?! Ich weiss nur nicht was ...

Greetz

Nachtrag:
Wenn ich auf den Button What´s This klicke und dann ein Element anwähle, dann müsste doch eigentlich irgendwann die Procedure F1HelpEvent durchlaufen werden, oder?! Aber das passiert nicht. ^2
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 13:00
Tja, ich würde dir ja gern helfen, allerdings habe ich keine Ahnung von den Tools, die du benutzt hast. Ich erstelle meine CHM-Dateien mit meinem Lieblings-HTML-Editor und dem kostenlosen HTML Helpworkshop von Microsoft. (Eigentlich erstelle ich gar keine CHMs mehr, aber egal. )

Außerdem schrieb ich:
Zitat:
Im Beispiel aus den Win32-API-Tutorials von Luckie habe ich überprüft, ob es eine Kontext-ID gibt.
Und so sieht das aus:
Delphi-Quellcode:
WM_HELP:
  // Kontextinfo zu einem Control anzeigen
  if(PHelpInfo(lp)^.dwContextId > 0) then
    ShowHelp(PHelpInfo(lp)^.MousePos,PHelpInfo(lp)^.dwContextId)
  else
  // die Hilfe aufrufen
  if(PHelpInfo(lp)^.hItemHandle = wnd) or
    (GetParent(PHelpInfo(lp)^.hItemHandle) = wnd)
  then
    SendMessage(wnd,WM_COMMAND,MAKELONG(IDC_TOCBTN,BN_CLICKED),0)
  // normal fortsetzen
  else Result := DefWindowProc(wnd,uMsg,wp,lp);
Nur wird dir das nicht allzu viel helfen, weil es ein nonVCL-Sample ist. Und zu allem Übel benutze ich nicht mal die Helpware-Units, sondern ich bevorzuge die JEDI-Übersetzung der HtmlHelp-API.

Ich bin der Meinung, sobald du diesen Hilfe-Button in der Titelzeile benutzt, schaltet sich der F1-Hotkey dazwischen und geht immer davon aus, dass du Kontext-Hilfe zu irgendeinem Control sehen willst. Die Steuerung an sich übernimmt ja das Hilfe-API, in deinem Fall also die Helpware-Unit.
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 14:03
Zitat:
dem kostenlosen HTML Helpworkshop von Microsoft. (Eigentlich erstelle ich gar keine CHMs mehr, aber egal. )
Wo hast Du den her? Ich habe bei Microsoft nichts vinden können. Hast Du vieleicht einem Link?
Heike Kretschmann
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 14:32
das steht alles in dem obengenannten Tutorial.

mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 19:21
Moin !

Soderle, nachdem ich jetzt auf die JEDI Header umgestellt habe, geht es so langsam. Dennoch habe ich ein paar Ungereimtheiten ...

Kann es sein, dass es unter D6 ein paar Komponenten gibt, die nicht so recht wollen mit dem HelpIndex und der Hilfe? Wenn ich z.B. einem Label eine ID gebe, die def. vorhanden ist, dann wird die Hilfe nicht angezeigt. Die gleiche ID z.B. auf einen Button angewand geht problemlos.
Auch bei einer ComboBox (aus der ToolBar2000 Sammlung) geht die Hilfe nur wenn ich mit der Maustaste den Pfeil der ComboBox festhalte und dann F1 drücke.
Auch ein ganz normales TImage kann ich nicht überreden, mit meiner Hilfe zu harmonieren.

Hat jemand noch eine Idee wie ich das in den Griff kriege
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 19:26
Zitat von moelski:
Soderle, nachdem ich jetzt auf die JEDI Header umgestellt habe, geht es so langsam. Dennoch habe ich ein paar Ungereimtheiten ...
Wobei ich anmerken möchte, dass Robert Chandlers Unit (Helpware) immerhin dieses merkwürdige Problem ab Delphi 6 löst. Dazu gibt´s in Luckies Tutorials auch einen kleinen Absatz. IMHO hat Borland das Hilfesystem dermaßen verhunzt, dass es in einigen Fällen nicht mehr richtig reagiert. Und dafür hat Rob ja den Fix geschrieben.

Zitat:
Wenn ich z.B. einem Label eine ID gebe, die def. vorhanden ist, dann wird die Hilfe nicht angezeigt. Die gleiche ID z.B. auf einen Button angewand geht problemlos.
Wozu sollte man auch ein Label erklären wollen? Ein Label dient doch nur dazu, ein anderes Control, etwa ein Eingabefeld, etwas genauer zu erläutern, damit man eben weiß, dass hier
Code:
URL: [                 ]
eine Webadresse rein soll. Aber die tatsächliche Kontext-Hilfe, das Popup, würde eben nur beim Eingabefeld erscheinen und dort auch Sinn machen.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 19:38
Moin !

Zitat:
Und dafür hat Rob ja den Fix geschrieben.
Kann ich den auch mit den Jedi Headern nutzen?

Zitat:
Wozu sollte man auch ein Label erklären wollen?
Das war ja nur ein Test. Klar macht das nicht wirklich Sinn. Aber wie gesagt es gehen ja auch keine KomboBoxen und Images. Dort würde es schon Sinn machen.
Aber es geht eben einfach nicht

Also fragen wir mal so ... Was muss ich mit meiner Applikation noch anstellen, damit die Hilfe richtig geht?
Ich habe versuchshalber mal die D6OnHelpFix mit eingebunden, aber das ist auch noch nicht die Lösung ...

Kannst du mir noch einen Tip geben!?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Hilfe einbinden - klappt nur halb ?!

  Alt 16. Mai 2005, 19:47
Zitat von moelski:
Zitat:
Und dafür hat Rob ja den Fix geschrieben.
Kann ich den auch mit den Jedi Headern nutzen?
Musst du ausprobieren. Hier ist mein Beitrag dazu. Habe ich doch noch gefunden. 8) Es ging zwar um HLP, aber merkwürdig war es dennoch.

Zitat:
Aber wie gesagt es gehen ja auch keine KomboBoxen und Images. Dort würde es schon Sinn machen.
Comboboxen weiß ich jetzt nicht, aber Images machen auch keinen Sinn. Ein Image zeigt was an. Was willst du dem User dazu in einem Kontext-Popup sagen? "Hier sehen Sie ein Bild"? Ich glaube, das sieht der Anwender auch so. Bei Comboboxen gucke ich mal ob ich was finde; ggf. melde ich mich dann noch mal.

Zitat:
Ich habe versuchshalber mal die D6OnHelpFix mit eingebunden, aber das ist auch noch nicht die Lösung ...
Doch, es ist schon die Lösung. Zumindest um dieses merkwürdige Verhalten der Hilfe ab Delphi 6 zu umgehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz