- Код: Выделить всё
- hexdump SI_project1-2774B5DF
 0000000 0002 fffc ffff 0000 0000 0000 0000
 000000e
Модератор: Модераторы
hexdump SI_project1-2774B5DF 
0000000 0002 fffc ffff 0000 0000 0000 0000     
000000e
Alexander писал(а):Предложенный код всякий раз при попытке запустить второй экземпляр программы создаёт накапливающиеся в /tmp при каждом запуске лок файлы следующего вида. Зачем ?
xchgeaxeax писал(а):А что там в них записано на 14 байт. Подозреваю, что это параметры командной строки, чтобы можно было открыть много документов в одном окне на разных вкладках.
unit Unit1;
{$mode objfpc}{$h+}
interface
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  SingleInstance;
type
  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
    procedure OtherInstanceParams(Sender: TBaseSingleInstance; aList: TStringList);
    procedure AppIdleHandler(Sender: TObject; var Done: Boolean);
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := @AppIdleHandler;
end;
procedure TForm1.OtherInstanceParams(Sender: TBaseSingleInstance; aList: TStringList);
begin
  if WindowState = wsMinimized then
    Application.Restore;
  Application.BringToFront;
  ShowMessage('Попытка запуска другого экземпляра.'+LineEnding+'Параметры запуска:'+LineEnding+aList.Text);
end;
procedure TForm1.AppIdleHandler(Sender: TObject; var Done: Boolean);
begin
  Application.SingleInstance.ServerCheckMessages;
  Done := True;
end;
end.
program project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  AdvancedSingleInstance, //обязательно перед Interfaces, подключает TAdvancedSingleInstance
  Interfaces, // this includes the LCL widgetset
  Forms, Unit1
  { you can add units after this };
{$R *.res}
begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.SingleInstanceEnabled := True;
  Application.SingleInstance.Start;
  if Application.SingleInstance.IsServer then begin
    Application.CreateForm(TForm1, Form1);
    TAdvancedSingleInstance(Application.SingleInstance).OnServerReceivedParams := @Form1.OtherInstanceParams;
    Application.Run;
  end else
    TAdvancedSingleInstance(Application.SingleInstance).ClientPostParams;
end.

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1