imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 23.04.2005, 15:21     # 1
Dark_Miker
Guest
 
Сообщения: n/a

Question Кнопка определённой формы

Как, граждане-товарищи, создать кнопочку на форме определённой формы? Именно формы, а не ImageIcon
 
Старый 23.04.2005, 17:38     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Основные функции (см. Help WinAPI), которые тебе понядобятся:

CreateRectRgn - создает прямоугольную область
CreateEllipticRgn - создает эллиптическую область
CreatePolygonRgn - создает многоугольник

CombineRgn - позволяет объединять регионы между собой.

Т.е. можно создать нужную тебе форму (регион), комбинируя эти примитивы с помощью CombineRgn.

Можно создать регион по растру:
Код:
function BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN;
  var X,Y: Integer;
  XStart: Integer;
begin
  Result := 0;
  with Bitmap do
    for Y:=0 to Height-1 do begin
      X := 0;
      while X do begin
        // Пропускаем прозрачные точки
        while (X<Width and (Canvas.Pixels[X,Y]=TransColor) do Inc(X);
        if X >= Width then Break;
        XStart := X;
        // Пропускаем непрозрачные точки
        while (X<Width and (Canvas.Pixels[X,Y]<>TransColor) do Inc(X);
        // Создаем новый прямоугольный регион и добавляем его к
        // региону всей картинки
        if Result=0 then 
           Result:=CreateRectRgn(XStart, Y, X, Y + 1)
        else 
           CombineRgn(Result, Result,CreateRectRgn(XStart, Y, X, Y + 1), RGN_OR);
    end;
  end;
end;
Запихнуть создание региона в OnCreate формы. Потом наложить этот регион на другой компонент (хоть TButton, хоть на саму форму), ну и отписать событие нажатия мышкой.

Как элементарный пример:
Код:
  // Cоздаем круглый регион
  rgn: = CreateEllipticRgn(0,0,100,100);
  // Накладываем его на кнопку
  SetWindowRgn(Button1.Handle, rgn, true);
ЕЖ вне форума  
Старый 23.04.2005, 17:41     # 3
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
При помощи регионов можно создать кнопку абсолютно произвольной формы. Подробнее о том что такое регионы и как их можно использовать можешь еще вот здесь почитать: http://www.erased.info/articles/3056.html

Ну вот пока я собирался с мыслью тов. ЕЖ все уже расписал, причем гораздо подробнее...
__________________
Старые игры раздают здесь

Последний раз редактировалось CEO; 23.04.2005 в 17:48.
CEO вне форума  
Старый 24.04.2005, 00:32     # 4
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
ЕЖ
ЖЖОТ!

от себя добавлю что это справделиво для окна тоже... так как в винде по сути кнопка - это тоже окно...
/7y3uK вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 11:08.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.