![]() |
Re: [IDE-Experte] CustomHelp
Hi Andre...
danke daß Sie sich für dieses Produkt entschieden haben ;-) vielen Dank für die Anregungen. Zu Punkt1 ... Über die Reihenfolge hab ich auch lange nachgedacht... wie man's macht ist es irgendwie falsch Punkt2 ... Da hast du vollkommen recht kommt noch rein. Punkt3 ... komisch !DefaultKeywordIndex sollte eigentlich in jeder Hilfe dabei sein. Noch hab ich nicht herausgefunden, wie ich die NavDataMoniker auslesen kann geschweige denn, wie ich herausfinde welcher der Default ist ... *kopfschüttel* . Vielleicht hast du eine Idee. Es muss irgendwie gehen. Du kannst dir die verfügbaren Moniker mit ![]() Vorschlag zu der Sortierung... man könnte die Resultate auch in einer CategoryButton-Komponente anzeigen (wie die Komponentenpalette) mit ein wenig owner draw Gruß Marco |
Re: [IDE-Experte] CustomHelp
Hi,
Zitat:
Dei DevExpress-Hilfe ist zusätzlich als Plugin in der Embarcadero-Hilfe integriert. In diesem Index tauchen auch viele Keywords auf, die allerdings anscheinend nicht zu dem passen, was als HelpString übergeben wird (z.B. cxEdit.TcxCustomEdit.EditValue) :( Wird nur EditValue übergeben, findet er einige Einträge. Ach übrigens: Zu TObject (wird aufgelöst zu System.TObject) findet er auch nix :tongue: Aber das ist denke ich nicht der Fehler von CustomHelp ... zu TObject direkt wird was gefunden. Na dann erweitere ich mal die Suche, so das zusätzlich der letzte Teil nach dem Punkt gesucht wird, wenn sonst keine Namespace-Treffer vorhanden sind, oder so ... (Quelltext siehe unten) Zitat:
Hier mal der Code, mit dem ich die Auswahl momentan aufbaue:
Delphi-Quellcode:
Am Ende von TMyViewer.ShowHelp habe ich noch folgendes angepasst, damit man keine Endlosschleife bekommt wenn man die Auswahl abbricht:
function TMyViewer.GetHelpStrings(const HelpString: String): TStringList;
var idx: Integer; c, d, u : String; o, order : Integer; Index : IHxIndex; Topics : IHxTopicList; slot : integer; HelpStringPart: string; function EncodedHelpString: String; var i: integer; begin Result:=''; for i := 1 to Length(HelpString)do Result:=Result + '%'+Format('%.2x', [Ord(HelpString[i])]); end; procedure CheckHelpString(const HelpString: string); var idy: Integer; begin slot := Index.GetSlotFromString(HelpString); if AnsiContainsText(Index.GetStringFromSlot(slot), HelpString) then begin Topics := Index.GetTopicsFromSlot(slot); for idy := 1 to Topics.Count do begin inc(order); Result.Add(TCustomHelp.EncodeURL(Topics.Item(idy).Title[HxTopicGetRLTitle, 0], Topics.Item(idy).Location, Topics.Item(idy).URL, order)); end; end; end; begin //Weil wir bei UnderstandsKeyword gesagt haben, das wir das Keyword verstehen (Result = 1) //werden wir jetzt gefragt, welche Hilfethemen wir zu diesem Keyword liefern können //Die StringList wird vom Hilfesystem wieder freigegeben Result := TStringList.Create; HelpStringPart := HelpString; repeat idx := Pos('.', HelpStringPart); Delete(HelpStringPart, 1, idx); until idx < 1; order := 0; //Und jetzt noch die eigentlichen Hilfe-Namespaces durchsuchen for idx := 0 to GlobalCustomHelp.EnabledIndices.Count-1 do begin if supports(GlobalCustomHelp.EnabledIndices[idx], IHxIndex, Index) then begin CheckHelpString(HelpString); end; end; if order = 0 then for idx := 0 to GlobalCustomHelp.EnabledIndices.Count-1 do begin if supports(GlobalCustomHelp.EnabledIndices[idx], IHxIndex, Index) then begin CheckHelpString(HelpStringPart); end; end; for idx := 0 to GlobalCustomHelp.ProviderList.Count - 1 do begin TCustomHelp.DecodeURL(GlobalCustomHelp.ProviderList.Strings[idx], c, d, u, o); if Pos('://', u)>0 then begin inc(order); Result.Add(TCustomHelp.EncodeURL(c,d,u+EncodedHelpString, order)) end else if AnsiSameText(ExtractFileExt(u),'.hlp') then begin inc(order); Result.Add(TCustomHelp.EncodeURL(c,d,'winhlp://-k '+HelpString+' '+u, order)); end else if AnsiSameText(ExtractFileExt(u),'.chm') then begin inc(order); Result.Add(TCustomHelp.EncodeURL(c,d,'htmlhlp://'+HelpString+URL_SPLITTER+u, order)); end; end; end;
Delphi-Quellcode:
Außerdem habe ich mir den Selector angepasst, das der HelpString in der Caption angezeigt wird. Da wundert man sich doch, was man so als Suchbegriff übergeben bekommt.
else if HelpString <> '' then
ShowHelp(ForceSelector(HelpString)); Probleme hab ich im Moment z.B. noch, wenn ich eine fehlerhafte Anweisung abfrage. Da bekomme ich als HelpString "erroneous type" übergeben!? Besser wäre natürlich der selektierte Text ;) Teilweise bekomme ich noch Fehler in PasHelp.TestKeyword. Das scheint mit dem Kibitz-Feature zusammenzuhängen, und tritt nur auf, wenn die CustomHelp.bpl neu geladen wird. Ist also nicht so wichtig. PS: In der Projektdatei fehlt noch die Unit uMSHelpServices.pas. |
Re: [IDE-Experte] CustomHelp
Hmmmmmm.... mit langem (m)
Das mit dem "erroneous type" ist typisch RAD Studio 2009+. In der BDS2006 klappt das Prima. Da bekomm ich auch keinen Namespace des Objektes. Wenn du das mit dem selektierten Text hinbekommst wäre ich natürlich dankbar :-D. Ich werde das mit dem Punkt im Helptext mal berücksichtigen. |
Re: [IDE-Experte] CustomHelp
Neue Version... neues Glück
edit: Kleiner Tipp, die Auswahlbox merkt sich die geschlossenen Rubriken, sodaß weniger häufig benutzte "Handbücher" zugeschlagen bleiben :-) edit2: der Fehler mit dem "erroneous type" wird wirklich von Delphi verursacht. Sobald das Keyword innherhalb einer Methode oder Funktion abgefragt wird kommt auf jedes unbekannte Schlüsselwort dieses Keyword zurück. außerhalb von begin...end klappt es jedoch (obwohl es da genauso unbekannt sein dürfte.) |
Re: [IDE-Experte] CustomHelp
Und noch eine Release vorm Wochenende
|
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Tools rund um Delphi" nach "Open-Source" verschoben.
Liegt im Source vor |
Re: [IDE-Experte] CustomHelp
Zitat:
Wobei ich nicht weiß, ob idx bzw. Result -1 ist, wenn Execute false zurückgibt. Ansonsten (failsave):
Delphi-Quellcode:
Ansonsten sieht das gut aus, und eventuell teste ich das noch heute/morgen.
function THelpSelector.SelectKeyword(Keywords: TStrings): Integer;
var u : String; begin if not TFormHelpSelector.Execute(Keywords, Result, u) then Result := -1; end; MfG xZise |
Re: [IDE-Experte] CustomHelp
Hi Marco,
Zitat:
Delphi-Quellcode:
function TMyViewer.UnderstandsKeyword(const HelpString: String): Integer;
var hs : IHelpSystem; begin //Das Hilfesystem fragt uns: Verstehst du dieses Keyword (der Begriff unter dem Cursor)? if HelpString = 'erroneous type' then begin Result := 0; Exit; end; Result := 1; //ja! if GetHelpSystem(hs) then begin //Noch schnell dem Hilfesystem sagen, das wir einen eigenen Auswahldialog für die //verschiedenen Hilfethemen haben hs.AssignHelpSelector(THelpSelector.Create(HelpString)); end; end; |
Re: [IDE-Experte] CustomHelp
Hi Andre,
vieeeelen Dank. Jetzt klappt's super. Die Änderung ist auch schon im Repository. So macht 'ne Community echt Spaß schönen Tag noch Gruß Marco |
Re: [IDE-Experte] CustomHelp
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Marco,
anbei habe ich mal meine Änderungen als Patch (Stand R337) zusammengefasst.
Vielleicht ist ja das ein oder andere für dich dabei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 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