
Delphi应用
文章平均质量分 74
genispan
金色印象
展开
-
C++调用C#Dll
1 创建C# DLL,需要指定应用类型为“类库”,代码:namespace CSLib{ public class Class1 { private string name; public string Name { get {原创 2022-03-08 17:00:46 · 2744 阅读 · 0 评论 -
make the inifile support unicode in delphi
Usually, we can't write a unicode string to a normal inifile in delphi, seems not support yet.原创 2014-04-24 18:15:54 · 968 阅读 · 0 评论 -
日期字符串转换为本地日期格式
//将目标日期字符换转换为本地日期类型var D1:TDateTime;dtFormat: TFormatSettings;begin dtFormat.ShortDateFormat:= 'yyyy-MM-dd'; dtFormat.DateSeparator := '-'; D1:= StrToDate(Edit1.Text, dtFormat));.原创 2014-02-11 20:15:21 · 1583 阅读 · 0 评论 -
delphi 判断目录是否可写
FUNCTION WritableDir(CONST Dir : STRING) : BOOLEAN; VAR FIL : FILE; N : STRING; I : Cardinal; BEGIN REPEAT N:=IncludeTrailingPathDelimiter(D); FOR I:=1 TO 250-LENG转载 2013-08-16 16:04:49 · 1211 阅读 · 0 评论 -
将dataset中的数据导出至Excel中而不需要安装MS Excel的方法(含UNICODE支持)
偶尔做界面程序,需要一个导出Excel,而在客户端又不用安装MS Excel的方法,总结如下。测试了两种方法,第一种方法如下(此方法支持UNICODE不存在问题):参考:http://www.swissdelphicenter.ch/torry/showcode.php?id=1427procedure DBGridToExcelADO(Query: TDataSet; Fil原创 2013-07-06 17:06:18 · 1709 阅读 · 1 评论 -
delphi 获取大于2G的物理内存大小
一般情况下,我们是用GlobalMemoryStatus 来获取物理内存大小的 但该API在物理内存大小超过2G的时候,返回值均为2GB。因此,没有办法获取真实的物理内存大小,所以需要对此进行改进。定义TMemoryStatusEx结构:Type TMemoryStatusEx = packed record dwLength: DWORD; dwMemoryLoad:原创 2009-07-15 14:57:00 · 5234 阅读 · 0 评论 -
DELPHI 解决DBGrid SHIFT键多选问题
在实际项目中,偶然遇到需要按下SHIFT键,在DBGrid中进行多选的情况,测试了几种方法,最终确定了一个比较好的解决方法,总结如下:procedure TTestFrame.TestDBGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin //实现 Shif原创 2012-11-23 16:06:24 · 3947 阅读 · 1 评论 -
设计模式之抽象工厂
抽象工厂的好处在于用户可根据不同的配置调用具体的工厂对象,从而获取不同的产品。在设计时,实现产品创建和客户端的分离。客户端通过抽象接口获取所要的产品。使用反射的方法可使工厂方法变得更加灵活。PS:相关源码参考大话设计模式C#版本。{*-------------------------------------------------------------------------原创 2011-12-01 11:41:00 · 925 阅读 · 0 评论 -
设计模式之代理模式
代理模式主要实现对某一对象的封装,外面对对象的访问需要通过代理来实现对对象的调用。代理模式主要实现对象与外界的隔离,如源码中的FMM和FGG。主要参考大话设计模式中的C#源码,整理Delphi源码如下:-------------------------------------------------------------------------------------------原创 2011-11-30 16:11:06 · 862 阅读 · 0 评论 -
设计模式之装饰模式
装饰模式的作用是在已有功能中动态的添加更多的新功能。避免对旧的主类进行修改。简化了主类,并把主类的核心功能和装饰类功能分开。装饰模式主要应用于:只有在特殊的情况下,才需要执行某些特殊的行为,如下面源码中,可调整装饰的顺序,并添加新的装饰类。参照了C#的相关源码,整理出Delphi源码,学习之用。unit Unit1;interfaceuses Windows,原创 2011-11-30 14:09:33 · 820 阅读 · 0 评论 -
动态record数组的应用
最近用到了record类型的数组,主要涉及到record类型动态的创建与添加,实例代码如下:(主要功能为从XML文件中读取数据,并放在record数组中,当然,如果不是从XML文件中读取就省了很多步骤了)procedure TForm1.btn2Click(Sender: TObject);var XMLDocChar: TXMLDocument; Root:Ixmlnode; i,LangLength:integer; function LoadData(RootNode:Ix原创 2010-11-19 19:05:00 · 1636 阅读 · 0 评论 -
GRIDPANEL动态布局
<br />最近研究了下GRIDPANEL动态布局的方法,网上好像可用的资料比较少,自己研究了下,好像效果还不错,但实际每用到。记录在此,也许以后用得上。<br />procedure TForm1.DisplayControlGroup(GrpName:string;GrpText:string;ControlType:string;IsNessary:boolean; NeedButton:boolean;ColumnSpan:integ原创 2010-11-19 19:11:00 · 6282 阅读 · 0 评论 -
RichEdit自适应高度
<br />procedure TForm1.Button2Click(Sender: TObject);var sInfo : tagSCROLLINFO;begin sInfo.cbSize := SizeOf(TScrollInfo); sInfo.fMask := SIF_RANGE; RichEdit1.Height := 0; GetScrollInfo(Richedit1.Handle, SB原创 2010-12-28 19:26:00 · 3048 阅读 · 0 评论 -
动态数组的复制
<br />最近动态数组用的较多,顺便收集了动态数组复制的方法(源自万一的博客):<br />unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(原创 2010-12-28 19:29:00 · 998 阅读 · 0 评论 -
delphi open arrays和dynamic arrays区别
最近在写一个应用程序的时候遇到如下问题(由于与下面问题类似,直接转帖:)================================================I'm trying to resize an array of a certain class passed as an argument, e.g.procedure Resize(MyArray:Array of TObject);begin SetLength(MyArray,100);end;However, this r原创 2010-12-17 14:26:00 · 1775 阅读 · 0 评论