Einzelnen Beitrag anzeigen

a-s-z-work

Registriert seit: 23. Feb 2009
8 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: [IDE-Experte] CustomHelp

  Alt 1. Okt 2009, 10:22
Hallo,

dieses Plugin ist ja super! Wenn so etwas doch mal als Standard dabei wäre

Ich bin gerade dabei alle Hilfen einzubinden und dabei sind mir ein paar Sachen/Probleme aufgefallen:
  • Ich habe die Reihenfolge der Einträge umgedreht. Namespace-Treffer sind jetzt zuerst aufgelistet. Könnte man ja vielleicht als Konfigurationsoption hinzufügen.
  • function THelpSelector.SelectKeyword:
    in der ersten Zeile sollte nicht idx, sondern Result initialisiert werden. Sonst gibt es einen Fehler wenn man die Auswahl abbricht.
    Delphi-Quellcode:
    function THelpSelector.SelectKeyword(Keywords: TStrings): Integer;
    var
      idx : integer;
      u : String;
    begin
      Result:=-1;
      if TFormHelpSelector.Execute(Keywords, idx, u) then
        Result:=idx;
    end;
  • procedure TCustomHelp.LoadEnabledNamespacesFromRegistry
    Ich habe Probleme mit manchen Namespaces (devExpress-Komponenten). Der Aufruf der Funktion GetNavigationObject löst eine Exception aus (Das Navigationsobject [!DefaultKeywordIndex] konnte nicht abgerufen werden), was dazu führt das das Package nicht mehr geladen werden kann. Deshalb habe ich den Code wie folgt erweitert:
    Delphi-Quellcode:
    procedure TCustomHelp.LoadEnabledNamespacesFromRegistry;
    var
      sl : TStringList;
      idx : integer;
      hxSession: IHxSession;
      hxIndex: IHxIndex;
      NavObject: IDispatch;
    begin
      FEnabledIndices.Clear;
      sl:=TStringList.Create;
      try
        ReadEnabledNamespacesFromRegistry(sl);

        for idx := 1 to Namespaces.Count do
        begin
          if sl.IndexOf(Namespaces.Item(idx).Name)>=0 then
          begin
            hxSession:=CoHxSession.Create;
            hxSession.Initialize('ms-help://'+Namespaces.Item(idx).Name,0);
            try
              NavObject := hxSession.GetNavigationObject('!DefaultKeywordIndex','');
              if Assigned(NavObject) and Supports(NavObject,
                          IID_IHxIndex,
                          hxIndex) then
              begin
                FEnabledIndices.Add(hxIndex);
              end;
            except on e: exception do
              begin
                ShowMessage('Error when checking namespace ' + Namespaces.Item(idx).Name + '! Disabling namespace.'#13#10+ e.Message);
                Self.WriteNamespacesToRegistry(Namespaces.Item(idx).Name, false);
              end;
            end;
          end;
        end;
      finally
        sl.Free;
      end;
    end;
    Kann mir da einer bei den DevExpress-Hilfedateien Tipps geben? In der "normalen" Hilfe funktioniert der Index natürlich

--
CU,
Andre
Andre
  Mit Zitat antworten Zitat