Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Регион формы по маске [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Elysium ©   (2004-05-20 09:53:00) 

Программисты HI. Вот вопросик нарисовался - как сделать регион формы по маске из файла с изображением - BMP? И как эту форму таскать за клиентскую область (что-то свзяано с WM_CAPTION.... - но не помню точно, что именно)?


Ajax   (2004-05-22 16:55:00) [1]

>Elysium
>ну может быть маленькая вставочка на ASM-е


Не, ну я удивляюсь...

А чем тебя не устраивало

>[1] inic ©   (20.05.04 15:18)
>Есть такой пример, но на ASMе


???


Elysium   (2004-05-22 00:15:00) [2]

Да и еще, что нибудь подобное побыстрее есть (ну может быть маленькая вставочка на ASM-е или, что-нибудь еще - но не KOL)?


Elysium   (2004-05-22 00:05:00) [3]

Всем большое Thanks!!!


Ajax   (2004-05-21 16:50:00) [4]

Ну, что-то наподобие...

function CreateRgnFromBitmap(rgnBitmap: Kol.PBitmap): HRGN;
var
 transColor: TColor;
 i, j: Integer;
 width, height: Integer;
 left, right: Integer;
 rectRgn: HRGN;
begin
 Result := 0;
 width := rgnBitmap.Width;
 height := rgnBitmap.Height;
 transColor := $FF00FF;
 for i := 0 to height - 1 do
 begin
   left := -1;
   for j := 0 to width - 1 do
   begin
     if left < 0 then
     begin
       if rgnBitmap.Pixels[j, i] <> transColor then
         left := j;
     end
     else
       if rgnBitmap.Pixels[j, i] = transColor then
       begin
         right := j;
         rectRgn := CreateRectRgn(left, i, right, i + 1);
         if Result = 0 then
           Result := rectRgn
         else
         begin
           CombineRgn(Result, Result, rectRgn, RGN_OR);
           DeleteObject(rectRgn);
         end;
         left := -1;
       end;
   end;
   if left >= 0 then
   begin
     rectRgn := CreateRectRgn(left, i, width, i + 1);
     if Result = 0 then
       Result := rectRgn
     else
     begin
       CombineRgn(Result, Result, rectRgn, RGN_OR);
       DeleteObject(rectRgn);
     end;
   end;
 end;
end;

Только я сей код использую вместе с KOL так что наверное тебе придется немного поправить обращение к Bitmap.


wicked   (2004-05-21 12:11:00) [5]


> Но нужно ручками, ручками

BitmapToRegion - процедура... никто не мешает её перекроить как хочешь (что я и делал... ;))


Elysium   (2004-05-21 11:10:00) [6]

Всем спасибо, за ответы :-((. Но нужно ручками, ручками, а не с помощью библиотек или компонент.


Игорь Шевченко   (2004-05-20 15:31:00) [7]


> как сделать регион формы по маске из файла с изображением
> - BMP?


Искать на Королевстве Delphi библиотеку Антона Григорьева FormRgn


wicked   (2004-05-20 15:27:00) [8]

поищи в интернете BitmapToRegion - сам я так и нашел....

насчет таскания - перехватить сообщение WM_NCHITTEST и в нужный момент возвращать из него HT_CAPTION...


inic   (2004-05-20 15:18:00) [9]

Есть такой пример, но на ASMе.
Но ты все равно посмотри, ибо WinAPI и Африке WinAPI.

http://spiff.tripnet.se/~iczelion/files/Skin%20a%20Window.zip


Наверх

Титульная страница Поиск, карта сайта Написать письмо