PDA

View Full Version : ایجاد فرم شفاف



Gladiator
پنج شنبه 08 آبان 1382, 23:39 عصر
با سلام

لطفا توضیح بدید که به چه شکل میتونم فرمی رو به صورت شفاف درست کنم .

متشکرم .

Mahdiseif
پنج شنبه 08 آبان 1382, 23:53 عصر
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure dovisible;
procedure doinvisible;
end;

var
Form1: TForm1;
FullRgn,ClientRgn,CtlRgn:HWND;

implementation

{$R *.DFM}

procedure TForm1.DoInvisible;
var
AControl : TControl;
A, Margin, X, Y, CtlX, CtlY : Integer;
begin
Margin := ( Width - ClientWidth ) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );
for A := 0 to ControlCount - 1 do
begin
AControl := Controls[A];
if ( AControl is TWinControl ) or ( AControl is TGraphicControl )
then with AControl do
begin
if Visible then
begin
CtlX := X + Left;
CtlY := Y + Top;
CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height );
CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR );
end;
end;
end;
SetWindowRgn(Handle, FullRgn, TRUE);
end;

procedure TForm1.DoVisible;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, TRUE);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoVisible;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DoInvisible;
end;

end.

به نقل از سایت جناب آقای یعقوبی

در ضمن کامپوننتهایی وجود دارد که با کمی جستجو پیدا میکنی

Gladiator
پنج شنبه 08 آبان 1382, 23:57 عصر
با سلام

از لطف شما متشکرم دوست عزیز

موفق باشی .

vDelphi
جمعه 09 آبان 1382, 00:45 صبح
تو Delphi 7 خاصیتی به اسم Alpha وجود داره که بین 0-255 تغییر می کنه. که هر چه قدر مقدار ان کمتر باشه فرم شفاف تر میشه!

phantasm
جمعه 09 آبان 1382, 02:59 صبح
با سلام

در قسمت پروپرتی فرم دوتا خصوصیت AlphaBlendValue وAlphaBlend هست که میتونی AlphaBlend رو برابر true کنی و AlphaBlendValue رو یه عدد بین 0-255 قرار بدی.

Gladiator
جمعه 09 آبان 1382, 09:41 صبح
آقایون . بسیار بسیار متشکرم .

Gladiator
جمعه 09 آبان 1382, 23:30 عصر
خیلی عالی بود . فقط حیف که توی ویندوزهای 9x کار نمیکنه .

SyntaxCheck
شنبه 10 آبان 1382, 19:11 عصر
میتونید بروش زیر در سطحی پایینتر فرمها رو شفاف کنید.هم فرم خودتون و هم فرمهای برنامه های دیگه رو که در حال اجرا هستن.روش آلفا بلندینگ در ویندوز 2000 به بعد قابل اجراست:



SetWindowLong(H, GWL_EXSTYLE, WS_EX_LAYERED);
SetLayeredWindowAttributes(H,0,150,LWA_ALPHA);

که H متغیر از جنس HWND هست که میتونید برای تغییر شفافیت فرم مورد نظر هندل اون رو بجاش بگذارید. مثلا Form1.Handle. در ضمن مقدار 150 در اینجا مقدار شفافیت فرم هست که از 0 تا 255 میتونه تغییر بکنه.
حالا اگر بخوایم فرم دیگه ای مثلا TaskBar رو در ویندوز تغییر شفافیت بدیم میتونیم هندل اون رو بجاش قرار بدیم:


h:= FindWindow('Shell_TrayWnd',Nil);


پیروز باشید