AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kontextsensitive Hilfe aus Programm zu PDF

Ein Thema von TiGü · begonnen am 3. Nov 2015 · letzter Beitrag vom 4. Dez 2015
 
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Kontextsensitive Hilfe aus Programm zu PDF

  Alt 4. Dez 2015, 13:58
Heute endlich eine PDF mit Named Destinations von der Doku-Abeteilung bekommen.
Ich dachte ich bekomme es gar nicht hin, aber jetzt ist der Knoten geplatzt.
Also grundsätzlich gehts!

Der folgende Quellcode ist nicht schön, funktioniert aber soweit und sucht auch selbstständig den aktuell eingestellten PDF-Reader raus.
Getestet mit den neusten FoxIt- und Acrobat Reader.

Delphi-Quellcode:
uses
  System.Win.Registry, Winapi.ShellApi;

const
  NAMED_DESTINATION_PREFIX = '/A "nameddest=';
  REG_SHELL_OPEN_COMMAND = '\Shell\Open\Command';
  COMMAND_OPEN = 'open';

function GetAssociation(const DocFileName: string): string;
var
  FileExtension : string;
  FileClass: string;
  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create(KEY_EXECUTE);
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    FileClass := '';
    FileExtension := ExtractFileExt(DocFileName);
    if Reg.OpenKeyReadOnly(FileExtension) then
    begin
      FileClass := Reg.ReadString('');
      Reg.CloseKey;
    end;

    if FileClass <> 'then
    begin
      if Reg.OpenKeyReadOnly(FileClass + REG_SHELL_OPEN_COMMAND) then
      begin
        Result := Reg.ReadString('');
        Reg.CloseKey;
      end;
    end;
  finally
    Reg.Free;
  end;
end;

procedure DoOpenPDF(const PDFReader, FileName, NamedDestination: string);
var
  ExecuteResult: HINST;
  Parameters: string;
begin
  Parameters := NAMED_DESTINATION_PREFIX + NamedDestination + '" "' + FileName + '"';

  ExecuteResult := ShellExecute(
    Application.Handle,
    COMMAND_OPEN,
    PChar(PDFReader),
    PChar(Parameters),
    nil,
    SW_NORMAL
    );

  if ExecuteResult < 32 then
    RaiseLastOSError;
end;

procedure OpenPDF(const FileName: string; const NamedDestination: string = '');
var
  PDFReader: string;
begin
  PDFReader := GetAssociation('.pdf'); // 'FoxitReader.exe'; //'AcroRd32.exe';
  PDFReader := ExtractFileName(PDFReader);
  PDFReader := PDFReader.Replace('" "%1"', '', [rfReplaceAll, rfIgnoreCase]);

  DoOpenPDF(PDFReader, FileName, NamedDestination);
end;
  Mit Zitat antworten Zitat
 


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 21:31 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