Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/ToolBarSetting.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (show annotations) (download) (as text)
Mon Feb 18 15:42:35 2008 UTC (16 years, 1 month ago) by h677
Branch: MAIN
CVS Tags: v1_59_0_771, v1_59_0_770, v1_59_0_773, v1_59_0_772, v1_59_0_775, v1_59_0_774, v1_59_0_777, v1_59_0_776, v1_59_0_778, v1_63_1_819, v1_62_0_812, v1_59_1_765, v1_60_0_788, v1_60_0_789, v1_58_0_748, v1_58_0_745, v1_60_0_781, v1_60_0_782, v1_58_0_746, v1_60_0_784, v1_60_0_786, v1_60_0_787, v1_59_0_767, v1_59_1_778, v1_59_0_768, v1_59_0_769, v1_57_1_744, v1_58_0_752, v1_58_0_750, v1_58_0_751, v1_58_0_756, v1_58_0_757, v1_58_0_754, v1_58_0_755, v1_58_0_759, v1_61_0_796, v1_61_0_797, v1_61_0_795, v1_61_0_798, v1_61_0_799, v1_63_0_818, v1_63_0_817, v1_63_0_816, v1_63_0_815, v1_62_0_805, v1_62_0_804, v1_62_0_807, v1_62_0_806, v1_62_0_803, v1_62_0_802, v1_62_0_809, v1_60_0_780, v1_60_0_779, v1_62_0_810, v1_62_0_811, v1_58_0_747, v1_60_0_783, v1_59_2_785, v1_60_1_793, v1_58_0_763, v1_58_0_762, v1_58_0_761, v1_58_0_760, v1_62_1_813, v1_57_2_749, v1_57_0_742, v1_57_0_743, v1_57_0_744, v1_61_0_800, v1_60_0_793, v1_60_0_792, v1_60_0_791, v1_60_0_790, v1_60_2_794, v1_61_1_801, HEAD
Branch point for: Bb57, Bb62, Bb63, Bb60, Bb61, Bb59, Bb58
Changes since 1.7: +1 -1 lines
File MIME type: text/x-pascal
ToolButtonをRemoveControlすると、アプリケーション終了時に
AccessViolationを起こす場合対応

