unit editgenre; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,main; type Teditdylist = class(TForm) OK: TButton; edit: TEdit; lab: TLabel; add: TButton; lb: TListBox; del: TButton; cancel: TButton; procedure addClick(Sender: TObject); procedure lbClick(Sender: TObject); procedure editChange(Sender: TObject); procedure delClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure editKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure editKeyPress(Sender: TObject; var Key: Char); procedure OKClick(Sender: TObject); private { Private declarations } public { Public declarations } end; function editdynamiclist(caption : string; title : string;var data : tdylist) : integer; export; var editdylist: Teditdylist; ls : tdylist; implementation {$R *.DFM} function editdynamiclist(caption : string; title : string;var data : tdylist) : integer; export; var res : integer; begin res:=-1; editdylist := Teditdylist.Create(Application); try editdylist.caption:=caption; editdylist.lab.caption:=title; setlength(ls.data,sizeof(data)); ls:=data; res:=editdylist.Showmodal; finally if res<>mrcancel then begin setlength(data.data,sizeof(ls)); data:=ls; end; result:=res; editdylist.Free; end; end; procedure Teditdylist.addClick(Sender: TObject); begin lb.Items.add(edit.text); end; procedure Teditdylist.lbClick(Sender: TObject); begin if lb.itemindex>-1 then del.enabled:=true else del.enabled:=false; end; procedure Teditdylist.editChange(Sender: TObject); var n:integer; begin if trim(edit.text)='' then add.enabled:=false else add.enabled:=true; for n:=0 to lb.items.count-1 do if trim(uppercase(edit.text))=uppercase(lb.items[n]) then add.enabled:=false; if uppercase(trim(edit.text))=uppercase('Not Defined') then add.enabled:=false; if uppercase(trim(edit.text))=uppercase('Any') then add.enabled:=false; end; procedure Teditdylist.delClick(Sender: TObject); begin lb.items.delete(lb.itemindex); if lb.items.count>0 then lb.itemindex:=0; lbclick(nil); end; procedure Teditdylist.FormActivate(Sender: TObject); var n : integer; begin for n:=0 to ls.count-1 do lb.items.add(ls.data[n]); end; procedure Teditdylist.editKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key<123)or (key>47) then key:=0; end; procedure Teditdylist.editKeyPress(Sender: TObject; var Key: Char); begin if key=' ' then exit; if ord(key)=8 then exit; if ((ord(key)<65)) and ((ord(key)>57)) then key:=#0; if ((ord(key)<97)) and ((ord(key)>90)) then key:=#0; if ((ord(key)<48)) or ((ord(key)>122)) then key:=#0; end; procedure Teditdylist.OKClick(Sender: TObject); var n : integer; begin setlength(ls.data,lb.items.count); for n:=0 to lb.items.count-1 do ls.data[n]:=lb.items[n]; ls.count:=lb.items.count; end; end.