Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Народ, кто может подсказать как создать кнопку нестандартной формы( круглую или овальную...) ?
Благодарен заранее!



Партнер
 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
unlexd Где делать-то собрался =)
если в дельфе, то можно так:
Код:
procedure MakeRounded(Control: TWinControl);
 var
   R: TRect;
   Rgn: HRGN;
 begin
   with Control do
   begin
     R := ClientRect;
     rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20);
     Perform(EM_GETRECT, 0, lParam(@r));
     InflateRect(r, - 5, - 5);
     Perform(EM_SETRECTNP, 0, lParam(@r));
     SetWindowRgn(Handle, rgn, True);
     Invalidate;
   end;
 end;


использовать

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRounded(Button1);
end;

Добавлено спустя 1 минуту, 2 секунды
Или кнопку-картинку, потомок от TImage.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Lord_of_Darkness писал(а):
unlexd Где делать-то собрался =)
если в дельфе, то можно так:
Код:
procedure MakeRounded(Control: TWinControl);
 var
   R: TRect;
   Rgn: HRGN;
 begin
   with Control do
   begin
     R := ClientRect;
     rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20);
     Perform(EM_GETRECT, 0, lParam(@r));
     InflateRect(r, - 5, - 5);
     Perform(EM_SETRECTNP, 0, lParam(@r));
     SetWindowRgn(Handle, rgn, True);
     Invalidate;
   end;
 end;


использовать

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRounded(Button1);
end;

Добавлено спустя 1 минуту, 2 секунды
Или кнопку-картинку, потомок от TImage.



Спасибо, но честно говоря я был невнимателен, когда тему создавал-хотел создать в разделе C++Builder, а получилось в общем. :) Вот и непонятка немного вышла. Поэтому буду признателен если посоветуешь как это под Builder сделать.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
unlexd Короче есть очень действенный способ.
1. Нужно подготовить картинки (bmp, jpeg...) с твоей кнопкой в обычном состоянии, в нажатом, в подсвеченном.
2. Берем TImage и на события onMouseMovie вешаем загрузку подсвеченного изображения, на onMouseLive - обычного, на onMouseDown - нажатой и т.д.
Это самый универсальный способ.
Тот, который я описАл ранее, дает не очень красивый результат...

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

С Image вариант интересный, но мне необходимо сделать именно новый класс этой самой кнопки, так, чтобы можно было форму ее менять.
Вот и вопрос, как его сделать:(.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
unlexd Не, по билдеру не скажу. В принципе они с дельфи похожи и с я знаю более-менее, но все-же затрудняюсь сказать заработает ли тот пример в билдере.
PS rnfnb делается в нем все довольно страшненько. Там просто ограничивается область отрисовки кнопки, и она становится какой-то уродской, но овальной =(

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Lord_of_Darkness писал(а):
unlexd Не, по билдеру не скажу. В принципе они с дельфи похожи и с я знаю более-менее, но все-же затрудняюсь сказать заработает ли тот пример в билдере.
PS rnfnb делается в нем все довольно страшненько. Там просто ограничивается область отрисовки кнопки, и она становится какой-то уродской, но овальной =(


Понятно, но и на том спасибо!:)


 

Member
Статус: Не в сети
Регистрация: 15.06.2005
Откуда: Днепропетровск
Вот код для создания круглой кнопка
Код:
HRGN r
r=CreateEllipticRgn(5,5,RgnButton->Width-5,RgnButton->Height-5);
SetWindowRgn(RgnButton->Handle,r,TRUE);

а вот для круглой кнопки с дыркой
Код:
HRGN r,r1;
r=CreateEllipticRgn(5,5,RgnButton->Width-5,RgnButton->Height-5);
r1=CreateEllipticRgn(10,10,RgnButton->Width-10,RgnButton->Height-10);
CombineRgn(r,r,r1,RGN_DIFF);
SetWindowRgn(RgnButton->Handle,r,TRUE);


unlexd, ну а пронаследовать класс TButton и в потомке написать что-то подобное в конструкторе труда уже не составит.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan