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

Вниз

Прозрачное окно!!!   Найти похожие ветки 

 
Viktor1   (2002-10-09 12:41) [0]

Братаны!!! на Delphi можно перевести, я слаб. Спасибо.

Прозрачное окно:

1) объявить функцию WinRgn(); (CTRL+F6)

2) далее вставьте следующий код

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
inherited TForm1();
HorzScrollBar->Visible = false;
VertScrollBar->Visible = false;
WinRgn();
}
//-------------------------------------------------------------
void __fastcall TForm1::WinRgn(void)
{
HRGN All, TempRgn;
int x, y, i;
x = (div(Width - ClientWidth, 2)).quot;
y = Height - ClientHeight - x;
All = CreateRectRgn(0, 0, Width, Height);
TempRgn = CreateRectRgn(x, y, x + ClientWidth, y + ClientHeight);
CombineRgn(All, All, TempRgn, RGN_DIFF);
for (i = 0; i < ControlCount; i++) {
TempRgn = CreateRectRgn(x + Controls[i]->Left,
y + Controls[i]->Top,
x + Controls[i]->Left + Controls[i]->Width,
y + Controls[i]->Top + Controls[i]->Height);
CombineRgn(All, All, TempRgn, RGN_OR);
}
SetWindowRgn(Handle, All, true);
}
//-------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
inherited TForm1();
WinRgn();
}
//-------------------------------------------------------------


 
Борис   (2002-10-09 13:08) [1]

Создание окна произвольной формы
Для создания окна произвольной формы необходимо воспользоваться функциями управления регионами Windows. Регион (region) - область окна, отображаемая при прорисовке. Область, находящаяся вне границы региона, не прорисовывается, остается прозрачной и не реагирует на события мыши. Форму региона можно определить как результат логических операций примитивных регионов, которые могут быть прямоугольником, прямоугольником со скругленными углами, эллипсом или многоугольником, определяемым набором вершин. Сочетание посредством различных логических операций этих примитивных форм позволяет создать геометрическую фигуру практически любой сложности. В WinAPI есть также средства, позволяющие определять принадлежность точки к региону. Ниже приведен пример создания региона, состоящего из объединения эллипса и прямоугольника.
procedure TfrmMain.WMNCHITTEST(var Msg: TMessage);
begin
// Это нужно для перемещения формы без заголовка.
// Возврат значения HTCAPTION при любом нажатии
// мыши заставляет Windows думать, что это нажатие
// произведено в области заголовка и поступать
// соответственно - перемещать окно.
Msg.Result:=HTCAPTION;
end;

procedure TfrmMain.btnEffectClick(Sender: TObject);
var
Rgn1,Rgn2: HRGN;
begin
// Главные события происходят здесь.
// shpXXX - компоненты TShape.
// Создаем эллиптический регион по размерам shpEllipse.
with shpEllipse do
Rgn1:=CreateEllipticRgn(Left,Top,Left+Width,Top+Height);
// Создаем прямоугольный регион по размерам shpRect.
// Можно было обойтись только переменной Rgn1, но в целях
// наглядности и единнобразия я объявил Rgn2.
with shpRect do
Rgn2:=CreateRectRgn(Left,Top,Left+Width,Top+Height);
// Объединяем регионы по операции OR и, если это прошло
// без ошибок, устанавливаем получившийся регион для
// главного окна приложения. True указывает на
// необходимость перерисовки окна.
if CombineRgn(Rgn1,Rgn1,Rgn2,RGN_OR)ERROR then
SetWindowRgn(Handle,Rgn1,True);
// В итоге к нас отображаются только области,
// перекрытые shpEllipse и shpRect. Посмотреть это
// можно, загрузив и скомпилировав пример.
end;

procedure TfrmMain.btnNormClick(Sender: TObject);
begin
// Делаем окно обычным.
SetWindowRgn(Handle,0,True);
end;


 
Viktor1   (2002-10-09 13:32) [2]

Я что хочу:
Есть форма, взять Image поместить на форму, загрузить в Image картинку всё в transporent - это я утрируя конечно (хочется проще) и форма приняла форму картинки.Во!!!как.
Смотрел разные компоненты все работают или слишком умно или криво. Напр. Shaper.exe (если правильно написал пришу простить): при запуске моей программы Delphi пишет over flow - вроде так.
Может кто знает такой супер компонент!!! Сообщите, или кодом.



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

Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
8-56228
~E~R~R~O~R~
2002-06-15 13:38
2002.10.17
sndPlaySound


1-56122
Story_men
2002-10-08 15:29
2002.10.17
Компоненты VCL позволяющие анимировать показ панелей.


14-56301
billybons
2002-09-20 10:10
2002.10.17
Explorer 5,0 Win98


1-56077
Jumbot
2002-10-05 15:15
2002.10.17
Запись в файл


1-56200
cfk
2002-10-07 14:04
2002.10.17
Передача переменных из DLL и обратно





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