Форум: "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