1 | unit UCore;
|
---|
2 |
|
---|
3 | {$mode Delphi}{$H+}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, SysUtils, FileUtil, ActnList, UProject, UCoolTranslator, UFGraphics,
|
---|
9 | UPersistentForm, Controls, Graphics, ExtDlgs, ExtCtrls, URegistry,
|
---|
10 | UApplicationInfo, Registry;
|
---|
11 |
|
---|
12 | const
|
---|
13 | ZoomFactor = 1.5;
|
---|
14 |
|
---|
15 | type
|
---|
16 | { TCore }
|
---|
17 |
|
---|
18 | TCore = class(TDataModule)
|
---|
19 | ASettings: TAction;
|
---|
20 | AToolMove: TAction;
|
---|
21 | AToolPen: TAction;
|
---|
22 | AImageNegative: TAction;
|
---|
23 | AImageGradient: TAction;
|
---|
24 | AImageMirror: TAction;
|
---|
25 | AImageFlip: TAction;
|
---|
26 | AImageRandom: TAction;
|
---|
27 | AFileSaveAs: TAction;
|
---|
28 | AFileSave: TAction;
|
---|
29 | AFileClose: TAction;
|
---|
30 | AFileOpen: TAction;
|
---|
31 | ApplicationInfo1: TApplicationInfo;
|
---|
32 | AZoomNormal: TAction;
|
---|
33 | AZoomAll: TAction;
|
---|
34 | AZoomIn: TAction;
|
---|
35 | AZoomOut: TAction;
|
---|
36 | AImageClear: TAction;
|
---|
37 | AExit: TAction;
|
---|
38 | AFileNew: TAction;
|
---|
39 | ActionList1: TActionList;
|
---|
40 | CoolTranslator1: TCoolTranslator;
|
---|
41 | ImageList1: TImageList;
|
---|
42 | OpenPictureDialog1: TOpenPictureDialog;
|
---|
43 | PersistentForm1: TPersistentForm;
|
---|
44 | SavePictureDialog1: TSavePictureDialog;
|
---|
45 | procedure AExitExecute(Sender: TObject);
|
---|
46 | procedure AFileNewExecute(Sender: TObject);
|
---|
47 | procedure AFileCloseExecute(Sender: TObject);
|
---|
48 | procedure AFileOpenExecute(Sender: TObject);
|
---|
49 | procedure AFileSaveAsExecute(Sender: TObject);
|
---|
50 | procedure AFileSaveExecute(Sender: TObject);
|
---|
51 | procedure AImageClearExecute(Sender: TObject);
|
---|
52 | procedure AImageFlipExecute(Sender: TObject);
|
---|
53 | procedure AImageGradientExecute(Sender: TObject);
|
---|
54 | procedure AImageMirrorExecute(Sender: TObject);
|
---|
55 | procedure AImageNegativeExecute(Sender: TObject);
|
---|
56 | procedure AImageRandomExecute(Sender: TObject);
|
---|
57 | procedure ASettingsExecute(Sender: TObject);
|
---|
58 | procedure AToolMoveExecute(Sender: TObject);
|
---|
59 | procedure AToolPenExecute(Sender: TObject);
|
---|
60 | procedure AZoomAllExecute(Sender: TObject);
|
---|
61 | procedure AZoomInExecute(Sender: TObject);
|
---|
62 | procedure AZoomNormalExecute(Sender: TObject);
|
---|
63 | procedure AZoomOutExecute(Sender: TObject);
|
---|
64 | procedure DataModuleCreate(Sender: TObject);
|
---|
65 | procedure DataModuleDestroy(Sender: TObject);
|
---|
66 | private
|
---|
67 | public
|
---|
68 | LastColorFormat: string;
|
---|
69 | LastImageSize: TPoint;
|
---|
70 | Project: TProject;
|
---|
71 | RegistryContext: TRegistryContext;
|
---|
72 | procedure ProjectOpen(FileName: string);
|
---|
73 | procedure ProjectNew;
|
---|
74 | procedure Init;
|
---|
75 | procedure LoadConfig;
|
---|
76 | procedure SaveConfig;
|
---|
77 | end;
|
---|
78 |
|
---|
79 | var
|
---|
80 | Core: TCore;
|
---|
81 |
|
---|
82 | implementation
|
---|
83 |
|
---|
84 | {$R *.lfm}
|
---|
85 |
|
---|
86 | uses
|
---|
87 | UFormNew, UFormMain, Forms, UFormSettings;
|
---|
88 |
|
---|
89 | { TCore }
|
---|
90 |
|
---|
91 | procedure TCore.DataModuleCreate(Sender: TObject);
|
---|
92 | begin
|
---|
93 | RegistryContext := TRegistryContext.Create(ApplicationInfo1.RegistryRoot,
|
---|
94 | ApplicationInfo1.RegistryKey);
|
---|
95 | Project := TProject.Create;
|
---|
96 | end;
|
---|
97 |
|
---|
98 | procedure TCore.DataModuleDestroy(Sender: TObject);
|
---|
99 | begin
|
---|
100 | FreeAndNil(Project);
|
---|
101 | SaveConfig;
|
---|
102 | end;
|
---|
103 |
|
---|
104 | procedure TCore.ProjectOpen(FileName: string);
|
---|
105 | var
|
---|
106 | Image: TImage;
|
---|
107 | begin
|
---|
108 | FormMain.LastOpenedList1.AddItem(FileName);
|
---|
109 | Image := TImage.Create(nil);
|
---|
110 | Image.Picture.LoadFromFile(FileName);
|
---|
111 | //Image.Picture.Bitmap.BeginUpdate(True);
|
---|
112 | Project.Bitmap.Size := Point(Image.Picture.Bitmap.Width, Image.Picture.Bitmap.Height);
|
---|
113 | //Project.Bitmap.LoadFromCanvas(Image.Picture.Bitmap.Canvas);
|
---|
114 | Project.Bitmap.LoadFromBitmap(Image.Picture.Bitmap);
|
---|
115 | //Image.Picture.Bitmap.EndUpdate;
|
---|
116 | Image.Free;
|
---|
117 | Project.View.ZoomAll(Project.Bitmap.Size);
|
---|
118 | FormMain.Redraw;
|
---|
119 | Project.FileName := FileName;
|
---|
120 | end;
|
---|
121 |
|
---|
122 | procedure TCore.ProjectNew;
|
---|
123 | var
|
---|
124 | ColorFormatIndex: Integer;
|
---|
125 | begin
|
---|
126 | // Set default
|
---|
127 | ColorFormatIndex := ColorFormatManager.FindByName(LastColorFormat);
|
---|
128 | if ColorFormatIndex < ColorFormatManager.Formats.Count then
|
---|
129 | Project.Bitmap.ColorFormat := ColorFormatManager.Formats[ColorFormatIndex]
|
---|
130 | else Project.Bitmap.ColorFormat := ColorFormatManager.Formats[0];
|
---|
131 | Project.Bitmap.Size := LastImageSize;
|
---|
132 |
|
---|
133 | Project.View.DestRect := Bounds(0, 0, FormMain.PaintBox1.Width, FormMain.PaintBox1.Height);
|
---|
134 | Project.View.ZoomAll(Project.Bitmap.Size);
|
---|
135 | end;
|
---|
136 |
|
---|
137 | procedure TCore.Init;
|
---|
138 | begin
|
---|
139 | PersistentForm1.RegistryContext := RegistryContext;
|
---|
140 | LoadConfig;
|
---|
141 |
|
---|
142 | ProjectNew;
|
---|
143 | FormMain.Redraw;
|
---|
144 | end;
|
---|
145 |
|
---|
146 | procedure TCore.LoadConfig;
|
---|
147 | begin
|
---|
148 | with TRegistryEx.Create do
|
---|
149 | try
|
---|
150 | RootKey := RegistryContext.RootKey;
|
---|
151 | OpenKey(RegistryContext.Key, True);
|
---|
152 |
|
---|
153 | LastColorFormat := ReadStringWithDefault('LastColorFormat', '');
|
---|
154 | LastImageSize.X := ReadIntegerWithDefault('LastImageSizeX', 600);
|
---|
155 | LastImageSize.Y := ReadIntegerWithDefault('LastImageSizeY', 400);
|
---|
156 | if ValueExists('LanguageCode') then
|
---|
157 | CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
|
---|
158 | else CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode('');
|
---|
159 | finally
|
---|
160 | Free;
|
---|
161 | end;
|
---|
162 | end;
|
---|
163 |
|
---|
164 | procedure TCore.SaveConfig;
|
---|
165 | begin
|
---|
166 | with TRegistryEx.Create do
|
---|
167 | try
|
---|
168 | RootKey := RegistryContext.RootKey;
|
---|
169 | OpenKey(RegistryContext.Key, True);
|
---|
170 |
|
---|
171 | WriteString('LastColorFormat', LastColorFormat);
|
---|
172 | WriteInteger('LastImageSizeX', LastImageSize.X);
|
---|
173 | WriteInteger('LastImageSizeY', LastImageSize.Y);
|
---|
174 | if Assigned(CoolTranslator1.Language) and (CoolTranslator1.Language.Code <> '') then
|
---|
175 | WriteString('LanguageCode', CoolTranslator1.Language.Code)
|
---|
176 | else DeleteValue('LanguageCode');
|
---|
177 | finally
|
---|
178 | Free;
|
---|
179 | end;
|
---|
180 | end;
|
---|
181 |
|
---|
182 | procedure TCore.AFileNewExecute(Sender: TObject);
|
---|
183 | begin
|
---|
184 | FormNew.DefaultSize := LastImageSize;
|
---|
185 | if FormNew.ShowModal = mrOk then begin
|
---|
186 | Project.Bitmap.ColorFormat := TColorFormat.Create;
|
---|
187 |
|
---|
188 | Project.FileName := 'New image';
|
---|
189 | Project.Bitmap.Size := Point(FormNew.SpinEditWidth.Value, FormNew.SpinEditHeight.Value);
|
---|
190 | Project.Bitmap.ColorFormat := ColorFormatManager.Formats[FormNew.ComboBoxColorFormat.ItemIndex];
|
---|
191 | // Project.Bitmap.BackgroundColor.FromTColor(clBlack);
|
---|
192 | // Project.Bitmap.DPI := FormNew.SpinEditDPI.Value;
|
---|
193 | Project.View.ZoomAll(Project.Bitmap.Size);
|
---|
194 | FormMain.Redraw;
|
---|
195 | LastImageSize := Project.Bitmap.Size;
|
---|
196 | end;
|
---|
197 | end;
|
---|
198 |
|
---|
199 | procedure TCore.AZoomAllExecute(Sender: TObject);
|
---|
200 | begin
|
---|
201 | with Core.Project do
|
---|
202 | View.ZoomAll(Bitmap.Size);
|
---|
203 | FormMain.Redraw;
|
---|
204 | end;
|
---|
205 |
|
---|
206 | procedure TCore.AZoomInExecute(Sender: TObject);
|
---|
207 | begin
|
---|
208 | Project.View.Zoom := Project.View.Zoom * ZoomFactor;
|
---|
209 | FormMain.Redraw;
|
---|
210 | end;
|
---|
211 |
|
---|
212 | procedure TCore.AZoomNormalExecute(Sender: TObject);
|
---|
213 | begin
|
---|
214 | Project.View.Zoom := 1;
|
---|
215 | FormMain.Redraw;
|
---|
216 | end;
|
---|
217 |
|
---|
218 | procedure TCore.AZoomOutExecute(Sender: TObject);
|
---|
219 | begin
|
---|
220 | Project.View.Zoom := Project.View.Zoom / ZoomFactor;
|
---|
221 | FormMain.Redraw;
|
---|
222 | end;
|
---|
223 |
|
---|
224 | procedure TCore.AExitExecute(Sender: TObject);
|
---|
225 | begin
|
---|
226 | Application.Terminate;
|
---|
227 | end;
|
---|
228 |
|
---|
229 | procedure TCore.AFileCloseExecute(Sender: TObject);
|
---|
230 | begin
|
---|
231 | if not Project.Saved then AFileSave.Execute;
|
---|
232 | Project.Free;
|
---|
233 | FormMain.Redraw;
|
---|
234 | end;
|
---|
235 |
|
---|
236 | procedure TCore.AFileOpenExecute(Sender: TObject);
|
---|
237 | begin
|
---|
238 | if OpenPictureDialog1.Execute then begin
|
---|
239 | ProjectOpen(OpenPictureDialog1.FileName);
|
---|
240 | end;
|
---|
241 | end;
|
---|
242 |
|
---|
243 | procedure TCore.AFileSaveAsExecute(Sender: TObject);
|
---|
244 | begin
|
---|
245 | SavePictureDialog1.InitialDir := ExtractFileDir(Project.FileName);
|
---|
246 | SavePictureDialog1.FileName := ExtractFileName(Project.FileName);
|
---|
247 | if SavePictureDialog1.Execute then begin
|
---|
248 | Project.FileName := SavePictureDialog1.FileName;
|
---|
249 | FormMain.LastOpenedList1.AddItem(SavePictureDialog1.FileName);
|
---|
250 | AFileSave.Execute;
|
---|
251 | end;
|
---|
252 | end;
|
---|
253 |
|
---|
254 | procedure TCore.AFileSaveExecute(Sender: TObject);
|
---|
255 | var
|
---|
256 | Image: TImage;
|
---|
257 | begin
|
---|
258 | if Project.FileName = '' then AFileSaveAs.Execute
|
---|
259 | else begin
|
---|
260 | FormMain.LastOpenedList1.AddItem(SavePictureDialog1.FileName);
|
---|
261 | Image := TImage.Create(nil);
|
---|
262 | Image.Picture.Bitmap.SetSize(Project.Bitmap.Size.X, Project.Bitmap.Size.Y);
|
---|
263 | Project.Bitmap.PaintToBitmap(Image.Picture.Bitmap,
|
---|
264 | Rect(0, 0, Image.Picture.Bitmap.Width, Image.Picture.Bitmap.Height));
|
---|
265 | Image.Picture.SaveToFile(SavePictureDialog1.FileName);
|
---|
266 | Image.Free;
|
---|
267 | Project.Saved := True;
|
---|
268 | end;
|
---|
269 | end;
|
---|
270 |
|
---|
271 | procedure TCore.AImageClearExecute(Sender: TObject);
|
---|
272 | begin
|
---|
273 | Project.Bitmap.Clear;
|
---|
274 | (Project.Bitmap.Canvas.Pen.Color as TFColor).ColorFormat := Project.Bitmap.ColorFormat;
|
---|
275 | (Project.Bitmap.Canvas.Pen.Color as TFColor).SetColorName(cnWhite);
|
---|
276 | Project.Bitmap.Canvas.Pen.MoveTo(Point(80, 80));
|
---|
277 | Project.Bitmap.Canvas.Pen.LineTo(Point(50, 20));
|
---|
278 | FormMain.Redraw;
|
---|
279 | end;
|
---|
280 |
|
---|
281 | procedure TCore.AImageFlipExecute(Sender: TObject);
|
---|
282 | begin
|
---|
283 | Project.Bitmap.Flip;
|
---|
284 | FormMain.Redraw;
|
---|
285 | end;
|
---|
286 |
|
---|
287 | procedure TCore.AImageGradientExecute(Sender: TObject);
|
---|
288 | begin
|
---|
289 | Core.Project.Bitmap.Gradient;
|
---|
290 | FormMain.Redraw;
|
---|
291 | end;
|
---|
292 |
|
---|
293 | procedure TCore.AImageMirrorExecute(Sender: TObject);
|
---|
294 | begin
|
---|
295 | Project.Bitmap.Mirror;
|
---|
296 | FormMain.Redraw;
|
---|
297 | end;
|
---|
298 |
|
---|
299 | procedure TCore.AImageNegativeExecute(Sender: TObject);
|
---|
300 | begin
|
---|
301 | Project.Bitmap.Negative;
|
---|
302 | FormMain.Redraw;
|
---|
303 | end;
|
---|
304 |
|
---|
305 | procedure TCore.AImageRandomExecute(Sender: TObject);
|
---|
306 | begin
|
---|
307 | Project.Bitmap.Random;
|
---|
308 | FormMain.Redraw;
|
---|
309 | end;
|
---|
310 |
|
---|
311 | procedure TCore.ASettingsExecute(Sender: TObject);
|
---|
312 | begin
|
---|
313 | FormSettings := TFormSettings.Create(nil);
|
---|
314 | try
|
---|
315 | FormSettings.Load;
|
---|
316 | if FormSettings.ShowModal = mrOk then begin
|
---|
317 | FormSettings.Save;
|
---|
318 | end;
|
---|
319 | finally
|
---|
320 | FormSettings.Free;
|
---|
321 | end;
|
---|
322 | end;
|
---|
323 |
|
---|
324 | procedure TCore.AToolMoveExecute(Sender: TObject);
|
---|
325 | begin
|
---|
326 | FormMain.ImageTool := itMoveView;
|
---|
327 | end;
|
---|
328 |
|
---|
329 | procedure TCore.AToolPenExecute(Sender: TObject);
|
---|
330 | begin
|
---|
331 | FormMain.ImageTool := itPen;
|
---|
332 | end;
|
---|
333 |
|
---|
334 | end.
|
---|
335 |
|
---|