Мишевый_Плюшка |
Отправлено: 06.05.2004, 12:43 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Как повесить обработку события для динамически созданного объекта.
Например создаю кнопку :
TSpeedButton *pSpeedButton = new TSpeedButton(ToolBar3);
pSpeedButton->Parent = ToolBar3;
....
....
Как мне обработать событие OnClick для этого баттона?
Спасибо большое!
|
|
xTrim |
Отправлено: 06.05.2004, 12:54 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
CODE |
pSpeedButton->OnClick = OnButton1Click;
|
|
|
Мишевый_Плюшка |
Отправлено: 06.05.2004, 13:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Так извините за мою тупость
Можна пример плиз? Так наглядней будет
Пускай при OnClick будет вылазить сообщение
ShowMessage("Hello World");
Как это написать для динамически созданного батона?
Спасиба! |
|
Gedeon |
Отправлено: 06.05.2004, 13:14 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
CODE |
TSpeedButton *pSpeedButton = new TSpeedButton(ToolBar3);
pSpeedButton->Parent = ToolBar3;
pSpeedButton->OnClick = YourFunction;
void __fastcall YourFunction(TObject *Sender){
ShowMessage("Hello World");
} |
В h-файл не забуть добавить обьявление этой функции.
|
|
Guest |
Отправлено: 06.05.2004, 13:27 |
|
Не зарегистрирован
|
Спасибо! Очень благодарен! |
|
Мишевый_Плюшка |
Отправлено: 06.05.2004, 16:02 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Теперь столкнулся с "видимостью".
Ситуация:
CODE |
// Создаю новый динамический СпидБатон
void __fastcall TFMain::ToolButton2Click(TObject *Sender)
{
Application->CreateForm(__classid(TFTar), &FTar);
if(! FTar) return;
TSpeedButton *pSBTar = new TSpeedButton(ToolBar3);
pSBTar->Parent = ToolBar3;
pSBTar->Caption = "Òàðèôû";
pSBTar->GroupIndex=1;
pSBTar->Down=true;
pSBTar->OnClick=pSBTarOnClick;
...
...
...
}
// Обработка события OnClick для диманический созданного выше СпидБатона
void __fastcall TFMain::pSBTarOnClick(TObject *Sender)
{
ShowMessage("Тра-ля-ля");
pSBTar->Down=true; // Вот тут компилятор ругается что ему незнакома переменная pSBTar. Понятно почему, из-за того что этот Батон был создан в обработчике события нажатия другой кнопки .
}
|
Как выйти из этой ситуации? В хедере pSBTarOnClick объявлена.
Спасибо! |
|
Gedeon |
Отправлено: 06.05.2004, 16:15 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
в h-файле
TSpeedButton *pSBTar
В вашем обработчике
CODE |
pSBTar = new TSpeedButton(ToolBar3);
pSBTar->Parent = ToolBar3;
pSBTar->Caption = "??????";
pSBTar->GroupIndex=1;
pSBTar->Down=true;
pSBTar->OnClick=pSBTarOnClick;
...
...
... |
И все он увидит.
Тока из вопоса понятно одно память вы не освобождаете — а НАДО!
где-нить в onclose формы пишите
delete pSBTar
|
|
xTrim |
Отправлено: 06.05.2004, 16:15 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
можно так
CODE |
void __fastcall TFMain::pSBTarOnClick(TObject *Sender)
{
ShowMessage("Тра-ля-ля");
TSpeedButton* b = dynamic_cast<TSpeedButton*>(Sender);
b->Down=true;
}
|
|
|
xTrim |
Отправлено: 06.05.2004, 16:23 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Gedeon не надо память освобождать в данном случае. Овнера жэ передаем в конструктор, он и отвечает за освобождение. Вот если бы pSBTar = new TSpeedButton(NULL) тогда да.
|
|
Мишевый_Плюшка |
Отправлено: 06.05.2004, 16:40 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (Gedeon @ 06/05/2004, 17:17) | в h-файле
TSpeedButton *pSBTar
И все он увидит.
Тока из вопроса понятно одно память вы не освобождаете — а НАДО!
где-нить в onclose формы пишите
delete pSBTar |
Ну насчет памяти это понятно.
А вот TSpeedButton *pSBTar объявлять в private или в public ?
Просто не могу поменять ему свойство Down из true в false
Не меняется
CODE |
void __fastcall TFMain::pSBTarOnClick(TObject *Sender)
{
if(pSBTar->Down==true)
{
ShowMessage("Отжимаем");
pSBTar->Down=false; // все равно остается true :(
}
else
{
ShowMessage("Нажимаем");
pSBTar->Down=true;
}
}
|
Почему так? |
|
Gedeon |
Отправлено: 07.05.2004, 08:55 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Мишевый_Плюшка @ 06/05/2004, 17:42) | Почему так? |
Тут уже не динамическое создание виновато, если посмотреть в хэлп там написано
QUOTE |
Specifies whether the button is selected (down) or unselected (up).
__property bool Down = {read=FDown, write=SetDown, default=0};
Description
Read Down to determine whether a speed button is selected. The Down property only applies if the GroupIndex property of the button is nonzero.
When GroupIndex is greater than 0, set Down to true to select a button. When the user clicks on a button in the unselected (up) state, the button is selected and Down is set to true. When the user clicks on a button in the selected (down) state, if Caption is true, the button becomes unselected and Down is set to false.
At design time, specify which button in a group is the initially selected button by setting the Down property of the selected button to true.
Note: When GroupIndex is 0, buttons do not remain in the selected state when clicked. |
Т.е. по русски говоря присвойте свойству GroupIndex значение отличное от 0.
Еще хочу обратить ваше внимание на свойство AllowAllUp, если кнопка 1 и оно false, вы не сможете ее отжать.
|
|