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 - Laat een applicatie zichzelf herstarten

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

Voor wie de post "Hoe krijg ik Retina aan de gang" heeft gelezen, zal al wel gemerkt hebben dat dit lastiger is dan gedacht. Om het te laten werken moet je een terminal commando uitvoeren en dat wordt pas actief als het programma daarna pas gestart wordt.

Hiervoor wil ik mijn Lazarus programma zichzelf laten herstarten indien nodig en daarvoor (met kleine aanpassing) vond ik de volgende oplossing in het Lazarus Forum die onder Mac OS X werkt.

Zorg ervoor dat "Process" in de Uses clausule staat.

Als eerste definieren we een procedure "Restart()" welke je op elk moment kunt aanroepen - let er wel op dat je niet in een eindeloze loop terrecht komt!

procedure Restart;
VAR aProcess : TProcess; //TProcess is crossplatform is best way
begin
  aProcess := TProcess.Create(nil);
  aProcess.CommandLine := '"'+Application.ExeName+'"';
  aProcess.Execute;
  aProcess.Free;
  Application.Terminate;
end;

Specifiek voor de Retina Mac's:

Ik heb het volgende (misschien wat slordige maar wel werkende) oplossing bedacht.

In het "OnCreate()" event van de hoofd form, kijken of AppleMaginifiedMode aanstaat of niet. Indien het aanstaat: uitschakelen en herstarten.

procedure TForm1.FormCreate(Sender: TObject);
var s:AnsiString;
begin
  // Retina, requires a restart to become effective.
  // First we read if the AppleMagnifiedMode is set or not
  RunCommand('/usr/bin/defaults',['read','com.yourcompany.yourapp','AppleMagnifiedMode'],s);
  // If set, it returns "Yes" (or possibly 1 or True - no guarantees here)
  s:=Uppercase(s);
  if (Pos('YES',s)>0) or (Pos('TRUE',s)>0) or (s='1') or (s='') then
    begin
      RunCommand('/usr/bin/defaults',['write','com.yourcompany.yourapp','AppleMagnifiedMode','NO'],s);
      Restart;
    end;    
...          // etc.

   
BeantwoordenCiteren
Deel: