Delphi之TStrings和TStringLists类

Delphi之TStrings和TStringLists类

有些类不是组件,但它们支持存在的组件。这些类是其他组件的典型属性,直接由TPersistent派生,如TStrings、TCanvas和TCollection。 

TStrings和TStringLists类

TStrings是一个抽象类,使你可以操纵属于组件(如TListBox)的字符串列表。TStrings实际上并不管理字符串的内存(那是由拥有TStrings类的组件管理的),它只是定义了方法和属性来访问和操纵组件的字符串,而不是使用组件的Win32 API函数和消息。 

注意,我们所说的TStrings是一个抽象类。这就意味着TStrings并没有真正实现操纵字符串的代码,它只是定义了必要的方法有哪些。TStrings的派生组件实现了实际上的字符串操纵方法。

为了进一步说明这个点,举几个组件的例子,如TListBox.Items、TMemo.Lines、和TComboBox.Items等属性都是TStrings类型。你也许怀疑,如果它们的属性是TStrings类型,当这些属性的方法在代码中尚未实现时,怎么能调用这些方法呢?问得好。答案是,尽管这些属性被定义为TStrings类型,但这些属性的变量(例如设为TListBox.FItems)是被实例化为派生类。为了阐明这点,设FItems是TListBox的Items属性的私有存储域:

查看更多内容...

Posted in 软件开发 at November 12, 2014. by 傻猫 .    Views: 2574    No Comments

Delphi CheckListBox用法

CheckListBox如何设置行高?
默认设置是 lbStandard 或者 lbOwnerDrawVariable 会忽略你的行高设置值的
改为lbOwnerDrawFixed 属性即可

删除:CheckListBox.DeleteSelected;
上下移: CheckListBox.Items.Move

删除用
CheckListBox1.Items.Delete(Index);

上下移动用
CheckListBox1.Items.Move(CurrentIndex,NewIndex);

//在项目中添加字符串(子项目的最后一位接着添加)
CheckListBox1.Items.Add(edit1.Text);

查看更多内容...

Posted in 软件开发 at August 14, 2014. by 傻猫 .    Views: 2500    No Comments

Delphi获得与设置系统时间格式

在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字符串形式的日期时间转换成 TDateTime 然后再做其他操作。在进行时间或日期的转换时,会使用系统当前设定的时间日期格式。而如果时间日期格式与字符串中的表示方式不相符,会使转换过程 失败。例如当前短日期格式设定为'yyyy/MM/dd',而要转为 '2006-10-20'这样的字符串为日期,就会报错,说这不是一个有效的日期。

所以在进行转换前,要确保系统的日期时间格式与程序中使用的相符。一种方法是在安装时由安装程序设置,或者明确告诉用户必须设置成要求格式。另一种就是程序在启动时,自动设定为需要的格式,退出程序时再恢复原来的设置。

查看更多内容...

Posted in 软件开发 at February 24, 2014. by 傻猫 .    Views: 3700    No Comments

Delphi7自动以管理员身份运行程序

1.建立 res 文件

建立一个文本文件,名字可以自己起,如UAC.manifest,内容:

建立文本文件,名为 UAC.rc,内容:
1 24 UAC.manifest

编译成 uac.res 文件,运行:
brcc32 uac.rc -fouac.res

2.在代码中引入
打开项目文件,加入
{$R uac.res}

3.编译程序
这时程序就支持 VISTA 了,在运行的时候,会弹出 WINDOWS 的提示框,询问用户是否允许以管理员身份运行。

Posted in 软件开发 at January 27, 2014. by 傻猫 .    Views: 2186    No Comments

兼容各个操作系统,格式化系统日期

在实际工作中,遇到很多电脑的日期格式设置不一样,有些时间格式是“上午”或“下午”
还有一些电脑是PM,AM,长日期格式也不一样。

为此为了统一格式,我们把系统获得的日期和时间格式一下,统一为 yyyy-mm-dd hh:nn:ss 格式
mytime:=FormatDateTime('yyyy-mm-dd hh:nn:ss',qry_temp.FieldByName('CurrDateTime').AsDateTime);

Posted in 软件开发 at January 24, 2014. by 傻猫 .    Views: 1943    No Comments

DELPHI 获取本月的第一天和最后一天

USER :DateUtils
使用 StartOfTheMonth 和 EndOfTheMonth 函数获取即可;

procedure TForm1.btn1Click(Sender: TObject);
begin
mmo1.Lines.Add(FormatDateTime('yyyy-mm-dd',StartOfTheMonth(Now)));
mmo1.Lines.Add(FormatDateTime('yyyy-mm-dd',EndOfTheMonth(Now)));
//mmo1.Lines.Add(DateTimeToStr(StartOfTheMonth(Now)));
//mmo1.Lines.Add(DateTimeToStr(EndOfTheMonth(Now)));
end;

Posted in 软件开发 at January 5, 2014. by 傻猫 .    Views: 2125    No Comments

在FormShow事件中关闭一个Modal窗口

在窗体FormShow事件中进行条件判断,如果不符合条件时,showmessage显示消息,然后自动关闭窗口。

showmessage会触发一个modal事件,点确定后,再执行close是无法关闭窗口的,只能通过其它办法才行。

下面是一种通过消息传递的方法,可完美解决在formshow事件中关闭窗口。

private
{ Private declarations }
//定义一个用户消息
procedure test(var msg: TMessage);message WM_USER;

procedure TForm1.FormShow(Sender: TObject);
begin
//发送消息            
PostMessage(handle,WM_USER,0,0);
end;

procedure TForm1.test(var msg: TMessage);
begin
//在消息中关闭窗口
close;
end; 

Posted in 软件开发 at December 4, 2013. by 傻猫 .    Views: 2569    No Comments

给软件增加一个保护模块

以前搞过很多小软件,除了收费的软件做了保护模块,一般免费的软件,公司内部用的软件我都没有添加保护模块。

保护模块主要的作用是:对程序自身进行保护,防止别人修改或破解,如果发现程序被修改过就自动中止,最暴力的是程序发生自己被修改后就启动自毁模块,自己删除自己,哈哈。

常用的方法是加壳,以前还专门买了一套加壳软件Zprotect,不过现在这个软件基本已经销声敛迹了。我一般用aspack压缩一下资源,把程序变小一点,方便进行网络传输。

可以通过文件大小来进行判断是否被修改,当然这种方法相比比较简单,适合不加壳的软件,比较弱,修改字节也能保持文件大小不变,所以这种方法不能做到严格意义上的自我保护。

最近研究了一下,可以通过在线验证MD5值,每个程序的MD5指纹都不一样,只要修改过一个字节,MD5指纹就会发现变化,通过这样的思路来进行验证程序是否被修改。

查看更多内容...

Posted in 软件开发 at July 23, 2013. by 傻猫 .    Views: 3349    No Comments