Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Deel:
Meldingen
Alles wissen

[Opgelost] Lazarus - MacOS X - Hoe doe je "Openen Met" voor jouw Applicatie's bestanden

1 Berichten
1 Gebruikers
0 Reactions
1,154 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter  

Soms wil je dat jouw programma verbonden wordt met een bepaald bestandstype. Dus gewoon dubbel klikken van een bestand zorgt ervoor dat of jouw programma gestart wordt en het bestand wordt geladen, of dat als het programma al openstaat dat het betreffende bestand wordt geladen.

Dus ... hoe doen we dat onder MacOS X met Lazarus Pascal?

We hebben hier 2 stappen voor nodig.

1) Zorg ervoor dat jouw Mac het bestandstype met jouw applicatie associeert.

We doen dit door de Info.plist van jouw applicatie aan te passen - je vindt het door de applicatie package met rechts aan te klikken en te kiezen voor "Show package content" (een package is in feite een directory met de ".app" extensie welke MacOS X anders behandelt en weergeeft als een enkel bestand).

In de "Contents" folder vindt je dan de Info.plist file. Je kunt dit bestand met een tekst editor bewerken. Ik adviseer om eens naar TextWrangler te kijken, het is gratis in de Apple AppStore.

In de Info.plist, vindt je zoiets als dit:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>English</string>
  ... // voor de leesbaarheid wat regels weggelaten
  <key>CFBundleDocumentTypes</key>
  <array>
    <dict>
      <key>CFBundleTypeRole</key>
      <string>Viewer</string>
      <key>CFBundleTypeOSTypes</key>
      <array>
        <string>fold</string>
        <string>disk</string>
        <string>*</string>
      </array>
    </dict>
  </array>
  <key>CFBundleIconFile</key>
  <string>icon.icns</string>
  <key>NSHighResolutionCapable</key>
  <true/>
</dict>
</plist>
<array>   

Hier moeten we een variable toevoegen. In mijn voorbeeld gebruik ik de extensie ".myextension".

Hiervoor moeten we de variable "CFBundleTypeExtensions", zoals je hieronder ziet, toevoegen. Vergeet niet dat de extensie ZONDER puntje ingevoerd moet worden. Meer plist informatie kan hier worden gevonden.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>English</string>
  ... ///Voor de leesbaarheid even wat regels weggelaten
  <key>CFBundleDocumentTypes</key>
  <array>
    <dict>
      <key>CFBundleTypeRole</key>
      <string>Viewer</string>
      <key>CFBundleTypeExtensions</key>
      <array>
        <string>myextension</string>
      </array>
      <key>CFBundleTypeOSTypes</key>
      <array>
        <string>fold</string>
        <string>disk</string>
        <string>*</string>
      </array>
    </dict>
  </array>
  <key>CFBundleIconFile</key>
  <string>icon.icns</string>
  <key>NSHighResolutionCapable</key>
  <true/>
</dict>
</plist>
<array>  

2) Zorg ervoor dat jouw applicatie het bestand ook echt opent als MacOS X daarom vraagt.

Vroeger in Turbo Pascal (en Delphi) dagen, kon je hiervoor "ParamStr" gebruiken, maar dat werkt onder MacOS X gewoon niet.

Zet als eerste de property "AllowDropFiles" van jouw hood Form op TRUE.

Plaats vervolgens een TApplicationProperties op het TForm, en zet de "OnDropFiles" event. Bij dit event worden er filename(s) doorgegeven.

procedure TForm1.ApplicationProperties1DropFiles(Sender: TObject; const FileNames: array of String);
begin
  if Length(Filenames)>0 then
    begin
      LoadMyFile(Filenames[0]);
      // and do whatever is needed to handle the file
    end;
end;        

Ik ga in dit voorbeeld ervan uit dat er maar 1 bestand gestuurd wordt, maar Filenames kan meerdere bestanden bevatten.

Testen is wat lastiger, ik moest de gecompileerde applicatie naar de Applications folder slepen en daar een keer starten. Meteen daarna zie je dat de Finder nu het betreffende bestandsformaat meteen met jouw applicatie opent of dat jouw applicatie in de "Openen met" lijst verschijnt.


   
BeantwoordenCiteren
Deel: