Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание и уничтожение объекта [D7, XP]


Sw ©   (2008-09-10 06:34:00) 

При выборе строки из ниспадающего списка ComboBox запросом к базе данных получаем набор данных, в зависимости от количества полученных строк необходимо создать на форме TLabel.

procedure TForm1.CmbBox1Change(Sender: TObject);
var i,t:integer; //i-счетчик; t-координата верхней точки первого реквизита
var lbl:TLabel;
begin
 qry1.Open;
 i:=1;  t:=24;
 while not qry1.Eof do
   begin
     lbl:=TLabel.Create(Self);
     (lbl as TLabel).Name:='Lblelement'+IntToStr(i);
     (lbl as TLabel).Parent:=PnlCenter;
     (lbl as TLabel).Caption:=elementname;
     (lbl as TLabel).Left:=8;
     (lbl as TLabel).Top:=t+48*(i-1);
     (lbl as TLabel).Enabled:=True;
     Application.ProcessMessages;
     i:=i+1;
     qry1.Next;
   end;
 qry1.First;
end;


Проблема в том, что при выборе другой строки из ниспадающего списка нужно сначала уничтожить созданные объекты. Очень прошу помочь, подскажите как это можно сделать.


{RASkov}   (2008-09-10 09:26:00) [1]

> TDBCtrlGrid

Ну да :) Это я и имел в виду)


MsGuns   (2008-09-10 09:25:00) [2]

>По поводу многострочного контрола, так бы удобнее, но вот никакая светлая мысль мне не приходит

Если как справочная информация (без возможности правки) и сравнительно небольшого объема (до 1000 зап), то
 а) TStringGrid
 b) TListView
 c) TTreeView
 
иначе TDBGrid, TDBCtrlGrid


{RASkov}   (2008-09-10 09:25:00) [3]

> [5] Sw   (10.09.08 09:18)

Посмотри на TCtrlGrid... Наверное всеж это для тебя


Sw   (2008-09-10 09:18:00) [4]


> Anatoly Podgoretsky ©   (10.09.08 07:39) [2]
> Почему ты приводишь TLabel к TLabel?

Вы имеете в виду (lbl as TLabel).Name? работает и lbl.Name,   (((так было в примере, вот думаю, мож так грамотно ((((

Всем спасибо огромное!

> Юрий Зотов

Отдельное спасибо за помощь!
По поводу многострочного контрола, так бы удобнее, но вот никакая светлая мысль мне не приходит (может быть от 2 до 20 строк, например. И все они будут дружненько табличкой сверху вниз в две колонки:
лиц.счет   _____________
кор.счет   _____________
...........
я думаю, что лучше расположить их на форме в более удобно читаемом виде
(((я только учусь, возможно и ошибаюсь


Юрий Зотов   (2008-09-10 08:22:00) [5]

Лучше действительно использовать многострочный контрол, но если уж очень хочется иметь набор TLabel, то можно так (лишнее убрано).

type
 TForm1 = class(TForm)
 ...
 private
   FList: TComponentList;
 end;

Обработчик OnCreate:
 FList := TComponentList.Create;

Обработчик OnDestroy:
 FList.Free;

procedure TForm1.CmbBox1Change(Sender: TObject);
var
 i: integer;
begin
 FList.Clear;
 qry1.Open;
 i := 0;  
 while not qry1.Eof do
 begin
   FList.Add(TLabel.Create(Self));
   with TLabel(FList[i]) do
   begin
     Parent := PnlCenter;
     Caption := elementname;
     Left := 8;
     Top := 24 + 48 * i;
   end;
   Inc(i);
   qry1.Next;
 end;
 qry1.First;
end;


Василий Жогарев   (2008-09-10 08:16:00) [6]


> Sw   (10.09.08 06:34)  


var
 I: Integer;
begin
 for I := 0 to ControlCount - 1 do
   if (Controls[I] is TLabel) then
     (Controls[I] as TLabel).Free;
end;


?


Anatoly Podgoretsky   (2008-09-10 07:39:00) [7]

> Sw  (10.09.2008 6:34:00)  [0]

Почему ты приводишь TLabel к TLabel?


MBo   (2008-09-10 06:58:00) [8]

почему бы не использовать специально обученные контролы?
Или DB-компоненты, или хоть многострочные контролы типа ListView


Наверх

Титульная страница Поиск, карта сайта Написать письмо