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

Вниз

Как проверить, что элемент массива пустой?   Найти похожие ветки 

 
pavel_guzhanov ©   (2010-03-21 11:40) [0]

имеется массив
BUT:array [1..20] of TTButton;

Он заполняется динамически создаными Tbutton.
После этого несколько элементов массива удаляются, например But[2].Destroy;

А потом надо вывести на панель все кнопки из массива.
for i:=1 to 20 do
begin
 But[i].Parent:=Panel1;
end;

Правильно ли я удаляю элемент из массива? Если неправильно, то как его надо удалять?
Как проверить при выводе на панель, что кнопки в массиве нет?


 
{RASkov} ©   (2010-03-21 11:43) [1]

Удаление:
But[i].Free;
But[i]:=nil;

проверка:
if But[i]<>nil then....


 
Anatoly Podgoretsky ©   (2010-03-21 12:05) [2]

> pavel_guzhanov  (21.03.2010 11:40:00)  [0]

1. Free
2. Никак, надо самому указывать что нет


 
sniknik ©   (2010-03-21 13:33) [3]

скрипач, т.е. массив не нужен! (ни разу не было дано на форуме условий при которых без массива элементов не обойтись... или он добавлял что-то полезное)

1 список элементов уже ведется, родителем этого элемента.
2 все события элементов имеют ссылку на самого себя, т.е. искать себя, вести из-за этого массив (именно это приводилось как аргумент, действия в зависимости от того какой он элемент в массиве) нет смысла.
3 если уж "приперло" то почему не список объектов?


 
sniknik ©   (2010-03-21 13:50) [4]

unit UsrUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, Grids, DBGrids, ADODB, StdCtrls, DBClient, ComCtrls, ComObj, Contnrs;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
 public
   ObjList: TObjectList;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Randomize;
 ObjList:= TObjectList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if Button2.Enabled then
   ObjList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 Button: TButton;
begin
 for i:= 0 to 9 do begin
   Button:= TButton.Create(self);
   Button.Parent:= self;
   Button.Left  := Random(ClientWidth-75);
   Button.Top   := Random(ClientHeight-25);

   ObjList.Add(Button);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 while ObjList.Count > 0 do
   ObjList.Delete(0);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 i: integer;
begin
 for i:= ControlCount - 1 downto 0 do
   if (Controls[i] <> Button1) and (Controls[i] <> Button2) and (Controls[i] <> Button3) then
     Controls[i].Free;

 Button2.Enabled:= false; //закрыть, т.к. список стал невалидным
end;

end.


 
Демо ©   (2010-03-21 16:06) [5]


> После этого несколько элементов массива удаляются, например
> But[2].Destroy;А потом надо вывести на панель все кнопки
> из массива.for i:=1 to 20 dobegin  But[i].Parent:=Panel1;
> end; Правильно ли я удаляю элемент из массива? Если неправильно,
>  то как его надо удалять?Как проверить при выводе на панель,
>  что кнопки в массиве нет?


Удаляй объект используя не метод Free, а процедуру FreeAndnil.

Далее в цикле проверяй на равенство nil (Либо Assigned()).

Если количество объектов постоянно меняется, то лучше использовать TObjectList (или хотя бы TList), либо любой простейший связный список.


 
Сергей М. ©   (2010-03-21 17:30) [6]


> Правильно ли я удаляю элемент из массива?


Ты его ВООБЩЕ не удаляешь.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.102 c
15-1267253714
Григорьев Антон
2010-02-27 09:55
2010.08.27
Умер Архангельский


2-1274633322
Nathan
2010-05-23 20:48
2010.08.27
Место положение .exe


3-1243590436
gog
2009-05-29 13:47
2010.08.27
Прочитать unicode данные из Oracle


8-1205337835
Ramzes001
2008-03-12 19:03
2010.08.27
Запрет смены пропорций у фото


2-1267882176
nikih22
2010-03-06 16:29
2010.08.27
SERVESOCKET и CLIENTSOKEТ и интернет