Delphi 根据图片或者文字制作特殊的窗体

 

一、根据图片制作特殊的窗体

1、在FormCreate中计算窗体的不规则区域

procedure TForm1.FormCreate(Sender: TObject);
var
  ThreadRgn, TmpRgn: HRgn;
  X, Y,Height, Width: Integer;
begin
  BitMapb := TBitMap.Create;
  BitMapb.LoadFromFile(ExtractFileDir(Application.ExeName) + '\Pic\5.bmp');

  //设置窗体的大小
  Self.Height := BitMapb.Height;
  self.Width := BitMapb.Width;

  Height := BitMapb.Height;
  Width := BitMapb.Width;

   //创建矩形区域
  ThreadRgn := CreateRectRgn(0, 0, Width, Height);
  for Y := 0 to Height do
    for X := 0 to Width do
    begin
      //R := GetRValue(BitMapb.Canvas.Pixels[X, Y]);  R为整型
      if  BitMapb.Canvas.Pixels[X, Y] = rgb(0,0,255) then
      begin
        TmpRgn := CreateRectRgn(x, y, x + 1, y + 1);
        //区域融合,取ThreadRgn与TmpRgn连个区域OR之外的部分赋给ThreadRgn
        CombineRgn(ThreadRgn, ThreadRgn, TmpRgn, RGN_XOR);
        DeleteObject(TmpRgn);
      end;
    end;
  SetWindowRgn(handle, ThreadRgn, False);//设置窗体区域的有效区域
end;

 

2、//重新绘制窗体

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Draw(0, 0, BitMapb);  //  绘图
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BitMapb.Free;
end;

3、//设置窗体的移动
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=Mbleft then
  begin
    ReleaseCapture;
    Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);//消息处理
  end;
end;

 

4,其余的可以参考:

Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)

 

 

 

二、根据文字制作特殊的窗体

procedure TTextForm.FormCreate(Sender: TObject);
var
  Rgn :HRGN;
begin
  TextForm.Color := ClBlue;
  //启动一个路径分支,之后执行的GDI绘图命令会自动成为路径的一部分
  BeginPath(Canvas.Handle);

  SetBKMode(Canvas.Handle,TRANSPARENT);
  canvas.Font.Color := ClRed;   //无效,因为是透明的。
  Canvas.Font.Name := '宋体';
  Canvas.Font.Size := 80;
  Canvas.TextOut(0,0,'字体窗体');

  //结束定义路径。所有绘制操作将在指定的设备场景的路径中生效
  EndPath(Canvas.Handle);

  //将当前选定的路径转换到指定的区域中
  Rgn := PathToRegion(Canvas.Handle);
  SetWindowRgn(Handle,Rgn,true);
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值