Delphi

DelphiXE FireMonkey 如何画图

ぃ、小莉子 提交于 2020-05-07 14:29:59
相关资料: https://stackoverflow.com/questions/10291330/firemonkey-penmode-equivalent-drawline https://blog.csdn.net/shuaihj/article/details/8444676 http://www.delphitop.com/html/FMX/2646.html http://docwiki.embarcadero.com/CodeExamples/Rio/en/FMXTCanvasDrawFunctions_(Delphi) CSDN代码下载: https://download.csdn.net/download/zhujianqiangqq/12394005 代码实例: 1 { 2 相关资料: 3 http://www.delphitop.com/html/FMX/2646.html 4 http://docwiki.embarcadero.com/CodeExamples/Rio/en/FMXTCanvasDrawFunctions_(Delphi) 5 6 FMX 的 Canvas 在不同的系统上会分别使用: 7 WinVista、Win7: D2D (FMX.Canvas.D2D.pas) 8 WinXP: GDI+ (FMX.Canvas.GDIP.pas)

Delphi

早过忘川 提交于 2020-05-07 13:58:17
FTP信息保存和获取 我们在做FTP相关开发时,为方便后续FTP切换,一般先把FTP账户信息保存到数据库表中,在使用时再通过Query获取出来。 一般通过如下方式获取到FTP相关信息,代码如下: 1 // 获取FTP信息 2 with qTmp do 3 begin 4 Close; 5 SQL.Clear; 6 SQL.Text := ' SELECT * FROM SYS_FTP_INFO WHERE NAME = ''Test'' ' ; 7 Open; 8 SYS_FTPUSER := FieldByName( ' USERNAME ' ).AsString; 9 SYS_FTPPASSWORD := FieldByName( ' PASSWORD ' ).AsString; 10 SYS_FTPSERVER := FieldByName( ' IP ' ).AsString; 11 SYS_FTPDIR := FieldByName( ' PATH ' ).AsString; 12 end ; idFTP文件下载 下载这里主要用到Get函数,三个参数: Param1:文件名称(包含后缀名) Param2:想要保存的路径(最终文件保存位置的全路径) Param3:Ture/False 是否断点续传 一般操作代码如下: 1 try 2 MsgDsp( ' 开始获取文件,请稍等

DELPHI高性能大容量SOCKET并发(八):断点续传(上传也可以续传)

一个人想着一个人 提交于 2020-05-07 10:59:56
断点续传 断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1;下载开始的时候,由客户端上报本地已经下载大小,服务器根据位置信息下发数据,因此上传下载协议都需要带Size大小,例如我们协议格式。 上传开始: 客户端->服务器 { [Request] Command=Upload Dir=Dir #目录,全路径名 FileName=FileName #文件名(不包括路径) } 服务器->客户端 { [Response] Command=Upload Code= Error Code #错误码 Message=Message #如果出错,返回错误描述信息 FileSize=FileSize #已上传文件的大小,用于续传 } 下载开始: 客户端->服务器 { [Request] Command=Download Dir=Dir #目录,全路径名 FileName=FileName #文件名(不包括路径) FileSize=FileSize #客户端本地文件大小,用于断点续传 PacketSize=PacketSize #下发数据包大小,单位为KB,用于速度测试 } 服务器->客户端 { [Response] Command= Download Code= Error Code #错误码 Message=Message

Delphi IDFtp用法,包含断点续传

大憨熊 提交于 2020-05-07 09:04:09
1 连接远程服务器 procedure Connect(AAutoLogin: boolean; const ATimeout: Integer); 2 改变目录 procedure ChangeDir(const ADirName: string); 3 下载 procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload; procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload; 4 上传 procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: boolean); overload; procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload; 5 删除 procedure Delete(const AFilename: string);

Delphi的TDataSetProvider、TDataSet、TAdoQuery、TDataSource、TDataModule控件的组合使用

