注册 登录
编程论坛 Delphi论坛

可生成一个透明窗体的程序,代码差不多是照搬的,请教各位大侠,问题出在哪里??

寻H不得 发布于 2010-10-12 22:22, 664 次点击
这是偶在教程里学习编写的一个程序,可生成一个透明窗体,代码差不多是照搬的,不知道问题出在哪里?请各位高手指点??
unit UnitONE;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure DoInvisible;
    procedure Dovisible;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Doinvisible;
var
 Acontrol:TControl;
 A,Margin,X,Y,Ctlx,Ctly:Integer;
{ FullRgn:=???;这里原本没有的,该如何处理啊,如果要定义,这是个什么类型的变量啊}
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);
  CombinRgn(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;
procedure TForm1.DOVisible;
   begin
   FullGgn:=CreateRecRgn(0,0,Width,Height);
   COmbineRgn(FUllRgn,FullRgn,FUllRgn,RGN_COPY);
   SetWindowRgn(Handle,FullRgn,TRUE);
   end;
 procedure TForm1.Button2Click(Sender: TObject);
begin
 Application.Terminate ;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 if Button1.Caption='Show' then
   DoInvisible
 else
   DoVisible;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Deleteobject(ClientRgn);
 Deleteobject(FullRgn);
 deleteobject(CtlRgn);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Caption:='Show' then begin
  Dovisible;
  Button1.Caption:='Hide';
  end
  else begin
  DoInvesible;
  Button1.Caption:='Show';
  end;
end;

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

end.


[ 本帖最后由 寻H不得 于 2010-10-13 16:08 编辑 ]
6 回复
#2
倾尽天下20092010-10-15 05:07
FullGgn是个全局变量,从下面可以看出来
#3
倾尽天下20092010-10-15 05:29
我对LZ表示相当无语,本人虽也是菜鸟,但一些编程的良好习惯还是有的,不懂可以问,但你一些基本的录入错误先自己要剔除来啊!拼写错误太多了!!!!!!!!!
#4
寻H不得2010-10-15 22:35
唉 录入错误?
但是录入错误在哪儿??
好像就运行到那儿就卡了 不知道怎么办了
#5
寻H不得2010-10-16 22:58
各位大侠 这个问题 能不能解决掉啊 就算是个全局变量 对我说 定义也是不会的 用过几种办法也过不了
#6
寻H不得2010-10-18 13:35
没有满意的回帖 也得结帖么 那没办法
#7
倾尽天下20092010-10-20 01:08
个人觉得新手不要用那些教材自学,我也看过的,比较复杂,建议用一些入门教材,可以用电驴搜一下“百例课堂”,可以搜到一般delphi的书,这本书比较适合咱们这样的新手,而且我弄到了几乎全部随书源码,我也在看,源码我慢慢传上来,先练练吧!!

[ 本帖最后由 倾尽天下2009 于 2010-10-20 01:17 编辑 ]
1