Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16

Перемещение динамически созданной кнопки по сетке на форме

26.04.2012, 22:11. Показов 2030. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не знаю как сделать, чтобы кнопки созданные динамически перемещались в любую ячейку сетки размещенной на форме. Вот код проги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for (int  i = 0; i < 10; i++)
     {
        for (int j = 0; j <8; j++)
         {
            TPanel *p = new TPanel(  this->Panel1  );
            p->Parent = this->Panel1;
            p->Width =67;
            p->Height  =68;
            p->Left = i * p->Width;
            p->Top  = j * p->Height;
        }
    }
     String ifiles[] = { "NOT.bmp",  "AND.bmp","OR.bmp","1.bmp","2.bmp","3.bmp","4.bmp",
                        "5.bmp","6.bmp","7.bmp","8.bmp","9.bmp","10.bmp","11.bmp","12.bmp",
                        "13.bmp","14.bmp","15.bmp","16.bmp","17.bmp", "18.bmp"};
 
    for (int i = 0; i <21; i++)
     {
         TBitBtn  *b = new TBitBtn(  this->Panel2  );
         b->Parent =  this->Panel2 ;
         b->Height=68; b->Width=67;
         b->Left = 4+(i%3)*67;
         b->Top  = 4+(i/3)*68;
         String n= ifiles[i];
 
         b->ShowHint=true;
         b->Cursor=crHandPoint;
         b->Hint = n.Delete(n.Pos("."),4);
 
         TImage *a = new TImage(0);
         a->Picture->LoadFromFile( "img/"+ ifiles[i]  );
         a->Stretch = true;
         b->Glyph = a->Picture->Bitmap ;
         b->DragMode=dmAutomatic;
      }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2012, 22:11
Ответы с готовыми решениями:

Перемещение динамически созданной кнопки по динамически созданной сетки
Всем привет!!! Помогите не могу допетрить как сделать. суть моей проблемы в том что, мне необходимо сделать чтобы динамически созданная...

Обращение к динамически созданному объекту на динамически созданной форме
Как, создав динамический объект, TButton, обратиться к нему? Unit1.cpp void __fastcall TForm1::Button2Click(TObject *Sender) { ...

Размещение компонентов на динамически созданной форме
Здравствуйте! 1) Я создал форму динамическим способом TForm *Dialog=new TForm(this); , но мне нужно чтобы она наследовала всё от...

11
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
27.04.2012, 15:00
для BitBtn'ов задан обработчик OnClick?
если задан, то будет сложнее ситуация.
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
27.04.2012, 15:26  [ТС]
нет ОnClik не задан. мне необходимо чтобы при нажатии на кнопке и перемещении ее на ячейку перемещалась не кнопка а ее событие , т.е создавалася копия кнопки.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.04.2012, 17:51
- уточни, что за "сетка, размещенная на форме", и что требуется туда перемещать
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
27.04.2012, 18:03  [ТС]
сетка созданная из компонента Panel код:
C++
1
2
3
4
5
6
7
8
9
10
for (int  i = 0; i < 10; i++) {
  for (int j = 0; j <8; j++) {
    TPanel *p = new TPanel(  this->Panel1  );
    p->Parent = this->Panel1;
    p->Width =67;
    p->Height  =68;
    p->Left = i * p->Width;
    p->Top  = j * p->Height;
  }
}
и на эту сетку созданную из панелек , требуется перемещать кнопки созданные динамически, кнопки должны размещаться строго в выбранную ячейку. т.е мы указываем курсором мыши куда должна быть размещена кнопка , затем она должна туда встать копируя событие своего родителя.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.04.2012, 18:09
- как-то у тебя мудрёно всё... . и панели, и кнопки имеют одинаковые габариты... . То-есть методом DragDrop поперетаскивать все кнопки, что ли..? Лучше б скрин формы посмотреть.
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
27.04.2012, 18:44  [ТС]
вот ссылка экзешника как должно быть , но у меня не получается

http://www.obmen55.ru/dl/gkxLTYZ3f02Ua6b9FcFQaw
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
27.04.2012, 20:55
Тогда получается вот такой код (на примере одной кнопки и одной панели):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        // разрешить кнопке перетаскивание
        BitBtn1->DragMode = dmAutomatic;
}
//---------------------------------------------------------------------------
 
// Обработчик OnDragOver для Panel
void __fastcall TForm1::Panel1DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
        Accept = true;
}
//---------------------------------------------------------------------------
 
 
// Обработчик OnDragDrop для Panel
void __fastcall TForm1::Panel1DragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{
        TBitBtn *button = dynamic_cast<TBitBtn*>(Source);
        if (button)
        {
                button->Parent = (TWinControl*)Sender;
                button->Left = 0;
                button->Top = 0;
        }
}
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
28.04.2012, 07:16  [ТС]
а Обработчик OnDragOver и Обработчик OnDragDrop для Panel применять для панельки где находится кнопка или для ппанельки где сетка??? а то у меня чета не не работает . и как сделать для всех кнопак????

