Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

Регион формы по маске   Найти похожие ветки 

 
Elysium ©   (2004-05-20 09:53) [0]

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


 
inic ©   (2004-05-20 15:18) [1]

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

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


 
wicked ©   (2004-05-20 15:27) [2]

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

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


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


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


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


 
Elysium ©   (2004-05-21 11:10) [4]

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


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


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

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


 
Ajax ©   (2004-05-21 16:50) [6]

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

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.


 
Elysium ©   (2004-05-22 00:05) [7]

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


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

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


 
Ajax ©   (2004-05-22 16:55) [9]

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


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

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

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


???



Страницы: 1 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1086285323
hardclubber
2004-06-03 21:55
2004.07.04
Ошибка с кодировками


8-1082305824
ARY
2004-04-18 20:30
2004.07.04
Анимация велосипеда.


14-1086967113
Mim1
2004-06-11 19:18
2004.07.04
Посоветуйте киношку


3-1086671890
Litr
2004-06-08 09:18
2004.07.04
Запрос с iif


3-1086792518
alex_pv
2004-06-09 18:48
2004.07.04
Помогите с документацией