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

Вниз

Форма границы, которой совпадают с границами 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
7-99807
xxxXXxx
2003-10-23 15:25
2003.12.30
Анимация без мерцания


14-99698
Thor
2003-12-07 22:36
2003.12.30
шахматная проблема.


3-99458
Chris
2003-12-05 14:30
2003.12.30
Открыть базу без индексного файла


3-99482
Aleksandr
2003-12-04 13:50
2003.12.30
Что вызывает тормоза скроллинга по RXDBGrid?


14-99785
Дремучий
2003-11-24 22:59
2003.12.30
Зацените клиента форума!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский