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

Ваш аккаунт

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

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

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

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

457
05 февраля 2002 года
V_italik
19 / / 20.12.1999
Помещаю на форму Button1.
Обработка Button1Click

TButton *bb[100];
for(i = 0; i < 100; i++){
bb = new TButton(this);
...
Form1->InsertControl(bb);
}

...Нарисовал еще 100 &quot;кнопок&quot;.
Как написать ОДИН обработчик собатий
нажатий этих кнопок, чтоб он понимал
какая именно &quot;кнопка&quot; нажата?
545
06 февраля 2002 года
Посторонний
74 / / 20.05.2000
Цитата:

On 2002-02-05 1608, V_italik wrote
Помещаю на форму Button1.
Обработка Button1Click

TButton *bb[100];
for(i = 0; i < 100; i++){
bb = new TButton(this);
...
Form1->InsertControl(bb);
}

...Нарисовал еще 100 &quot;кнопок&quot;.
Как написать ОДИН обработчик собатий
нажатий этих кнопок, чтоб он понимал
какая именно &quot;кнопка&quot; нажата?


Хм...можно action list наворотить на сто событий, а можно различать кнопки присваивая, например, значение i свойству tag кнопки и замутить жуткий switch на сотню вариантов

Аноним
{
...
Button1->OnClick = MyButtonClick;
...
}

void __fastcall TForm1::MyButtonClick(TObject *Sender)
{
...
}
Аноним
Цитата:

On 2002-02-05 1608, V_italik wrote
Помещаю на форму Button1.
Обработка Button1Click

TButton *bb[100];
for(i = 0; i < 100; i++){
bb = new TButton(this);
...
Form1->InsertControl(bb);
}

...Нарисовал еще 100 &quot;кнопок&quot;.
Как написать ОДИН обработчик собатий
нажатий этих кнопок, чтоб он понимал
какая именно &quot;кнопка&quot; нажата?


Есть такой параметр Sender,так вот он в точности равен тому что возвращает new TButton, так что при вызове одного и того же OnBtnClick для каждой из 100 кнопок он будет уникальным и Tag'и в ручную ставить не надо и список мутить тоже

289
25 февраля 2002 года
Jeyson
207 / / 20.04.2000
Я ставил перед собой подобную задачу, но несколько проще.
Я всего лишь хотел менять Капшены на программно созданных кнопках, но немного поразмыслив ты модернезируешь ниже представленную программку

TList *MyList = new TList;
for(int i=0; i<3; i++)
{
pButton = new TButton(Form1);
pButton->Parent=Form1;
pButton->Top=i*25;
MyList->Add(pButton);
}

TButton *MyButton=new TButton(Form1);
MyButton=(TButton*)MyList->Items[2];
MyButton->Caption=&quot;третья кнопка&quot;;
MyButton=(TButton*)MyList->Items[1];
MyButton->Caption=&quot;вторая кнопка&quot;;
MyButton=(TButton*)MyList->Items[0];
MyButton->Caption=&quot;первая кнопка&quot;;
delete MyList;
289
25 февраля 2002 года
Jeyson
207 / / 20.04.2000
Я ставил перед собой подобную задачу, но несколько проще.
Я всего лишь хотел менять Капшены на программно созданных кнопках, но немного поразмыслив ты модернезируешь ниже представленную программку

TList *MyList = new TList;
for(int i=0; i<3; i++)
{
pButton = new TButton(Form1);
pButton->Parent=Form1;
pButton->Top=i*25;
MyList->Add(pButton);
}

TButton *MyButton=new TButton(Form1);
MyButton=(TButton*)MyList->Items[2];
MyButton->Caption=&quot;третья кнопка&quot;;
MyButton=(TButton*)MyList->Items[1];
MyButton->Caption=&quot;вторая кнопка&quot;;
MyButton=(TButton*)MyList->Items[0];
MyButton->Caption=&quot;первая кнопка&quot;;
delete MyList;
442
26 августа 2002 года
HexoGenus
121 / / 20.03.2000
//После небольших размышлений я пришел к выводу
// что может быть четыре основных метода определения нажатой кнопки
// По Имени, по Tag, по Caption, и по Left &amp; Top


