Форум: "Начинающим";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Внизудаление элемента из Array Найти похожие ветки
← →
webpauk © (2007-11-01 17:20) [0]
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. Как изменить размерность массива и сдвинуть соответсвенно элементы?
← →
clickmaker © (2007-11-01 17:24) [1]почему бы TObjectList не использовать?
← →
webpauk © (2007-11-01 17:33) [2]
> 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;
← →
Desdechado © (2007-11-01 17:34) [3]> Выскакивает ошибка:
Нельзя удалять объект из собственного обработчика.
И, ксьати, в массиве место не освобождается.
← →
webpauk © (2007-11-01 17:36) [4]
> Desdechado © (01.11.07 17:34) [3]
procedure TForm1.LabelClick(Sender: TObject);
begin
fArray.Remove(TLabel(Sender))
Abort;
end;
ошибка исчезает
← →
webpauk © (2007-11-01 17:37) [5]
> 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;
← →
Anatoly Podgoretsky © (2007-11-01 19:17) [6]> webpauk (01.11.2007 17:20:00) [0]
Здесь вообще массив не нужен, достаточно TForm1.controls
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c