11.05.2014, 11:09
|
Заблокирован
|
|
Регистрация: 07.05.2014
Сообщения: 11
Версия Delphi: 7, Kylix
Репутация: -1385
|
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst;
type
tmyclass=class
private
Ftext: string;
procedure Settext(const Value: string);
public
property text:string read Ftext write Settext;
end;
type
TForm1 = class(TForm)
CheckListBox1: TCheckListBox;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CheckListBox1ClickCheck(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
list:tstringlist;
implementation
{$R *.dfm}
{ tmyclass }
procedure tmyclass.Settext(const Value: string);
begin
Ftext := Value;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
mc:tmyclass;
begin
list:=tstringlist.Create;
mc:=tmyclass.create;
{этим самым мы здесь и далее по коду создаем объекты, которые занимает место в памяти.
Delphi не удаляет их в процессе выполнения работы, поэтому как только они станут бесполезны, мы должны обязательно
удалить их самостоятельно,чтобы не вызвать утечку памяти.}
mc.text:='Тестовая строка 1';
list.Addobject(mc.text,pointer(mc));
mc:=tmyclass.create;
mc.text:='Тестовая строка 2';
list.Addobject(mc.text,pointer(mc));
mc:=tmyclass.create;
mc.text:='Тестовая строка 3';
list.Addobject(mc.text,pointer(mc));
{ Только для теста.
mc.text:='Тестовая строка 4'; // добавили просто строку, чтобы проверить, будет ли access violation.
list.Add(mc.text);
}
checklistbox1.Items.Assign(list);
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i:integer;
begin
if assigned(list) then
begin
for i:=0 to list.Count-1 do
list.Objects[i].Free;
list.destroy;
end;
end;
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
lst:tstrings;
i:integer;
begin
i:=checklistbox1.ItemIndex;
if checklistbox1.Checked[i] then { дополнительная проверка на assigned (как в listview - selected) не нужна, т.к. если не будет
элементов, не по чему будет кликать}
begin
if checklistbox1.items.objects[i] is tmyclass then // проверяем, можно ли привести объект в списке к tmyclass.
memo1.Lines.Add(tmyclass(checklistbox1.items.objects[i]).text);
end;
end;
end.
|