zoukankan      html  css  js  c++  java
  • Delphi透明 圆角 窗体 【转】

    果然发现记性这东西,不怎么靠谱额。。记录下吧

    unit Unit1;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
        procedure DoVisible;
        procedure DoInvisible;
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      FullRgn, ClientRgn, CtlRgn : THandle;
    
    implementation
    
    {$R *.DFM}
    
    procedure TForm1.DoInvisible;
    var
      AControl : TControl;
      A, Margin, X, Y, CtlX, CtlY : Integer;
    begin
      Margin := ( Width - ClientWidth ) div 2;
      //First, get form region
      FullRgn := CreateRectRgn(0, 0, Width, Height);
      //Find client area region
      X := Margin;
      Y := Height - ClientHeight - Margin;
      ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
      //'Mask' out all but non-client areas
      CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );
    
      //Now, walk through all the controls on the form and 'OR' them
      // into the existing Full region.
      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;
      //When the region is all ready, put it into effect:
      SetWindowRgn(Handle, FullRgn, TRUE);
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      //Clean up the regions we created
      DeleteObject(ClientRgn);
      DeleteObject(FullRgn);
      DeleteObject(CtlRgn);
    end;
    
    procedure TForm1.DoVisible;
    begin
      //To restore complete visibility:
      FullRgn := CreateRectRgn(0, 0, Width, Height);
      CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
      SetWindowRgn(Handle, FullRgn, TRUE);
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //We start out as a transparent form....
      DoInvisible;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      //This button just toggles between transparent and not trans..
      if Button1.Caption = 'Show Form' then begin
        DoVisible;
        Button1.Caption := 'Hide Form';
      end
      else begin
        DoInvisible;
        Button1.Caption := 'Show Form';
      end;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Application.Terminate;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Reg1,Reg2:  THandle;
    begin
      Reg1 := CreateRoundRectRgn(0, 0, self.Width, self.Width, 16, 16);  //在窗体指定的位置上创建一个圆角句型区域
      Reg2 := CreateRectRgn(20, 20, self.Width, self.Width);     //在窗体指定的位置上创建一个矩形区域
      CombineRgn(Reg1, Reg1, Reg2, RGN_OR);   //将Reg1,Reg2两个区域进行合并,Reg1得到Reg1,reg2的集合并集!
      SetwindowRgn(handle, Reg1, True);    //将以上创建的区域设定成窗体的区域
    end;
    
    procedure TForm1.FormResize(Sender: TObject);
    begin
    
      if Button1.Caption = 'Show Form' then
        DoInvisible
      else
        DoVisible;
    end;
    end.
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1160 FatMouse's Speed
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1003 Max Sum
    HDU 1297 Children’s Queue
    UVA1584环状序列 Circular Sequence
    UVA442 矩阵链乘 Matrix Chain Multiplication
    DjangoModels修改后出现You are trying to add a non-nullable field 'download' to book without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:
    opencv做的简单播放器
    c++文件流输入输出
  • 原文地址:https://www.cnblogs.com/rayz/p/2913667.html
Copyright © 2011-2022 走看看