Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > создание сетки из TButton


Автор: Sergio 2.10.2006, 20:37
Здраствуйте. Я хочу сделать на форме массив 3 на 3. И чтобы он заполнился кнопками типу   TButton. Как ето сделать? 
Зарание спасибо.

Автор: Romikgy 2.10.2006, 22:28
динамически  или накидать 9 кнопок

Автор: Sergio 2.10.2006, 22:31
Динамически

Я уже знаю как сделать динамически батон:
Цитата
TButton* Baton = new TButton(this); 
 Baton->Parent = this;
  Baton->Caption = "Button 1";


Но как запихнуть в масив и "пустить" по форме ??????

Автор: Romikgy 2.10.2006, 22:38
Цитата(Sergio @  2.10.2006,  21:31 Найти цитируемый пост)
TButton* Baton

создай не один указатель на 9
Цитата(Sergio @  2.10.2006,  21:31 Найти цитируемый пост)
Baton->Parent = this;

это имхо и будет на форме , только задай размеры и координаты слево и сверху

Автор: Sergio 2.10.2006, 22:50
ты не понял. Мне нужно Baton прикрепить к массиву, чтобы потом пользователь мог задавать размеры.

Автор: Romikgy 2.10.2006, 22:53
Цитата(Sergio @  2.10.2006,  21:50 Найти цитируемый пост)
мог задавать размеры.

чего массива?

Автор: Sergio 2.10.2006, 22:56
потому что должна получиться сетка(Например 3*3)
Если есть альтернативный путь, напиши пожалуйста код. smile  smile 

Автор: Romikgy 2.10.2006, 23:01
Код

TButton* Baton[3][3];
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
 Baton[i][j]= new TButton(this); 

это инциализация массива а далее заполняй его

Автор: Sergio 2.10.2006, 23:51
Вот мои первые  "динамические шаги" Но уже где-то ошибка.Создается только одна кнопка. Почему? Вот код:
Цитата
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton* Masiv[3][3];

TButton* Baton = new TButton(this);
 Baton->Parent = this;

for (int i=0;i<3;i++)
{
 for (int j=0;j<3;j++)
 {
 Masiv[i][j] = Baton;
 }
}

}

Автор: Romikgy 2.10.2006, 23:57
ты работал раньше с указателями?
это работать не будет потому как у тя всего 1 кнопка на 9 ссылок, а вообще укажи ошибку
Цитата(Sergio @  2.10.2006,  22:51 Найти цитируемый пост)
Но уже где-то ошибка.

 smile 

Автор: Sergio 3.10.2006, 00:07
Нет, не роботал я с указателями. Но подскажи пожалуйста как это сделать smile    smile 

Я хочу чтобы потом я разные индексы массива вводил и получались разные "поля" с Батонов.

Автор: stmamont 3.10.2006, 00:15
Сделай как Romikgy сказал и все заработает.
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton* Baton[3][3];
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
 Baton[i][j]= new TButton(this); 
}

и все!

Автор: Sergio 3.10.2006, 11:37
Я вставил код но  я ничего не вижу.... Почему? Возможно надо присоединить кнопки к форме...

Автор: Romikgy 3.10.2006, 13:19
Sergio, почитай про указатели и про  vcl в билдере( это дружеский совет)

Цитата(Sergio @  3.10.2006,  10:37 Найти цитируемый пост)
Возможно надо присоединить кнопки к форме...

да , как я написал раньше
Цитата(Romikgy @  2.10.2006,  22:01 Найти цитируемый пост)
это инциализация массива а далее заполняй его 

это начало кода, а далее тебе надо каждый объект заполнить и привязать к форме, так что сначало почитай про это , а то будет трудно те объяснить как это делать 

Автор: Sergio 3.10.2006, 22:53
Народ вас очень прошу помогите с кодом.  smile 
Цитата
void __fastcall TForm1::Button1Click(TObject *Sender)
    
{
    
TButton* Baton[3][3];
    
for (int i=0;i<3;i++)
    
for (int j=0;j<3;j++)
    
 Baton[i][j]= new TButton(this); 
    
}

Должно получиться сетка из кнопок Спасибо.

Автор: Romikgy 3.10.2006, 23:05
Sergio, 
1. 
Цитата(Sergio @  3.10.2006,  21:53 Найти цитируемый пост)
прошу помогите с кодом

тогда в центр помощи
2. имхо те проще будет накидать 9 кнопок на форму и не заморачиватся с остальным

Автор: Sergio 7.10.2006, 23:34
Romikgy, я знаю что так проще, но я хочу для себя научиться. 

Автор: Sergio 8.10.2006, 22:54
Спасибо всем. Вопрос решён. Вот код:

Код
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
TButton* Buttons[3][3]; 
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnCreateButtonsClick(TObject *Sender)
{
  for(int i=0;i<Edit1->Text;i++)
    for(int j=0;j<Edit2->Text;j++)
    {
      Buttons[i][j]=new TButton(frmMain);
      Buttons[i][j]->Parent=frmMain;
      Buttons[i][j]->Width=25;
      Buttons[i][j]->Height=25;
      Buttons[i][j]->Left=i*Buttons[i][j]->Width;
      Buttons[i][j]->Top=j*Buttons[i][j]->Height;
      Buttons[i][j]->Caption=IntToStr(i*3+j);

    }
 
}

Автор: Romikgy 8.10.2006, 22:58
Вишь когда голова подключается все выходит smile

Автор: elCreator 31.8.2007, 22:29
если я правильно понял, намечаются крестики-нолики)
лучше реализовать такое на Canvas какого-нибудь Image - заодно и кнопки получатся красивые - такие, какими ты их нарисуешь - а отлавливать клики по ним можешь по onMouseUp - 
координата_X/размер_клетки+3*координата_Y/размер_клетки=№_твоей_кнопки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)