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

Вниз

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

 
Olgerd   (2001-09-08 01:57) [0]

Чтобы поменять прозрачность окна под Win2000, например, сделать его ПОЛупрозрачным я пишу
SetLayeredWindowAttributes(Handle, clBlack, 122,LWA_ALPHA);
А если запустить этот exe-шник под Win95, то выдаётся ошибка об отсуствующем компоненте SetLayeredWindowAttributes


 
AlexanderBogdanov   (2001-09-08 07:21) [1]

У win95 нет прозрачности.


 
Olgerd   (2001-09-09 10:37) [2]

Я понимаю, что нет, но мне надо, чтобы под Win95 хотя бы запускалась!


 
yar   (2001-09-09 10:58) [3]

при запуске - проверяй версию операционки
и только в 2000-ной выставляй прозрачности


 
phosgen   (2001-09-09 12:47) [4]

Вообще-то в вин95 можно делать прозрачные окна...
Причем не только прозрачные, но еще и любой формы.
Делается все довольно просто: при помощи функции SetWindoowRgn


 
phosgen   (2001-09-09 12:47) [5]

Вообще-то в вин95 можно делать прозрачные окна...
Причем не только прозрачные, но еще и любой формы.
Делается все довольно просто: при помощи функции SetWindoowRgn


 
phosgen   (2001-09-09 12:48) [6]

Вообще-то в вин95 можно делать прозрачные окна...
Причем не только прозрачные, но еще и любой формы.
Делается все довольно просто: при помощи функции SetWindoowRgn


 
MK   (2001-09-09 14:38) [7]

2 phosgen
Позволю себе заметить, что в Windows 95 полупрозрачные окна делать нельзя;
любой формы - да, а вот полупрозрачные - нет, можно установить для окна
стиль TRANSPARENT, но это очень разные вещи по сравнению с subj.
Существуют способы добиться некоторого подобия полупрозрачности, но помощи
со стороны ОС - никакой.
А что касается SetLayeredWindowAttributes, то ее нужно прицеплять с
помощью динамической линковки, вот и все.


 
MK   (2001-09-09 14:43) [8]

A propos, обратил пристальное внимание на subj и что я вижу: D6! Тогда
какие проблемы с установкой AlphaBlend для формы? Все отлично работает
под любой ОС.


 
Olgerd   (2001-09-09 17:24) [9]

Конечно, я видел более-менее успешные реализации полупрозрачных окон под Win9x, но они сильно притормаживают. Я знаю что под D6 можно поставить AlphaBlend, но это только у своей формы, а если у чужого окна?
Но объясни, пожалуйста, как "прицеплять с помощью динамической линковки".


 
Olgerd   (2001-09-09 17:26) [10]

Конечно, я видел более-менее успешные реализации полупрозрачных окон под Win9x, но они сильно притормаживают. Я знаю что под D6 можно поставить AlphaBlend, но это только у своей формы, а если у чужого окна?
Но объясни, пожалуйста, как "прицеплять с помощью динамической линковки".


 
Lamo   (2001-09-10 06:23) [11]

Не знаю, как насчёт полупрозрачности, но вот следующая программка делает окошко прозрачным...

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
procedure RebuildWindowRgn;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиенской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn:= CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
for I:= 0 to ControlCount -1 do
with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +
Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
// устанавливаем новый регион окна
SetWindowRgn(Handle, FullRgn, True);
end;
end.


 
savva   (2001-09-10 12:29) [12]

>Lamo
На первый взгляд форма только прозрачная, а вот если кликнуть мышОй в область ограниченную фреймом, что произойдет? это не прозрачность, это ДЫРА (если конечно так можно сказать), хорошо вырезанная.


 
Lamo   (2001-09-10 15:38) [13]

Нуу..впринципе да.., но если ему такая прозрачность не подходит :) извиняете.., конечно хорошо было бы что-то типа AlphaBlend, но как это сделать под Винды-9x я не знаю...


 
savva   (2001-09-11 10:43) [14]

в принципе наверное можно, хотя способ будет не ахти какой.
я это делал вот как: на форму кидаешь image1, делаешь ей allign = alClient и transparent = true

для формы
procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
Brush.Style:=bsClear;
end;
Все это хорошо, но форма не перерисовывается при перемещении/изменении размера. Добавив обработчик события WM_EXITSIZEMOVE можно добиться перерисовки. Я просто прятал а потом показывал форму.

procedure WMEXITSIZEMOVE(var Message: TMessage); message WM_EXITSIZEMOVE;

....

procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
ShowWindow(form1.Handle,SW_HIDE);
ShowWindow(form1.Handle,SW_SHOW);
end;

Убого, но работает :)) выходит именно визуально ПРОЗРАЧНАЯ форма. Полупрозрачная форма долго перерисовывается - видел примерчик...



 
Mashinist   (2001-09-28 21:43) [15]

Оно конечно, хорошо, даже если вырезать часть формы.
Но под остальными остается серое поле.
Допустим, под Image.
Как тут быть ?


 
dmur   (2001-09-30 21:07) [16]

посмотри здесь:
http://www.delphikingdom.com/treasury/samples.htm#link9


 
savva   (2001-10-02 09:26) [17]

>Mashinist
а разве Brush.Style:=bsClear; не помогает??



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

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

Наверх




Память: 0.49 MB
Время: 0.004 c
4-52690
NetBreaker666
2001-11-15 03:07
2002.01.17
Опять все теже HOOk и


1-52592
NewComer
2001-12-29 14:07
2002.01.17
Как проверить...


1-52604
shnitken
2001-12-28 03:50
2002.01.17
MediaPlayer


6-52631
kostya
2001-10-22 13:31
2002.01.17
Поиск MSSQL в локальной сети.


1-52610
VicV
2001-12-28 18:31
2002.01.17
Работа с архивами zip





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