Dephi&BCB
文章平均质量分 66
nhconch
这个作者很懒,什么都没留下…
展开
-
TArray<Byte> VS TBytes VS PByteArray
TArray is declared as "Array of Byte", as is TBytes. You missed a further very relevant type however, TByteArray (the type referenced by PByteArray).Being a pointer to TByteArray, PByteArray is翻译 2017-04-10 11:04:26 · 1816 阅读 · 0 评论 -
刚写好的读取多网卡IP地址的函数
虽然现在一机多网卡已经很普遍(像Notebook带有线、无线、蓝芽等),但是找一个现成的能够一次过读出所有网卡IP地址的函数实在是难,无奈自己写了一个,好东西谁用谁知道。//uses WinSock;type PAddrInfoW = ^ADDRINFOW; ADDRINFOW = record ai_flags : Integer; // A原创 2009-11-28 23:54:00 · 1629 阅读 · 0 评论 -
Indy10.2.5的危险做法
为了排查一个Bug今天无意看了看Indy源码,结果吓了一跳。TIdIOHandler.ReadLongWord函数用于读取通讯数据并转换成LongWord类型返回,它做用了一种危险的做法可能会导致数据传输不正确。函数源码如下:function TIdIOHandler.ReadLongWord(AConvert: Boolean): LongWord;var LBytes: TIdByt原创 2009-11-20 10:49:00 · 4749 阅读 · 8 评论 -
关闭Delphi 2010 RTTI的方法
今日见到的,虽然未用上D2010不过先记录下来。扩充的RTTI信息将使编译生成的文件大小巨幅增大,而如下是关闭RTTI的方法:There are some options which reduce the final executable size somewhat:{$WEAKLINKRTTI ON} or dcc32 –weaklinkrtti command-line optionBut原创 2009-09-02 18:16:00 · 3507 阅读 · 1 评论 -
模仿Chrome、TW3的主窗口框架
草草写就的模仿Chrome、TW3的主窗口框架,见下图:<!--google_ad_client = "pub-5395599807454886";/* 728x90, 创建于 09-4-19 */google_ad_slot = "3527615303";google_ad_width = 728;google_ad_height = 90;// -->原创 2009-04-27 10:46:00 · 1368 阅读 · 1 评论 -
修正Ehlib在RAD2009下的导出Excel的问题
TDBGridEh在D2009下导出的Excel文件打不开,今天把问题修正了,问题出在TDBGridEhExportAsXLS.WriteStringCell的函数上,把参数声明const AValue: string改成const AValue: AnsiString即可。另外,还发现移动邮箱的电子网盘原来并不支持Chrome浏览器的。原创 2009-04-13 14:32:00 · 1283 阅读 · 0 评论 -
让应用程序在多桌面间自由飞翔
Windows支持多桌面,Delphi了支持多桌面,今天让程序也支持上多桌面了。程序运行时会在标题栏最小化按钮旁边显示一个按钮(支持Theme效果),按钮引出一个菜单供用户选择要显示的桌面位置,通过它即可在多桌面间自由往返。(PS:可惜CSDN现在不能上图了。) 演示程序如下:unit Unit1;interfaceuses Windows, Messages, Sy原创 2009-03-19 16:59:00 · 1702 阅读 · 2 评论 -
给FastReport4导出功能增加两个事件
FastReport做报表还是挺方便的,虽然自4.7.X后的汉化问题多多,但也不影响使用。这次由于客户使用一种类似于远程终端的技术来使用系统,导出报表时需要压缩数据以减少流量,因此在FR的导出功能中增加了两个事件以在导出时通知主程序进行处理。 首先在frxClass.pas中找到TfrxCustomExportFilter定义,在public下增加属性:property OnStart原创 2009-03-07 17:58:00 · 1927 阅读 · 0 评论 -
RMReport3.51破解手札㈡
前文再续,书接上一回。 破解步骤二——代码分析: 在跟踪过程发现,RMReport对打印的限制来自于rm_class.dcu文件,通过Dcu2Pas对rm_class.dcu反翻译得到_DoPrintReport函数的汇编源码,再结合D6对汇编代码的跟踪,得到如下的关键源码段: procedure _DoPrintReport; var i: Integer; j: Int原创 2008-12-16 10:43:00 · 2227 阅读 · 0 评论 -
RMReport3.51破解手札㈠
序言: RMReport是一款不错的打印控件,其中的GridReport做得很有特色(大多数选用RM的人就是被它吸引过去的),官方网站提供的试用版本有诸多限制,比如只能打印头两页、会多了一句未破解提示、导出功能只能导前六页等。 这次破解发生在2004年12月20日、21日,破解的是当时的3.51版本(本方法也适用于06年发布的5.0版,但自5.0后我便没有再关注过RM了),其时想在一个项目中试原创 2008-12-16 10:33:00 · 4590 阅读 · 2 评论 -
RMReport3.51破解手札㈢
破解步骤三——代码重建: 在此需要将限制的代码恢复(改变)成原来正常的代码,正常打印的Pascal代码应该如下所示:procedure _DoPrintReport;var i,j: integer;begin if 逐份打印 then begin i := 0; repeat if CanPrint(i) then Print原创 2008-12-16 10:48:00 · 1935 阅读 · 1 评论 -
mxOutlookBarPro2.13修改版
mxOutlookBarPro可以在Delphi和BCB中实现QQ、OutLook界面和windows资源管理器的效果。包含C5、C6、D5、D6、D7各种版本的组件。此为2.13修改版,增加SelectedAsCheck属性,定义对mxButton的点击是否像PushButton一样,即单次点击时按下,再次点击时弹起。调整代码,在内部拖动按钮时也产生OnDragDrop事件。修改原创 2009-02-18 15:10:00 · 3227 阅读 · 0 评论 -
在程序异常中记录堆栈信息
在我们编写程序的时候可通过IDE自带的调试环境捕捉到异常(Except)错误,并能查看到相关的信息以便我们修正程序中的问题。但当软件被发布出去后,因为所部署运行的环境与我们的调试环境有很大区别,即使在是调试环境中测试过非常完美的程序,也很难保证在实际运行中不出现任何错误。当程序发生错误它往往是抛出一个红叉的警告框来告诉我们它出错了,但这对我们来说却像是一个不懂表达的小孩,只是一味的告诉你它身上疼,原创 2009-02-03 08:49:00 · 3681 阅读 · 3 评论 -
解决了两个ActiveX Form的小问题
B/S虽是主流,不过ActiveX Form仍不能少。今天一下碰到了两个来自ActiveX Form的问题,以下是解决方法。 一、Delphi 2009生成的ActiveX Form如何应用ThemeD2009创建的ActiveX Project,Option里的Theme选项是禁用的,在浏览器中打开ActiveX Form自然也没有Theme效果了。使用当年在D6下的方法,编写一个W原创 2010-01-27 15:30:00 · 3592 阅读 · 2 评论 -
郁闷了很久总算把TcxDBFilterControl中Like操作的%加上了
//检查用户设定的过滤条件,Like和Not Like操作符的,没加%的,强制在两边加上。这下终于“被人性化”了users cxDBFilterControl,cxFilterControlUtils,Variants;type TmyDBFilterControl = class(TcxDBFilterControl) end; with TmyDBFilterControl(原创 2010-03-12 00:24:00 · 1433 阅读 · 1 评论 -
修改fastreport实现页尾补空白行或打印固定行数
刚刚实现成功,“页尾剩余补空白行”和“打印固定行数”两种模式代码:frxClass加: //在DataBand末尾加空白行//abcNone不启用,abcByRecordCount按记录数加,abcByFreeSpace按页面剩余空间加 TfrxAppendBlankCells = (abcNone, abcByRecordC原创 2014-12-02 16:52:46 · 19235 阅读 · 1 评论 -
关闭RTTI,减小Delphi2010程序的尺寸
自从Delphi2010增强了RTTI反射机制后,编译出来的程序变得更大了,这是因为默认情况下 Delphi2010 给所有类都加上了RTTI信息(呵呵,不管你用不用它,好像实用价值确实不高,至少目前我不会去用的)。虽说对程序的运行速度影响不大,但会增加安装程序的大小,这也是我们不愿看到的。有没有办法禁用RTTI信息,从而减小编译后程序的大小呢?,从文档中我们找到了方法。一、在工程中用编译原创 2013-04-16 14:17:55 · 2259 阅读 · 0 评论 -
使用TWebBrowser时存在内存泄漏问题的解决方案
用TWebBrower不断打开多个网页,多某些版本的操作系统上运行一段时间后,发现占用系统内存达几百M,直到关闭程序后,占用的内存才能释放。这个问题在网有很多讨论,比较多人的建议办法是用SetProcessWorkingSetSize(GetCurrentProcess(),-1,-1)处理一下,这个变通的办法貌似可行。然后在http://www.winu.cn/space-14160-d原创 2012-03-09 12:43:51 · 2070 阅读 · 0 评论 -
慎用MonthsBetweent和MonthSpan
<br />●function MonthsBetween(const ANow, AThen: TDateTime): Integer; <br /><br />描述: <br />根据两个给定的TDateTime类型的参数ANow和AThen,MonthsBetween函数能得到两个日期在月份 <br />上差距数。因为月份的天数是不同的,所以 MonthsBetween 函数返回的是一个近似值,该近似 <br />值基于每个月份为 30.4375 天。不足一个月的数字将不被计算。 <br />因此,例原创 2011-03-21 16:04:00 · 2772 阅读 · 0 评论 -
使用ClassHelper/record helper 给类“打补丁”
<br /><br />有些时候,我们需要在现有类的基础上,给类添加一些东西<br />并且在类中protected区分的方法,成员是无法在单元外访问的,如果要调用它们该怎么办呢?<br />于是就有了以下三种方法<br /><br />1. 继承该类<br />2. 直接覆写该类<br />3. 使用Class Helper<br /><br />对于第一种方法,大家都很熟悉,我就不多说了,第二种方法的实现:<br />TControl = class(Controls.TControl)<br />pr原创 2010-11-20 01:07:00 · 3526 阅读 · 0 评论 -
delphi实现穿XP防火墙
<br />procedure TForm1.Button1Click(Sender: TObject);<br />var<br /> FwMgr,Profile,FwApp: variant;<br />begin<br /> FwMgr := CreateOLEObject('HNetCfg.FwMgr');<br /> Profile := FwMgr.LocalPolicy.CurrentProfile;<br /> FwApp := CreateOLEObject('HNetCf转载 2010-11-20 01:10:00 · 1450 阅读 · 0 评论 -
fastreport中的对汉字的支持
<br />fastreport4.79的脚本编辑器:frxSyntaxMemo,fs_Syntaxmemo<br />第一个是用在TFrxAdoquery的sql编辑器中的,第二个是个独立的控件,用来支持几个常用脚本的语法加亮<br />存在的问题是:可以删除半个汉字,可以将光标移动至汉字中间<br />我现在的项目中,多处sql语句中用到汉字(select col1 as 第一列....),所以自己动手改了一下fastreport源码<br />原理是使用bytetype函数,判断光标位置的字符是否是汉转载 2010-09-25 09:03:00 · 2105 阅读 · 0 评论 -
关于D2009的DCR
<br />今天写好了地图控件,顺便研究了一下D2009的DCR格式,网上的资料很少,好在很容易就猜中了。<br />早期的Delphi,DCR只支持24*24*16色的BMP,而D2009的Tool Palette支持三种尺寸的图标,还是真彩的。<br />这三种尺寸分别是16*16、24*24、32*32。<br />假设控件名称为TkktComponent,创建一个名为kktComponent.rc,内容为:<br /><br />TkktComponent Bitmap kktComponent.b原创 2010-09-20 20:35:00 · 1046 阅读 · 0 评论 -
在DLL中封装的VCL窗体Tab键响应的问题
<br />在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息。基本顺序是这样的:1. 主窗体用Hook技术捕获Tab按键并向活动子窗体发送一个Tab键按下的消息2. 子窗体手动定义一个Tab键被按下的处理(需要用到FormKeyDown事件)。3. 移动到下一个焦点的WinAPI函数:Perform(WM_NEXTDLGCTL,0,0);4.移动到上一个焦点的函数:Perform(WM_NEXTDLGCTL,1,转载 2010-09-16 01:33:00 · 1447 阅读 · 0 评论 -
从网络上下载文件的两种方法
两种方法使用的Com函数都来源于UrlMon,记得先引用。 一、URLDownloadToFile直接下载文件到磁盘,URLDownloadToFile声明如下:function URLDownloadToFile( Caller: IUnknown; URL: PWideChar; { 下载的路径 } FileName: PWid原创 2010-04-10 16:54:00 · 3373 阅读 · 0 评论 -
修正Ehlib5.0.13的一个小问题
DBGridEh(5.0.13)当ContraColCount>0时,点击右边被锁定的列,会抛出一个下标越界的异常。修正办法:function TCustomDBGridEh.DataToRawColumn(ADataCol: Integer): Integer;begin if RowPanel then Result := FIndicatorOffset else Re原创 2010-03-18 01:16:00 · 1063 阅读 · 0 评论 -
让ExWatcher支持UNICODE版本Delphi
ExWatcher捕捉到的信息在D2009下显示为乱码,要正常工作,需作以下修改: 1、clDbgHelp第18行:Name: array[0..1] of Char;-> AnsiChar; 2、clExWathcer第548行:Result := PChar(@pSymbol.Name); -> Result := PAnsiChar(@pSymbol.Name)原创 2010-03-13 17:31:00 · 966 阅读 · 0 评论 -
将ListView的Chekbox状态应用到子结点
前段时间论坛的一个帖子http://topic.csdn.net/u/20080706/10/24331390-5522-400d-a557-8d719869af68.html,问怎样将TreeView的Chekbox状态应用到子结点,我错看成ListView给答了。当然ListView也可以实现层级递进的树形结构,虽然只是外观上的,不能实现折叠打开的效果,但将Chekbox状态应用到子结点却是能原创 2008-08-03 16:13:00 · 1362 阅读 · 2 评论 -
C++作的仿Office风格的颜色选取框
用VC写了个颜色选取框,仿Office风格,没用MFC什么的框架,调用很简单指定显示位置POINT和默认颜色就可以,如:POINT pt;pt.x = 100; pt.y = 100;CColorPicker *clrpk = new CColorPicker(&pt, HexClr(0xFF0000));效果图:代码:ColorPicker.h#define HexClr原创 2007-12-28 11:37:00 · 3460 阅读 · 5 评论 -
发掘ListBox的潜力(二):鼠标拖放插入点提示
鼠标拖放插入点提示 鼠标拖放是Windows常见的操作,比如拷贝文件就可用拖放方式进行。在我们编写的应用程序中,有时为了方便用户操作需要支持鼠标拖放。对于大部分的VCL控件只要鼠标将DragMode设为dmAutomatic,就可以在OnDragDrop、OnDragOver和OnEndDrag中处理拖放事件。与Drag类似的还有一个Dock方式用于支持控件悬浮,控件在悬浮时会显示一个虚线框来表原创 2004-12-24 16:10:00 · 2773 阅读 · 0 评论 -
发掘ListBox的潜力(一):自动调整横向滚动条宽度
《自绘ListBox的两种效果》一文帖出之后,从反馈信息来看,大家对这种小技巧还是很认同。接下来我将继续围绕ListBox写一系列的文章,进一步发掘ListBox的潜力,其中包括:自动调整横向滚动条宽度、即时提示(Tips)、拖放插入点提示等,并在最后制作一个在滚动区内的ListBox组。自动调整横向滚动条宽度 网上可以找到很多让Listbox产生横向滚动条的文章,其中的方法基本一样,就是定原创 2004-12-24 14:29:00 · 4009 阅读 · 0 评论 -
修正XPMenu的两个Bug
XPMenu是大名鼎鼎的Dephi第三方界面控件,最近在使用中发现了几个Bug,并对其中的两个进行修正。1、首先,是绘制菜单和工具栏图标时,会将图像白色部分作为透明色,导致图像缺损非常难看,如下图所示: 查看XPMenu的源代码,图标是通过TXPMenu.DrawIcon函数绘制的,函数内计算了图标显示的位置、调用GrayBitmap、DimBitmap、DrawBitmapShadow原创 2004-12-19 11:43:00 · 2248 阅读 · 4 评论 -
自绘ListBox的两种效果
本文利用Listbox自绘实现了两种特殊效果(见图),左边的风格是自己突然灵感触发想到的,右边的风格来自"C++ Builder 研究"的一个帖子,老妖用BCB实现了,这里则用Delphi实现它。演示图片://--------------------------------------------------------------------------unit DrawListItem原创 2004-12-05 10:56:00 · 8147 阅读 · 4 评论 -
制作像MSN、QQ那样的消息提示框
微软的每一个产品,无论功能还是界面设计都会带给我们一定的惊喜,比如OfficeXP、Office2003、Messenger的界面设计,早已成为众多软件竞相模仿的对象,就拿Messenger来说,我就见过好几套网络视频会议的软件都借鉴了它的界面风格。 前段时间因为要在原来的软件上增加一个快捷键提示窗体,这个提示窗要求在显示的时候比较醒目美观能引起用户注意,显示后不影响用户操作,能够关掉。很自原创 2004-12-04 22:18:00 · 4284 阅读 · 7 评论 -
与中文输入相关的函数
unit Ime;{======================================================================= DESIGN BY : 彭国辉 DATE: 2004-10-12 SITE: http://kacarton.yeah.net/ BLOG: http://blog.csdn.原创 2004-10-26 18:57:00 · 2339 阅读 · 1 评论 -
过滤条件定义窗体(旧)
//========================================================================// DESIGN BY : 彭国辉// DATE: 2004-07-20// SITE: http://kacarton.yeah.net/// BLOG: http://blog.csdn.n原创 2004-10-26 17:38:00 · 1886 阅读 · 0 评论 -
添加字段列表到ComboBox
//添加字段到指定的ComboBox.Itmes,ComboBox显示为Field.DisplayLabel,//可通过ComboBox.Items.Objects[ComboBox.ItemIndex]得到对应字段//不添加Blob、Graphic、OLE、Reference、Bytes等特殊类型的字段//不添加Visible=false的字段//文章为作者保留,请勿转载!//我的Blog:编程原创 2004-10-26 16:19:00 · 2631 阅读 · 0 评论 -
实现StatusBar的Flat风格
效果见右图,OfficeXP里就是这样的风格,其实实现很简单,不必专门在网上找别人控件。 把StatusBar的SimplePanel设为False,点击Panels添加StatusPanel,把所有StatusPanel的Bevel设为pbNone、Style设为psOwnerDraw因为我们要自己绘制Flat风格。下面是StutasBar的OnDrawPanel事件代码:procedur原创 2004-10-03 16:19:00 · 2197 阅读 · 2 评论 -
修正TListView应用XP Theme时的错误
Dephi6(及以下版本)并不提供XP风格支持,因为Dephi6推出时XP还在测试当。要使应用程序支持XP风格必须添加"manifest xml”资源文件到应用程序中,告诉系统对此应用程序使用6.0的comctl32.dll,而不是5.0。但有部分VCL控件与6.0存在兼容问题。 TListView为vsReport时,鼠标移到列头时会抛出异常,修正这个问题需要修改ComCtrls.pas,原创 2004-09-25 19:28:00 · 1590 阅读 · 0 评论 -
自绘XP风格菜单
这是以前写的代码,自绘XP风格的菜单,硬盘坏了后以为没了,最后写的一个软件要自定义风格,“翻箱倒柜”的终于在我可爱的古董机^_^上找到了一个应用的例子。还是把它放到Blog上来,即可共享又可作为备用 :) 把主菜单的OnMeasureItem指向MeasureMainItem、OnAdvancedDrawItem指向DrawMainItem,子菜单的OnMeasureItem指向Measur原创 2004-08-24 19:52:00 · 2255 阅读 · 0 评论