我用SetWindowRgn()给窗口设置了个不规则的形状,但是问题出现了,当我拖动窗口的时候,有个黑色放形的边框在动,我现在想给它去掉,请给想个办法.谢谢.

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      Rgn1: HRgn;
    begin
      Rgn1 := CreateEllipticRgn(0, 20, 170, 170);
      SetWindowRgn(Handle, Rgn1, true);
    end;我试了没有你说的那种情况啊!
      

  2.   

    这和系统设置有关,建议保留,给用户多一个选择。
    在系统的显示属性对话框中有一项叫:拖动时显示窗口内容,选中就没框了,如果一定不能有框,用这个移动办法(摘自超级猛料)
    不规则窗体移动时如何去掉虚框    
        
    0:去掉窗体原来的Caption栏1:自己做一个模拟的Caption栏。2:拦截鼠标在这个模拟的区域的Mouse消息,鼠标进入的时候,改变消息所指范围,变成NCHITEST,移出时恢复3:拦截WM_MOUSEDOWN消息,设置起始点。4:拦截WM_MOUSEMOVE消息,代码如下:if ssLeft in Shift thenbeginForm1.Left := Form1.Left - (MPos.X-X);Form1.Top := Form1.Top - (MPos.Y-Y);end;全部测试代码:varMPos:TPoint; {Position of the Form before drag}procedure TForm1.Button1Click(Sender: TObject);varr:HRGN;beginr:=CreateEllipticRgn(0,0,300,300);SetWindowRgn(handle,r,true);DeleteObject(r);end;procedure TForm1.Button2Click(Sender: TObject);beginclose;end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginMPos.X := X;MPos.Y := Y;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);beginif ssLeft in Shift thenbeginForm1.Left := Form1.Left - (MPos.X-X);Form1.Top := Form1.Top - (MPos.Y-Y);end;end;***************************************unit epMoveForm;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;typeTepMoveForm = class(TGraphicControl)privateFDown: Boolean;FOldX, FOldY: Integer;protectedprocedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override;procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;procedure MouseUp(Button: TMouseButton;Shift: TShiftState; X, Y: Integer); override;publicprocedure Paint; override;constructor Create(AOwner: TComponent); override;publishedproperty Align;end;procedure Register;implementationconstructor TepMoveForm.Create(AOwner: TComponent);begininherited Create(AOwner);Width := 100;Height := 100;end;procedure TepMoveForm.Paint;begin// if csDesigning in ComponentState thenwith Canvas dobeginPen.Style := psDash;Brush.Style := bsClear;Rectangle(0, 0, Width, Height);endend;procedure TepMoveForm.MouseMove;beginif FDown thenwith TForm(Owner) doSetBounds(Left + X - FOldX, Top + Y - FOldY, Width, Height);end;procedure TepMoveForm.MouseUp;beginFDown := False;end;procedure TepMoveForm.MouseDown;beginif (Button = mbleft) and not FDown then FDown := True;FOldX := X;FOldy := Y;end;procedure Register;beginRegisterComponents('Win32', [TepMoveForm]);end;end.