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

Ваш аккаунт

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

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

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

Массив динамических кнопок

4.0K
08 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
Цель - кнопки как в сапере, обращение к каждой по координате.

Моя идея решения:

Код:
TSpeedButton *MyField[10][10]; // массив указателей на ТБаттон.
//  в файле .h  обязательно прописать #include <Buttons.hpp >

for (int i=0; i<=10; i++)
{
   for (int i=0; i<=10; i++)
     {
       MyField[j] = new TSpeedButton;
         /*    + расставить кнопки по местам вроде
                   MyField[j] -> top = ...;
         */
     }
}


если не писать for , приложение запускается.
правда я не совсем уверен, что это именно массив указателей.
MyField[j] = new TSpeedButton; пишет, что не существует TSpeedButton::TSpeedButton();

как осуществить массив кнопок?
как вообще создавать динамически графические компоненты?
4.3K
08 июня 2007 года
flat
142 / / 27.12.2005
Код:
class TForm1 : public TForm
{
//.....
public:
        TSpeedButton *MyField[10][10];
};

//......

for (int i = 0; i [color=red]<[/color] 10; i++)
   for (int j = 0; j [color=red]<[/color] 10; j++)
     {
       MyField[j] = new TSpeedButton(this);
       MyField[j]->Height = 10;
       MyField[j]->Width = 10;
       MyField[j]->Top = i*10 + 1;
       MyField[j]->Left = j*10 + 1;
       MyField[j]->Parent = this;
     }
1
09 июня 2007 года
kot_
7.3K / / 20.01.2000
Цитата: ApokALEXIS
Цель - кнопки как в сапере, обращение к каждой по координате....


Как в сапере - можно код?
С чего вашим величеством взято - что вы знаете как в сапере?
Может для начала стоит описать ЗАДАЧУ?

309
09 июня 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
MyField[j] = new TSpeedButton; пишет, что не существует TSpeedButton::TSpeedButton();


Правильно. Компоненты формы являются производными от класса TComponent, который не имеет конструктора "по умолчанию".
Создавать объекты необходимо, передавая указатель на "владельца" (Owner) - объект, который осуществляет дальнейшее управление выделенной памятью.
В данном случае - это форма.

 
Код:
MyField[j] = new TSpeedButton (this); // Создаём объект
MyField[j]->Parent = this; // Указываем "родительский" объект

"Родитель" (parent), в отличие от "владельца", реализует отображение компонента. Координаты Top и Left описывают положение именно от угла "родителя".
246
09 июня 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: ApokALEXIS

как осуществить массив кнопок?
как вообще создавать динамически графические компоненты?


DrawGrid и метод OnDrawCell или если хочешь компонент, то наследуй от TCustomGrid.

520
10 июня 2007 года
inkognitum
155 / / 03.05.2006
Я бы тоже использовал для этого StringGrid, а если не лень то вообще лучше рисовать все на канве формы или Image кому как... быстрее получится и мне кажется правильней.
4.0K
10 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
Цитата: kot_
Как в сапере - можно код?
С чего вашим величеством взято - что вы знаете как в сапере?



кнопулины ВЫГЛЯДЯТ как в сапере. просто слитная таблица.

если использовать метод flat, как для кнопок определять события (например OnClick)

Можно ли использоваль OnMouseMove для всего окна (не зависимо от того, на какие обьекты становится курсор)

520
10 июня 2007 года
inkognitum
155 / / 03.05.2006
Цитата: ApokALEXIS
кнопулины ВЫГЛЯДЯТ как в сапере. просто слитная таблица.

если использовать метод flat, как для кнопок определять события (например OnClick)



Смотри F.A.Q один из первых вопросов вроде.

Цитата: ApokALEXIS

Можно ли использоваль OnMouseMove для всего окна (не зависимо от того, на какие обьекты становится курсор)



самый простой способ
в таймере определяешь координаты мыши (GetCursorPos()) если они в пределах Rect твоего окна и мышка меняет положение (сравнивай старые и новые координаты) то выполняй то что тебе надо.

4.0K
10 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
=) уже сделал таймером, только немного проще.

-> где FAQ ?
4.3K
10 июня 2007 года
flat
142 / / 27.12.2005
Цитата: ApokALEXIS

если использовать метод flat, как для кнопок определять события (например OnClick)



Код:
class TForm1 : public TForm
{
//.....
public:
        TSpeedButton *MyField[10][10];
        void __fastcall SpeedButtonClick(TObject *Sender);
};

//......

for (int i = 0; i < 10; i++)
   for (int j = 0; j < 10; j++)
     {
       MyField[j] = new TSpeedButton(this);
       MyField[j]->Height = 10;
       MyField[j]->Width = 10;
       MyField[j]->Top = i*10 + 1;
       MyField[j]->Left = j*10 + 1;
       MyField[j]->Parent = this;
       MyField[j]->OnClick = SpeedButtonClick;
     }

В реализации метода SpeedButtonClick различать координаты можно, например, по свойству Tag (естественно, его необходимо в таком случае задать при создании кнопки), либо ища указатель Sender в заданном масиве указателей на кнопки. Первый вариант намного предпочтительней
4.3K
10 июня 2007 года
flat
142 / / 27.12.2005
Выглядеть это будет примерно так:
Код:
#define WIDTH 10
#define HEIGHT 10
//....
class TForm1 : public TForm
{
//.....
public:
        TSpeedButton *MyField[HEIGHT][WIDTH];
        void __fastcall SpeedButtonClick(TObject *Sender);
};

//......

for (int i = 0; i < HEIGHT; i++)
   for (int j = 0; j < WIDTH; j++)
     {
       MyField[j] = new TSpeedButton(this);
       MyField[j]->Height = 10;
       MyField[j]->Width = 10;
       MyField[j]->Top = i*10 + 1;
       MyField[j]->Left = j*10 + 1;
       MyField[j]->Parent = this;
       MyField[j]->Tag = i * WIDTH + j;
       MyField[j]->OnClick = SpeedButtonClick;
     }
//....
void __fastcall TForm1::SpeedButtonClick(TObject *Sender)
{
        TSpeedButton * Button = (TSpeedButton * )Sender;
        int i = Button->Tag / WIDTH;
        int j = Button->Tag - i * WIDTH;
        ShowMessage("i = " + IntToStr(i) + "\nj = " + IntToStr(j));
}
246
13 июня 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: ApokALEXIS
кнопулины ВЫГЛЯДЯТ как в сапере. просто слитная таблица.


В сапере нет ни одной кнопки, это я тебе точно говорю. Все нарисовано.

4.0K
13 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
Может у кого есть ичсходники сапёра? оригинальные.
Просто интересно.

Сам когато писал на паскале под дос.
246
13 июня 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: ApokALEXIS
Может у кого есть ичсходники сапёра? оригинальные.
Просто интересно.

Сам когато писал на паскале под дос.



у Била Гейтса:)

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