Добавлено через 18 минут
с одной кнопой рааботает , но она при перемещении исчезает а мн нужно чтобы она перемещаясь не исчезала а как бы копировала свое ссвойство, так как я буду перетаскивать кнопки , много раз.вот этого мне нужно добиться ...
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
28.04.2012, 09:51
Цитата Сообщение от zin Посмотреть сообщение
а мн нужно чтобы она перемещаясь не исчезала а как бы копировала свое ссвойство
создаешь кнопку на панели и присваиваешь ей свойства (Glyph и т.д.) копируемой кнопки
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
28.04.2012, 13:49  [ТС]
что то я не могу понять , не могли ли вы на примере покать. буду блогадарен!!!!
0
0 / 0 / 0
Регистрация: 19.04.2012
Сообщений: 16
02.05.2012, 13:42  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for (int  i = 0; i < 10; i++)                                    // обработчик который создает панельки динамически при запуске программы
     {
        for (int j = 0; j <8; j++)
         {
            TPanel *p = new TPanel(  this->Panel1  );
            p->Parent = this->Panel1;
            p->Width =67;
            p->Height  =68;
            p->Left = i * p->Width;
            p->Top  = j * p->Height;
        }
    }
теперь мне необходимо сделать чтобы при перемещении кнопки она нанасилась на панельку , указанную курсором в любое место.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TForm1::Panel1DragOver(TObject *Sender, TObject *Source, int X, int Y,
          TDragState State, bool &Accept)
{
      Accept = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Panel1DragDrop(TObject *Sender, TObject *Source, int X, int Y)
 
{
        TBitBtn *b = dynamic_cast<TBitBtn*>(Source);
                                                           //обработчик который наносит кнопку на панельки , 
                                                               но мне необходимо чтобы кнопки наносились на панельки которые создаются динамически при запуске программы. 
        if (b)
        {
                b->Parent = (TWinControl*)Sender;
 
                int a=Tag;
                for(int i=1;i>=Panel1->Tag==21;i++)
                {
                            b->Left =10*Panel1->Tag*100+1;
                   b->Top = 10*Panel1->Tag*100+1
                }
        }
}
Добавлено через 2 часа 48 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i = 0; i < 10; i++) // обработчик который создает панельки динамически при запуске программы
{
for (int j = 0; j <8; j++)
{
TPanel *p = new TPanel( this->Panel1 );
p->Parent = this->Panel1;
p->Width =67;
p->Height =68;
p->Left = i * p->Width;
p->Top = j * p->Height;
}
}
теперь мне необходимо сделать чтобы при перемещении кнопки она нанасилась на панельку , указанную курсором в любое место.
C++
1
2
3
4
5
void __fastcall TForm1::Panel1DragOver(TObject *Sender, TObject *Source, int X, int Y,
TDragState State, bool &Accept)
{
Accept = true;
}
//обработчик который наносит кнопку на панельки ,
но мне необходимо чтобы кнопки наносились на панельки которые создаются динамически при запуске программы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Panel1DragDrop(TObject *Sender, TObject *Source, int X, int Y)
 
{
TBitBtn *b = dynamic_cast<TBitBtn*>(Source);
if (b)
{
b->Parent = (TWinControl*)Sender;
 
int a=Tag;
for(int i=1;i>=Panel1->Tag==21;i++)
{
b->Left =10*Panel1->Tag*100+1;
b->Top = 10*Panel1->Tag*100+1
}
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.05.2012, 13:42
Помогаю со студенческими работами здесь

перемещение кнопки по форме
Доброго времени суток всем!!!1 обращаюсь к вам за помощью как новичёк=) такая задача - нужно написать программу, в которой кнопка будет...

Обращение к динамически созданной форме
Здравствуйте, создаю форму динамически: TForm* Forma = new TForm(this); Forma-&gt;Name=&quot;R&quot;; ...

Обращение к динамически созданной форме
Динамически создал форму и кнопку на ней. Не могу понять как обратиться к этой форме из обработчика нажатия кнопки, чтоб, например, закрыть...

Удаление динамически созданной кнопки
как можно нажав допустим пкм на кнопку Б, удалить кнопку Б, если кнопка Б была создана динамически???

Не происходит отрисовки на динамически созданной форме
Добрый вечер. Делаю процедуру, которая должна создать новую форму, и отметить на на ней поле 8*8(1 квадрат 50:50 пикселей) procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru