![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Полупрозрачная TPanel [D5, Win95/98, WinME]
TankMan © (2004-02-05 18:44:00)Ни кто случайно не знает, как сделать TPanel полупрозрачной?... очень нада... хочу сделать полупрозрачный скроллинг... скроллинг то сделал из TPanel и 3х SpeedButton а вот прозрачными сделать не могу :( самое главное чтобы в 9х работало...
TankMan (2004-02-06 18:49:00) [21]Ага... только по этому примеру полупрозрачной TPanel не зделаешь... полностью прозрачный компонент я и сам могу сделать :)
RDen (2004-02-06 09:26:00) [22]вот пример прозрачной формы - может поможет? :)
unit Prozr;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
// это просто кнопка на форме - для демонстрации
protected
procedure RebuildWindowRgn;
procedure Resize; override;
public
constructor Create(AOwner: TComponent); override;
end;
var
Form1 : TForm1;
implementation
// ресурс этой формы
{$R *.DFM}
{ Прозрачная форма }
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
// убираем сколлбары, чтобы не мешались
// при изменении размеров формы
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
// строим новый регион
RebuildWindowRgn;
end;
procedure TForm1.Resize;
begin
inherited;
// строим новый регион
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.
end.
UNIVERSAL (2004-02-06 09:16:00) [23]По моему есть функция для транспонирования двух рисунков TransparentBlt кажется. Может это поможет. Есть ещё одна установка атрибутов окна, но она работает на Win2000 и старше.
TankMan (2004-02-05 23:29:00) [24]>>DVM
Аа... пример хоть какой нибудь есть?
DVM (2004-02-05 20:23:00) [25]Сделать можно без особых проблем (чего не скажешь о обычном, не дочернем окне).
Идея примерно такова: берется кусок изображения с родительского окна (GetDC) и копируется (BitBlt) в дочернее, далее дочернее окно отрисовывает себя используя функцию смешения светов (AlphaBlend).
}{enon (2004-02-05 19:47:00) [26]Ишь чего захотел :) В 9x даже форму прозрачной еще попробуй сделать. Кстати, если получится (думаю эту проблему как-то все же решают), то повтори те же действия по отношению к этим самым кнопкам - они ведь тоже окна.