Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
3-1086642535
Inkotex
2004-06-08 01:08
2004.07.04
Добавление строки в DBGrid


1-1087808718
besen-ok
2004-06-21 13:05
2004.07.04
Как получить параметры командной строки ?


1-1087560647
DimonNew
2004-06-18 16:10
2004.07.04
Нестандартные окна


8-1082250510
Игорь
2004-04-18 05:08
2004.07.04
Длина AVI файла


9-1045200667
Le!
2003-02-14 08:31
2004.07.04
Искуственный интелект!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский