Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопки. много кнопок. 
:(
    Опции темы
JAnty
  Дата 7.6.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Есть 40 кнопок. "Кнопка1"..."Кнопка40".
При нажатии на каждую из них, должно вводитьса число в глобальную переменную int tmp;
Тоесть, при нажатии на "Кнопка10" переменная tmp=10;
Прописывать в каждом обработчеке очеть муторно. Должен быть кокойто простой способ,
например как в ВижуалБэйсике с Индексами.
Подскажите пожалуйсто.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Mysterio
Дата 8.6.2005, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Планирующий
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.12.2004

Репутация: нет
Всего: нет



Попробуй брать из Name 1-2 последних символа, распиши для них событие.Теперь можно для всех кнопок установить единое св-во onclick(или какое тебе нужно)..
ЗЫ.не могу представить пример такой программы... по-моему это всё с успехом можно заменить TrackBar'ом.smile
PM MAIL   Вверх
chaos
Дата 8.6.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



Вот тебе наглядный пример:
Код

#include <windows.h>
#include <stdio.h>

#define COLBUT 40

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam);

HINSTANCE hInst;
int tmp;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    hInst = hInstance;
    TCHAR *szName = "test";

    WNDCLASS WndClass;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = szName;
    WndClass.lpszMenuName = NULL;
    WndClass.style = CS_HREDRAW | CS_VREDRAW;

    if (!RegisterClass(&WndClass))
        return 0;
    
    HWND hWnd = CreateWindow(
                    szName,
                    szName,
                    WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    NULL,
                    NULL,
                    hInstance,
                    NULL);

    if (!hWnd)
        return 0;


    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    MSG Msg;
    while (GetMessage(&Msg, NULL, 0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    return Msg.wParam;
}

HWND *buts;

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam)
{
    int n,m=0,p=0;
    char str[10];

    switch (Message)
    {
    case WM_CREATE:
        buts = new HWND[COLBUT];

        for (n=0; n < COLBUT; n++)
        {
            sprintf(str, "Button %d", n);
            buts[n] = CreateWindow(
                            "button",
                            str,
                            WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                            1*m,p*30,100,25,
                            hWnd,
                            (HMENU)(1000+n),
                            hInst,
                            NULL);
            if ((n%8)==0)
            {
                m += 105;
                p = 0;
            }
            else
                p++;

        }
        return 0;

    case WM_COMMAND:
        sprintf(str, "Button %d", (LOWORD(wParam)-1000));
        MessageBox(hWnd, str, "Information", MB_OK);
        tmp = LOWORD(wParam)-1000;
        return 0;

    case WM_DESTROY:
        delete[] buts;
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hWnd, Message, wParam, lParam);
}


ПОЛЬЗУЙСЯ))
PM WWW   Вверх
Vyacheslav
Дата 8.6.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Используй свойство Tag. Инициализируй его в рантаме(в цикле) или в дизайне соответствующим значением и
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        tmp = ((TButton*)Sender)->Tag;
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
JAnty
Дата 8.6.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Цитата(Mysterio @ 8.6.2005, 07:33)
ЗЫ.не могу представить пример такой программы...


Cлабая фантазия. Мне нужно 45 кнопок. Прямоугольное поле 9*5.

Vyacheslav Огромное спасибо. Именно такого простого решения я и ожидал.
Добавлено @ 10:46
Офигенно круто! Спасибо.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.