1 unit ToolBarSetting;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, ExtCtrls, ComCtrls, ActnList, IniFiles,
8 GikoSystem, ToolBarUtil;
9
10 type
11 TGikoToolType = (gttStandard, gttList, gttBrowser);
12
13 TToolBarItem = class
14 private
15 FToolBar: TToolBar;
16 FButtonActionList: TList;
17 FToolType: TGikoToolType;
18 public
19 constructor Create;
20 destructor Destroy; override;
21 property ToolBar: TToolBar read FToolBar write FToolBar;
22 property ButtonActionList: TList read FButtonActionList write FButtonActionList;
23 property ToolType: TGikoToolType read FToolType write FToolType;
24 end;
25
26 TToolBarSettingDialog = class(TForm)
27 Label1: TLabel;
28 AllListView: TListView;
29 AddButton: TButton;
30 RemoveButton: TButton;
31 CurrentListView: TListView;
32 Label2: TLabel;
33 UpButton: TButton;
34 DownButton: TButton;
35 OKButton: TButton;
36 CancelButton: TButton;
37 Bevel1: TBevel;
38 Label3: TLabel;
39 ToolBarComboBox: TComboBox;
40 SeparatorAddButton: TButton;
41 ResetButton: TButton;
42 procedure FormCreate(Sender: TObject);
43 procedure FormDestroy(Sender: TObject);
44 procedure ToolBarComboBoxChange(Sender: TObject);
45 procedure OKButtonClick(Sender: TObject);
46 procedure CurrentListViewData(Sender: TObject; Item: TListItem);
47 procedure AllListViewData(Sender: TObject; Item: TListItem);
48 procedure UpButtonClick(Sender: TObject);
49 procedure DownButtonClick(Sender: TObject);
50 procedure ResetButtonClick(Sender: TObject);
51 procedure CurrentListViewChange(Sender: TObject; Item: TListItem;
52 Change: TItemChange);
53 procedure AllListViewChange(Sender: TObject; Item: TListItem;
54 Change: TItemChange);
55 procedure AddButtonClick(Sender: TObject);
56 procedure RemoveButtonClick(Sender: TObject);
57 procedure SeparatorAddButtonClick(Sender: TObject);
58 procedure FormShow(Sender: TObject);
59 private
60 { Private 鐃緒申鐃緒申 }
61 FActionList: TActionList;
62 FAllList: TList;
63 FToolBarIndex : Integer; // 鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?
64 procedure CreateListData(ToolBarItem: TToolBarItem);
65 procedure MoveItem(Offset: Integer);
66 procedure Sort;
67 function SetDefaultItem(deflist: array of string; ToolBarItem: TToolBarItem): Integer;
68 public
69 { Public 鐃緒申鐃緒申 }
70 constructor Create(AOwner: TComponent; ActionList: TActionList); reintroduce; overload; virtual;
71 procedure AddToolBar(ToolBar: TToolBar; ToolType: TGikoToolType);
72 property ToolBarIndex : Integer read FToolBarIndex write FToolBarIndex;
73 end;
74
75 var
76 ToolBarSettingDialog: TToolBarSettingDialog;
77
78 function CompareCategory(Item1, Item2: Pointer): Integer;
79
80 implementation
81
82 //const
83 // //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
84 // SEPARATOR_TEXT = '- 鐃緒申鐃緒申鐃緒申 -';
85
86 {$R *.dfm}
87
88 //
89 // TToolBarItem
90 //
91 constructor TToolBarItem.Create;
92 begin
93 inherited Create;
94 FButtonActionList := TList.Create;
95 end;
96
97 destructor TToolBarItem.Destroy;
98 begin
99 FButtonActionList.Free;
100 inherited Destroy;
101 end;
102
103 //
104 // TToolBarSettingDialog
105 //
106 constructor TToolBarSettingDialog.Create(AOwner: TComponent; ActionList: TActionList);
107 begin
108 inherited Create(AOwner);
109 FActionList := ActionList;
110 end;
111
112 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
113 procedure TToolBarSettingDialog.FormCreate(Sender: TObject);
114 begin
115 FAllList := TList.Create;
116 end;
117
118 //鐃?鐃?鐃?鐃緒申鐃?鐃緒申
119 procedure TToolBarSettingDialog.FormDestroy(Sender: TObject);
120 var
121 i: Integer;
122 begin
123 FAllList.Free;
124 for i := 0 to ToolBarComboBox.Items.Count - 1 do
125 ToolBarComboBox.Items.Objects[i].Free;
126 end;
127
128 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
129 procedure TToolBarSettingDialog.FormShow(Sender: TObject);
130 begin
131 ToolBarComboBox.ItemIndex := FToolBarIndex;
132 ToolBarComboBoxChange(Self);
133 AllListViewChange(Sender, nil, ctState);
134 CurrentListViewChange(Sender, nil, ctState);
135 end;
136
137 //鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申
138 procedure TToolBarSettingDialog.AddToolBar(ToolBar: TToolBar; ToolType: TGikoToolType);
139 var
140 ToolBarItem: TToolBarItem;
141 i: Integer;
142 begin
143 ToolBarItem := TToolBarItem.Create;
144 ToolBarItem.ToolBar := ToolBar;
145 ToolBarItem.ToolType := ToolType;
146 for i := 0 to ToolBar.ControlCount - 1 do
147 if ToolBar.Controls[ i ] is TToolButton Then
148 if not (ToolBar.Controls[ i ].Name = 'SelectComboBoxDummy') Then
149 ToolBarITem.ButtonActionList.Add(ToolBar.Controls[i].Action);
150 ToolBarComboBox.Items.AddObject(ToolBar.Caption, ToolBarItem);
151 end;
152
153
154 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申
155 procedure TToolBarSettingDialog.ToolBarComboBoxChange(Sender: TObject);
156 var
157 ToolBarItem: TToolBarItem;
158 begin
159 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
160 CreateListData(ToolBarItem);
161 AllListView.Items.Count := FAllList.Count;
162 CurrentListView.Items.Count := ToolBarItem.ButtonActionList.Count;
163 Sort;
164 AllListView.Refresh;
165 CurrentListView.Refresh;
166 end;
167
168 //OK鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
169 procedure TToolBarSettingDialog.OKButtonClick(Sender: TObject);
170 var
171 i: Integer;
172 j: Integer;
173 ToolButton: TToolButton;
174 ToolBarItem: TToolBarItem;
175 begin
176 for i := 0 to ToolBarComboBox.Items.Count - 1 do begin
177 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[i]);
178
179 for j := ToolBarItem.ToolBar.ButtonCount - 1 downto 0 do
180 ToolBarItem.ToolBar.Buttons[j].HostDockSite := nil;
181
182 for j := 0 to ToolBarItem.ButtonActionList.Count - 1 do begin
183 if ToolBarItem.ButtonActionList[j] = nil then begin
184 ToolButton := TToolButton.Create(ToolBarItem.ToolBar);
185 ToolButton.Style := tbsSeparator;
186 ToolButton.Width := 8;
187 ToolButton.Left := 10000;
188 ToolBarItem.ToolBar.InsertControl(ToolButton);
189 end else if TObject(ToolBarItem.ButtonActionList[j]) is TCustomAction then begin
190 ToolButton := TToolButton.Create(ToolBarItem.ToolBar);
191 ToolButton.Action := TCustomAction(ToolBarItem.ButtonActionList[j]);
192 if ToolButton.ImageIndex = -1 then
193 ToolButton.ImageIndex := 51;
194
195 ToolButton.Left := 10000;
196 SetButtonStyle(ToolBarItem.ButtonActionList[j], ToolButton);
197 ToolBarItem.ToolBar.InsertControl(ToolButton);
198 end;
199 end;
200 end;
201 end;
202
203 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
204 procedure TToolBarSettingDialog.AllListViewData(Sender: TObject; Item: TListItem);
205 var
206 Action: TCustomAction;
207 begin
208 if (FAllList.Count <= 0) or (FAllList.Count <= Item.Index) then
209 Exit;
210 if FAllList[Item.Index] = nil then begin
211 Item.Caption := SEPARATOR_TEXT;
212 Item.ImageIndex := -1;
213 Item.Data := nil;
214 end else if TObject(FAllList[Item.Index]) is TCustomAction then begin
215 Action := TCustomAction(FAllList[Item.Index]);
216 Item.Caption := Action.Hint;
217 Item.ImageIndex := Action.ImageIndex;
218 Item.Data := Action;
219 end;
220 end;
221
222 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申
223 procedure TToolBarSettingDialog.CurrentListViewData(Sender: TObject; Item: TListItem);
224 var
225 Action: TCustomAction;
226 ToolBarItem: TToolBarItem;
227 begin
228 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
229
230 if (ToolBarItem.ButtonActionList.Count <= 0) or (ToolBarItem.ButtonActionList.Count <= Item.Index) then
231 Exit;
232 if ToolBarItem.ButtonActionList[Item.Index] = nil then begin
233 Item.Caption := SEPARATOR_TEXT;
234 Item.ImageIndex := -1;
235 Item.Data := nil;
236 end else if TObject(ToolBarItem.ButtonActionList[Item.Index]) is TCustomAction then begin
237 Action := TCustomAction(ToolBarItem.ButtonActionList[Item.Index]);
238 Item.Caption := Action.Hint;
239 Item.ImageIndex := Action.ImageIndex;
240 Item.Data := Action;
241 end;
242 end;
243
244 //鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申
245 procedure TToolBarSettingDialog.CreateListData(ToolBarItem: TToolBarItem);
246 var
247 i: Integer;
248 Category: string;
249 begin
250 FAllList.Clear;
251 for i := 0 to FActionList.ActionCount - 1 do begin
252 if FActionList.Actions[i].Tag = -1 then
253 Continue;
254 Category := FActionList.Actions[i].Category;
255 //鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
256 if (ToolBarItem.ToolType = gttStandard) and ((Category = '鐃緒申') or (Category = '鐃?鐃緒申鐃?鐃?')) then
257 Continue;
258 //鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申
259 if (ToolBarItem.ToolType = gttList) and (Category <> '鐃緒申') then
260 Continue;
261 //鐃?鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申
262 if (ToolBarItem.ToolType = gttBrowser) and (Category <> '鐃?鐃緒申鐃?鐃?') then
263 Continue;
264
265 if ToolBarItem.ButtonActionList.IndexOf(FActionList.Actions[i]) = -1 then
266 FAllList.Add(FActionList.Actions[i]);
267 end;
268 end;
269
270 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
271 procedure TToolBarSettingDialog.UpButtonClick(Sender: TObject);
272 begin
273 MoveItem(-1);
274 end;
275
276 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
277 procedure TToolBarSettingDialog.DownButtonClick(Sender: TObject);
278 begin
279 MoveItem(1);
280 end;
281
282 //鐃緒申鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
283 procedure TToolBarSettingDialog.ResetButtonClick(Sender: TObject);
284 var
285 ToolBarItem: TToolBarItem;
286 cnt: Integer;
287 begin
288 cnt := 0;
289 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
290 AllListView.Items.Count := 0;
291 CurrentListView.Items.Count := 0;
292 ToolBarItem.ButtonActionList.Clear;
293 case ToolBarComboBox.ItemIndex of
294 0: cnt := SetDefaultItem(DEF_STANDARD, ToolBarItem);
295 1: cnt := SetDefaultItem(DEF_LIST, ToolBarItem);
296 2: cnt := SetDefaultItem(DEF_BROWSER, ToolBarItem);
297 end;
298 CreateListData(ToolBarItem);
299 AllListView.Items.Count := FAllList.Count;
300 CurrentListView.Items.Count := cnt;
301 Sort;
302 AllListView.Refresh;
303 CurrentListView.Refresh;
304 end;
305
306 function TToolBarSettingDialog.SetDefaultItem(deflist: array of string; ToolBarItem: TToolBarItem): Integer;
307 var
308 i: Integer;
309 Action: TCustomAction;
310 begin
311 Result := 0;
312 for i := 0 to Length(deflist) - 1 do begin
313 if deflist[i] = '' then begin
314 ToolBarItem.ButtonActionList.Add(nil);
315 Inc(Result);
316 end else begin
317 Action := GetActionItem(FActionList, deflist[i]);
318 if Action <> nil then begin
319 ToolBarItem.ButtonActionList.Add(Action);
320 Inc(Result);
321 end;
322 end;
323 end;
324 end;
325
326 //鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
327 procedure TToolBarSettingDialog.MoveItem(Offset: Integer);
328 var
329 Item: TListItem;
330 ToolBarItem: TToolBarItem;
331 begin
332 Item := CurrentListView.Selected;
333 if (Item = nil) or (Item.Index + Offset < 0) then
334 Exit;
335
336 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
337 if Item.Index + Offset >= ToolBarItem.ButtonActionList.Count then
338 Exit;
339
340 ToolBarItem.ButtonActionList.Move(Item.Index, Item.Index + Offset);
341 CurrentListView.ItemIndex := Item.Index + Offset;
342 CurrentListView.Refresh;
343 end;
344
345 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
346 procedure TToolBarSettingDialog.AllListViewChange(Sender: TObject;
347 Item: TListItem; Change: TItemChange);
348 begin
349 AddButton.Enabled := not (Item = nil);
350 end;
351
352 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申
353 procedure TToolBarSettingDialog.CurrentListViewChange(Sender: TObject;
354 Item: TListItem; Change: TItemChange);
355 begin
356 UpButton.Enabled := not (Item = nil);
357 DownButton.Enabled := not (Item = nil);
358 RemoveButton.Enabled := not (Item = nil);
359 if Item = nil then
360 Exit;
361 UpButton.Enabled := Item.Index > 0;
362 DownButton.Enabled := Item.Index < CurrentListView.Items.Count - 1;
363 end;
364
365 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
366 procedure TToolBarSettingDialog.AddButtonClick(Sender: TObject);
367 var
368 // List: TList;
369 ToolBarItem: TToolBarItem;
370 Item: TListItem;
371 Action: TCustomAction;
372 begin
373 Item := AllListView.Selected;
374 if Item = nil then
375 Exit;
376
377 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
378 Action := Item.Data;
379 FAllList.Delete(Item.Index);
380 if Action <> nil then begin
381 Item := CurrentListView.Selected;
382 if Item = nil then
383 ToolBarItem.ButtonActionList.Add(Action)
384 else
385 ToolBarItem.ButtonActionList.Insert(Item.Index + 1, Action);
386 AllListView.Items.Count := AllListView.Items.Count - 1;
387 AllListView.Refresh;
388 CurrentListView.Items.Count := CurrentListView.Items.Count + 1;
389 CurrentListView.Refresh;
390 end;
391 end;
392
393 //鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
394 procedure TToolBarSettingDialog.RemoveButtonClick(Sender: TObject);
395 var
396 ToolBarItem: TToolBarItem;
397 Item: TListItem;
398 Action: TCustomAction;
399 begin
400 Item := CurrentListView.Selected;
401 if Item = nil then
402 Exit;
403
404 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
405 Action := Item.Data;
406 ToolBarItem.ButtonActionList.Delete(Item.Index);
407 if Action <> nil then begin
408 FAllList.Add(Action);
409 AllListView.Items.Count := AllListView.Items.Count + 1;
410 Sort;
411 AllListView.Refresh;
412 end;
413 CurrentListView.Items.Count := CurrentListView.Items.Count - 1;
414 CurrentListView.Refresh;
415 end;
416
417 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
418 procedure TToolBarSettingDialog.SeparatorAddButtonClick(Sender: TObject);
419 var
420 idx: Integer;
421 ToolBarItem: TToolBarItem;
422 begin
423 ToolBarItem := TToolBarItem(ToolBarComboBox.Items.Objects[ToolBarComboBox.ItemIndex]);
424 if CurrentListView.Selected = nil then
425 idx := CurrentListView.Items.Count - 1
426 else
427 idx := CurrentListView.Selected.Index;
428 ToolBarItem.ButtonActionList.Insert(idx + 1, nil);
429 CurrentListView.Items.Count := CurrentListView.Items.Count + 1;
430 CurrentListView.Refresh;
431 end;
432
433 //鐃?鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?
434 procedure TToolBarSettingDialog.Sort;
435 begin
436 FAllList.Sort(@CompareCategory);
437 end;
438
439 //鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
440 function CompareCategory(Item1, Item2: Pointer): Integer;
441 var
442 Action1: TCustomAction;
443 Action2: TCustomAction;
444 begin
445 if (Item1 = nil) and (Item2 = nil) then
446 Result := 0
447 else if (Item1 = nil) and (Item2 <> nil) then
448 Result := -1
449 else if (Item1 <> nil) and (Item2 = nil) then
450 Result := 1
451 else begin
452 if (TObject(Item1) is TCustomAction) and (TObject(Item1) is TCustomAction) then begin
453 Action1 := TCustomAction(Item1);
454 Action2 := TCustomAction(Item2);
455 Result := AnsiCompareStr(Action1.Category + Action1.Caption, Action2.Category + Action2.Caption);
456 end else
457 Result := 0;
458 end;
459 end;
460
461 end.

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