Check-in [a21c185f65]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Show file size and dates of file (and of eventual reparse point target). Keep showing the appropriate info windows when switching to 'stay on top' or to a different application.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | develop
Files: files | file ages | folders
SHA1:a21c185f651fc75a1c2e0f6e9d48b9db1add2824
User & Date: tinus 2015-02-17 16:31:37
Context
2015-02-17
16:32
Enable changing order of renderers (changes are not stored yet). check-in: c4b41ad964 user: tinus tags: develop
16:31
Show file size and dates of file (and of eventual reparse point target). Keep showing the appropriate info windows when switching to 'stay on top' or to a different application. check-in: a21c185f65 user: tinus tags: develop
2015-02-16
17:26
Started on UI for managing engines and renderers. check-in: 1abbd1295e user: tinus tags: develop
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ZPreview/src/Delphi/F_Info.dfm.

12
13
14
15
16
17
18

19
20
21
22
23
24
25
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  FormStyle = fsStayOnTop
  OldCreateOrder = False
  ScreenSnap = True

  OnHide = FormShowHide
  OnShow = FormShowHide
  PixelsPerInch = 96
  TextHeight = 13
  object lvwFields: TListView
    AlignWithMargins = True
    Left = 3







>







12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  FormStyle = fsStayOnTop
  OldCreateOrder = False
  ScreenSnap = True
  ShowHint = True
  OnHide = FormShowHide
  OnShow = FormShowHide
  PixelsPerInch = 96
  TextHeight = 13
  object lvwFields: TListView
    AlignWithMargins = True
    Left = 3

Changes to ZPreview/src/Delphi/F_Info.pas.

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
..
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
...
225
226
227
228
229
230
231


232

















































233
234
235
236

237
238
239





240

241


242










243
244
245
246
247
248
249
...
254
255
256
257
258
259
260
261
262


263
264
265
266
267
268
269
    actCopyAll: TAction;
    Copy1: TMenuItem;
    procedure FormShowHide(Sender: TObject);
    procedure actCopySelectedExecute(Sender: TObject);
    procedure actCopyAllExecute(Sender: TObject);
  private
    { Private declarations }
    function GroupID(const GroupHeader: string): integer;

    procedure Add(const Group, Name, Value, Chars: string); overload;
    procedure Add(const Group, Name: string; const Value: Integer); overload;
    procedure Add(const Group, Name, Prefix: string; const Value: Integer); overload;
    procedure Add(const Group, Name: string; const Value: AnsiChar); overload;
    procedure Add(const Group, Name: string; const Value: string); overload;
    procedure Add(const Group, Name: string; const Value: Integer; const Names: array of string); overload;
................................................................................
{ TfrmInfo }

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.FormShowHide(Sender: TObject);
begin
  frmMain.ActionManager.FindItemByAction(frmMain.actViewImageInfo).Action.Checked := Visible;
  AlphaBlend := True;
end;

{ ------------------------------------------------------------------------------------------------ }
function TfrmInfo.GroupID(const GroupHeader: string): integer;
var
  i: Integer;
begin
  for i := 0 to lvwFields.Groups.Count - 1 do begin
    if SameText(GroupHeader, lvwFields.Groups[i].Header) then begin
      Result := i;
      Exit;
    end;
  end;
  with lvwFields.Groups.Add do begin
    Header := GroupHeader;
    Result := Index;
    State := [lgsNormal];
................................................................................

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.Add(const Group, Name, Value, Chars: string);
var
  Item: TListItem;
begin
  Item := lvwFields.Items.Add;
  Item.GroupID := GroupID(Group);
  Item.Caption := Name;
  Item.SubItems.Add(Value);
  Item.SubItems.Add(Chars);
end;
{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.Add(const Group, Name: string; const Value: Integer);
begin
................................................................................
    end;
    Result := StringOfChar('.', Length(cAttr)) + ' [' + Result + ']';
    for i := Low(cAttr) to High(cAttr) do begin
      Result[i] := csAttr[(Attr and cAttr[i]) <> 0][i];
    end;
  end {GetAttributesString};
  { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }


var

















































  Attr: Integer;
  Target: WideString;
  LinkType: TReparsePointType;
begin

  Add(Filename, 'File name', ExtractFileName(Filename));
  Add(Filename, 'File path', ExtractFilePath(Filename));
  Attr := FileGetAttr(FileName, False);





  Add(Filename, 'Attributes', '0x' + IntToHex(Attr, 2), GetAttributesString(Attr));

  if ((Attr and faSymLink) <> 0) and FJunction.FGetSymlinkInfo(Filename, Target, LinkType) then begin


    Add(Filename, SReparsePointType[LinkType] + ' target', Target);










  end;
end {TfrmInfo.PopulateFileName};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.PopulateLine(const Group, Key, Short, Long: string);
var
  Item: TListItem;
................................................................................
  Item.SubItems.Add(Long);
end {TfrmInfo.PopulateLines};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.StartPopulatingLines(const Filename: string; const Clear: boolean);
begin
  lvwFields.Items.BeginUpdate;
  if Clear then
    lvwFields.Items.Clear;


  PopulateFileName(Filename);
end {TfrmInfo.StartPopulatingLines};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.StopPopulatingLines;
begin
  AutosizeColumns;







|







 







|


|





|







 







|







 







>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




>
|
|
<
>
>
>
>
>
|
>
|
>
>
|
>
>
>
>
>
>
>
>
>
>







 







|

>
>







20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
..
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
...
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290

291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
...
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
    actCopyAll: TAction;
    Copy1: TMenuItem;
    procedure FormShowHide(Sender: TObject);
    procedure actCopySelectedExecute(Sender: TObject);
    procedure actCopyAllExecute(Sender: TObject);
  private
    { Private declarations }
    function GetGroupID(const GroupHeader: string): integer;

    procedure Add(const Group, Name, Value, Chars: string); overload;
    procedure Add(const Group, Name: string; const Value: Integer); overload;
    procedure Add(const Group, Name, Prefix: string; const Value: Integer); overload;
    procedure Add(const Group, Name: string; const Value: AnsiChar); overload;
    procedure Add(const Group, Name: string; const Value: string); overload;
    procedure Add(const Group, Name: string; const Value: Integer; const Names: array of string); overload;
................................................................................
{ TfrmInfo }

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.FormShowHide(Sender: TObject);
begin
  frmMain.ActionManager.FindItemByAction(frmMain.actViewImageInfo).Action.Checked := Visible;
  AlphaBlend := True;
end {TfrmInfo.FormShowHide};

{ ------------------------------------------------------------------------------------------------ }
function TfrmInfo.GetGroupID(const GroupHeader: string): integer;
var
  i: Integer;
begin
  for i := 0 to lvwFields.Groups.Count - 1 do begin
    if SameText(GroupHeader, lvwFields.Groups[i].Header) then begin
      Result := lvwFields.Groups.Items[i].GroupID;
      Exit;
    end;
  end;
  with lvwFields.Groups.Add do begin
    Header := GroupHeader;
    Result := Index;
    State := [lgsNormal];
................................................................................

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.Add(const Group, Name, Value, Chars: string);
var
  Item: TListItem;
begin
  Item := lvwFields.Items.Add;
  Item.GroupID := GetGroupID(Group);
  Item.Caption := Name;
  Item.SubItems.Add(Value);
  Item.SubItems.Add(Chars);
end;
{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.Add(const Group, Name: string; const Value: Integer);
begin
................................................................................
    end;
    Result := StringOfChar('.', Length(cAttr)) + ' [' + Result + ']';
    for i := Low(cAttr) to High(cAttr) do begin
      Result[i] := csAttr[(Attr and cAttr[i]) <> 0][i];
    end;
  end {GetAttributesString};
  { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
  function InternalEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,
    AMilliSecond: Word): TDateTime;
  var
    LTime: TDateTime;
    Success: Boolean;
  begin
    Result := 0;
    Success := TryEncodeDate(AYear, AMonth, ADay, Result);
    if Success then
    begin
      Success := TryEncodeTime(AHour, AMinute, ASecond, AMilliSecond, LTime);
      if Success then
        if Result >= 0 then
          Result := Result + LTime
        else
          Result := Result - LTime
    end;
  end {InternalEncodeDateTime};
  { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
  function DateTimeFromFileTime(const FileTime: TFileTime): TDateTime;
  var
    LFileTime: TFileTime;
    SysTime: TSystemTime;
  begin
    Result := 0;
    FileTimeToLocalFileTime(FileTime, LFileTime);
    if FileTimeToSystemTime(LFileTime, SysTime) then
      Result := InternalEncodeDateTime(SysTime.wYear, SysTime.wMonth, SysTime.wDay,
        SysTime.wHour, SysTime.wMinute, SysTime.wSecond, SysTime.wMilliseconds);
  end {DateTimeFromFileTime};
  { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
  procedure AddSizeAndDates(const Group: string; const FAD: WIN32_FILE_ATTRIBUTE_DATA);
  type
    THiLo64 = record
      case Boolean of
      True: (Lo: Cardinal; Hi: Cardinal);
      False: (Full: UInt64);
    end;
  var
    FileSize: THiLo64;
  begin
    FileSize.Hi := FAD.nFileSizeHigh;
    FileSize.Lo := FAD.nFileSizeLow;
    Add(Group, 'Size', '', UIntToStr(FileSize.Full));
    Add(Group, 'Created', '', FormatDateTime('yyyy-MM-dd hh:nn:ss', DateTimeFromFileTime(FAD.ftCreationTime)));
    Add(Group, 'Modified', '', FormatDateTime('yyyy-MM-dd hh:nn:ss', DateTimeFromFileTime(FAD.ftLastWriteTime)));
    Add(Group, 'Accessed', '', FormatDateTime('yyyy-MM-dd hh:nn:ss', DateTimeFromFileTime(FAD.ftLastAccessTime)));
  end {AddDates};
  { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
var
  Group: string;
  FAD: WIN32_FILE_ATTRIBUTE_DATA;
  Attr: Integer;
  Target: WideString;
  LinkType: TReparsePointType;
begin
  Group := Filename;
  Add(Group, 'File name', ExtractFileName(Filename));
  Add(Group, 'File path', ExtractFilePath(Filename));

  ZeroMemory(@FAD, SizeOf(FAD));
  if not GetFileAttributesEx(PChar(Filename), GetFileExInfoStandard, @FAD) then begin
    Add(Group, 'Attributes', SysErrorMessage(GetLastError));
  end else begin
    Attr := integer(FAD.dwFileAttributes);
    Add(Group, 'Attributes', '0x' + IntToHex(Attr, 2), GetAttributesString(Attr));
    AddSizeAndDates(Group, FAD);
    if ((Attr and faSymLink) <> 0) and FJunction.FGetSymlinkInfo(Filename, Target, LinkType) then begin
      if string(Target).StartsWith('UNC\') then
        Target := '\' + Copy(Target, 4);
      Group := SReparsePointType[LinkType];
      Add(Group, 'Target', Target);
      ZeroMemory(@FAD, SizeOf(FAD));
      if not GetFileAttributesEx(PChar(Target), GetFileExInfoStandard, @FAD) then begin
        Add(Group, 'Attributes', SysErrorMessage(GetLastError));
      end else begin
        Attr := integer(FAD.dwFileAttributes);
        Add(Group, 'Attributes', '0x' + IntToHex(Attr, 2), GetAttributesString(Attr));
        AddSizeAndDates(Group, FAD);
      end;
    end;
  end;
end {TfrmInfo.PopulateFileName};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.PopulateLine(const Group, Key, Short, Long: string);
var
  Item: TListItem;
................................................................................
  Item.SubItems.Add(Long);
end {TfrmInfo.PopulateLines};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.StartPopulatingLines(const Filename: string; const Clear: boolean);
begin
  lvwFields.Items.BeginUpdate;
  if Clear then begin
    lvwFields.Items.Clear;
    lvwFields.Groups.Clear;
  end;
  PopulateFileName(Filename);
end {TfrmInfo.StartPopulatingLines};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmInfo.StopPopulatingLines;
begin
  AutosizeColumns;

Changes to ZPreview/src/Delphi/F_Main.dfm.

106
107
108
109
110
111
112


113
114
115
116
117
118
119
...
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
        Width = 250
      end
      item
        Text = '(file info summary)'
        Width = -2
      end>
    ParentDoubleBuffered = False


    OnDrawPanel = sbrMainDrawPanel
  end
  object ActionManager: TActionManager
    ActionBars = <
      item
        Items = <
          item
................................................................................
    object actViewFullScreen: TAction
      Category = 'View'
      Caption = '&Full screen'
      HelpContext = -1
      Hint = 'Full screen|Toggle full screen preview'
      ImageIndex = 3
      SecondaryShortCuts.Strings = (
        'F11'
        'Esc')
      ShortCut = 24646
      OnExecute = actViewFullScreenExecute
    end
    object actViewTopmost: TAction
      Category = 'View'
      AutoCheck = True
      Caption = 'Stay on &Top'







>
>







 







|
<







106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
...
266
267
268
269
270
271
272
273

274
275
276
277
278
279
280
        Width = 250
      end
      item
        Text = '(file info summary)'
        Width = -2
      end>
    ParentDoubleBuffered = False
    ParentShowHint = False
    ShowHint = True
    OnDrawPanel = sbrMainDrawPanel
  end
  object ActionManager: TActionManager
    ActionBars = <
      item
        Items = <
          item
................................................................................
    object actViewFullScreen: TAction
      Category = 'View'
      Caption = '&Full screen'
      HelpContext = -1
      Hint = 'Full screen|Toggle full screen preview'
      ImageIndex = 3
      SecondaryShortCuts.Strings = (
        'F11')

      ShortCut = 24646
      OnExecute = actViewFullScreenExecute
    end
    object actViewTopmost: TAction
      Category = 'View'
      AutoCheck = True
      Caption = 'Stay on &Top'

Changes to ZPreview/src/Delphi/F_Main.pas.

50
51
52
53
54
55
56

57
58
59
60
61
62
63
...
106
107
108
109
110
111
112


113
114
115
116
117
118
119
...
126
127
128
129
130
131
132













133
134
135
136
137
138
139
...
261
262
263
264
265
266
267


268
269
270

271
272

273
274
275
276
277
278
279
...
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
    procedure actWindowMinimizeExecute(Sender: TObject);
    procedure actPreviewEngineExecute(Sender: TObject);
    procedure actEngineAutoselectExecute(Sender: TObject);
    procedure actFilePropertiesExecute(Sender: TObject);
    procedure EngineManagerRendererSelected(Sender: TObject);
    procedure sbrMainDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
    procedure actEngineManageExecute(Sender: TObject);

  private
    { Private declarations }
//    FWatcher: TThread;
    FInitialized: Boolean;
    FEngineManager: TPreviewEngineUIManager;

    FFileIconBitmap: TBitmap;
................................................................................
    IniFile := TPath.Combine(DataPath, BaseName + '.ini');
  end;

  {$MESSAGE WARN 'TODO: Create TIniFile object, read/write settings  MCO 16-02-2015'}
//  ActionManager.FileName := ExtractFilePath(IniFile) + 'ActionManager.dat';
//  ActionManager.LoadFromFile(ActionManager.FileName);



end {TfrmMain.FormCreate};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  FFileIconBitmap.Free;
  FSentinel.Free;
................................................................................
  try
    actAutorefresh.Checked := False;
    Application.OnException := nil;
  except
    ShowException(ExceptObject, ExceptAddr);
  end;
end {TfrmMain.FormCloseQuery};














{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.ApplicationException(Sender: TObject; E: Exception);
begin
  MessageBeep(MB_ICONERROR);
  lblError.Caption := E.Message;
  lblError.Font.Color := clRed;
................................................................................
  frmInfoSentinel.Visible := actViewSentinel.Checked;
  if frmInfoSentinel.Visible and Assigned(FSentinel) then
    frmInfoSentinel.Populate(FSentinel);
end {TfrmMain.actViewSentinelExecute};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.actViewTopmostExecute(Sender: TObject);


begin
  if actViewTopmost.Checked then
    Self.FormStyle := fsStayOnTop

  else
    Self.FormStyle := fsNormal;

end {TfrmMain.actViewTopmostExecute};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.actViewTopmostUpdate(Sender: TObject);
begin
  actViewTopmost.Checked := (Self.FormStyle = fsStayOnTop);
end {TfrmMain.actViewTopmostUpdate};
................................................................................
begin
  OnTop := Self.FormStyle = fsStayOnTop;
  Self.FormStyle := fsNormal;

  frmManagePreviewEngines.Populate(FEngineManager);
  case frmManagePreviewEngines.ShowModal of
    mrOk: begin
      {$MESSAGE WARN 'TODO: Store new order and state of renderers  MCO 16-02-2015'}
    end;
  end;

  if OnTop then
    Self.FormStyle := fsStayOnTop;
end {TfrmMain.actEngineManageExecute};

end.







>







 







>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>

|
|
>
|

>







 







|








50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
...
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
...
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
...
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
    procedure actWindowMinimizeExecute(Sender: TObject);
    procedure actPreviewEngineExecute(Sender: TObject);
    procedure actEngineAutoselectExecute(Sender: TObject);
    procedure actFilePropertiesExecute(Sender: TObject);
    procedure EngineManagerRendererSelected(Sender: TObject);
    procedure sbrMainDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
    procedure actEngineManageExecute(Sender: TObject);
    procedure ApplicationDeactivate(Sender: TObject);
  private
    { Private declarations }
//    FWatcher: TThread;
    FInitialized: Boolean;
    FEngineManager: TPreviewEngineUIManager;

    FFileIconBitmap: TBitmap;
................................................................................
    IniFile := TPath.Combine(DataPath, BaseName + '.ini');
  end;

  {$MESSAGE WARN 'TODO: Create TIniFile object, read/write settings  MCO 16-02-2015'}
//  ActionManager.FileName := ExtractFilePath(IniFile) + 'ActionManager.dat';
//  ActionManager.LoadFromFile(ActionManager.FileName);

  Application.OnDeactivate := ApplicationDeactivate;

end {TfrmMain.FormCreate};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  FFileIconBitmap.Free;
  FSentinel.Free;
................................................................................
  try
    actAutorefresh.Checked := False;
    Application.OnException := nil;
  except
    ShowException(ExceptObject, ExceptAddr);
  end;
end {TfrmMain.FormCloseQuery};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.ApplicationDeactivate(Sender: TObject);
begin
  if actViewImageInfo.Checked then begin
    frmInfo.Visible := False;
    frmInfo.Visible := True;
  end;
  if actViewSentinel.Checked then begin
    frmInfoSentinel.Visible := False;
    frmInfoSentinel.Visible := True;
  end;
end {TfrmMain.ApplicationDeactivate};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.ApplicationException(Sender: TObject; E: Exception);
begin
  MessageBeep(MB_ICONERROR);
  lblError.Caption := E.Message;
  lblError.Font.Color := clRed;
................................................................................
  frmInfoSentinel.Visible := actViewSentinel.Checked;
  if frmInfoSentinel.Visible and Assigned(FSentinel) then
    frmInfoSentinel.Populate(FSentinel);
end {TfrmMain.actViewSentinelExecute};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.actViewTopmostExecute(Sender: TObject);
var
  i: integer;
begin
  if actViewTopmost.Checked then begin
    Self.FormStyle := fsStayOnTop;
    ApplicationDeactivate(Application);
  end else begin
    Self.FormStyle := fsNormal;
  end;
end {TfrmMain.actViewTopmostExecute};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmMain.actViewTopmostUpdate(Sender: TObject);
begin
  actViewTopmost.Checked := (Self.FormStyle = fsStayOnTop);
end {TfrmMain.actViewTopmostUpdate};
................................................................................
begin
  OnTop := Self.FormStyle = fsStayOnTop;
  Self.FormStyle := fsNormal;

  frmManagePreviewEngines.Populate(FEngineManager);
  case frmManagePreviewEngines.ShowModal of
    mrOk: begin
      {$MESSAGE WARN 'TODO: Save new order (and state) of renderers  MCO 16-02-2015'}
    end;
  end;

  if OnTop then
    Self.FormStyle := fsStayOnTop;
end {TfrmMain.actEngineManageExecute};

end.