IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Кнопка определённой формы (http://www.imho.ws/showthread.php?t=84372)

Dark_Miker 23.04.2005 16:21

Кнопка определённой формы
 
Как, граждане-товарищи, создать кнопочку на форме определённой формы? Именно формы, а не ImageIcon :)

ЕЖ 23.04.2005 18:38

Основные функции (см. 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);


CEO 23.04.2005 18:41

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

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

/7y3uK 24.04.2005 01:32

ЕЖ
ЖЖОТ! :)

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


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

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