root/trunk/Forms/frm_create_mask.pas
| 370 | 427 | ||
|---|---|---|---|
1 | (* ***************************************************************************** | ||
2 | * | ||
3 | * MyHomeLib | ||
4 | * | ||
5 | * Version 0.9 | ||
6 | * 20.08.2008 | ||
7 | * Copyright (c) Aleksey Penkov alex.penkov@gmail.com | ||
8 | * Nick Rymanov nrymanov@gmail.com | ||
9 | ****************************************************************************** *) | ||
10 | |||
1 | unit frm_create_mask; | 11 | unit frm_create_mask; |
2 | 12 | ||
3 | interface | 13 | interface |
... | ... | ||
4 | 14 | ||
5 | uses | 15 | uses |
6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | 16 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
7 | Dialogs, Buttons, StdCtrls, RzButton, ExtCtrls; | 17 | Dialogs, Buttons, StdCtrls, ExtCtrls, unit_StaticTip; |
8 | 18 | ||
9 | type | 19 | type |
10 | TfrmCreateMask = class(TForm) | 20 | TfrmCreateMask = class(TForm) |
11 | edTemplate: TEdit; | 21 | edTemplate: TEdit; |
12 | Label1: TLabel; | 22 | Label1: TLabel; |
13 | Label2: TLabel; | 23 | Label2: TLabel; |
24 | pnButtons: TPanel; | ||
25 | btnOk: TButton; | ||
26 | btnCancel: TButton; | ||
27 | stDescription: TMHLStaticTip; | ||
14 | Label3: TLabel; | 28 | Label3: TLabel; |
15 | RzBitBtn1: TRzBitBtn; | ||
16 | RzBitBtn2: TRzBitBtn; | ||
17 | procedure RzBitBtn1Click(Sender: TObject); | 29 | procedure RzBitBtn1Click(Sender: TObject); |
18 | private | 30 | private |
19 | { Private declarations } | 31 | { Private declarations } |
... | ... | ||
27 | implementation | 39 | implementation |
28 | 40 | ||
29 | uses frm_settings; | 41 | uses frm_settings; |
30 | |||
31 | {$R *.dfm} | 42 | {$R *.dfm} |
32 | 43 | ||
33 | procedure TfrmCreateMask.RzBitBtn1Click(Sender: TObject); | 44 | procedure TfrmCreateMask.RzBitBtn1Click(Sender: TObject); |
34 | const mask_elements: array[1..4] of string = ('f', 's', 'n', 't'); | 45 | const |
35 | type TElement = record | 46 | mask_elements: array [1 .. 4] of string = ('f', 's', 'n', 't'); |
36 | name: string; | 47 | type |
37 | BegBlock, EndBlock: integer; | 48 | TElement = record |
38 | end; | 49 | name: string; |
39 | var stack: array[1..10] of TElement; | 50 | BegBlock, EndBlock: integer; |
40 | Elements: array[1..10] of TElement; | 51 | end; |
41 | Template: string; | 52 | var |
42 | i, j, StackPos, ElementPos: integer; | 53 | stack: array [1 .. 10] of TElement; |
43 | bol: boolean; | 54 | Elements: array [1 .. 10] of TElement; |
55 | Template: string; | ||
56 | i, j, StackPos, ElementPos: integer; | ||
57 | bol: boolean; | ||
44 | begin | 58 | begin |
45 | Template:= edTemplate.Text; | 59 | Template := edTemplate.Text; |
46 | StackPos:= 0; | 60 | StackPos := 0; |
47 | ElementPos:= 0; | 61 | ElementPos := 0; |
48 | i:= 1; | 62 | i := 1; |
49 | while i <= Length(Template) do | 63 | while i <= Length(Template) do |
50 | begin | 64 | begin |
51 | if Template[i]='[' then | 65 | if Template[i] = '[' then |
52 | begin | 66 | begin |
53 | inc(StackPos); | 67 | inc(StackPos); |
54 | Stack[StackPos].BegBlock:= i; | 68 | stack[StackPos].BegBlock := i; |
55 | Stack[StackPos].name:= ''; | 69 | stack[StackPos].name := ''; |
56 | end; | 70 | end; |
57 | 71 | ||
58 | if Template[i]='%' then | 72 | if Template[i] = '%' then |
59 | begin | 73 | begin |
60 | if (Stack[StackPos].name <> '') and (StackPos > 0) then | 74 | if (stack[StackPos].name <> '') and (StackPos > 0) then |
61 | begin | 75 | begin |
76 | // TODO -oNickR -cRefactoring : использовать общую функцию для пока сообщения об ошибке | ||
62 | ShowMessage('Проверьте правильность шаблона'); | 77 | ShowMessage('Проверьте правильность шаблона'); |
63 | exit; | 78 | exit; |
64 | end; | 79 | end; |
65 | 80 | ||
66 | inc(i); | 81 | inc(i); |
67 | Stack[StackPos].name:= ''; | 82 | stack[StackPos].name := ''; |
68 | while CharInSet(Template[i], ['a'..'z', 'A'..'Z']) do | 83 | while CharInSet(Template[i], ['a' .. 'z', 'A' .. 'Z']) do |
69 | begin | 84 | begin |
70 | Stack[StackPos].name:= Stack[StackPos].name + Template[i]; | 85 | stack[StackPos].name := stack[StackPos].name + Template[i]; |
71 | inc(i); | 86 | inc(i); |
72 | end; | 87 | end; |
73 | 88 | ||
74 | if StackPos <= 0 then | 89 | if StackPos <= 0 then |
75 | begin | 90 | begin |
76 | inc(ElementPos); | 91 | inc(ElementPos); |
77 | Elements[ElementPos].name:= Stack[StackPos].name; | 92 | Elements[ElementPos].name := stack[StackPos].name; |
78 | Elements[ElementPos].BegBlock:= 0; | 93 | Elements[ElementPos].BegBlock := 0; |
79 | Elements[ElementPos].EndBlock:= 0; | 94 | Elements[ElementPos].EndBlock := 0; |
80 | end; | 95 | end; |
81 | end; | 96 | end; |
82 | 97 | ||
83 | if Template[i]=']' then | 98 | if Template[i] = ']' then |
84 | begin | 99 | begin |
85 | if (Stack[StackPos].name = '') or (StackPos <= 0) then | 100 | if (stack[StackPos].name = '') or (StackPos <= 0) then |
86 | begin | 101 | begin |
102 | // TODO -oNickR -cRefactoring : использовать общую функцию для пока сообщения об ошибке | ||
87 | ShowMessage('Проверьте правильность шаблона'); | 103 | ShowMessage('Проверьте правильность шаблона'); |
88 | exit; | 104 | exit; |
89 | end; | 105 | end; |
90 | 106 | ||
91 | Stack[StackPos].EndBlock:= i; | 107 | stack[StackPos].EndBlock := i; |
92 | 108 | ||
93 | inc(ElementPos); | 109 | inc(ElementPos); |
94 | Elements[ElementPos].name:= Stack[StackPos].name; | 110 | Elements[ElementPos].name := stack[StackPos].name; |
95 | Elements[ElementPos].BegBlock:= Stack[StackPos].BegBlock; | 111 | Elements[ElementPos].BegBlock := stack[StackPos].BegBlock; |
96 | Elements[ElementPos].EndBlock:= Stack[StackPos].EndBlock; | 112 | Elements[ElementPos].EndBlock := stack[StackPos].EndBlock; |
97 | 113 | ||
98 | dec(StackPos); | 114 | dec(StackPos); |
99 | end; | 115 | end; |
... | ... | ||
103 | 119 | ||
104 | for i := 1 to ElementPos do | 120 | for i := 1 to ElementPos do |
105 | begin | 121 | begin |
106 | bol:= false; | 122 | bol := false; |
107 | for j := 1 to High(mask_elements) do | 123 | for j := 1 to High(mask_elements) do |
108 | if Elements[i].name = mask_elements[j] then | 124 | if Elements[i].name = mask_elements[j] then |
109 | bol:= true; | 125 | bol := true; |
110 | 126 | ||
111 | if not(bol) then | 127 | if not(bol) then |
112 | break; | 128 | break; |
... | ... | ||
114 | 130 | ||
115 | if not(bol) then | 131 | if not(bol) then |
116 | begin | 132 | begin |
133 | // TODO -oNickR -cRefactoring : использовать общую функцию для пока сообщения об ошибке | ||
117 | ShowMessage('Неверные элементы шаблона'); | 134 | ShowMessage('Неверные элементы шаблона'); |
118 | exit; | 135 | exit; |
119 | end; | 136 | end; |
120 | 137 | ||
121 | ModalResult:= mrOk; | 138 | ModalResult := mrOk; |
122 | end; | 139 | end; |
123 | 140 | ||
124 | end. | 141 | end. |
Download diff