View Full Version : شیشه ای کردن دکمه
sajadvahedi
سه شنبه 09 مرداد 1386, 22:27 عصر
سلام و خسته نباشید....
من برنامه ای نوشتم که فرم برنام رو شیشه ای می کنه یعنی پشت فرمم دیده می شه
ولی مخوام اون دکمه هایی که روی فرمم گذاشتم شیشه نشه و به همون حالت معمولی باشه
چه کار کنم
متشکرم
Valadi
سه شنبه 09 مرداد 1386, 23:10 عصر
بیشتر توضیح بده سوال نا مفهومه
sajadvahedi
چهارشنبه 10 مرداد 1386, 21:23 عصر
چی شده چرا کسی جوابم رو نمیده....
لازمش دارم
متشکرم
Batman
پنج شنبه 11 مرداد 1386, 12:16 عصر
فکر کنم من این کد رو قبلا دیدم و توی سیستم داشته باشم
جستجو میکنم اگه پیدا کردم تو همین قسمت برات میذارم
seaman202008
جمعه 12 مرداد 1386, 06:53 صبح
با سلام
احتمالا شما از دلفی 7 و کامپوننت xp استفاده کردید . باید آنرا از فرم و از قسمت uses برنامه حذف کنید
sajadvahedi
جمعه 12 مرداد 1386, 08:30 صبح
نه از کامپوننت xp استفاده نکردم
lord_viper
جمعه 12 مرداد 1386, 08:42 صبح
procedure TranparentForm(Form:Tform;HaveCaption,HaveMenu:Boo lean);
var
frmRegion,
tempRegion:HRGN;
i:Integer;
Arect:Trect;
begin
frmRegion:=0;
For i:=0 to Form.controlcount -1 do
begin
Arect:=Form.controls[i].BoundsRect;
Offsetrect(Arect,Form.ClientOrigin.x-Form.left,Form.ClientOrigin.y-Form.top);
tempRegion:=CreateRectRgnIndirect(Arect);
if frmRegion=0 then
begin
frmRegion:=tempRegion;
end
else
Begin
CombineRgn(frmRegion,frmRegion,TempRegion,RGN_OR);
DeleteObject(tempRegion);
end;
end;
tempRegion:=0;
If HaveCaption and HaveMenu then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAME)+
GetSystemMetrics(SM_CYMENU)*ORD(Form.Menu<>nil));
If (HaveCaption=false) and HaveMenu then
tempRegion:= CreateRectRgn(0,GetSystemMetrics(SM_CYCAPTION)+Get SystemMetrics(SM_CYSIZEFRAmE),Form.Width,
(GetSystemMetrics(SM_CYSIZEFRAmE)+GetSystemMetrics (SM_CYMENU)*ORD(Form.Menu<>nil))+GetSystemMetrics(SM_CYCAPTION));
If HaveCaption and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAmE));
If (HaveCaption=false) and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,0);
CombineRgn(frmregion,frmregion,tempregion,rgn_or);
Deleteobject(tempregion);
setwindowrgn(Form.handle,frmregion,true);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TranparentForm(form1,true,false);
end;
babak869
جمعه 12 مرداد 1386, 10:36 صبح
دوست عزیز cayberfox
لطفا در نوشتن کدهای برنامه نویسی از تگ [ code ] استفاده نمایید
موفق باشید
Arman_1367
جمعه 12 مرداد 1386, 17:37 عصر
سلام و خسته نباشید....
من برنامه ای نوشتم که فرم برنام رو شیشه ای می کنه یعنی پشت فرمم دیده می شه
ولی مخوام اون دکمه هایی که روی فرمم گذاشتم شیشه نشه و به همون حالت معمولی باشه
چه کار کنم
متشکرم
راه حل اولی که به نظر من رسید این بود:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, jpeg, ExtCtrls, Buttons, XPMan;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure CreateParams(var Params: TCreateParams); override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=WS_EX_TRANSPARENT;
end;
procedure TForm1.FormCreate(Sender: TObject);
var h:THandle;
begin
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNone;
end;
end.
راه حل دوم که به نظر بهرته استفاده از روش زیر هست البته اگر منظور شما از شیشه یعنی محو شدن 100 در صد باشه :
می توانی از خاصیت های :TransparentColorValue و TransparentColor
یا حق...
delphi5
چهارشنبه 12 دی 1386, 11:41 صبح
procedure TranparentForm(Form:Tform;HaveCaption,HaveMenu:Boo lean);
var
frmRegion,
tempRegion:HRGN;
i:Integer;
Arect:Trect;
begin
frmRegion:=0;
For i:=0 to Form.controlcount -1 do
begin
Arect:=Form.controls[i].BoundsRect;
Offsetrect(Arect,Form.ClientOrigin.x-Form.left,Form.ClientOrigin.y-Form.top);
tempRegion:=CreateRectRgnIndirect(Arect);
if frmRegion=0 then
begin
frmRegion:=tempRegion;
end
else
Begin
CombineRgn(frmRegion,frmRegion,TempRegion,RGN_OR);
DeleteObject(tempRegion);
end;
end;
tempRegion:=0;
If HaveCaption and HaveMenu then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAME)+
GetSystemMetrics(SM_CYMENU)*ORD(Form.Menu<>nil));
If (HaveCaption=false) and HaveMenu then
tempRegion:= CreateRectRgn(0,GetSystemMetrics(SM_CYCAPTION)+Get SystemMetrics(SM_CYSIZEFRAmE),Form.Width,
(GetSystemMetrics(SM_CYSIZEFRAmE)+GetSystemMetrics (SM_CYMENU)*ORD(Form.Menu<>nil))+GetSystemMetrics(SM_CYCAPTION));
If HaveCaption and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAmE));
If (HaveCaption=false) and (HaveMenu=false) then
tempRegion:= CreateRectRgn(0,0,Form.Width,0);
CombineRgn(frmregion,frmregion,tempregion,rgn_or);
Deleteobject(tempregion);
setwindowrgn(Form.handle,frmregion,true);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TranparentForm(form1,true,false);
end;
این کد 100 درصد این کار رو انجام میده
میشه همین کد رو طوری تغییر داد که پنجره 80 درصد محو بشه ؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.