![]() |
Aufrufen des Default-PDF-Viewer unter Linux
Hallo allerseits,
hat jemand eine Idee, wie man unter Linux eine Datei (z.B. PDF) mit dem jeweiligen Default-Viewer aufrufen kann? Bisher funktioniert dies bei mir schon mal unter Windows, Android (hier beschränkt in untenstehendem Code auf PDF) und MacOS:
Delphi-Quellcode:
Grüße, Philipp
procedure TicTrainerF.displayPDFFileInDefaultViewer(filename:String);
{$IF DEFINED(ANDROID)} var fileuri: JParcelable; Intent: JIntent; {$ENDIF} {$IFDEF MACOS} var Workspace: NSWorkspace; {$ENDIF} begin {$IFDEF MSWINDOWS} ShellExecute(0,'open',pchar(filename),nil,nil,SW_shownormal); {$ENDIF} {$IFDEF ANDROID} fileuri := JParcelable(TJNet_Uri.JavaClass.fromFile(TJFile.JavaClass.init(StringToJString(filename)))); Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); intent.setType(StringToJString('application/pdf')); Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, fileuri); TAndroidHelper.Activity.StartActivity(Intent); {$ENDIF} {$IFDEF MACOS} Workspace := TNSWorkspace.Create; Workspace.openFile(NSSTR(filename)); {$ENDIF} {$IFDEF LINUX} //todo {$ENDIF} end; |
AW: Aufrufen des Default-PDF-Viewer unter Linux
Hallo,
installier Dir Lazarus und schau nach, wie die das machen. ![]() |
AW: Aufrufen des Default-PDF-Viewer unter Linux
Die Funktion von Lazarus ist an der Stelle super schön einfach. Aber wenn ich mir Lazarus installiere, komme ich nicht in den Linux-Quellcode der Funktion "openDocument", kann es mir daher leider auch nicht anschauen.
Kann man diese Lazarus-Lib lclintf irgendwie einfach in Delphi einbinden oder wie komme ich alternativ an den dort verwendeten Linux-Code? |
AW: Aufrufen des Default-PDF-Viewer unter Linux
Hallo,
laut diesem hier ist das doch Plattform-übergreifend. ![]() |
AW: Aufrufen des Default-PDF-Viewer unter Linux
Den Aufruf kannst Du zusammen mit FMXLinux (
![]()
Delphi-Quellcode:
erreichen.
FmuxOpenFile (PChar (Progname / Documentname));
Die Unit FMUX.api (eine FMXLinux-Unit) muss dazu eingebunden werden. Bei Bedarf, ein Tipp: In meinem aktuellen FireMonkey Buch gibt es im Kapitel 3 (Tipps und Tricks für Cross Platform Entwicklung) im Abschnitt 1 (Starten von anderen Anwendungen) zusätzliche Beispiele für andere (Desktop-) Plattformen. Die Arbeit mit FMXLinux macht richtig Spaß, man kann damit vollständige Desktop-Programme entwickeln. Auch unter dem aktuellen Delphi 10.3 funktioniert alles perfekt. |
AW: Aufrufen des Default-PDF-Viewer unter Linux
Es gibt dafür unter Linux nicht wirklich einen einheitlichen Standard. Am besten ist man meistens damit bedient, "xdg-open" aufzurufen. Allerdings muss dieses Skript nicht zwangsläufig überall installiert sein.
Lazarus scheint auch xdg-open zu verwenden, mit einem zusätzlichen Fallback für KDE und Gnome, falls xdg-open nicht vorhanden ist:
Delphi-Quellcode:
// Open a document with the default application associated with it in the system
function OpenDocument(APath: String): Boolean; var lApp: string; begin // Android uses this if Assigned(OpenDocumentWidgetsetImplementation) then begin Result := OpenDocumentWidgetsetImplementation(APath); Exit; end; Result := True; if not FileExistsUTF8(APath) then exit(false); lApp:=FindFilenameOfCmd('xdg-open'); // Portland OSDL/FreeDesktop standard on Linux if lApp='' then lApp:=FindFilenameOfCmd('kfmclient'); // KDE command if lApp='' then lApp:=FindFilenameOfCmd('gnome-open'); // GNOME command if lApp='' then Exit(False); if (APath<>'') and (APath[1]<>'"') then APath:=QuotedStr(APath); RunCmdFromPath(lApp,APath); end; |
AW: Aufrufen des Default-PDF-Viewer unter Linux
@Harry: Das Buch hatte ich mir just gestern schon bestellt. Ich finde auch, dass FMXLinux erstaunlich gut aussieht, habe bisher nur einen Fehler in TMediaPlayer mit der Lautstärkenregelung gefunden. Mir fehlt eigentlich nur die BluetoothLE-Implementierung unter Linux, damit es für mich auch kommerziell nutzbar wird, aber sehe es auch bisher mehr als Spielerei.
Und danke für beide Tipps, funktioniert. |
AW: Aufrufen des Default-PDF-Viewer unter Linux
OK, prima, freut mich, dass es funktioniert.
Falls noch nicht geschehen: Bei Problemen mit den FMXLinux-Framework das einfach auf der Bugtracker-Seite melden, i.d.R. reagiert Eugen relativ schnell mit entsprechenden Fixes: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 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