Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание объекта TLabel, и отображение на его форме 
:(
    Опции темы
Xela
Дата 1.9.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Можно ли на видимой форме (Form1 - для определённости) динамически создать 
и отобразить объект типа TLabel ? Если да то Как если нет то Почему?
PM MAIL   Вверх
586
Дата 1.9.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



в поиск. Вон внизу ссылки - открой первую
PM   Вверх
Akeem
Дата 1.9.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: 1
Всего: 3



А не проще просто кинуть на форму этот Лабел и сделать его невидимым.  икогда нужно его делать видимым и писать туда данные.
Мне кажется так будет самое ефективное.


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
stmamont
Дата 3.9.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 13.3.2004
Где: влг

Репутация: 3
Всего: 3



Akeem, все зависит от ситуации. Но хранить невидимые элементы - неэффективно, они все равно грузят память.


--------------------
user posted image
PM MAIL ICQ   Вверх
Greeen
Дата 3.9.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: нет
Всего: 18



Код

TLabel* lbl = new TLabel(this);
lbl->Parent = this;
lbl->Caption = "Label";
...



--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Akeem
Дата 5.9.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: 1
Всего: 3



stmamont, 
Я понял. Был не прав. 


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Xela
Дата 7.9.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(586 @ 1.9.2006,  13:42)
в поиск. Вон внизу ссылки - открой первую

Спасибо  smile  я рассмотрел этот пример
PM MAIL   Вверх
Xela
Дата 7.9.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(Greeen @ 3.9.2006,  22:08)
Код

TLabel* lbl = new TLabel(this);
lbl->Parent = this;
lbl->Caption = "Label";
...

 smile - класс! Спасибо за ответ  smile 


Вопрос программистам - чем отличаются код предоставленный Greeen

Код

TLabel* lbl = new TLabel(this);
lbl->Parent = this;
lbl->Caption = "Label";
...


от такого

Код

TLabel* lbl = new TLabel(NULL);
lbl->Parent = this;
lbl->Caption = "Label";
...


??
PM MAIL   Вверх
Romikgy
Дата 7.9.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Xela @  7.9.2006,  09:24 Найти цитируемый пост)
TLabel* lbl = new TLabel(this);


Цитата(Xela @  7.9.2006,  09:24 Найти цитируемый пост)
TLabel* lbl = new TLabel(NULL);

вот разница
а это реализация
Код

constructor TComponent.Create(AOwner: TComponent);
begin
  FComponentStyle := [csInheritable];
  if AOwner <> nil then AOwner.InsertComponent(Self);
end;

Код

constructor TCustomLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csOpaque, csReplicatable];
  Width := 65;
  Height := 17;
  FAutoSize := True;
  FShowAccelChar := True;
end;

и
if AOwner <> nil then AOwner.InsertComponent(Self);
это не выполнится , мож в этом косяк.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 7.9.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



отлияается тем, что в первом owner установлен, а во втором нет.

P.S.
ты видиш какие-то отличия в строказ 2-4? если нет -- зачем их приводить?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vyacheslav
Дата 7.9.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Отличается тем, что  при 
Код

TLabel* lbl = new TLabel(this);

назначен владелец, ответственный за уничтожение  созданного Label
Это Label будет автоматически уничтожен при уничтожении владельца (обычно форма).
Если такой вариант устраивает, то  самому уничтожать не надо. То есть  присутствие кода 
Код

delete lbl;

не являетсся обязательным. И даже при отсутсвии последнего CodeGuard утечек памяти не покажет smile


Второй вариант предполагает, что программист берет уничтожение на себя. То есть в коде где-то должно быть обязательно пресловутое
Код

delete lbl;


Добавлено @ 14:52 
Цитата(Romikgy @  7.9.2006,  10:47 Найти цитируемый пост)
if AOwner <> nil then AOwner.InsertComponent(Self);
это не выполнится , мож в этом косяк. 

И тот и другой вариант являются корректными



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Xela
  Дата 8.9.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(Romikgy @ 7.9.2006,  10:47)
Код

constructor TComponent.Create(AOwner: TComponent);
begin
  FComponentStyle := [csInheritable];
  if AOwner <> nil then AOwner.InsertComponent(Self);
end;

Код

constructor TCustomLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csOpaque, csReplicatable];
  Width := 65;
  Height := 17;
  FAutoSize := True;
  FShowAccelChar := True;
end;


Классно! Я понял  smile 

Практический вопрос:
В Delphi до приведённого Romikgy кода добраться несложно
(путём кликанья с нажатым Ctrl на нужные классы и затем поиска том же окне кода интересующего метода)

Как в С++ Builder быстро можно добраться до кода метода?
PM MAIL   Вверх
Romikgy
Дата 8.9.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Xela @  8.9.2006,  14:02 Найти цитируемый пост)

Как в С++ Builder быстро можно добраться до кода метода? 

имхо также, 
только ты не доберешься до VCL внутреностей так как весь код не был написан на си , а был портирован из дельфи кода( с возможностью подключения к С и небольшой доработкой) 
так что исходников ты не увидишь 
Цитата(Xela @  8.9.2006,  14:02 Найти цитируемый пост)
Я понял

Молодец.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Xela
Дата 8.9.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: -1
Всего: нет



Цитата(_hunter @  7.9.2006,  10:48 Найти цитируемый пост)
отлияается тем, что в первом owner установлен, а во втором нет.

Зачем оставлять такие поверхносные ответы? smile 

Цитата(_hunter @  7.9.2006,  10:48 Найти цитируемый пост)

P.S.
ты видиш какие-то отличия в строказ 2-4? если нет -- зачем их приводить?

Потому что так посчитал нужным  smile

Добавлено @ 16:03 
Цитата(Vyacheslav @ 7.9.2006,  14:50)
Отличается тем, что  при 
Код

TLabel* lbl = new TLabel(this);

назначен владелец, ответственный за уничтожение  созданного Label
Это Label будет автоматически уничтожен при уничтожении владельца (обычно форма).
Если такой вариант устраивает, то  самому уничтожать не надо. То есть  присутствие кода 
Код

delete lbl;

не являетсся обязательным. И даже при отсутсвии последнего CodeGuard утечек памяти не покажет smile


Второй вариант предполагает, что программист берет уничтожение на себя. То есть в коде где-то должно быть обязательно пресловутое
Код

delete lbl;


Добавлено @ 14:52 
Цитата(Romikgy @  7.9.2006,  10:47 Найти цитируемый пост)
if AOwner <> nil then AOwner.InsertComponent(Self);
это не выполнится , мож в этом косяк. 

И тот и другой вариант являются корректными

Спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.