Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Создать кнопку произвольной формы

22.06.2012, 18:52. Показов 2290. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня.
Мне нужно как то создать кнопку произвольной формы как это зделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2012, 18:52
Ответы с готовыми решениями:

Как создать красивую кнопку для формы?
Как создать красивую кнопку для формы ?

Создать кнопку в правом верхнем углу формы
Как создать новую кнопку в правом верхнем углу(рядом с _,,x)?

Прозрачность формы, при наведении мыши на кнопку реализовать изменение её положения относительно формы с невозможностью выхода за границы формы
доброй ночи, уважаемые программисты, студенты,а также любители программировать. помогите, пожалуйста, написать программу на языке С++ ...

7
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.06.2012, 20:25
Это можно сделать, как-то выдав за кнопку какой-нибудь TImage или покромсав регионами обычный TButton.
Все зависит от того, что конкретно нужно получить в итоге: произвольная-то форма - это одно, но у кнопки помимо этого еще ведь и другие характеристики есть, правда?
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
23.06.2012, 09:07  [ТС]
Вот, покромсать регионами мне больше нравиться, но тогда же у кнопки, где я вырежу что-то, не[пробел]будет границы.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.06.2012, 20:30
Отрисовывать тени и границы ручками.
Или нарисовать картинку, в TImage ее сунуть и порезать уже TImage регионами.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
24.06.2012, 12:40  [ТС]
Покажите пожалуйсто как отрисовывать границы?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.06.2012, 16:07
Хитрой комбинацией рисуемых на канве дуг и прямых. Или с помощью FrameRgn().

Только вот мне было бы жалко тратить время на такие изощрения. Нарисовал бы в фотошопе да и все. Ну, на крайняк еще подрезал бы по маске, если уж нужда приперла бы:
Задача 2. Создать форму с регионом, определяемым некоторым изображением/маской (фактически нужно нарисовать на экране некоторое изображение с непрямоугольными краями)

Решение. Для решения задачи будем строить регион следующим образом:

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
39
40
HGDIOBJ hGdiObj;
   char imageFile[]="mask.bmp";
   HBITMAP hBitmap = (HBITMAP)LoadImage(GetModuleHandle(NULL), imageFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //Загрузили картинку.
   if(!hBitmap) return;   
 
   HDC hdcMem = CreateCompatibleDC(NULL);
   GetObject(hBitmap, sizeof(bmpInfo), &(bmpInfo));   //Получаем информацию о изображении
   hGdiObj = SelectObject(hdcMem, hBitmap);
 
   //Создаем пустой регион
HRGN hRgn = CreateRectRgn(0,0,0,0);
   
   //Цветом прозрачности может быть любой цвет изображения. Т.е. на месте областей, закрашенный этим цветом, будет дыра 
   //Указываем цветовые компоненты прозрачного пикселя.
   COLORREF crTransparent = RGB(255, 0, 0);
   int iX = 0;
   int iRet = 0;
   for (int iY = 0; iY    {
      do
      {
         //Пропускаем прозрачные пиксели
         while (iX             iX++;
         //Запоминаем позицию
         int iLeftX = iX;
         //Ищем последний непрозрачный пиксель
         while (iX             ++iX;
         //и создаем регион толщиной в 1 пиксель на основе полученных данных
         HRGN hRgnTemp = CreateRectRgn(iLeftX, iY, iX, iY+1);
         //Добавляем его к основному региону
         iRet = CombineRgn(hRgn, hRgn, hRgnTemp, RGN_OR);
         if(iRet == ERROR)
         {
            return;
         }
         //Удаляем временный регион
         DeleteObject(hRgnTemp);
         
      }while(iX       //Пока на линии еще остались пиксели, анализируем их.
      iX = 0;
   }
В результате в hRgn будет содержаться нужный нам регион.

Источник.
1
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
24.06.2012, 16:41  [ТС]
Я пытался сделать по вашему примеру, и у меня ошибки на ошибках, поэтому всё удалил.
Можете скинуть пример программы?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.06.2012, 17:41
Нет, не могу, ибо нет у меня этого примера. Да и не джинн я - чужие желания исполнять.

Ошибки в студию, разобраться тут помогут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2012, 17:41
Помогаю со студенческими работами здесь

Форма произвольной формы
Всем привет интересует как создать форму примерно вот такой формы

Форма произвольной формы
Решил попробовать создавать формы произвольной формы по битовой матрице. Вроде всё получилось. потом стало интересно попробовать...

Заливка областей произвольной формы
Есть такая проблема: В файле хранятся координаты линий. я их вывожу в Image1, получается из линий карта с районами. Каждый район нужно...

Как сделать кнопку произвольной формы?
Как сделать кнопку произвольной формы? Например овальную или треугольную? Спасибо.

Создать окно произвольной формы
Доброго времени суток форумчане! У меня есть код, но необходимо сделать файл .exe. Помогите с визуализацией программного кода (чтобы это...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru