![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
удаление элемента из Array [D6, XP]
webpauk © (2007-11-01 17:20:00)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tarray = array of TLabel;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure LabelClick(Sender: TObject);
public
fArray: Tarray;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, fTop: Integer;
begin
SetLength(fArray, 10);
fTop:=10;
for I := Low(fArray) to High(fArray) do
begin
fArray[I]:=TLabel.Create(Self);
fArray[I].Caption:='Label'+IntToStr(I);
fArray[I].Top:=fTop;
fArray[I].Left:=10;
fArray[I].Parent:=Self;
fArray[I].onClick:=LabelClick;
Inc(fTop, fArray[I].Height+5);
end;
end;
procedure TForm1.LabelClick(Sender: TObject);
begin
TLabel(Sender).Free;
end;
end.
вопрос:
1. Выскакивает ошибка:
procedure TForm1.LabelClick(Sender: TObject);
begin
TLabel(Sender).Free;
end;
2. Как изменить размерность массива и сдвинуть соответсвенно элементы?
Anatoly Podgoretsky (2007-11-01 19:17:00) [1]> webpauk (01.11.2007 17:20:00) [0]
Здесь вообще массив не нужен, достаточно TForm1.controls
webpauk (2007-11-01 17:37:00) [2]
> Desdechado © (01.11.07 17:34) [3]
эт почему ты так решил?
type
TForm1 = class(TForm)
Label1: TLabel;
procedure Label1Click(Sender: TObject);
private
public
end;
procedure TForm1.Label1Click(Sender: TObject);
begin
TLabel(Sender).Free;
end;
webpauk (2007-11-01 17:36:00) [3]
> Desdechado © (01.11.07 17:34) [3]
procedure TForm1.LabelClick(Sender: TObject);
begin
fArray.Remove(TLabel(Sender))
Abort;
end;
ошибка исчезает
Desdechado (2007-11-01 17:34:00) [4]> Выскакивает ошибка:
Нельзя удалять объект из собственного обработчика.
И, ксьати, в массиве место не освобождается.
webpauk (2007-11-01 17:33:00) [5]
> clickmaker © (01.11.07 17:24) [1]
procedure TForm1.FormCreate(Sender: TObject);
var
fI, fTop: Integer;
fLabel: TLabel;
begin
fArray:=TObjectList.Create;
fTop:=10;
for fI := 0 to 9 do
begin
fLabel:=TLabel.Create(Self);
fLabel.Caption:='Label'+IntToStr(fI);
fLabel.Top:=fTop;
fLabel.Left:=10;
fLabel.Parent:=Self;
fLabel.onClick:=LabelClick;
fArray.Add(fLabel);
inc(fTop, 20);
end;
end;
procedure TForm1.LabelClick(Sender: TObject);
begin
fArray.Remove(TLabel(Sender))
{здесь всё-равно ошибка}
end;
clickmaker (2007-11-01 17:24:00) [6]почему бы TObjectList не использовать?