◇◆丶佛笑我妖孽 提交于 2020-05-05 11:39:37
Delphi的TDataSetProvider、TDataSet、TAdoQuery、TDataSource控件的组合使用 照旧先上控件布局图: 1、File-New-VCL Forms Application,找到控件挨个填上去 用到的控件:Button、TDataSetProvider、TDataSet、TAdoQuery、TDataSource、DbgridEh 设置控件之间的指向关系: 1>ds1的DataSet指向ds2 2>dtsprvdr1的DataSet指向qry1 3>ds2的ProviderName指向dtsprvdr1 4>DbGrideh的DataSource指向ds1 2、File-New-Other-DataModule,确定 添加一个Adoconnection控件,用于连连接数据库 为了方便,直接双击控件,配置连接串 保存文件 3、此时回到主窗体的pas文件,引用上边新建的DataModual的单元, 在主窗体找到qry1,设置他的DataSource,指向DataModule5.ADOConnection1 4、给qry1的SQL属性增加所要查询的语句,例如:select * from testTable 5、主窗体pas文件增加函数: 1 procedure GetConnected(Conn: TADOConnection); 2 begin 3

Delphi (Library Path Browsing Path)

本小妞迷上赌 提交于 2020-05-05 04:18:01
首先要明白的一个概念是dcu文件 *.dcu是*.pas的编译后单元文件(Delphi Compiled Unit), 编译器把它和库文件连接起来就构成了可执行文件*.exe 或*.dll等,相当于C中的obj文件。 你所说的AgentObjects_TLB.dcu文件不一定在你的机器存在过它很可能是被编进 *.bpl库文件中的,不是单独存在的,IDE环境下出错后有时不报*.bpl,而是报它的组成部分。 编译时,源文件没有修改过的,就不会再次编译,直接调用dcu文件。所以有些第三方组件为了保护代码,就不提供pas文件,值提供dcu,也可以运行。 但是如果和别的单元有依赖性,就需要重新编译了,需要pas文件。 所以Library Path设置的就是编译器查找源文件或dcu编译文件的路径 如果没有dcu,则编译pas文件生成之;如果有dcu,又不是build则直接拿dcu来连接 (在注册表中Library Path的名称为search path; 而Project-option里面也有一个search path,很搞是吧, 那个search path是项目级别的搜索路径,而前一个是系统级别的) 那么browsing path是设置什么的呢? 它是设置代码浏览器查找源代码的路径, 不设这个路径不影响运行。 但它还有另外一个目的: http://www.delphibbs.com

从.h头文件到.pas单元

故事扮演 提交于 2020-05-05 00:50:12
由于长期使用 Delphi 开发,又与硬件打交道比较多,不可避免地要与 标准C动态库 进行对接,而往往厂家提供的SDK又偏偏没有 Delphi 的,无奈也就只好自己改写 .h 头文件了。写得多了,也就有了一点点心得,在这里就分享出来,也好与大家互相交流、学习。 知识点 标准C动态库使用的都是单字节字符。 Delphi 2007 以前默认使用的是单字节字符,即 Ansi 编码,也就是说 Char = AnsiChar 、 PChar = PAnsiChar 、 string = AnsiString ; Delphi 2009 以后使用的是双字节字符,即 Unicode 编码,也就是说 Char = WideChar 、 PChar = PWideChar 、 string = WideString 。为了保证改写后的 .pas 文件适用于Dephi的各个版本,应避免使用 Char 、 PChar 、 string 这种类型不明确的数据类型(通常情况下使用 AnsiChar 、 PAnsiChar 、 AnsiString 即可,但特殊情况要特殊处理)。 @string[1] 才是字符串首地址。 Delphi中可以把 AnsiString 当作缓冲区来使用,某些情况下比 array of Byte 要方便得多。 对字符串变量第一次使用 SetLengh 时会重新分配内存,第二次使用时

事件驱动模型实例详解(Java篇)

喜你入骨 提交于 2020-05-04 04:35:19
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如 .net 和 java ),而可视化编程的学习又可以非常方便开发出各类人机对话界面 (HMI) 。可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境 (IDE) 方便的在现成的界面窗口上拖放各类组件 (Component) ,这类组件包括我们常见的按钮 (Button) ,单选按钮 (Radio Button) ,复选框等( Checkbox )。这样的拖放式开发方式不但方便,而且窗口会立竿见影的显示在我们的面前,这对于一个软件初学者而言或许是一件非常有成就感的事情。 但是很多软件学习者在学习可视化开发的过程中,只是非常表面的来理解可视化编程,他们可能认为能够使用拖放方式完成一个界面就非常值得称道,但是很少有人会认真的去理解编程语言对于可视化编程组件的支持和整合 ,因此下文将会结合我的教学经验来讲解可视化编程过程中最为关键的“事件驱动模型”。 1 . 什么是事件驱动模型 ? 在讲解事件驱动模型之前,我们现在看看事件驱动模型的三大要素: n 事件源:能够接收外部事件的源体。 n 侦听器:能够接收事件源通知的对象。 n 事件处理程序:用于处理事件的对象。

SetWindowLong函数GetWindowLong函数

柔情痞子 提交于 2020-05-04 02:33:28
这两个函数具体应用如下:SetWindowLong函数GetWindowLong函数 Delphi窗口化游戏 var Thwnd:HWND;//声明变量 句柄变量 devmodel1:DEVMODE;//屏幕分辨率变量 style,exstyle:longint;//窗口属性变量 begin //得到游戏句柄 Thwnd:findwindow('CLIENT',nil); //设置分辨率 if EnumDisplaySettings(0,0,devmode1)then   begin     devmode1.dmPelsWidth:1024; devmode1.dmPelsHeight:=768; devmode1.dmBitsPerPel:=32; devmode1.dmDisplayFrequency:=75;     ChangeDisplaySetting(devmode1,0); end; //得到窗口原来的属性 style:=GetWindowLong(Thwnd,GWL_STYLE); //定义新属性 style:=WS_OVERLAPPEDWINDOW or WS_VISIBLE; //更改窗口属性 SetWindowLong(Thwnd,GWL_STYLE,style); //得到窗口扩展属性 exstyle:=GetWindowLong(Thwnd,GWL

Delphi IOCP UDP完成端口服务端——网络高速传输数据文件系统架构

試著忘記壹切 提交于 2020-05-03 22:00:31
嗯,是的,标题有些那个,不过浏览器搜索出来的几乎全部是C++的,Delphi这块完全是空缺的。 不知道各位Delphi的爱好者们有没有关注腾讯这段时间的各种信息推广。涉及到各方面的行业。 不过我最佩服的是他们的实时各种网络行为,不得不说,他们的服务器确实牛逼,各种实时网络视频各种交互都是相当流畅的。 除了 TCPIOCP 完成端口成型之外,在这个基础上,继续调试出了 UDPIOCP 完成端口系统,弄这个玩意就是想做一个能够在目前这种复杂无比的网络中,能够完成游戏资源实时更新的一个高并发服务系统。 现在的网络简直复杂得像一堆牛屎那样,你看看你桌面上的任何一个程序,有几个是不联网的?几乎没有吧!现在的玩家有几个电脑上面是不同时打开几个程序的,QQ,各种音乐播放器,各种视频播放器等等,这些都是抢夺带宽最厉害的玩意。所以传统的TCP协议的网络传输系统已经很难符合目前这种复杂的环境了。 UDPIOCP完成端口 这个玩意,构建起来不容易,网上能用的代码,一句话:没有!不相信,自己搜索搜索。 这个玩意比TCP完成端口还复杂。 两个控件,一个UDP服务端,一个UDP客户端,至于客户端是自己新写的,内含两种设置,一种是采用常规TCP那样的链接模式,一种是非链接模式,可以设置阻塞或者异步传输。 上面客户端采用定时器,值设置为10,这种速度发送消息比较快了,上面是两者的CPU占用情况。在完全没有优化之下