Главная страница
    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.036 c
4-1085302975
WOLF
2004-05-23 13:02
2004.07.04
Свой рабочий стол


1-1087462750
MeF88
2004-06-17 12:59
2004.07.04
Преимущества property


3-1086682947
Ugrael
2004-06-08 12:22
2004.07.04
SQL и UNION.как сделать order by


3-1086860530
menja_zovut_deniska
2004-06-10 13:42
2004.07.04
Работа с OracleNavigator


14-1087016393
gek
2004-06-12 08:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский