Форум: "Система";
Текущий архив: 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