最近为了要兼容XP系统(守旧的市场),又需要做出产品的特效,不得不从头学习一下这门 “聪明的语言” 。

开发环境: win10 Delphi 10.2 Version 25.0.26309.314

产品环境:最低xp系统

使用 http://www.bilsen.com/gdiplus/index.shtml  网站下载中的 Gdi+ 1.0

1. 项目dpr文件中引用即可:

uses GdiPlus in '..\PublicLib\GdiPlus\GdiPlus.pas', (本机电脑的存放目录)

2. 新建Vcl 窗体

3. 来一波代码(绘制不规则窗体,当然是在窗体创建的时候调用)

TFormPrimary 自建窗体 IrregularInterface 自定义函数(ImageFile 为不规则图片的路径)
 procedure TFormPrimary.IrregularInterface(ImageFile: string);
var
Bitmap: IGPBitMap;
BlendFunc: TBlendFunction;
Sz : TSize;
Dc : HDC;
Bmp,BmpOld : HBITMAP;
PtDst, PtSrc : TPoint;
begin
Bitmap := TGPBitmap.Create(ImageFile); Sz.cx := Bitmap.Width;
Sz.cy := Bitmap.Height; PtDst := TPoint.Create(left,top);
PtSrc := TPoint.Create(, ); BlendFunc.BlendOp := AC_SRC_OVER;
BlendFunc.BlendFlags := ;
BlendFunc.AlphaFormat := AC_SRC_ALPHA;
BlendFunc.SourceConstantAlpha := ; Bmp := Bitmap.GetHBitmap();
Dc:= CreateCompatibleDC(Canvas.Handle);
BmpOld := SelectObject(Dc,Bmp); SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
UpdateLayeredWindow(Handle, Canvas.Handle , @PtDst, @Sz, Dc, @PtSrc,,@BlendFunc,ULW_ALPHA); SelectObject(Dc,BmpOld);
DeleteObject(Bmp);
DeleteDC(Dc);
end;

4.再来一波 (窗体随着鼠标拖动)

     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
OldPos:TPoint;
Move:Boolean;

5.最后一波 (窗体拖动的实现)

 procedure TFormPrimary.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move := True;
GetCursorPos(OldPos);
end; procedure TFormPrimary.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
NewPos: TPoint;
begin
if not Move then Exit;
GetCursorPos(NewPos);
Left := Left + (NewPos.X - OldPos.X);
Top := Top + (NewPos.Y - OldPos.Y);
GetCursorPos(OldPos);
end; procedure TFormPrimary.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move := False;
end;

6.最后的是vcl窗体的Style

7.效果 (箭头指向处)

Ps:Delphi初学,敬请见谅(边学边做,大概花了5天时间)

Delphi 实现不规则窗体的更多相关文章

  1. delphi 不规则窗体与桌面宠物

    二.支持区域操作的编程接口在Windows的API函数中有一组用于区域操作的函数,可以用来生成区域.合并区域.获取区域数据.根据数据生成区域.把区域和窗体联系等,其中常用的几个函数有:生成矩形区域的C ...

  2. WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案

    首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如  WPF中不规则窗体与WebBrowser控件的兼 ...

  3. QT实现不规则窗体

    看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认 ...

  4. WPF界面设计技巧(1)—不规则窗体图文指南

    原文:WPF界面设计技巧(1)-不规则窗体图文指南 初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而 ...

  5. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

  6. [小结][N种方法]实现WPF不规则窗体

    原文:[小结][N种方法]实现WPF不规则窗体 WPF实现不规则窗体,方法很多很多多.... 本文总结DebugLZQ认为简洁高效的几种方法 实现WPF不规则窗体的几种常用的方法如下: 1.使用Ble ...

  7. Delphi中的窗体创建与销毁

    Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦 ...

  8. WPF设计の不规则窗体

    我们在工作中,经常会需要画一些不规则的窗体,现在总结如下. 一.利用VisualBrush实现.这依赖于VisualBrush的特性,任何控件可以作为画刷,而画刷又可以作为背景. 此种方法可以用于实现 ...

  9. Qt 不规则窗体 – 鼠标点击穿透(Linux也可以,有对x11的配置的方法)

    之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:<Qt 不规则窗体 – 无边框半透明> 其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿 ...

随机推荐

  1. oracle 实现主键自增

    -- 创建表 drop table test; create table test(id number(10), name varchar2(10)); -- 创建对列 drop sequence s ...

  2. windows Ctrl + Alt + 方向键 取消屏幕反转

    1.在桌面右击 2.再次右击桌面 3.单击选项和支持 4.点击禁用和应用

  3. Ionic step by step (1)

    刚接触 ionic,一步一步学习,有错误的,望大家指出. 公式 Ionic = Cordova + Angular2 + ionic CSS Cordova: 提供了使用 JavaScript 调用 ...

  4. spring定时,cronExpression表达式解释

    附:cronExpression表达式解释: 0 0 12 * * ?---------------在每天中午12:00触发 0 15 10 ? * *---------------每天上午10:15 ...

  5. TITLE: BizTalk Server 2013 Administration Console

    TITLE: BizTalk Server 2013 Administration Console------------------------------ Could not store tran ...

  6. 应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户

    这是安装biztalk server 2013出现的问题,很多天了没解决,下边这个解决办法也搜到过类似的,但上次实验时出现设置组件权限时发现都是按钮都是灰的,无法操作. 这次设置好了.谢谢ibg. 文 ...

  7. saltstack-把执行结果存储到mysql服务内

    saltstack把执行的结果保存到mysql中,以便进行命令安全审计 mysql负责存储数据,mysql-python负责收集数据 master需要安装mysql和MySQL-python,mini ...

  8. 遇见C++ Lambda

    转自:https://www.cnblogs.com/allenlooplee/archive/2012/07/03/2574119.html 遇见C++ Lambda Written by Alle ...

  9. setnx redis

    使用锁 1)setnx(lockkey, 当前时间+过期超时时间) ,如果返回1,则获取锁成功:如果返回0则没有获取到锁,转向2.2.)get(lockkey)获取值oldExpireTime ,并将 ...

  10. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...