C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как программно создать кнопку на форме
** Roland
  Отправлено: 18.06.2004, 12:22


Не зарегистрирован







У меня задача вытащить из текстового файла инфу по n-му количеству обьектов, и представить каждый обьект в виде кнопки, чтобы нажав на нее я получил информацию об этом обьекте. Спасибо!!!
olegenty
Отправлено: 18.06.2004, 12:37


Ветеран

Группа: Модератор
Сообщений: 2412



TButton *b = new TButton(Указатель на твою форму);
b->Top =
b->Left =
b->Bottom =
b->Right =
b->OnClick =

невредно хранить список кнопок и твоих объектов в TList или любом другом списочном компоненте, а так же написать и проассоциировать обработчик нажатия на кнопку...
Roland
Отправлено: 18.06.2004, 13:55


Ученик-кочегар

Группа: Участник
Сообщений: 3



Я не вижу кнопку, что делать?

TButton *b = new TButton(*Form1);
b->Top = 00 ;
b->Left = 00 ;
b->Caption="demo";
b->Visible= true;
b->Enabled=true;
b->Height=20;
b->Width=20;
olegenty
Отправлено: 18.06.2004, 13:57


Ветеран

Группа: Модератор
Сообщений: 2412



а так?
CODE

TButton *b = new TButton(Form1);
Roland
Отправлено: 18.06.2004, 14:08


Ученик-кочегар

Группа: Участник
Сообщений: 3



не показывается.
xTrim
Отправлено: 18.06.2004, 14:38


Машинист паровоза

Группа: Участник
Сообщений: 208



CODE

b->Parent = this;
AVC
Отправлено: 18.06.2004, 14:38


Ветеран

Группа: Модератор
Сообщений: 1583



Ну вот у всех показывается, а у него не показывается. К подсказкам надо подходить вдумчиво.

Реальный код. Выдрал из программы
CODE

btn = new TBitBtn(parent);
CopyObject(Bt_Sample, btn);
// xl = (reci->Title.Length() + 1) * abs(btn->Font->Size) + 8;
xl = this->Canvas->TextWidth(reci->Title + "    ");
btn->Caption = reci->Title;
btn->Top = y0;
btn->Left = x0;
btn->Width = xl;
btn->Visible = false;  // проставит OnResize
btn->Tag = int(reci); // TAxField::FQM_GoToList->Items[i]
if (i == 0) hint = " ";
else if (i == 1) hint = "Ctrl+";
else if (i == 2) hint = "Alt+";
else if (i == 3) hint = "Shift+";
else hint = "";

if (!hint.IsEmpty())
{ btn->Hint = "<" + hint.Trim() + "F9>";
  btn->ShowHint = true;
}

Обратите внимание на parent. Он должен быть тем куда ставится кнопка. Если форма то this, если панель то Panel1 или как она у вас там.
UA_Freeman
Отправлено: 18.06.2004, 14:40


Дежурный стрелочник

Группа: Участник
Сообщений: 31



Мдя....
Берёшь любой кусок кода из выше написанных, дописываешь
b->Parent=<твоя форма>;
b->Name+=GetTickCount();

и всё. Имя бутона надо менять потому, что на форме не можеть быть двух одноимённых контролов
AVC
Отправлено: 18.06.2004, 14:49


Ветеран

Группа: Модератор
Сообщений: 1583



Правильно. Забыл на минутку. Это все выполняет CopyObject — заполнение параметров из образца. Каюсь.
Roland
  Отправлено: 18.06.2004, 18:31


Ученик-кочегар

Группа: Участник
Сообщений: 3



Спасибо всем!!!!
Все ОК!!!

Могет по пиву?javascript:emoticon('smile.gif')

Вернуться в Вопросы программирования в C++Builder