Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.035 c
1-1189155493
dima_q
2007-09-07 12:58
2007.11.25
Локализация в Delphi


15-1192783300
Сама Сингулярность
2007-10-19 12:41
2007.11.25
Где пятничные задачки?


2-1194093148
kolj
2007-11-03 15:32
2007.11.25
Помогите пожалуйста


4-1179087050
DefCon
2007-05-14 00:10
2007.11.25
Сканеры штрих-кодов


2-1193738764
apic
2007-10-30 13:06
2007.11.25
delphi 2007





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский