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

Вниз

Создание и уничтожение объекта   Найти похожие ветки 

 
Sw   (2008-09-10 06:34) [0]

При выборе строки из ниспадающего списка 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;


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


 
MBo ©   (2008-09-10 06:58) [1]

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


 
Anatoly Podgoretsky ©   (2008-09-10 07:39) [2]

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

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


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


> 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;


?


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

Лучше действительно использовать многострочный контрол, но если уж очень хочется иметь набор 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;


 
Sw   (2008-09-10 09:18) [5]


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

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

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

> Юрий Зотов

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


 
MsGuns ©   (2008-09-10 09:25) [6]

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

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


 
{RASkov} ©   (2008-09-10 09:25) [7]

> [5] Sw   (10.09.08 09:18)

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


 
{RASkov} ©   (2008-09-10 09:26) [8]

> TDBCtrlGrid

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



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
6-1194270834
andreoman
2007-11-05 16:53
2008.10.19
программно поменять мак-адрес (MAC) сетевой карточки


15-1219991378
odbc
2008-08-29 10:29
2008.10.19
ODBC DBase драйвер для win2003 64bit


2-1220825497
dars73
2008-09-08 02:11
2008.10.19
Подскожите пожалуйста почему я не могу подключить модуль


15-1219982177
Slider007
2008-08-29 07:56
2008.10.19
С днем рождения ! 29 августа 2008 пятница


2-1221127435
mefodiy
2008-09-11 14:03
2008.10.19
Черно-белая печать на цветном принтере