AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Firemonkey (RAD Studio XE2) Start einer zweiten Anwendung unter MacOS

Firemonkey (RAD Studio XE2) Start einer zweiten Anwendung unter MacOS

Ein Thema von HendrikSturm · begonnen am 6. Nov 2018 · letzter Beitrag vom 7. Nov 2018
Antwort Antwort
HendrikSturm

Registriert seit: 18. Mai 2004
Ort: Kiel
133 Beiträge
 
Delphi XE2 Professional
 
#1

Firemonkey (RAD Studio XE2) Start einer zweiten Anwendung unter MacOS

  Alt 6. Nov 2018, 11:46
Guten Tag,

um externe Dateien (beispielsweise ein PDF) über meine "main.app" auszuführen benutze unten stehenden Code.
Die beispielsweise PDF Datei liegt dabei im Unterverzeichnis "PDF" in der main.app selbst.
Der Aufruf für die MacOS Datei die ich ausführen möchte lautet wie unten aufgeführt. Das Ganze funktioniert soweit zuverlässig.
Nun möchte ich aber eine weitere Anwendung "second.app" anstatt einer PDF starten.

Hier nun meine Fragen:
1. Darf die zweite Anwendung als Unterverzeichnis der ersten Anwendung "main.app" existieren, oder muss die in einem Verzeichnis außerhalb der main.app liegen?
2. Die Anwendung liegt auf einem USB-Stick und wird von dort gestartet. Wie ermittle ich das Laufwerk, auf dem die main.app läuft? Unter WINDOWS wäre das ja beispielsweise ExtractFileDrive, aber das liefert bei MacOS einen String der Länge Null.
3. Kann der Code unten überhaupt für das Ausführen einer Anwendung "second.app" verwendet werden (unabhängig in welchen Verzeichnis die Datei liegt) ? Ich habe mittlerweile recht viele Variationen ausprobiert, aber leider bisher ohne Erfolg.

Ich wäre sehr dankbar, wenn eine Antwort mit Codebeispiel auch für den Aufruf der Funktion/Prozedur käme. Ggf. liegt ja das Problem nicht in der Prozedur, sondern in der falschen Pfadübergabe.

Vielen Dank im Voraus! Beste Grüße Hendrik

*** Aufruf für MacOS***
Code:
  {$IFDEF POSIX}
    fDir := '"' + IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
    TMisc.Open(fDir+'PDF/demo.pdf"');
  {$ENDIF POSIX}

*** Unit für die Prozedur
Code:
unit U_fOpen;

interface

uses
{$IFDEF MSWINDOWS}
  Winapi.ShellAPI, Winapi.Windows;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Posix.Stdlib;
{$ENDIF POSIX}

type
  TMisc = class
    class procedure Open(sCommand: string);
  end;

implementation

class procedure TMisc.Open(sCommand: string);
begin

  {$IFDEF MSWINDOWS}
    ShellExecute(0, 'OPEN', PChar(sCommand), '', '', SW_SHOWNORMAL);
  {$ENDIF MSWINDOWS}

  {$IFDEF POSIX}
    _system(PAnsiChar('open ' + AnsiString(sCommand)));
  {$ENDIF POSIX}

end;
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
HendrikSturm

Registriert seit: 18. Mai 2004
Ort: Kiel
133 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Firemonkey (RAD Studio XE2) Start einer zweiten Anwendung unter MacOS

  Alt 7. Nov 2018, 17:44
Guten Tag,

ich beantworte meine Fragen jetzt mal selbst .

1. Darf die zweite Anwendung als Unterverzeichnis der ersten Anwendung "main.app" existieren, oder muss die in einem Verzeichnis außerhalb der main.app liegen?

Antwort: Meine Tests haben ergeben, dass die zweite App auch in der ersten App liegen darf.

2. Die Anwendung liegt auf einem USB-Stick und wird von dort gestartet. Wie ermittle ich das Laufwerk, auf dem die main.app läuft? Unter WINDOWS wäre das ja beispielsweise ExtractFileDrive, aber das liefert bei MacOS einen String der Länge Null.

Antwort: Sofern die zweite App in der ersten liegt, kann ich mit der Codezeile: fDir := '"' + IncludeTrailingPathDelimiter(ExtractFilePath(Param Str(0))); arbeiten. (Übrigens kann man natürlich auch "QuotedStr" verwenden). Was ich halt noch nicht weiß ist, welche Funktion mir nur das Laufwerk ausgibt auf dem die Anwendung läuft. Ich kann mir das natürlich selbst aus fDir oben zerlegen, aber gibt es da nicht ne schöne bestehende Funktion?

3. Kann der Code unten überhaupt für das Ausführen einer Anwendung "second.app" verwendet werden (unabhängig in welchen Verzeichnis die Datei liegt) ? Ich habe mittlerweile recht viele Variationen ausprobiert, aber leider bisher ohne Erfolg.

Antwort: Ja läuft einwandfrei auch zum Starten einer Anwendung. Und warum habe ich dann überhaupt die Frage gestellt? Das Problem scheint die zu startende second.app selbst gewesen zu sein. Die ist mit meinem alten MAC nicht mehr kompatibel. Was mich halt nur wundert ist, dass ich keinerlei Fehlermeldung erhalten habe. Wenn ich die Second.app per Doppelklick starte, dann bekomme ich den Hinweis, dass mein OS zu alt ist. Starte ich über meine Funktion/Prozedur, dann kommt keine Meldung.

HINWEIS: Und meine Versuche das Problem einzukreisen schlugen auch fehl, da auch FileExists immer Null zu liefern scheint unter MAC. Naja XE ist ggf. auch nicht mehr das neueste vom neuen und vielleicht hat sich ja auch ne Menge getan in der Zwischenzeit.

Danke fürs mitlesen ... Gruß Hendrik
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf