sidecar drag and drop

This commit is contained in:
April Ayres-Griffiths 2019-04-19 09:22:33 +10:00
parent 581d3bb7f5
commit a54d35f784
10 changed files with 262 additions and 122 deletions

View File

@ -1,11 +1,12 @@
object GUIForm: TGUIForm
Left = 275
Height = 683
Top = 109
Left = 290
Height = 650
Top = 130
Width = 1078
AllowDropFiles = True
AlphaBlendValue = 128
Caption = 'microM8 GUI'
ClientHeight = 663
ClientHeight = 630
ClientWidth = 1078
Constraints.MinWidth = 1078
DoubleBuffered = False
@ -15,6 +16,7 @@ object GUIForm: TGUIForm
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDeactivate = FormDeactivate
OnDropFiles = FormDropFiles
OnHide = FormHide
OnKeyDown = FormKeyDown
OnKeyPress = FormKeyPress
@ -30,7 +32,7 @@ object GUIForm: TGUIForm
object StatusBar1: TStatusBar
Left = 0
Height = 23
Top = 640
Top = 607
Width = 1078
Panels = <>
end
@ -327,38 +329,39 @@ object GUIForm: TGUIForm
end
object pnlContainer: TPanel
Left = 0
Height = 604
Height = 571
Top = 36
Width = 1078
Align = alClient
BevelOuter = bvNone
ClientHeight = 604
ClientHeight = 571
ClientWidth = 1078
ParentColor = False
TabOrder = 2
object sidecarPanel: TPanel
Left = 908
Height = 567
Height = 534
Top = 0
Width = 170
Align = alRight
BevelOuter = bvNone
Caption = 'sidecarPanel'
ClientHeight = 567
ClientHeight = 534
ClientWidth = 170
Color = clBlack
ParentColor = False
TabOrder = 0
object Image1: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 170
Align = alClient
OnClick = Image1Click
OnDblClick = Image1DblClick
OnDragDrop = Image1DragDrop
OnMouseDown = Image1MouseDown
OnMouseLeave = Image1MouseLeave
OnMouseMove = Image1MouseMove
OnMouseUp = Image1MouseUp
Picture.Data = {
1754506F727461626C654E6574776F726B477261706869636B7A020089504E47
@ -5444,12 +5447,12 @@ object GUIForm: TGUIForm
end
object embedPanel: TPanel
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
BevelOuter = bvNone
ClientHeight = 567
ClientHeight = 534
ClientWidth = 908
Color = clBlack
Font.Color = clWhite
@ -5461,7 +5464,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp
object backdrop: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
@ -5474,7 +5477,7 @@ object GUIForm: TGUIForm
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 567
Top = 534
Width = 1078
Align = alBottom
ClientHeight = 37

View File

@ -345,6 +345,7 @@ type
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
procedure FormHide(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: char);
@ -363,6 +364,9 @@ type
procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseLeave(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure InputClick(Sender: TObject);
@ -588,6 +592,7 @@ type
VolDrag, WarpDrag: boolean;
Caps: boolean;
NeedsRestart, Quitting: boolean;
sbx, sby, sbButton: longint;
public
procedure AppActivate(Sender: TObject);
procedure AppDeactivate(Sender: TObject);
@ -737,6 +742,19 @@ begin
// nothing much
end;
procedure TGUIForm.Image1MouseLeave(Sender: TObject);
begin
sbx := -1;
sby := -1;
end;
procedure TGUIForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
sbx := x;
sby := y;
end;
procedure TGUIForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
@ -1894,6 +1912,22 @@ begin
//StatusBar1.SimpleText := StatusBar1.SimpleText + ' (in window)';
SendMouseState( x - longint(p.X), y - longint(p.Y) );
end;
{ Now see if we are over the sidecar }
p := sidecarPanel.ClientToScreen(q);
if (x >= longint(p.X)) and (x < longint(p.X)+longint(sidecarPanel.Width)) and
(y >= longint(p.Y)) and (y < longint(p.Y)+longint(sidecarPanel.Height)) then
begin
sbx := x - p.X;
sby := y - p.Y;
sbButton := sby div Round(sidecarPanel.Height/5);
end
else
begin
sbx := -1;
sby := -1;
sbButton := -1;
end;
end;
end;
@ -2835,6 +2869,37 @@ begin
lastFocusLostTime:=Now();
end;
procedure TGUIForm.FormDropFiles(Sender: TObject;
const FileNames: array of String);
var
filename, ext: string;
begin
//StatusBar1.SimpleText := IntToStr(sbButton) + ':' + FileNames[0];
filename := FileNames[0];
ext := ExtractFileExt(filename);
case sbButton of
0, 1: begin
case ext of
'.dsk', '.do', '.po', '.woz', '.nib': begin
// insert disk here
InsertDisk( 'local:'+filename, sbButton );
ShowM8;
SendOSDMessage('Disk Insert to Drive '+IntToStr(sbButton+1));
end;
end;
end;
3: begin
case ext of
'.po', '.2mg', '.hdv': begin
// insert smartport here
InsertDisk( 'local:'+filename, 2 );
ShowM8;
end;
end;
end;
end;
end;
procedure TGUIForm.FormHide(Sender: TObject);
begin
RepaintWindow;
@ -3174,13 +3239,13 @@ end;
procedure TGUIForm.FSTimerTimer(Sender: TObject);
begin
isFS := (GetConfig( 'video/current.fullscreen' ) = '1');
if not hidden then
begin
Caption := 'microM8 GUI';
SimpleGet(baseUrl+'/api/control/system/heartbeat');
end
else
Caption := 'microM8 GUI (hide)';
//if not hidden then
//begin
// Caption := 'microM8 GUI';
// SimpleGet(baseUrl+'/api/control/system/heartbeat');
//end
//else
// Caption := 'microM8 GUI (hide)';
end;
procedure TGUIForm.InputClick(Sender: TObject);

View File

@ -21,8 +21,8 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<TopLine Value="3070"/>
<CursorPos X="54" Y="3090"/>
<TopLine Value="1923"/>
<CursorPos X="61" Y="1927"/>
<UsageCount Value="323"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -43,7 +43,7 @@
<EditorIndex Value="-1"/>
<TopLine Value="576"/>
<CursorPos X="49" Y="591"/>
<UsageCount Value="100"/>
<UsageCount Value="99"/>
</Unit3>
<Unit4>
<Filename Value="C:\lazarus\components\lazutils\utf8process.pp"/>
@ -51,7 +51,7 @@
<EditorIndex Value="-1"/>
<TopLine Value="636"/>
<CursorPos Y="654"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit4>
<Unit5>
<Filename Value="images\memory.pas"/>
@ -61,129 +61,129 @@
<EditorIndex Value="-1"/>
<TopLine Value="40"/>
<CursorPos X="17" Y="44"/>
<UsageCount Value="14"/>
<UsageCount Value="13"/>
</Unit5>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="3151" Column="3" TopLine="3134"/>
<Caret Line="978" Column="38" TopLine="961"/>
</Position1>
<Position2>
<Filename Value="main.pas"/>
<Caret Line="999" Column="10" TopLine="997"/>
<Caret Line="2868" Column="26" TopLine="2848"/>
</Position2>
<Position3>
<Filename Value="main.pas"/>
<Caret Line="1110" Column="45" TopLine="1103"/>
<Caret Line="593" Column="38" TopLine="572"/>
</Position3>
<Position4>
<Filename Value="main.pas"/>
<Caret Line="1109" Column="20" TopLine="1098"/>
<Caret Line="2987" Column="48" TopLine="2978"/>
</Position4>
<Position5>
<Filename Value="main.pas"/>
<Caret Line="396" Column="15" TopLine="385"/>
<Caret Line="582" Column="20" TopLine="572"/>
</Position5>
<Position6>
<Filename Value="main.pas"/>
<Caret Line="1109" Column="20" TopLine="1104"/>
<Caret Line="2809" Column="66" TopLine="2788"/>
</Position6>
<Position7>
<Filename Value="main.pas"/>
<Caret Line="396" Column="29" TopLine="385"/>
<Caret Line="2998" Column="6" TopLine="2978"/>
</Position7>
<Position8>
<Filename Value="main.pas"/>
<Caret Line="978" Column="38" TopLine="961"/>
<Caret Line="3039" Column="26" TopLine="3026"/>
</Position8>
<Position9>
<Filename Value="main.pas"/>
<Caret Line="2868" Column="26" TopLine="2848"/>
<Caret Line="3035" Column="34" TopLine="3024"/>
</Position9>
<Position10>
<Filename Value="main.pas"/>
<Caret Line="593" Column="38" TopLine="572"/>
<Caret Line="335" Column="59" TopLine="318"/>
</Position10>
<Position11>
<Filename Value="main.pas"/>
<Caret Line="2987" Column="48" TopLine="2978"/>
<Caret Line="3046" Column="36" TopLine="3032"/>
</Position11>
<Position12>
<Filename Value="main.pas"/>
<Caret Line="582" Column="20" TopLine="572"/>
<Caret Line="2882" Column="27" TopLine="2867"/>
</Position12>
<Position13>
<Filename Value="main.pas"/>
<Caret Line="2809" Column="66" TopLine="2788"/>
<Caret Line="2888" Column="23" TopLine="2877"/>
</Position13>
<Position14>
<Filename Value="main.pas"/>
<Caret Line="2998" Column="6" TopLine="2978"/>
<Caret Line="706" Column="34" TopLine="732"/>
</Position14>
<Position15>
<Filename Value="main.pas"/>
<Caret Line="3039" Column="26" TopLine="3026"/>
<Caret Line="2752" Column="28" TopLine="2729"/>
</Position15>
<Position16>
<Filename Value="main.pas"/>
<Caret Line="3035" Column="34" TopLine="3024"/>
<Caret Line="1788" Column="61" TopLine="1785"/>
</Position16>
<Position17>
<Filename Value="main.pas"/>
<Caret Line="335" Column="59" TopLine="318"/>
<Caret Line="2341" Column="6" TopLine="2313"/>
</Position17>
<Position18>
<Filename Value="main.pas"/>
<Caret Line="3046" Column="36" TopLine="3032"/>
<Caret Line="1801" Column="28" TopLine="1786"/>
</Position18>
<Position19>
<Filename Value="main.pas"/>
<Caret Line="2882" Column="27" TopLine="2867"/>
<Caret Line="2900" Column="14" TopLine="2888"/>
</Position19>
<Position20>
<Filename Value="main.pas"/>
<Caret Line="2888" Column="23" TopLine="2877"/>
<Caret Line="1897" Column="16" TopLine="1894"/>
</Position20>
<Position21>
<Filename Value="main.pas"/>
<Caret Line="706" Column="34" TopLine="732"/>
<Caret Line="426" Column="15" TopLine="408"/>
</Position21>
<Position22>
<Filename Value="main.pas"/>
<Caret Line="2752" Column="28" TopLine="2729"/>
<Caret Line="1183" TopLine="1178"/>
</Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="1788" Column="61" TopLine="1785"/>
<Caret Line="1923" Column="42" TopLine="1895"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="2341" Column="6" TopLine="2313"/>
<Caret Line="2892" Column="43" TopLine="2879"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="1801" Column="28" TopLine="1786"/>
<Caret Line="2899" Column="43" TopLine="2886"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="2900" Column="14" TopLine="2888"/>
<Caret Line="1833" Column="87" TopLine="1829"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="1897" Column="16" TopLine="1894"/>
<Caret Line="1839" Column="38" TopLine="1820"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="426" Column="15" TopLine="408"/>
<Caret Line="1098" Column="15" TopLine="1092"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="1183" TopLine="1178"/>
<Caret Line="1925" Column="3" TopLine="1923"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="1923" Column="42" TopLine="1895"/>
<Caret Line="3205" Column="13" TopLine="3198"/>
</Position30>
</JumpHistory>
<RunParams>

View File

@ -1,11 +1,12 @@
object GUIForm: TGUIForm
Left = 275
Height = 683
Top = 109
Left = 290
Height = 650
Top = 130
Width = 1078
AllowDropFiles = True
AlphaBlendValue = 128
Caption = 'microM8 GUI'
ClientHeight = 663
ClientHeight = 630
ClientWidth = 1078
Constraints.MinWidth = 1078
DoubleBuffered = False
@ -15,6 +16,7 @@ object GUIForm: TGUIForm
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDeactivate = FormDeactivate
OnDropFiles = FormDropFiles
OnHide = FormHide
OnKeyDown = FormKeyDown
OnKeyPress = FormKeyPress
@ -30,7 +32,7 @@ object GUIForm: TGUIForm
object StatusBar1: TStatusBar
Left = 0
Height = 23
Top = 640
Top = 607
Width = 1078
Panels = <>
end
@ -327,38 +329,39 @@ object GUIForm: TGUIForm
end
object pnlContainer: TPanel
Left = 0
Height = 604
Height = 571
Top = 36
Width = 1078
Align = alClient
BevelOuter = bvNone
ClientHeight = 604
ClientHeight = 571
ClientWidth = 1078
ParentColor = False
TabOrder = 2
object sidecarPanel: TPanel
Left = 908
Height = 567
Height = 534
Top = 0
Width = 170
Align = alRight
BevelOuter = bvNone
Caption = 'sidecarPanel'
ClientHeight = 567
ClientHeight = 534
ClientWidth = 170
Color = clBlack
ParentColor = False
TabOrder = 0
object Image1: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 170
Align = alClient
OnClick = Image1Click
OnDblClick = Image1DblClick
OnDragDrop = Image1DragDrop
OnMouseDown = Image1MouseDown
OnMouseLeave = Image1MouseLeave
OnMouseMove = Image1MouseMove
OnMouseUp = Image1MouseUp
Picture.Data = {
1754506F727461626C654E6574776F726B477261706869636B7A020089504E47
@ -5444,12 +5447,12 @@ object GUIForm: TGUIForm
end
object embedPanel: TPanel
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
BevelOuter = bvNone
ClientHeight = 567
ClientHeight = 534
ClientWidth = 908
Color = clBlack
Font.Color = clWhite
@ -5461,7 +5464,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp
object backdrop: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
@ -5474,7 +5477,7 @@ object GUIForm: TGUIForm
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 567
Top = 534
Width = 1078
Align = alBottom
ClientHeight = 37

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,11 +1,12 @@
object GUIForm: TGUIForm
Left = 275
Height = 683
Top = 109
Left = 290
Height = 650
Top = 130
Width = 1078
AllowDropFiles = True
AlphaBlendValue = 128
Caption = 'microM8 GUI'
ClientHeight = 663
ClientHeight = 630
ClientWidth = 1078
Constraints.MinWidth = 1078
DoubleBuffered = False
@ -15,6 +16,7 @@ object GUIForm: TGUIForm
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDeactivate = FormDeactivate
OnDropFiles = FormDropFiles
OnHide = FormHide
OnKeyDown = FormKeyDown
OnKeyPress = FormKeyPress
@ -30,7 +32,7 @@ object GUIForm: TGUIForm
object StatusBar1: TStatusBar
Left = 0
Height = 23
Top = 640
Top = 607
Width = 1078
Panels = <>
end
@ -327,38 +329,39 @@ object GUIForm: TGUIForm
end
object pnlContainer: TPanel
Left = 0
Height = 604
Height = 571
Top = 36
Width = 1078
Align = alClient
BevelOuter = bvNone
ClientHeight = 604
ClientHeight = 571
ClientWidth = 1078
ParentColor = False
TabOrder = 2
object sidecarPanel: TPanel
Left = 908
Height = 567
Height = 534
Top = 0
Width = 170
Align = alRight
BevelOuter = bvNone
Caption = 'sidecarPanel'
ClientHeight = 567
ClientHeight = 534
ClientWidth = 170
Color = clBlack
ParentColor = False
TabOrder = 0
object Image1: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 170
Align = alClient
OnClick = Image1Click
OnDblClick = Image1DblClick
OnDragDrop = Image1DragDrop
OnMouseDown = Image1MouseDown
OnMouseLeave = Image1MouseLeave
OnMouseMove = Image1MouseMove
OnMouseUp = Image1MouseUp
Picture.Data = {
1754506F727461626C654E6574776F726B477261706869636B7A020089504E47
@ -5444,12 +5447,12 @@ object GUIForm: TGUIForm
end
object embedPanel: TPanel
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
BevelOuter = bvNone
ClientHeight = 567
ClientHeight = 534
ClientWidth = 908
Color = clBlack
Font.Color = clWhite
@ -5461,7 +5464,7 @@ object GUIForm: TGUIForm
OnMouseUp = FormMouseUp
object backdrop: TImage
Left = 0
Height = 567
Height = 534
Top = 0
Width = 908
Align = alClient
@ -5474,7 +5477,7 @@ object GUIForm: TGUIForm
object pnlMemory: TPanel
Left = 0
Height = 37
Top = 567
Top = 534
Width = 1078
Align = alBottom
ClientHeight = 37

View File

@ -345,6 +345,7 @@ type
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
procedure FormHide(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: char);
@ -363,6 +364,9 @@ type
procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseLeave(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure InputClick(Sender: TObject);
@ -588,6 +592,7 @@ type
VolDrag, WarpDrag: boolean;
Caps: boolean;
NeedsRestart, Quitting: boolean;
sbx, sby, sbButton: longint;
public
procedure AppActivate(Sender: TObject);
procedure AppDeactivate(Sender: TObject);
@ -737,6 +742,19 @@ begin
// nothing much
end;
procedure TGUIForm.Image1MouseLeave(Sender: TObject);
begin
sbx := -1;
sby := -1;
end;
procedure TGUIForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
sbx := x;
sby := y;
end;
procedure TGUIForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
@ -1894,6 +1912,22 @@ begin
//StatusBar1.SimpleText := StatusBar1.SimpleText + ' (in window)';
SendMouseState( x - longint(p.X), y - longint(p.Y) );
end;
{ Now see if we are over the sidecar }
p := sidecarPanel.ClientToScreen(q);
if (x >= longint(p.X)) and (x < longint(p.X)+longint(sidecarPanel.Width)) and
(y >= longint(p.Y)) and (y < longint(p.Y)+longint(sidecarPanel.Height)) then
begin
sbx := x - p.X;
sby := y - p.Y;
sbButton := sby div Round(sidecarPanel.Height/5);
end
else
begin
sbx := -1;
sby := -1;
sbButton := -1;
end;
end;
end;
@ -2835,6 +2869,38 @@ begin
lastFocusLostTime:=Now();
end;
procedure TGUIForm.FormDropFiles(Sender: TObject;
const FileNames: array of String);
var
filename, ext: string;
begin
//StatusBar1.SimpleText := IntToStr(sbButton) + ':' + FileNames[0];
filename := FileNames[0];
ext := ExtractFileExt(filename);
case sbButton of
0, 1: begin
case ext of
'.dsk', '.do', '.po', '.woz', '.nib': begin
// insert disk here
InsertDisk( 'local:'+filename, sbButton );
ShowM8;
SendOSDMessage('Disk Insert to Drive '+IntToStr(sbButton+1));
end;
end;
end;
3: begin
case ext of
'.po', '.2mg', '.hdv': begin
// insert smartport here
InsertDisk( 'local:'+filename, 2 );
ShowM8;
SendOSDMessage('SmartPort Volume Connected');
end;
end;
end;
end;
end;
procedure TGUIForm.FormHide(Sender: TObject);
begin
RepaintWindow;

70
poc.lps
View File

@ -21,8 +21,8 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<TopLine Value="1923"/>
<CursorPos X="61" Y="1927"/>
<TopLine Value="871"/>
<CursorPos X="4" Y="873"/>
<UsageCount Value="323"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -43,7 +43,7 @@
<EditorIndex Value="-1"/>
<TopLine Value="576"/>
<CursorPos X="49" Y="591"/>
<UsageCount Value="99"/>
<UsageCount Value="96"/>
</Unit3>
<Unit4>
<Filename Value="C:\lazarus\components\lazutils\utf8process.pp"/>
@ -51,7 +51,7 @@
<EditorIndex Value="-1"/>
<TopLine Value="636"/>
<CursorPos Y="654"/>
<UsageCount Value="4"/>
<UsageCount Value="1"/>
</Unit4>
<Unit5>
<Filename Value="images\memory.pas"/>
@ -61,129 +61,129 @@
<EditorIndex Value="-1"/>
<TopLine Value="40"/>
<CursorPos X="17" Y="44"/>
<UsageCount Value="13"/>
<UsageCount Value="10"/>
</Unit5>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="978" Column="38" TopLine="961"/>
<Caret Line="2998" Column="6" TopLine="2978"/>
</Position1>
<Position2>
<Filename Value="main.pas"/>
<Caret Line="2868" Column="26" TopLine="2848"/>
<Caret Line="3039" Column="26" TopLine="3026"/>
</Position2>
<Position3>
<Filename Value="main.pas"/>
<Caret Line="593" Column="38" TopLine="572"/>
<Caret Line="3035" Column="34" TopLine="3024"/>
</Position3>
<Position4>
<Filename Value="main.pas"/>
<Caret Line="2987" Column="48" TopLine="2978"/>
<Caret Line="335" Column="59" TopLine="318"/>
</Position4>
<Position5>
<Filename Value="main.pas"/>
<Caret Line="582" Column="20" TopLine="572"/>
<Caret Line="3046" Column="36" TopLine="3032"/>
</Position5>
<Position6>
<Filename Value="main.pas"/>
<Caret Line="2809" Column="66" TopLine="2788"/>
<Caret Line="2882" Column="27" TopLine="2867"/>
</Position6>
<Position7>
<Filename Value="main.pas"/>
<Caret Line="2998" Column="6" TopLine="2978"/>
<Caret Line="2888" Column="23" TopLine="2877"/>
</Position7>
<Position8>
<Filename Value="main.pas"/>
<Caret Line="3039" Column="26" TopLine="3026"/>
<Caret Line="706" Column="34" TopLine="732"/>
</Position8>
<Position9>
<Filename Value="main.pas"/>
<Caret Line="3035" Column="34" TopLine="3024"/>
<Caret Line="2752" Column="28" TopLine="2729"/>
</Position9>
<Position10>
<Filename Value="main.pas"/>
<Caret Line="335" Column="59" TopLine="318"/>
<Caret Line="1788" Column="61" TopLine="1785"/>
</Position10>
<Position11>
<Filename Value="main.pas"/>
<Caret Line="3046" Column="36" TopLine="3032"/>
<Caret Line="2341" Column="6" TopLine="2313"/>
</Position11>
<Position12>
<Filename Value="main.pas"/>
<Caret Line="2882" Column="27" TopLine="2867"/>
<Caret Line="1801" Column="28" TopLine="1786"/>
</Position12>
<Position13>
<Filename Value="main.pas"/>
<Caret Line="2888" Column="23" TopLine="2877"/>
<Caret Line="2900" Column="14" TopLine="2888"/>
</Position13>
<Position14>
<Filename Value="main.pas"/>
<Caret Line="706" Column="34" TopLine="732"/>
<Caret Line="1897" Column="16" TopLine="1894"/>
</Position14>
<Position15>
<Filename Value="main.pas"/>
<Caret Line="2752" Column="28" TopLine="2729"/>
<Caret Line="426" Column="15" TopLine="408"/>
</Position15>
<Position16>
<Filename Value="main.pas"/>
<Caret Line="1788" Column="61" TopLine="1785"/>
<Caret Line="1183" TopLine="1178"/>
</Position16>
<Position17>
<Filename Value="main.pas"/>
<Caret Line="2341" Column="6" TopLine="2313"/>
<Caret Line="1923" Column="42" TopLine="1895"/>
</Position17>
<Position18>
<Filename Value="main.pas"/>
<Caret Line="1801" Column="28" TopLine="1786"/>
<Caret Line="2892" Column="43" TopLine="2879"/>
</Position18>
<Position19>
<Filename Value="main.pas"/>
<Caret Line="2900" Column="14" TopLine="2888"/>
<Caret Line="2899" Column="43" TopLine="2886"/>
</Position19>
<Position20>
<Filename Value="main.pas"/>
<Caret Line="1897" Column="16" TopLine="1894"/>
<Caret Line="1833" Column="87" TopLine="1829"/>
</Position20>
<Position21>
<Filename Value="main.pas"/>
<Caret Line="426" Column="15" TopLine="408"/>
<Caret Line="1839" Column="38" TopLine="1820"/>
</Position21>
<Position22>
<Filename Value="main.pas"/>
<Caret Line="1183" TopLine="1178"/>
<Caret Line="1098" Column="15" TopLine="1092"/>
</Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="1923" Column="42" TopLine="1895"/>
<Caret Line="1925" Column="3" TopLine="1923"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="2892" Column="43" TopLine="2879"/>
<Caret Line="3205" Column="13" TopLine="3198"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="2899" Column="43" TopLine="2886"/>
<Caret Line="3279" Column="24" TopLine="3223"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="1833" Column="87" TopLine="1829"/>
<Caret Line="581" Column="11" TopLine="563"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="1839" Column="38" TopLine="1820"/>
<Caret Line="2250" Column="17" TopLine="2231"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="1098" Column="15" TopLine="1092"/>
<Caret Line="2255" Column="14" TopLine="2231"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="1925" Column="3" TopLine="1923"/>
<Caret Line="2265" Column="21" TopLine="2234"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="3205" Column="13" TopLine="3198"/>
<Caret Line="3202" Column="9" TopLine="3174"/>
</Position30>
</JumpHistory>
<RunParams>