source: tags/1.1.0/Forms/UFormMain.pas

Last change on this file was 69, checked in by chronos, 4 years ago
  • Fixed: Restore from fulscreen mode to maximized state not retaining normal state dimensions.
File size: 5.8 KB
Line 
1unit UFormMain;
2
3{$mode delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
9 ExtCtrls, UEngine, LCLType, types, UTranslator, UApplicationInfo, URegistry,
10 UPersistentForm;
11
12type
13
14 { TFormMain }
15
16 TFormMain = class(TForm)
17 ApplicationInfo1: TApplicationInfo;
18 PaintBox1: TPaintBox;
19 PersistentForm1: TPersistentForm;
20 Timer1: TTimer;
21 Translator1: TTranslator;
22 procedure FormActivate(Sender: TObject);
23 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
24 procedure FormCreate(Sender: TObject);
25 procedure FormDestroy(Sender: TObject);
26 procedure FormKeyPress(Sender: TObject; var Key: char);
27 procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
28 procedure FormShow(Sender: TObject);
29 procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
30 Shift: TShiftState; X, Y: Integer);
31 procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
32 Y: Integer);
33 procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
34 Shift: TShiftState; X, Y: Integer);
35 procedure PaintBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
36 MousePos: TPoint; var Handled: Boolean);
37 procedure PaintBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
38 MousePos: TPoint; var Handled: Boolean);
39 procedure PaintBox1Paint(Sender: TObject);
40 procedure PaintBox1Resize(Sender: TObject);
41 procedure Timer1Timer(Sender: TObject);
42 private
43 Initialized: Boolean;
44 procedure LoadConfig;
45 procedure SaveConfig;
46 public
47 FullScreen: Boolean;
48 Engine: TEngine;
49 procedure EraseBackground(DC: HDC); override;
50 end;
51
52var
53 FormMain: TFormMain;
54
55
56implementation
57
58{$R *.lfm}
59
60uses
61 UFormImages;
62
63{ TFormMain }
64
65procedure TFormMain.FormCreate(Sender: TObject);
66begin
67 Engine := TEngine.Create;
68 LoadConfig;
69 //PaintBox1.ControlStyle := [csOpaque];
70 Randomize;
71end;
72
73procedure TFormMain.FormActivate(Sender: TObject);
74begin
75end;
76
77procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
78begin
79 PersistentForm1.Save(Self);
80end;
81
82procedure TFormMain.FormDestroy(Sender: TObject);
83begin
84 SaveConfig;
85 Engine.Free;
86end;
87
88procedure TFormMain.FormKeyPress(Sender: TObject; var Key: char);
89begin
90 if Key = #32 then begin
91 if Engine.State = gsRunning then Engine.State := gsPaused
92 else if Engine.State = gsPaused then Engine.State := gsRunning;
93 end;
94end;
95
96procedure TFormMain.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
97 );
98const
99 KeyF11 = 122;
100begin
101 if Key = KeyF11 then begin
102 FullScreen := not FullScreen;
103 PersistentForm1.SetFullScreen(FormMain.FullScreen);
104 end else
105 Engine.KeyUp(Key);
106end;
107
108procedure TFormMain.FormShow(Sender: TObject);
109begin
110 if not Initialized then begin
111 Initialized := True;
112 PersistentForm1.RegistryContext := ApplicationInfo1.GetRegistryContext;
113 PersistentForm1.Load(Self, False, True);
114 FullScreen := PersistentForm1.FormFullScreen;
115 Engine.InitMenus;
116 Engine.ImagePassenger.Picture.Assign(FormImages.ImagePassenger.Picture);
117 Engine.ImageLocomotive.Picture.Assign(FormImages.ImageLocomotive.Picture);
118 Engine.Map.Size := Point(PaintBox1.Width, PaintBox1.Height);
119 Engine.View.DestRect := Rect(0, 0, PaintBox1.Width, PaintBox1.Height);
120 Engine.MainMenu;
121 end;
122end;
123
124procedure TFormMain.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
125 Shift: TShiftState; X, Y: Integer);
126begin
127 Engine.MouseDown(Button, Point(X, Y));
128end;
129
130procedure TFormMain.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
131 Y: Integer);
132begin
133 Engine.MouseMove(Point(X, Y));
134end;
135
136procedure TFormMain.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
137 Shift: TShiftState; X, Y: Integer);
138begin
139 Engine.MouseUp(Button, Point(X, Y));
140end;
141
142procedure TFormMain.PaintBox1MouseWheelDown(Sender: TObject;
143 Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
144begin
145 Engine.View.Zoom := Engine.View.Zoom / 1.2;
146end;
147
148procedure TFormMain.PaintBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
149 MousePos: TPoint; var Handled: Boolean);
150begin
151 Engine.View.Zoom := Engine.View.Zoom * 1.2;
152end;
153
154procedure TFormMain.PaintBox1Paint(Sender: TObject);
155begin
156 Engine.View.DestRect := Rect(0, 0, PaintBox1.Width, PaintBox1.Height);
157 Engine.Paint(PaintBox1.Canvas, Point(PaintBox1.Width, PaintBox1.Height));
158end;
159
160procedure TFormMain.PaintBox1Resize(Sender: TObject);
161begin
162 Engine.Redraw;
163end;
164
165procedure TFormMain.Timer1Timer(Sender: TObject);
166begin
167 Engine.Tick;
168 if Engine.RedrawPending then
169 PaintBox1.Repaint;
170end;
171
172procedure TFormMain.EraseBackground(DC: HDC);
173begin
174 // Do nothing, all background space covered by controls
175end;
176
177procedure TFormMain.LoadConfig;
178var
179 LangCode: string;
180begin
181 with TRegistryEx.Create do
182 try
183 CurrentContext := ApplicationInfo1.GetRegistryContext;
184
185 if ValueExists('LanguageCode') then begin
186 LangCode := ReadStringWithDefault('LanguageCode', '');
187 Translator1.Language := Translator1.Languages.SearchByCode(LangCode);
188 end else Translator1.Language := Translator1.Languages.SearchByCode('');
189 Engine.DarkMode := ReadBoolWithDefault('DarkMode', False);
190 Engine.HighestServedPassengerCount := ReadIntegerWithDefault('HighestPassengers', 0);
191 Engine.HighestServedDaysCount := ReadIntegerWithDefault('HighestDays', 0);
192 finally
193 Free;
194 end;
195end;
196
197procedure TFormMain.SaveConfig;
198begin
199 with TRegistryEx.Create do
200 try
201 CurrentContext := ApplicationInfo1.GetRegistryContext;
202
203 if Assigned(Translator1.Language) and (Translator1.Language.Code <> '') then
204 WriteString('LanguageCode', Translator1.Language.Code)
205 else DeleteValue('LanguageCode');
206 WriteBool('DarkMode', Engine.DarkMode);
207 WriteInteger('HighestPassengers', Engine.HighestServedPassengerCount);
208 WriteInteger('HighestDays', Engine.HighestServedDaysCount);
209 finally
210 Free;
211 end;
212end;
213
214
215end.
216
Note: See TracBrowser for help on using the repository browser.