![]() |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Zitat:
Hab ich jetzt nicht so aus der Fragestellung herausgelesen. Darum dir Frage nach den Formaten. |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Ja, es ging mir schon um "beliebige" Dateien. Und klar, unterstellt wie bei Windows, dass dafür Anwendungen auf dem PC bereit stehen, die sich im System zum Öffnen und Drucken für den Dateityp registriert haben.
Aber wenn es sowas unter Linux nicht gibt, werde ich es dann wohl doch so machen, wie hier vorgeschlagen, dass ich zumindest für die wichtigsten Dateitypen prüfen werde, ob dafür Programme zum Öffnen auf dem System installiert sind und diese dann direkt mit einem richtigen Startparameter beim Start des Programms (bei Libre Writer z.B. "-p {Dateiname}") auf dem Drucker ausgebe. |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe das jetzt erst mal so gelöst, dass eine Reihe von Standard-Dokumententypen einfach mit den Programmen des Libre-Office-Pakets gedruckt werden, die ja eigentlich bei jeder größeren Linux-Distro mit dabei sind.
Delphi-Quellcode:
Gedacht ist diese Funktion z.B. wenn mann mehrere Dateien per Mail erhält (Textdokument, XLS und Powerpoint-Dateien), dann kann man die gewünschten Dateien auswählen und auf einmal zum Drucker schicken, man muss nicht jede einzelne Datei öffnen und die Druckfunktion aufrufen. Eine ungemeine Arbeitserleichterung (vgl. auch anl. Screenshot).procedure ExecACommand (cmd: string); var WrkProcess:TProcess; begin WrkProcess:=TProcess.Create(nil); WrkProcess.Options:=[poNoConsole]; WrkProcess.CommandLine:=Cmd; WrkProcess.Execute; WrkProcess.Free; end; procedure PrintOutThisFile (fn: String); var ext: string; begin ext := lowercase (ExtractFileExt (fn)); if pos (ext, '.odt.txt.doc.rtf.docx.pas.dfm') <> 0 then begin ExecACommand ('soffice --writer -p "' + fn + '"'); end; if pos (ext, '.ods.xls.xlsx.csv') <> 0 then begin ExecACommand ('soffice --calc -p "' + fn + '"'); end; if pos (ext, '.ppt.pptx') <> 0 then begin ExecACommand ('soffice --impress -p "' + fn + '"'); end; if pos (ext, '.bmp') <> 0 then begin ExecACommand ('soffice --draw -p "' + fn + '"'); end; end; procedure Tf_PrintFiles.bnPrintAllClick(Sender: TObject); var L: Integer; pa: string; begin for L := 0 to lbPrint.Count -1 do begin if lbPrint.checked[L] then begin PrintOutThisFile (lbPrint.items[L]); lbPrint.checked[L] := false; end; end; end; |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Du solltest vielleicht noch sicherstellen, dass du eventuelle Exceptions von
Delphi-Quellcode:
abfängst, die zum Beispiel kommen, wenn soffice nämlich nicht installiert ist, denn wenn auch jede Distro LibreOffice im jeweiligen PacketManager hat, so muss es nicht auf jeder Benutzerinstallation auch vorhanden sein (einer meiner beiden ArchLinux Rechner hat zum Beispiel kein LibreOffice installiert).
TProcess
Gruß, Sven |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
kioclient oder gnome-open wäre evtl noch eine Möglichkeit die weite Bereiche (KDE und Gnome) abdeckt.
|
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Zitat:
denn neuerdings sind String 0-basierend. :stupid: Darum würde ich dir eher zu den neueren und ganz neuen Features raten. z.B. ![]() ![]() Vorallem die Record-Helper sind immer 0-basierend und arbeiten somit überall gleich, auch im Windows. |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Du solltest die Programme dafür auch nicht fest eincoden. Lass es doch den User entscheiden, was wie geöffnet wird. Dann gibt es auch keine Probleme, wenn derjenige mal lieber Calligra, KOffice, AbiWord, Gnumeric, OpenOffice, CheGuevaraOffice oder whatever benutzt, evtl. auch unter irgendeinem exotischen Pfad, der nicht in $PATH steckt. KDE und GNOME haben für sowas auch zentrale Einstellungen, du kannst ja schauen ob du dich einer davon bedienen willst. Der User freut sich bestimmt, nicht alles bei jedem Programm aufs neue setzen zu müssen. Ansonsten mach einfach einen Einstellungsdialog dafür, mit ner Tabelle, immer links das Dateimerkmal (könnte man als Endung umsetzen oder als allgemeinere Maske, z.B. Wildcards oder RegEx; oft haben Dateien unter GNU/Linux nämlich auch gar keine Endung, gibt z.B. die Konvention, reine Textdateien, die zum lesen bestimmt sind (also nicht zum weiterverarbeiten) einfach nur in VERSALIEN zu schreiben, z.B. "INSTALL", "README", "AUTHORS", "COPYRIGHT", ...; und dann gibts noch die schöne "Makefile"; Ausführbares hat entweder nie eine Endung (binaries) oder sie ist optional (Skripte, wenn sie ein Shebang haben); manchmal spiegelt der Teil hinterm Punkt auch was völlig anderes wieder als den Typen, z.B. sind /etc/rc.local und /etc/rc.shutdown beides Shellskripte) und rechts dann die Kommandozeile dafür.
|
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
An JamesTKirk (als alter Star-Trek-Fan kann ich nur sagen, cooler Name!):
Danke, guter Hinweis, werde ich da noch einbauen. An creed steiger: gnome open funktioniert aber nicht unter Linux mint, da muss man was anderes nehmen. An himitsu: Ja, das stimmt zwar, aber mein Code ist in Free Pascal 2.6.x / Lazarus 1.26 geschrieben, da gibt es noch kein s.Tolower etc. (und zur Erinnerung, hier geht es um Linux:wink:) An implementation: Ja, könnte man optional auswählbar machen. Wäre natürlich mit etwas Arbeit verbunden für den User... |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Zitat:
Sorry, dass ich das so sage, aber so etwas hartzukodieren finde ich ziemlich interopatibilitätsfeindlich und das ist auf einem Multikulti-OS, das bei jedem anders funktioniert, eine ziemliche Todsünde. Ich drück das so drastisch nicht aus, weil ich dich irgendwie beleidigen will oder so, sondern es ist wirklich so, dass Setup A potenziell völlig anders aussieht als Setup B. Es gibt nichts, wovon du annehmen kannst, dass es immer vorhanden ist, außer vielleicht die libc, POSIX und bei grafischen Oberflächen höchstens noch XDG. Du musst nicht für alle Fälle eine Lösung bieten, das ist klar, wird auch selten erwartet. Aber es kommt sehr negativ rüber, wenn man es dann nicht einmal selbst anpassen kann. Also ernsthaft: Mach es irgendwie änderbar, wenn auch nur über eine sonstwo versteckte Konfigdatei, oder eben über einen externen Mechanismus. |
AW: Äquivalent für ShellExecute ("print", Filename) unter Linux
Wie Delphi für Linux mal aussehn wird, weiß auch noch keiner so genau.
Aber selbst Lazarus/FreePascal sollte Befehle wie ContainsText und MatchText kennen, welche genau das machen, was man eigentlich machen will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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