Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическое создание компонентов на форме

1.9K
21 апреля 2004 года
elderb
61 / / 26.01.2004
Извините за путаницу в вопросах.
1. Задача динамически создавать элементы ТМемо на форме и определенным образом их выстраивать
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{

for(int i=0;i<UnitsInSystem;i++)
  {
  TMemo *Memo1 =new TMemo(this);
  Memo1->Parent=Form1->ScrollBox1;
..........
  Memo1->Left=x;
  Memo1->Top=y;
}

}

Все создается и отображается норамально. Во время работы программы производтится несколько таких построений, поэтому перед каждым новым необходимо удалить предыдущую группу ТМемо и построить новую, но удалить так запросто не получается т.к. указателю Мемо1 все время присваивается адрес нового компонента.

2. Пытаюсяь создать Мемо, который подгонял бы свои размеры под текст, содержащийся в нем, но так как Canvas y TMemo нет приходиться размеры текста определять по какому нибуть другому Канвасу или Битмапу
Код:
AnsiString text;
  Memo1->Lines->Add(text);
  Memo1->Font->Name="Arial";
  Memo1->Font->Size=7;
  Memo1->Alignment=taCenter;
  Memo1->Color=clMoneyGreen;
  Form1->Canvas->Font->Name="Arial";
  Form1->Canvas->Font->Size=7;
  w=Form1->Canvas->TextWidth(text)+10;
  h=Form1->Canvas->TextHeight(text)+5;
  Memo1->Width= w;
  Memo1->Height=h;
Получется недостаточно точно и ситуацию вобщем-то не спасает даже введение поправок. Можно ли какт-о красивее решить эту задачу? Спасибо.
310
21 апреля 2004 года
fellow
853 / / 17.03.2003
По первому вопросу: сохраняйте каждый вновь получаемый указатель в динамическом массиве. При удалении объекта вычёркивайте соответствующий указатель из массива.

По второму вопросу: ищите в MSDN, как определить размеры строки при рисвании её в контексте устройства, и что именно получается при таком определении.
293
21 апреля 2004 года
SEDEGOFF
586 / / 06.10.2002
Удалять можно еще так
for(int i = 0; i < CARD_POST->ComponentCount-1; i++)
if(CARD_POST->Components->ClassNameIs("TMemo"))
{
TMemo * rr = (TMemo *)CARD_POST->Components;
delete rr;
}
1.9K
21 апреля 2004 года
elderb
61 / / 26.01.2004
Цитата:
Originally posted by SEDEGOFF
Удалять можно еще так


Если не трудно объясните что такое CARD_POST?

293
22 апреля 2004 года
SEDEGOFF
586 / / 06.10.2002
CARD_POST - это форма
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог