Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

удаление элемента из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1193932102
AlexanderMS
2007-11-01 18:48
2007.11.25
Как прочитать первую строку из текстового файла?


2-1193750843
DimOK
2007-10-30 16:27
2007.11.25
Как защитить свою программу от антивируса


2-1194007977
BATTLE_MAX
2007-11-02 15:52
2007.11.25
Сохранение TImageList


2-1193682578
mahab
2007-10-29 21:29
2007.11.25
Коррректная обработка загрузки испорченных изображений


11-1178249686
Infarkt
2007-05-04 07:34
2007.11.25
VCL вместе с KOL