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

Вниз

Форма границы, которой совпадают с границами Image   Найти похожие ветки 

 
Evgeniy_K   (2003-12-13 17:53) [0]

Как сделать сабж?


 
Юрий Зотов ©   (2003-12-13 18:27) [1]

Форма: BorderStyle = bsNone
Image: Align = alClient


 
Evgeniy_K   (2003-12-14 18:39) [2]

Image не прямоуголных размеров. Например, тор.


 
Юрий Зотов ©   (2003-12-14 19:13) [3]

Хе-хе. Я подозревал, что это так и будет. Но... как задан вопрос, такой и дан ответ. Сам Image всегда прямоугольный, другое дело, что в нем могут быть прозрачные области и поэтому картинка получается непрямоугольная. Ну да ладно.

Значит, так.

1. Непрямоугольные окна делаются с помощью регионов (см. Region functions в справке API - CreateXxxRgn(Indirect), CombineRgn, DeleteObject, SetWindowRgn).

2. Чтобы создать нужный регион, придется просканировать картинку. Можно попиксельно (см. Pixels) или через ScanLine (пример есть в справке).

3. Если нет желания возиться самому, то существует масса уже готовых компонентов. Например, библиотека FormRgn на Королевстве.


 
TUser ©   (2003-12-14 19:36) [4]

Есть готовые компоненты. Но можно и самому сделать. Для этого с помощью CombineRgn создай свой регион, нужной тебе формы и используй SetWindowRgn.


 
Evgeniy_K   (2003-12-15 21:01) [5]

Что-то я возился еще до подачи вопроса с CreateRectRgn(x, y, x + 1, y + 1) и ничего интересного не получалось. Мож что делал не так или еще попробовать?
Если есть ссылки на компоненты, киньте - погляжу.

Заранее спасибо.


 
Mihey ©   (2003-12-15 21:36) [6]

Вот, кропит окно по картинке. Работает с любыми оконными компонентами, например, можно сделать прозрачным TStaticText.

procedure CropWindow( Handle: HWnd; Picture : TPicture );
var
hrgn, hrgn1 : integer;
hdc : integer;
x, y : integer;
Color : TColor;
begin
// Color := Picture.Bitmap.Canvas.Pixels[ 0, 0 ];
Color := clWhite;
hdc := GetDC( Handle );
hrgn := CreateRectRgn( 0, 0, Picture.Graphic.Width, Picture.Graphic.Height );
for x := 1 to Picture.Graphic.Width do
for y := 1 to Picture.Graphic.Height do
if Picture.Bitmap.Canvas.Pixels[ x - 1, y - 1 ] = Color then begin
hrgn1 := CreateRectRgn( x - 1, y - 1, x, y);
CombineRgn( hrgn, hrgn, hrgn1, RGN_DIFF );
DeleteObject( hrgn1 );
end;
SetWindowRgn( Handle, hrgn, true );
//DeleteObject( hrgn );
ReleaseDC( Handle, hdc);
end;

procedure UncropWindow( Handle: HWnd; Picture : TPicture );
var
hrgn : integer;
hdc : integer;
begin
hdc := GetDC( Handle );
hrgn := CreateRectRgn( 0, 0, Picture.Graphic.Width , Picture.Graphic.Height );
SetWindowRgn( Handle, hrgn, true );
ReleaseDC( Handle, hdc );
end;


 
Evgeniy_K   (2003-12-16 19:10) [7]

Big Thanks!


 
TUser ©   (2003-12-16 20:14) [8]

Есть коллекция JEDI/RxLib. Можно ее и использовать. Там есть исходники можно и там посотреть.
Create...Rgn лучше не по одному пикселю делать, а по горизонтальной линии пикселей (кажется, в jedi так и сделано), хотя так, как ты делал, тоже получится, только медленнее.



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
4-99824
Дмитрий Д
2003-11-01 09:08
2003.12.30
Notebooc


1-99528
velial
2003-12-16 11:56
2003.12.30
Передача параметров в процедуру/функцию


1-99540
Иванько
2003-12-15 17:16
2003.12.30
Жутко умный вопрос про ОЛЕ, WINAPI и все остальное :)))


14-99756
k-man
2003-12-04 14:12
2003.12.30
Образование: Актуальная тема :)


4-99811
fishca
2003-11-03 09:33
2003.12.30
Использование NtQuerySystemInformation в Delphi.