![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание и уничтожение объекта [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