Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 12:49   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
Вопрос как создать круглую кнопку, созданную на WinAPI?

Здравствуйте. Хочу сделать круглую кнопку на WinApi.
Читал, что это можно сделать, используя регионы.
Мой код:
Код:
var
form1, but : hwnd;
rgn : hrgn;
begin
// создание кнопки
but := CreateWindow(pchar('button'), pchar('button'),
WS_CHILD or WS_VISIBLE,
4,4,100,100,form1,0,hInstance, nil);
// создание региона и применение его к кнопке
  rgn := createellipticrgn(10,10,90,90);
  setwindowrgn(but,rgn,true);
end;
регион создается и успешно применяется к кнопке.
в результате, кнопку можно нажать только в указанном регионе.
однако, углы у кнопки не обрезаются.
кнопка выглядит не круглой, а квадратной.
что еще нужно сделать, чтобы получить круглую кнопку на WinAPI?
ели это имеет значение, то текст на кнопке не нужен.

P.s. Большая просьба: в гуууугл и поиск по форуму не посылать! Я там уже был и не нашел подходящие ответы.

Последний раз редактировалось BLACK_RAIN; 13.02.2012 в 12:57.
BLACK_RAIN вне форума Ответить с цитированием
Старый 13.02.2012, 15:42   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А я нашел за 20 сек http://www.bdrc.ru/load/2-1-0-60
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2012, 16:18   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
Печаль

Цитата:
Сообщение от Аватар Посмотреть сообщение
А я нашел за 20 сек http://www.bdrc.ru/load/2-1-0-60
я тоже это быстро нашел. Код, который я привел в предыдущем посте, я взял именно из этого исходника, ссылку на который вы дали.
Я только заменил форму и кнопку на WinAPI.
Код:
// создание региона и применение его к кнопке
  rgn := createellipticrgn(10,10,90,90);
  setwindowrgn(but,rgn,true);
если применить это к кнопкам, созданным на VCL, то они становятся круглыми, как и положено (без углов).
если делать кнопки на WinAPI, то происходит так, как описано в первом посте.
может, при создании моей кнопки, ей надо какие-то дополнительные стили присвоить?

Последний раз редактировалось BLACK_RAIN; 13.02.2012 в 16:45.
BLACK_RAIN вне форума Ответить с цитированием
Старый 14.02.2012, 00:18   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Стиль WS_CLIPSIBLINGS как минимум нужно добавить, кнопка круглая будет, но заморочки с нормальной прорисовкой кнопки останутся
Вложения
Тип файла: zip Region.zip (197.4 Кб, 39 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2012, 12:48   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Стиль WS_CLIPSIBLINGS как минимум нужно добавить, кнопка круглая будет, но заморочки с нормальной прорисовкой кнопки останутся
спасибо. все получилось.
просто у меня окно и кнопка были одинакового цвета и кнопку не было видно.
тогда еще вопрос:
как перекрасить фон кнопки?
читал, что это делается в сообщении WM_DRAWITEM (кнопке надо добавить стиль BS_OWNERDRAW) с использованием кистей HBRUSH.
но, как именно это делается, я недогоняю.
Сейчас проверил. Если я применяю к кнопке стиль BS_OWNERDRAW, то в сообщении WM_DRAWITEM WPARAM всегда равен 0, а должен быть равен идентификатору кнопки (так написано в MSDN).
И не важно, присутствует ли стиль WS_CLIPSIBLINGS.
ListBox'ы и Label'ы прекрасно перекрашиваются, а вот с кнопками фигня какая-то
подскажите?

Последний раз редактировалось BLACK_RAIN; 14.02.2012 в 13:08.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать кнопку для всех листов книги? kipish_lp Microsoft Office Excel 5 06.05.2010 17:43
Как создать чудо кнопку для программы складского учета в Excel Фиштрех Microsoft Office Excel 4 05.04.2010 23:14
как создать кнопку в форме, которая будет создавать отчет Tatu Microsoft Office Access 3 04.03.2010 19:13
КАК создать кнопку DEZuv Microsoft Office Access 4 04.04.2009 11:50
Как создать кнопку в панели для окон???? Angel86rus Общие вопросы Delphi 4 03.10.2007 19:01