![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Run-time-компонент не хочет определяться...
Maximus © (2003-01-06 21:06:00)Видите ли, в моем приложении часть компонентов Run-time, а именно добрая половина всех Label создается после определенного момента. Так вот, после того как они создались, мне с ними надо бы поработать, но… Увы! Прога их не видит!.. Я пытаюсь их так найти:
{Code Begin}Вижу имена всех лейблок, которые налепил до помпиляции... А тех, что создались попутно - нет!..
var
I : Integer;
N : String;
begin
for I := 0 to FormMain.ComponentCount - 1 do
if Components[I] is TLabel then
begin
N := Components[I].Name;
ShowMessage(N);
end;
end;
{Code End}
Подскажите, ПЛИЗ, что делать?
Maximus (2003-01-07 11:25:00) [1]To: Юрий Зотов
Огромное спасибо, Юрий!.. Очень Вам признателен за помощь!!! Благодаря Вам, школа в которой я учусь не останется без программы-напоминалки расписания!.. :))) Спасибо!
Если смогу быть чем-то полезен - пишите: maximus.b@mtu-net.ru
Anatoly Podgoretsky (2003-01-07 10:38:00) [2]Значит воговиршь владелей fMain.bMain, а ишешь у fMain
Юрий Зотов (2003-01-07 10:35:00) [3]lTemp := TLabel.Create(fMain.bMain);
Owner"ом метки становится панель bMain и метка попадает имеено в ее список Components. А потом Вы пытаетесь найти ее в списке Components самой формы, где ее, конечно, нет.
Исправьте так, вот и все:
lTemp := TLabel.Create(fMain);
Юрий Зотов (2003-01-07 10:27:00) [4]> Геннадий © (07.01.03 10:01)
Sorry, а при чем тут Parent? Вы код в вопросе смотрели? Из него однозначно следует - форма не назначен Owner"ом меток, вот и вся причина. И никакой Parent к ней никакого отношения не имеет.
Maximus (2003-01-07 10:27:00) [5]У меня есть и Parent и имя, вот:
{Сама процедура}
procedure CreateLabel(AName: String; ACaption: String; ALeft: Integer; ATop: Integer);
var
lTemp: TLabel;
begin
lTemp := TLabel.Create(fMain.bMain);
lTemp.Parent := fMain.bMain; // это TPanel, на котором создается TLabel
lTemp.AutoSize := True;
lTemp.Caption := ACaption;
lTemp.Left := ALeft;
lTemp.Top := ATop;
lTemp.Name := AName;
lTemp.OnClick := fMain.lButtonClick;
end;
{Ее использование}
procedure SetPairsSchedule;
var
I: Integer;
begin
with fMain.FLessonsBase do
begin
for I := 1 to 4 do
begin
CreateLabel("lMon" + IntToStr(I), FAMon[I], 48, 30 + I * 16);
CreateLabel("lTue" + IntToStr(I), FATue[I], 48, 102 + I * 16);
CreateLabel("lWed" + IntToStr(I), FAWed[I], 48, 174 + I * 16);
CreateLabel("lThu" + IntToStr(I), FAThu[I], 224, 30 + I * 16);
CreateLabel("lFri" + IntToStr(I), FAFri[I], 224, 102 + I * 16);
CreateLabel("lSat" + IntToStr(I), FASat[I], 224, 174 + I * 16);
end;
end;
end;
Вот, эта процедура находится в отдельном модуле, все в ней работает все она создает. Но когда готовое приложение уже запущено, то найти созданные этой процедурой лейблы я не могу.
Может у кого есть какие мнения? Просто даже интересно стало, в чем дело? Что я упустил??? всем спасибо заранее!..
Геннадий (2003-01-07 10:01:00) [6]Проверь свойсвто Parent для создаваемых объектов.
(создаём в методе формы)
var
LA : array [1..2] of TLabel;
begin
LA[1]:= TLabel.Create(Self);
LA[1].Parent:= Self;
LA[2]:= TLabel.Create(Self);
LA[2].Parent:= Self;
LA[1].Visible:= True/False;
// ну и так далее...
end;
Удачи!
Song (2003-01-07 09:53:00) [7]Видимо когда создавал, не указал AOwner
Maximus (2003-01-06 23:18:00) [8]Нет, я не забыл имя указать. Оно есть, и у всех разное.
Rouse_ (2003-01-06 21:29:00) [9]При динамическом создании ты забыл по видимому присвоить компоненту имя, исправь это.
Желаю успехов