6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, ExtCtrls, Menus;
10 TfrmStrListEditor = class(TForm)
19 procedure memStringsChange(Sender: TObject);
20 procedure btnOkClick(Sender: TObject);
21 procedure btnCancelClick(Sender: TObject);
22 procedure btnConstMouseDown(Sender: TObject; Button: TMouseButton;
23 Shift: TShiftState; X, Y: Integer);
24 procedure FormCreate(Sender: TObject);
25 procedure FormDestroy(Sender: TObject);
27 FCanAllowEmpty: boolean;
29 procedure SetCanAllowEmpty(const Value: boolean);
30 procedure SetConsts(const Value: TStrings);
34 procedure InsertConstItem(Sender: TObject);
35 property CanAllowEmpty: boolean read FCanAllowEmpty write SetCanAllowEmpty;
36 property Consts: TStrings read FConsts write SetConsts;
40 frmStrListEditor: TfrmStrListEditor;
42 function StrListEdit(const List: TStrings; CaptionStr: String;
43 AllowEmpty: boolean = false): boolean; overload;
44 function StrListEdit(const List: TStrings; CaptionStr: String;
45 AllowEmpty: boolean; ConstList: TStrings): boolean; overload;
51 function StrListEdit(const List: TStrings; CaptionStr: String;
52 AllowEmpty: boolean = false): boolean;
54 Result := StrListEdit(List, CaptionStr, AllowEmpty, nil);
57 function StrListEdit(const List: TStrings; CaptionStr: String;
58 AllowEmpty: boolean; ConstList: TStrings): boolean;
59 var MyfrmStrListEditor: TfrmStrListEditor;
61 Application.CreateForm(TfrmStrListEditor, MyfrmStrListEditor);
62 with MyfrmStrListEditor do begin
64 CanAllowEmpty := AllowEmpty;
65 lblCaption.Caption := CaptionStr;
66 memStrings.Lines := List; // Using Assign method (of course)
68 Result := ShowModal = mrOk;
69 if Result then List.Assign(memStrings.Lines);
76 procedure TfrmStrListEditor.memStringsChange(Sender: TObject);
78 btnOk.Enabled := (memStrings.Lines.Count > 0) or CanAllowEmpty;
81 procedure TfrmStrListEditor.btnOkClick(Sender: TObject);
83 if (memStrings.Lines.Count = 0) and not CanAllowEmpty then Exit;
87 procedure TfrmStrListEditor.SetCanAllowEmpty(const Value: boolean);
89 FCanAllowEmpty := Value;
92 procedure TfrmStrListEditor.btnCancelClick(Sender: TObject);
94 ModalResult := mrCancel;
97 procedure TfrmStrListEditor.btnConstMouseDown(Sender: TObject;
98 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
101 if Button <> mbLeft then Exit;
102 if FConsts.Count = 0 then Exit;
103 Pos := btnConst.ClientToScreen(Point(0, btnConst.Height));
104 mnConst.Popup(Pos.X, Pos.Y);
107 procedure TfrmStrListEditor.InsertConstItem(Sender: TObject);
109 memStrings.Lines.Add(Consts[(Sender as TMenuItem).Tag]);
112 procedure TfrmStrListEditor.SetConsts(const Value: TStrings);
116 if Value <> nil then begin
117 FConsts.Assign(Value);
119 for i := 0 to Consts.Count-1 do begin
120 AMenu := TMenuItem.Create(self);
122 Caption := Consts[i];
124 OnClick := InsertConstItem;
125 if (i mod 20 = 0) and (i > 0) then AMenu.Break := mbBarBreak;
127 mnConst.Items.Add(AMenu);
129 btnConst.Visible := true;
130 btnConst.Enabled := FConsts.Count > 0;
133 btnConst.Visible := false;
137 procedure TfrmStrListEditor.FormCreate(Sender: TObject);
139 FConsts := TStringList.Create;
142 procedure TfrmStrListEditor.FormDestroy(Sender: TObject);