Develop and Download Open Source Software

Browse Subversion Repository

Contents of /codefrm.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Mon Nov 7 12:03:00 2011 UTC (12 years, 4 months ago) by shiraishikazuo
File MIME type: text/x-pascal
File size: 11503 byte(s)


1 unit codefrm;
2 {$IFDEF FPC}
3 {$MODE DELPHI}{$H+}
4 {$ENDIF}
5 (***************************************)
6 (* Copyright (C) 2009, SHIRAISHI Kazuo *)
7 (***************************************)
8
9
10 interface
11
12 uses SysUtils, Types, Classes, Clipbrd, Graphics, Forms, Controls, Menus,
13 StdCtrls, Dialogs, ComCtrls, ExtCtrls, LResources, SynEdit, SynHighlighterPas;
14
15 type
16
17 { TCodeForm }
18
19 TCodeForm = class(TForm)
20
21 MainMenu1: TMainMenu;
22 Edit1: TMenuItem;
23 Cut1: TMenuItem;
24 Copy1: TMenuItem;
25 Paste1: TMenuItem;
26 Delete1: TMenuItem;
27 N4: TMenuItem;
28 SelectAll1: TMenuItem;
29 File1: TMenuItem;
30 Exit1: TMenuItem;
31 N1: TMenuItem;
32 Print1: TMenuItem;
33 N2: TMenuItem;
34 SaveAs1: TMenuItem;
35 Save1: TMenuItem;
36 N3: TMenuItem;
37 Close1: TMenuItem;
38 SaveDialog1: TSaveDialog;
39 FontDialog1: TFontDialog;
40
41 Run1: TMenuItem;
42 FindDialog1: TFindDialog;
43 ReplaceDialog1: TReplaceDialog;
44 Find1: TMenuItem;
45 Repalce1: TMenuItem;
46 FindNext1: TMenuItem;
47 N5: TMenuItem;
48 N6: TMenuItem;
49 Memo1: TSynEdit;
50 SynFreePascalSyn1: TSynFreePascalSyn;
51 WordWrap1: TMenuItem;
52 Run2: TMenuItem;
53 Option1: TMenuItem;
54 Font1: TMenuItem;
55 KS1: TMenuItem;
56 FromTop: TMenuItem;
57 FromCurrent: TMenuItem;
58 Undo1: TMenuItem;
59 protected1: TMenuItem;
60 StatusBar1: TStatusBar;
61 Show1: TMenuItem;
62 E1: TMenuItem;
63
64 procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
65 procedure Save1Click(Sender: TObject);
66 procedure Exit1Click(Sender: TObject);
67 procedure Close1Click(Sender: TObject);
68 procedure Cut1Click(Sender: TObject);
69 procedure Copy1Click(Sender: TObject);
70 procedure Paste1Click(Sender: TObject);
71 procedure Delete1Click(Sender: TObject);
72 procedure SelectAll1Click(Sender: TObject);
73 procedure SaveAs1Click(Sender: TObject);
74 procedure Print1Click(Sender: TObject);
75 procedure FormClose(Sender: TObject; var Action: TCloseAction);
76 procedure WordWrap1Click(Sender: TObject);
77 procedure Run2Click(Sender: TObject);
78 procedure Find1Click(Sender: TObject);
79 procedure Repalce1Click(Sender: TObject);
80 procedure FindNext1Click(Sender: TObject);
81 procedure FindDialog1Find(Sender: TObject);
82 procedure ReplaceDialog1Find(Sender: TObject);
83 procedure ReplaceDialog1Replace(Sender: TObject);
84 procedure Font1Click(Sender: TObject);
85 procedure FromTopClick(Sender: TObject);
86 procedure FromCurrentClick(Sender: TObject);
87 procedure Undo1Click(Sender: TObject);
88 procedure FormCreate(Sender: TObject);
89 procedure FormDestroy(Sender: TObject);
90 procedure protected1Click(Sender: TObject);
91 procedure FormResize(Sender: TObject);
92 procedure E1Click(Sender: TObject);
93 procedure Memo1KeyUp(Sender: TObject; var Key: Word;
94 Shift: TShiftState);
95
96 private
97 overwriteMode:boolean;
98 procedure Find(Sender: TObject);
99 procedure Replace(Sender: TObject);
100 function search(const FText:ansistring; Options1:TFindOptions):boolean;
101 procedure UpdateCursorPos;
102 procedure setStatusBar;
103 public
104 function FileFilter:string;virtual;
105 function FileExt:string;virtual;
106 procedure setReadOnly(s:boolean);
107 procedure AppendString(const s:string);
108 end;
109
110
111 var
112 CodeForm:TCodeForm;
113 var
114 InitialMargin:integer=1600;
115
116 implementation
117 uses
118 IniFiles,
119 myutils,base,base0,sconsts,
120 {$IFNDEF LclGTK}printdlg,{$ENDIF}
121 findtext,mainfrm,compiler;
122 {$R *.lfm}
123
124
125 function TCodeForm.FileFilter:string;
126 begin
127 result:=s_TextFile+'|*.lpr'
128 end;
129
130 function TCodeForm.FileExt:string;
131 begin
132 result:='.lpr'
133 end;
134
135
136
137 procedure TCodeForm.Save1Click(Sender: TObject);
138 begin
139 if (Caption = '') then
140 SaveAs1Click(Sender)
141 else
142 begin
143 Memo1.Lines.SaveToFile(Caption);
144 Memo1.Modified := false;
145 end;
146 end;
147
148 procedure TCodeForm.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
149 );
150 begin
151
152 end;
153
154 procedure TCodeForm.SaveAs1Click(Sender: TObject);
155 begin
156 SaveDialog1.Filter:=FileFilter;
157 SaveDialog1.FileName :=ChangeFileExt(Caption,FileExt);
158 SaveDiaLog1.DefaultExt:='lpr';
159 if SaveDialog1.Execute then
160 begin
161 Caption := SaveDialog1.FileName;
162 Save1Click(Sender);
163 end;
164 end;
165
166 procedure TCodeForm.Exit1Click(Sender: TObject);
167 begin
168 FrameForm.Close1Click(Sender);
169 end;
170
171 procedure TCodeForm.Close1Click(Sender: TObject);
172 begin
173 Close; { Close the edit form }
174 end;
175
176
177
178 procedure TCodeForm.Cut1Click(Sender: TObject);
179 begin
180 Memo1.CutToClipBoard;
181 end;
182
183 procedure TCodeForm.Copy1Click(Sender: TObject);
184 begin
185 Memo1.CopyToClipBoard;
186 end;
187
188 procedure TCodeForm.Paste1Click(Sender: TObject);
189 begin
190 Memo1.PasteFromClipBoard;
191 end;
192
193 procedure TCodeForm.Delete1Click(Sender: TObject);
194 begin
195 Memo1.ClearSelection;
196 end;
197
198 procedure TCodeForm.SelectAll1Click(Sender: TObject);
199 begin
200 Memo1.SelectAll;
201 end;
202
203 procedure TCodeForm.Print1Click(Sender: TObject);
204 begin
205 {$IFNDEF LclGtk}
206 with TPrintDialog1.Create(self) do
207 begin
208 Execute(memo1);
209 free
210 end;
211 {$ENDIF}
212 end;
213
214 procedure TCodeForm.FormClose(Sender: TObject; var Action: TCloseAction);
215 begin
216 Action:=caMiniMize
217 end;
218
219
220
221
222
223
224 procedure TCodeForm.WordWrap1Click(Sender: TObject);
225 begin
226 (*
227 with Memo1 do begin
228 WordWrap := not WordWrap;
229 if WordWrap then
230 ScrollBars := ssVertical
231 else
232 ScrollBars := ssBoth;
233 WordWrap1.Checked := WordWrap;
234 end;
235 *)
236 end;
237
238
239
240 procedure TCodeForm.Run2Click(Sender: TObject);
241 begin
242 RunCode(self)
243 end;
244
245 procedure TCodeForm.Find1Click(Sender: TObject);
246 begin
247 FindDialog1.FindText:=Memo1.seltext;
248 //Memo1.sellength:=0;
249 if fromTop.checked then
250 memo1.selstart:=0;
251 FindDialog1.Execute;
252 FindNext1.Enabled := True;
253 end;
254
255 procedure TCodeForm.Repalce1Click(Sender: TObject);
256 begin
257 ReplaceDialog1.FindText:=Memo1.seltext;
258 //Memo1.sellength:=0;
259 if fromTop.checked then
260 memo1.selstart:=0;
261 ReplaceDialog1.Execute;
262
263 end;
264
265 procedure TCodeForm.FindNext1Click(Sender: TObject);
266 begin
267 Find(FindDialog1);
268 end;
269
270 procedure TCodeForm.FindDialog1Find(Sender: TObject);
271 begin
272 Find(Sender);
273 end;
274
275 procedure TCodeForm.ReplaceDialog1Find(Sender: TObject);
276 begin
277 Find(Sender)
278 end;
279
280 procedure TCodeForm.ReplaceDialog1Replace(Sender: TObject);
281 begin
282 Replace(Sender);
283 end;
284
285 procedure TCodeForm.Font1Click(Sender: TObject);
286 begin
287 FontDialog1.Font:=Memo1.Font;
288 if FontDialog1.execute then
289 Memo1.Font:=FontDialog1.Font;
290 end;
291
292
293 function TCodeForm.search(const FText:ansistring; Options1:TFindOptions):boolean;
294 var
295 p:integer;
296 s:TFindOptions;
297 InitialPos:integer;
298 begin
299 s:=[];
300 if frMatchCase in Options1 then s:=s+[frMatchCase];
301 with memo1 do
302 begin
303 InitialPos:=SelEnd; //selstart+selLength;
304 if frWholeWord in Options1 then
305 p:=findword(memo1,FText,InitialPos,length(Memo1.text)-InitialPos-1,s)
306 else
307 //p:=findtext(FText,InitialPos,SearchLength,s);
308 p:=SearchText(memo1,FText,InitialPos,length(Memo1.text)-InitialPos-1,s);
309 if p>=0 then
310 begin
311 selstart:=p;
312 Selend:=p+Length(FText); //selLength:=length(FText);
313 result:=true;
314 end
315 else
316 begin
317 selStart:=SelStart+length(FText);
318 SelEnd:=SelStart; //selLength:=0;
319 result:=false;
320 end;
321 end;
322 Application.Processmessages;
323 end;
324
325 procedure TCodeForm.Find(Sender: TObject);
326 begin
327 with (Sender as TFindDialog) do
328 if Search( FindText, Options) then
329
330 else
331 ShowMessage(FindText + EOL + S_NotFound);
332 end;
333
334 procedure TCodeForm.Replace(Sender: TObject);
335 var
336 Found: Boolean;
337 begin
338 with ReplaceDialog1 do
339 begin
340 if AnsiCompareText(Memo1.SelText, FindText) = 0 then
341 Memo1.SelText := ReplaceText;
342 Found := Search( FindText, Options);
343 while Found and (frReplaceAll in Options) do
344 begin
345 Memo1.SelText := ReplaceText;
346 Found := Search( FindText, Options);
347 end;
348 if (not Found) and (frReplace in Options) then
349 ShowMessage( FindText + EOL +s_NotFound);
350 end;
351 end;
352
353 procedure TCodeForm.FromTopClick(Sender: TObject);
354 begin
355 FromTop.checked:=true;
356 FromCurrent.checked:=false;
357 end;
358
359 procedure TCodeForm.FromCurrentClick(Sender: TObject);
360 begin
361 FromTop.checked:=false;
362 FromCurrent.checked:=true;
363 end;
364
365 procedure TCodeForm.Undo1Click(Sender: TObject);
366 begin
367 Memo1.Undo;
368 //SendMessage(Memo1.Handle,WM_UNDO,0,0);
369 end;
370
371 procedure TCodeForm.FormCreate(Sender: TObject);
372 begin
373 SaveDialog1.Title:=s_SaveFile;
374 //Visible:=false;
375 WindowState:=wsMinimized;
376 //Run2.ShortCut:=ShortCut(Word('R'), [ssCtrl]);
377 //Memo1.Perform(EM_SETOPTIONS, ECOOP_OR, ECO_SELECTIONBAR);
378
379 with TMyIniFile.create('Code') do
380 begin
381 RestoreFont(Memo1.Font);
382 free
383 end;
384 Application.ProcessMessages;
385 end;
386
387
388 procedure TCodeForm.FormDestroy(Sender: TObject);
389 begin
390 with TMyIniFile.create('Code') do
391 begin
392 StoreFont(Memo1.Font);
393 WriteInteger('InitialMargin',InitialMargin);
394 free;
395 end;
396 end;
397
398 procedure TCodeForm.setStatusBar;
399 begin
400 if memo1.readonly then
401 begin
402 StatusBar1.Panels[0].text:=s_Protected;
403 StatusBar1.Panels[0].Bevel:=pbNone;
404 end
405 else if OverWriteMode then
406 begin
407 StatusBar1.Panels[0].text:=s_OverWrite;
408 StatusBar1.Panels[0].Bevel:=pbRaised;
409 end
410 else
411 begin
412 StatusBar1.Panels[0].text:=s_Insert;
413 StatusBar1.Panels[0].Bevel:=pbLowered;
414 end;
415 end;
416
417 procedure TCodeForm.setReadOnly(s:boolean);
418 begin
419 protected1.checked:=s;
420 memo1.readonly:=s;
421 SetStatusBar;
422 end;
423
424 procedure TCodeForm.protected1Click(Sender: TObject);
425 begin
426 setReadOnly(not protected1.checked)
427 end;
428
429 procedure TCodeForm.FormResize(Sender: TObject);
430 begin
431 memo1.refresh;
432 end;
433
434 procedure TCodeForm.E1Click(Sender: TObject);
435 begin
436 //FrameForm.bringToFront
437 end;
438
439 procedure TCodeForm.UpdateCursorPos;
440 var
441 CPos: TPoint;
442 begin
443 //CPos.Y := SendMessage(Memo1.Handle, EM_EXLINEFROMCHAR, 0,Memo1.SelStart);
444 //CPos.X := (Memo1.SelStart -
445 // SendMessage(memo1.Handle, EM_LINEINDEX, CPos.Y, 0));
446 (*
447 // CaretPos������������
448 CPos.Y := LineFromChar(Memo1, Memo1.SelStart);
449 CPos.X := Memo1.SelStart -LineIndex(memo1, CPos.Y );
450 *)
451 CPos.Y := Memo1.CaretY;
452 CPos.X := Memo1.CaretX;
453
454 //Inc(CPos.y);
455 //Inc(CPos.x);
456 StatusBar1.Panels[1].Text := Format('%6d:%4d', [CPos.y, CPos.x]);
457 //FrameForm.StatusBar1.Panels[1].Bevel:=pbLowered;
458 end;
459
460
461 procedure TCodeForm.Memo1KeyUp(Sender: TObject; var Key: Word;
462 Shift: TShiftState);
463 begin
464 UpdateCursorPos
465
466 end;
467
468 procedure TCodeForm.AppendString(const s:string);
469 begin
470 with memo1 do
471 begin
472 //Lines.BeginUpdate;
473 //SelStart:=Length(text);
474 //SelLength:=0;
475 SelText:=s;
476 //Lines.EndUpdate;
477 end;
478 end;
479
480 initialization
481
482
483 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26