// В Unit1.h в описании класса формы например в раделе public уже должно быть
// void __fastcall ButtonKeyClick(TObject *Sender);
// TButton *bb[100];
// Размещать список указателей на создаваемые кнопки
// в текущей функции как-то не вижу смысла
// так как в этом случае этот список не будет доступен
// из других функций хотя область видимости к этому вопросу
// (почти) не имеет отношения

// Где-то в Unit1.cpp создаем наши 100 кнопок
for(int i = 0; i < 100; i++)
{
bb = new TButton(this);
bb->Left=i*60-(i/10)*60*10;
bb->Top=(i/10)*30;
bb->Width=54;
bb->Caption=&quot;Key&quot;+String(i+1);
bb->Name=&quot;N&quot;+String(i+1);
// Как предложил Посторонний можно использовать свойство Tag
// для указания номера кнопки
bb->Tag=i;
bb->onClick=ButtonKeyClick;
Form1->InsertControl(bb);
}


//---------------------------------------------------------------------------
void __fastcall TForm1ButtonKeyClick(TObject *Sender)
{
// Способ первый выявить какая из bb[] нажата при помощи содержимого свойства Name
// Читаем у сендер свойство Name в переменную strName типа String
String strName=((TButton*)Sender)->Name;
// Вырезаем первый символ &quot;N&quot;
strName.Delete(1,1);
// Преобразуем строку в число и получаем в целочисленной переменной iNumberButton
// номер нашей кнопки
int iNumberButton=strName.ToInt()-1;//((strName.Delete(1,1)));
// Для проверки верности работы функции выводим на экран
// содержимое Caption найденной кнопки
ShowMessage(bb[iNumberButton]->Caption);

// Способ второй у меня будет способом Постороннего
// Достаточно прочитать номер кнопки из Tag
// (хотя я бы предпочел зарезервировать это свойство под другие цели
// а то зачем нам вообще нужно свойство Name )
int iNumButton=((TButton*)Sender)->Tag;//((strName.Delete(1,1)));
// Для проверки верности работы функции выводим на экран
// содержимое Caption найденной кнопки
ShowMessage(bb[iNumButton]->Caption);

// Способ третий определить какая кнопка нажата через значение свойства Caption
// Допустим если мы создаем группу кнопок которые должны выдать список полей
// базы данных начинающихся на одну из букв алфавита то было бы логично
// просто на каждой кнопке прописать эту букву и потом узнать
// какая буква алфавита нужна проверив ((TButton*)Sender)->Caption

// Способ четвертый каждая кнопка расположена в определенных координатах
// и если есть какая то зависимость между расположением кнопки
// и тем что она должна делать то лучше искать не саму кнопку
// (хотя ее положение обычно будет напрямую зависеть от i в создающем
// кнопку цикле и значит можно по обратной функции найти ее номер)
// а сразу проверять какое действие должно быть выполнено
// по тому где находится нажатая кнопка
// ((TButton*)Sender)->Left и ((TButton*)Sender)->Top
}
1.4K
06 сентября 2002 года
s_alexander
7 / / 20.06.2000
To Jayson: а зачем TButton запихивать в TList?
Аноним
Цитата:

On 2002-02-05 1608, V_italik wrote
Помещаю на форму Button1.
Обработка Button1Click

TButton *bb[100];
for(i = 0; i < 100; i++){
bb = new TButton(this);
...
Form1->InsertControl(bb);
}

...Нарисовал еще 100 &quot;кнопок&quot;.
Как написать ОДИН обработчик собатий
нажатий этих кнопок, чтоб он понимал
какая именно &quot;кнопка&quot; нажата?



Просто наследуй класс TButton и переопредели события все которые тебе нужны, если интересует как добраться какой компонент активный на форме могу кинуть исходник [EMAIL]stepun@mail.ru[/EMAIL]

Аноним
Цитата:

On 2002-02-05 1608, V_italik wrote
Помещаю на форму Button1.
Обработка Button1Click

TButton *bb[100];
for(i = 0; i < 100; i++){
bb = new TButton(this);
...
Form1->InsertControl(bb);
}

...Нарисовал еще 100 &quot;кнопок&quot;.
Как написать ОДИН обработчик собатий
нажатий этих кнопок, чтоб он понимал
какая именно &quot;кнопка&quot; нажата?



Просто наследуй класс TButton и переопредели события все которые тебе нужны, если интересует как добраться какой компонент активный на форме могу кинуть исходник [EMAIL]stepun@mail.ru[/EMAIL]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог