Delphi心得
文章平均质量分 53
victor_yang
这个作者很懒,什么都没留下…
展开
-
获取WebBrowser中的任一个Class或ID节点
我们知道,在Webbrowser代码中,如果有<div id="toolbar" style="position: fixed; top: 0px; left: 0px; width: 100%; z-index: 1993;"> </div>时我们可以使用WebBrowser1.OleObject.Document.getElementByID(‘toolbar’)访问到这个IHTMLElement网页元素随后就可以有WebBrowser1.OleObject.Docume原创 2022-05-16 16:10:38 · 914 阅读 · 0 评论 -
Delphi如何获取Excel中Range合并区域的值及相关操作
最近在做一个导入Excel的功能时,原本是要逐行读取数据的,多数都是独立的,我们获取单元格的值就很容易,这里就不重复了。但有时候上下几格的值相同时,同事就把他们合并了,虽然这是合理的,但程序读取时就麻烦了,我们人眼判断就很容易,一看到区域就找左上角的单元格的值,但程序怎样判断左上角的单元格在哪里?我们知道Excel几个Cell单元合并成Range后,值保存在左上方,也就是这个区域(1,1)单元格里,访问Range中其他Cell得到的都是空。那么问题来了,当我们程序打开Ex...原创 2021-08-19 08:52:49 · 816 阅读 · 0 评论 -
如何访问WebBrowser里的各种元素
访问网页中指定类型的元素比如网页有一段“<div class="c-font ">其他人还在搜</div>”,如果我要访问类型名称是“c-font”的元素,我会想到访问它的Class属性。引用MSHTML代码如下Var doc: IHtmlDocument2; i:integer;begin doc:=webbrowser1.Document as IHtmlDocument2; for i:= 0 to doc.all.length-1 do原创 2021-08-14 11:07:23 · 307 阅读 · 0 评论 -
ADO数据集多条件组合无法使用Filter最终解决方案
今天遇到一个问题,查询某部门的数据后,要对这些数据进行多关键字的过滤,当用户在关键字编辑框用空格分开多个关键字,按下回车时就要过滤,将包含所有关键字的记录过滤出来。比如一条记录有20个字段,关键字有3个,当20个字段中的某些字段必须包含这3个关键字才能符合要求,如果只包含1个或2个关键字就要被过滤。 按照经验我首先想到了ADO的Filter,在关键字编辑框的KeyDown事件里写代码,定义Filter字串,然后Filter,一切都那么熟练,但是问题来了,字串的模型是这样的:(字段1 lik...原创 2020-06-12 16:55:49 · 837 阅读 · 0 评论 -
如何用RzTreeView显示部门结构
我们知道,一个企业、单位分很多部门,部门下面还会分子部门,如果用树形表就能 清晰的显示出部门结构来,一目了然。下面我来介绍下如何使用RzTreeview显示部门结构。一、主要表结构DepID nvarchar(50) //内部唯一ID,通常是GUIDDepCode nvarchar(20) //部门编码DepName nvarchar(30) //部门名称二、代码procedure TForm1.ADOQueryTypeAfterOpen(DataSet: TDataSet...原创 2020-06-09 09:52:21 · 1045 阅读 · 0 评论 -
如何使带字母的数字串像Excel一样加流水号
我在做的一个项目里,要求对物料进行编码管理,物料是多级管理的,自然编码里也会有字母和数字,A3B2003之后肯定就是A3B2004了,人是很容易理解的,但程序语言就难说了。我以前只做过纯数字的,带字母的一下子还真找不到对应的函数,所以只有自己做了。 我们知道在Excel里,带字母的数字是可以自动加1的,比如A3B2001,A3B2002,A3B2003,这在Excel里的操作相信很多人都会,但如何在Delphi里实现呢? 从逻辑上分析,我觉得应该从最后一位开始算起,把后面几位是...原创 2020-06-05 15:35:24 · 1587 阅读 · 0 评论 -
如何用RxDBRichEdit显示图片
首先说下开发环境,Win10 , Embarcadero® Delphi 10.2 在用RxDBRichEdit之前,我是用OleContainer的,比如以下这段OleContainer1.CreateObject('Word.document',False);OleContainer1.DoVerb(ovPrimary);OleContainer能够在程序中完整的显示出Wo...原创 2020-04-07 09:56:48 · 403 阅读 · 0 评论 -
DBGridEh字段显示段落型文字后显示异常的解决方法
最后在给客户做系统时遇到了一个棘手的问题,开单时,每个产品都有“产品说明”这个字段,我自然会用DBGridEh表格,每行一个产品,不过我发现产品的说明很长,甚至是几段文字,这时DBGridEh的RowHeight为0就是自动的话还没有问题,但当时客户说行太窄了,要调高些,这时对应这栏文字就会出现几行文字,赶紧将这个字段的EndEllips设为True,WordWrap设为False,也不行了,这下...原创 2019-03-28 11:28:40 · 373 阅读 · 0 评论 -
如何将TImage里的图片另存为BMP、JPG、PNG格式的文件
之前我写了如何从数据库里读取图像数据并用Image控件显示,现在讲讲如何另存为图像文件。procedure TForm_ShowPic.N1Click(Sender: TObject);var vPng:TPNGObject; vJpg:TJPEGImage; vBmp:TBitmap; vTmp:string; FType:Integer; vStream:TSt...原创 2019-03-26 14:04:07 · 2871 阅读 · 0 评论 -
如何从小白做起
从我的经历总结一下,如何从小白做起定好自己的方向,比如网站,前端,后台,信息系统,数据库管理,app等,我当初就是选择了流行的信息系统开发 确定这个方向上常用的开发工具或语言,比如图像用的PS,开发语言的Java等,但不是说不流行的语言就做不出好东西,这个要清楚,如果你的工具比较旧,但你能做好东西来,你一样是高手。 很多人都想成为高手,什么是高手?就是经历了很多问题并且都解决了的人,就是掌...原创 2019-03-19 13:04:10 · 202 阅读 · 0 评论 -
我的小白成长之路
吃饱饭没事做,想想最近很多小兄弟们在QQ微信上问应该怎么发展,我就讲我的经历吧,希望给大家做个参考。本人40了,开发时间有20年了,当时上大学的时候正流行信息系统开发,收银,进销存之类的刚刚兴起,我就选择这个热门的方向,开始学数据库。在大三的时候有幸参与老师的开发项目,用PowerBuilder做了一个收银系统,有了些开发经验。毕业后仗着有经验面试时有点傲骄,口气也比较大,现在看起来很...原创 2019-03-19 12:48:25 · 548 阅读 · 0 评论 -
Delphi的ReportMachine 如何判断用户在打印对话框点了“确定”还是“取消”
最近在做打印功能时遇到问题了,ReportMachine(以下简称RM)的客户在批量打印时,在ShowPrintDialog为True的情况下,如果第1个取消了,意味着客户是想要取消打印的,但是要逐个取消很麻烦,因此我们就要判断用户点了打印机窗口里的取消“按钮”。从属性上看,目前没有发现有用的属性,只能在事件上下文章了。原理是定义一个全局变量为False,在RM产生打印事件后变更变量的属性为T...原创 2019-02-25 10:54:30 · 1255 阅读 · 0 评论 -
设置电脑的系统时间
function SetSytemTime(aNewTime:TDateTime):Boolean;var Y,M,D,H,N,S,MS:Word; aSystemTime:TSystemTime;begin try DecodeDateTime(aNewTime,Y,M,D,H,N,S,MS); //分解时间成年月日时分秒和毫秒 with aSystemTime...原创 2019-02-13 08:49:59 · 612 阅读 · 0 评论 -
获取文件版本号
function GetFileVersion(vFileName: string): string;var Temp, InfoSize: Cardinal; FileData: Pointer; FileInfo: PVSFixedFileInfo;begin Result := ''; if not FileExists(vFileName) then Exit;...原创 2019-02-11 11:31:49 · 924 阅读 · 0 评论 -
adodataset locate的多条件定位
TAdoQuery,TADODataSet的Locate功能相信大家都经常用了with ADOQuery dobegin if Locate('orders;Zhuang1',VarArrayOf([vorder,vname]),[]) then begin end;end;可能大家有时候也会发现它有不灵的时候,我发现是VarArrayOf后面的变量在为空或者为NULL时,...原创 2019-01-21 10:40:50 · 1551 阅读 · 2 评论 -
Delphi常用的Excel操作
以下是我在Delphi中用过的Excel操作ExlApp:=CreateOLEObject('Excel.Application'); //创建对象ExlApp.Visible :=False;// True; //是否显示ExlApp.DisplayAlerts := False; //是否显示警告ExlApp.Caption:=aTitle; //设置标题ExlApp....原创 2019-01-21 11:07:30 · 2933 阅读 · 0 评论 -
获取CUP的ID
function GetCPUID:string;var _eax, _ebx, _ecx, _edx: Longword; s, s1, s2: string;begin asm push eax push ebx push ecx push edx mov eax,1 db $0F,$A2 mov _ea...转载 2019-01-21 11:11:50 · 275 阅读 · 0 评论 -
获取系统临时目录
var vTmp:string; vtmpPath:PChar;begin GetMem(vtmpPath,MAX_PATH); //分配空间,MAX_PATH是常量 GetTempPath(MAX_PATH,vtmpPath); //获取系统临时目录,写入变量 vTmp:=StrPas(vtmpPath); //将变量从PChar变成string型 FreeMem(...原创 2019-01-21 11:15:16 · 525 阅读 · 0 评论 -
我在DBGridEh增加一栏复选框及对应操作的解决方案
最近客户有个需求,要求对单据列表里指定的单据进行批量审核,很自然的,我想到了在DBGridEh增加一栏复选框的列,审核时遍历所有单据,将打了勾的单据审核就可以了。查阅了网上很多文章,不外有2个方案,1是在数据表里增加字段,2是直接在DBGridEh增加一个没有字段的栏,也许是我笨吧,2种方案试过了都不行,于是只能自己想办法了。研究了半天结合前面的2个方案,我想到了一个解决的方法,分享给大家吧。...原创 2019-01-10 10:27:21 · 4014 阅读 · 0 评论 -
查询access数据库数据
with ADOQueryExcept1 do begin SQL.Clear; SQL.Add('select * from ('); SQL.Add('select a.Pankou,a.K1,a.K2,a.K3,a.Dif1,a.Dif2,a.Dif3,b.P1,b.TestType,b.Times as Times1,b.Hit as Hit1,b.Rate as...原创 2019-01-10 10:32:31 · 1267 阅读 · 0 评论 -
从数据库里读取图片并显示
procedure TForm_QTOrder1.ShowPic;var vStr:TADOBlobStream; vTmp,vPicType:string; vtmpPath:PChar;begin inherited; Image1.Picture.Graphic:=nil; //清空图像控件里的图像 vstr:=TADOBlobStream.Create(TB...原创 2019-01-10 10:42:55 · 5611 阅读 · 1 评论 -
字符的数学公式取得计算结果
有时候我们在文本框里写了’1+1‘,怎么能让他变成公式计算出结果?我提供2种方案供大家参考一、function Cal(expStr:string):string;var js: OleVariant;begin js := CreateOleObject('ScriptControl'); js.Language := 'JavaScript'; Result := ...原创 2019-01-10 11:11:33 · 1168 阅读 · 0 评论 -
ADO数据和数据集状态判断
ADOQuery1.State in [dsInsert,dsEdit] //数据集状态是新增或编辑状态ADOQuery1.RecordStatus =[rsNew] //数据状态是新增状态ADOQuery1.RecordStatus =[rsModified] //数据状态是修改状态...原创 2019-02-11 10:59:22 · 1638 阅读 · 0 评论 -
如何防止窗口闪动
有时候我们在操作窗口的过程中,窗口会刷新导致闪动,为了防止窗口的闪动,我们在操作前后各加一些语句,可以防止窗口闪动。SendMessage(Application.MainForm.Handle,WM_SETREDRAW,0,0); //禁止更新窗口自己的代码SendMessage(Application.MainForm.Handle,WM_SETREDRAW,1,0); //可以...原创 2019-02-11 11:13:21 · 893 阅读 · 0 评论 -
批量修改容器内所有控件的只读属性
有时候我们需要找出某个容器如Panel,Form里面所有带只读的控件,修改他们的只读属性,如果一个个列出来修改Edit1.Readonly:=True;Edit2.Readonly:=True;Edit3.Readonly:=True;这样写就太麻烦了,所以我们要批量修改procedure SetReadOnly(cpn:TComponent;bSetValue:Boolean...原创 2019-02-11 11:28:29 · 926 阅读 · 0 评论 -
DELPHI自定义颜色的使用技巧
DELPHI用了很多年了,有件小事一直很麻烦,就是重装后以前自定义的颜色就没有了,今天在做工程的时候又碰到这个问题,幸好原来的工程里还保留着原来的颜色代码,在注册表里搜索了很久,终于找到了保存自定义颜色的地方,在这里给朋友分享一下,路径是:HKEY_CURRENT_USER/Software/Borland/Delphi/7.0/Custom Colors,里面保存了16个自定义颜色,以后只要备原创 2009-07-04 12:30:00 · 1029 阅读 · 0 评论