2007-05-07

“Powered By Delphi” Logo 图像

以下是一些“Powered By Delphi”LOGO图像。您可以将这些图片放到你的网站、应用程序Splash屏、关于对话框、帮助、文档等你认为合适的地方。





原文名称:"Powered by Delphi" Logo Images
原文日期:2005-05-24
原文地址:http://delphi.about.com/library/weekly/aa052405a.htm

2007-04-30

SQL Server 数据库转换为 Access 数据库

最近正在升级一个程序,使其支持多数据库。
原来的程序数据库为SQL Server,所以使用SQL Server 的“导入和导出数据”功能将一个 SQL Server 数据库转换成了Access数据库,但其中发现了一些问题,但也找到了解决方案,一并记录于此:

1、转换程序会将SQL Server的视图转换成表,而不是Access的查询;
2、在为字段设置默认值为空字符的时候,SQL Server用'',而Access用"";
3、Access中没有GetDate()函数,应该使用Now()函数代替;
4、Access没有SQL Server用来获取客户端机器名的host_name()函数;
5、Access中没有Case When Then语句,但可以用IIF()函数模拟实现功能;
6、发现:Access使用的是Visual Basic的语言结构和函数;
7、转换程序会正确转换SQL Server字段的 IS NULL 属性;
8、Access也支持多字段的索引,只是设置方法有点特别(参见帮助);
9、SQL Server中bit型的1、0值,在Access中为True和False;
10、在Access中使用多个LEFT JOIN这样的语句时,必须用括号做相关的界定;
11、Access的SQL没有注释语句,SQL Server的/**/无法通用;
12、一条Insert语句在Access查询中正常运行,但在程序中出现“Insert Into 语句的语法错误”,后来发现原来是语句中的一个列名是Access的关键字(用[]界定可解决问题),但奇怪的是将该语句放置到Access的查询中执行却不会出错。

需要对转换后的Access数据库进行以下项目的检查,以确保与SQL Server一致:

1、主键。转换后的Access数据库都没有主键,需自己设置;
2、自增字段。转换程序会将SQL Server的自增字段转换为数字型,需手动修改为Access的“自动编号”类型;
3、默认值。转换程序不会转换SQL Server中设置的默认值,需手动设置;
4、bigint型字段。转换程序会将SQL Server的bigint转换为小数,须手动调整为Access的整型或长整型;
5、索引。转换程序不会转换索引,需手动在Access中建立索引。

在Delphi下,想让程序同时支持Access及SQL Server,需注意以下方面:

1、在Access中使用 SELECT * FROM Books WHERE RegDate = '2007-5-1' 是会出现“标准表达式中数据类型不匹配”这样的错误的(RegDate是日期型),必须使用SELECT * FROM Books WHERE RegDate = #2007-5-1# 或 SELECT * FROM Books WHERE RegDate = CDate('2007-5-1');
但在Access中,Insert、delete和update中使用单引号界定日期却是可以正常执行的。
2、尽量不要使用SQL Server的bigint类型,尤其该字段是自增的情况下;
3、Access的varchar(文本)型最大只有255,所以如果一个文本型字段大于255时,最好定义成备注型(Access中)或text型(SQL Server中);
4、在Access中一般会出现如下错误:不正常地定义参数对象。提供了不一致或不完整的信息。将相应Query的ParamCheck设为False即可;
5、Access中的逻辑值在库中为-1和0,而SQL Server中为1和0,所以写BoolField = 1这样的语句有兼容性问题,应该改为BoolField <> 0;
6、在Access中有主键的Query才可更新,而SQL Server无此要求。

2007-04-29

EhLib 4.1 在 Delphi 2007 下无法过滤和排序的问题

今天将一个程序升级到了 Delphi 2007,该程序是用Delphi7开发的,程序中用到了一个第三方组件EhLib

原先的 EhLib 是v3.6,无法在Delphi2007下安装,所以安装了最新的 v4.1。

原先正常的程序,在升级后,发现 DBGridEh 无法进行排序和过滤,执行操作时无反应。后来发现,如果选择本地过滤和排序的话,一切都会正常;如果是服务器端排序和过滤,则无法正常执行,错误信息为类型转换错误。

跟踪EhLib代码发现,是DBUtilsEh.pas文件中的SetDataSetSQLLikeProp 和IsDataSetHaveSQLLikeProp 函数中的以下相关代码报错:
......
if (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings) <> nil then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
......

具体的类型转换错误是指TObject与TStrings转换错误,所以报错。
我用的是ADOQuery,其SQL属性在Delphi7下是TStrings类型,在Delphi2007下是TWideStrings,由TObject转换为TStrings按理说不应该转换不成功啊。

继续查看代码才发现:
TWideStrings没有继承自TStrings,而是继承自TPersistent,理论上跟TStrings没有关系,将他转换为TStrings,当然会报错了。

找到原因后,将EhLib相关出错函数的代码改为以下:
......
if TObject(GetOrdProp(DataSet, FPropInfo)) is TStrings then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
else if TObject(GetOrdProp(DataSet, FPropInfo)) is TWideStrings then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TWideStrings).Text
else
Exit;
......

修改后,重新编译,一切正常。

附1:修改后的DBUtilsEh.pas文件
附2:在Delphi2007中安装EhLib4.1时会报错,注释掉EhLibVCL.pas文件中的“TBytes = array of Byte”行即可正常安装(Delphi2007自己定义了TBytes)。

Delphi 2007 下安装 Shell 组件

Delphi 2007 中没有 Shell 组件,但在Delphi的lib目录存在相关的源文件,并且在C:\Windows\System32目录下存在vclshlctrls100.bpl的运行时包,唯独没有设计时包。

但在Delphi的Demo中有一个ShellControls,安装其目录下的 dclshlctrls.dpk 即可成功安装Shell组件。

注1:Shell组件安装后还是在组件面板的Sample页中;
注2:Delphi2007的Demo目录在:我的电脑-共享文档-RAD Studio-Demos-DelphiWin32-VCLWin32;

在使用Shell这样的组件时,程序编译后都会出现以下的警告:[DCC Warning] Unit1.pas(7): W1005 Unit 'ShellCtrls' is specific to a platform ,如果您不想让他显示的话,可以在你工程相关源文件的开头加上以下代码:
{$WARN UNIT_PLATFORM OFF}

2007-04-23

Delphi 2007 体验!

CodeGear(From Borland) 公司发布了最新的Delphi 2007 For Win32版本。作为一个 Delphi 的使用者,第一时间下载、安装并进行了体验,现将一些使用感受记录如下:

注:以下的对比主要是针对Delphi7与Delphi2007,以下列出的部分功能可能在Delphi8/2005/2006中已存在。

1、下载
可在CodeGear官方网站下载试用版,或在VeryCD上寻找ISO,整个安装文件约1.2G多一些。
2、安装
Delphi 2007放弃了InstallShield,采用了InstallAware安装软件,整个安装操作非常友好。在安装结束时,会提示是否在Delphi启动时自动检查更新,建议不要选择此项,因为安装完成后无法禁用。Delphi 2007在开始菜单中建立了自动检查更新的快捷方式。

3、启动
Delphi 2007的启动速度没有传说中那么快,但和Delphi7相比也差不了多少,总体感觉不错。
4、界面
Delphi 2007的界面和之前的BDS 8/2005/2006界面风格是一样的,个人感觉不是太好,因为整个IDE颜色偏暗,Visual Studio 2005那种白亮色的界面应该更好一些。Splash和Welcome Page作的还是那么粗糙,CodeGear应该尽快找个好美工啊。
5、速度
IDE启动速度还不错,IDE的反映速度也很好,尤其是程序的编译速度,个人感觉比Delphi7还快。
6、返回传统界面
习惯了Delphi7及之前版本的界面,对Delphi2007的这种一体式界面多少有些难以适应,尤其是窗体设计器。虽然可以通过更改Desktop Layout为Classic Undocked让其与Delphi7有些相像,但却失去了Delphi7的那种自由设计的效果。
在Delphi2007中,更改一个选项,可让IDE的窗体设计器返回Delphi的传统风格:Tools--Options--VCL Designer,取消选中Embedded Designer。
此选项只有在IDE重启后才会生效,生效后整个界面和Delphi7差不多,但组件面板无法达到传统界面的效果。但此设计似乎有BUG,当IDE最小化的时候,窗体设计器却没有一同最小化。
7、新增属性:Application.MainFormOnTaskBar
用Delphi2007新建一工程,然后查看工程文件的源代码,发现多一行代码:
Application.MainFormOnTaskBar := True;
Delphi2007默认已将MainForm显示于任务栏,而不是之前版本的Application。这个功能在以前很多Delphier都讨论过,现在Delphi自身支持了。设计此属性很明显,因该是为了兼容Windows Vista。
当然任务栏的右键菜单也发生了变化:

(Delphi 7 任务栏右键菜单)

(Delphi 2007 任务栏右键菜单)

8、新Project Option: Enable Runtime Themes
该工程选项默认启用,用Delphi 2007编写的程序默认将启用Themes,这是一个非常好的功能,以前必须用组件:Win32-XPManifest。
Delphi 2007 IDE本身、窗体设计器已支持操作系统Themes。
9、TeeChart升级为了TeeChart Standard 7.10
TeeChart终于升级了新版本。
10、报表组件
Delphi 2007似乎没有附带任何报表组件,QuickReport和Rave消失了。
11、DBExpress
DBExpress重大升级至v4,架构已重写,使用此技术的Delphier可以试试,本人很少使用。
12、模态窗体下的窗体闪动
在当前窗体用ShowModal显示一个模态窗体后,再次点击当前窗口,此时显示出的模态窗口会闪动,Delphi 2007编译的程序终于已能实现此效果,这也是Windows程序的标准效果。
13、Project Clean 功能
在Project Manager中右键点击工程名称,选择Clean,会自动清除工程的所有临时文件和dcu文件。
14、有用的快捷键
终于为Build Project和Run Without Dedugging功能设置了快捷键。
15、比Delphi7超强的编辑器
Delphi2007的编辑器功能强大,这也应该是放弃Delphi7的重要理由,如输入Begin,自动生成End,代码重构,语法实时检查,显示行号等。
不过Delphi2007的那个代码帮助提示信息的窗口真是太丑了。
16、窗体设计器控件感应对齐
窗体设计器中的控件可以感应对齐,相当好的功能啊。
17、中文变量名
现在的Delphi已经支持中文变量名了,你可以试试。
18、新的组件
TTrayIcon、TFlowPanel、TGridPanel三个控件非常有用。Delphi2007新增Vista Dialogs组件,这些组件效果非常好,但是基于Vista API的,所以只能在Windows Vista下使用。
19、TLabel控件可在内容超出范围时显示省略号
此功能非常实用,尤其是在Label中显示一个文件路径时,设置TLabel的EllipsisPosition属性即可。
20、新增了一些有用的属性
Delphi2007对大多数常规组件增加了一些有用的属性,如Margins、Padding、TForm.PopupMode等,仔细查看一些控件的属性列表,你就会发现很多陌生的属性,但他们确实都非常有用。

用了Delphi 2007一段时间,但也发现一些小问题:
1、在Project Manager中更改PAS文件的名称后,不自动更新uses列表中的名称,呵呵~,这个要求不知道过不过分。
2、TMainMenu组件在窗体设计器中不可预览。
3、编辑器错误提示功能会误报,如Application.MainFormOnTaskBar属性,有时会提示不存在该属性。
4、新安装的组件,不但要在Tool--Options中设置Library Path,还必须设置Browseing Path,组件才能被正常使用。

用了N年的Delphi7了,体验了Delphi2007后觉得真应该换换了,综合来看,Delphi2007是一个非常好的版本,IDE速度及功能性各方面都已经非常优秀,你准备使用Delphi2007吗?

2007-04-18

DevExpress ExpressBars 6 发布!支持 Ribbons 界面!

DevExpress 公司最近发布了最新的 ExpressBars 组件包的新版本V6,最主要的改进就是支持 Microsoft Office 2007 中新设计的 Ribbons 界面风格。











详细更新请查看:What's New in ExpressBars v6

2006-12-04

将 TListBox 列表项目显示成多列

Delphi 的 TListBox 控件可显示一个列表项目集合在一个可滚动的列表中。
根据设计,一个列表框显示他的列表项目在一列中。
如果你想要在一行上显示多个项目,从而让一个列表框拥有多个列,你可以使用下面的方法:

设置 TabWidth 属性。该属性用像素值指定列宽。
当你在列表框中添加项目的时候,用“^I”分隔列,也就是大写的“i”,像下面这样:
begin
ListBox1.Items.Add('First'^I'Second'^I'Third') ;
ListBox1.Items.Add('C1R1'^I'C2R1'^I'C3R1') ;
ListBox1.Items.Add('C1R2'^I'C2R2'^I'C3R2') ;
ListBox1.Items.Add('C1R3'^I'C2R3'^I'C3R3') ;
ListBox1.Items.Add('C1R4'^I'C2R4'^I'C3R4') ;
ListBox1.Items.Add('C1R5'^I'C2R5'^I'C3R5') ;
ListBox1.Items.Add('C1R6'^I'C2R6'^I'C3R6') ;
ListBox1.Items.Add('C1R7'^I'C2R7'^I'C3R7') ;
ListBox1.Items.Add('C1R8'^I'C2R8'^I'C3R8') ;
ListBox1.Items.Add('C1R9'^I'C2R9'^I'C3R9') ;
end;


原文名称:Show TListBox Items in Multiple Columns
原文地址:http://delphi.about.com/cs/adptips2000/a/bltip1200_3.htm

2006-11-28

DevExpress QuantumGrid v6 发布!

DevExpress QuantumGrid 是一套非常优秀的 VCL 组件。近日,DevExpress 发布了DevExpress VCL QuantumGrid 的 v6 版,此版本做了许多改进,尤其是图表和搜索方面。

2006-11-25

Borland Delphi 不再,现在是 CodeGear Delphi!

TCodeGear.Create(Delphi);

官方消息:Delphi 不再是“Borland Delphi”,现在应是“CodeGear Delphi”!

有很长一段时间,About Delphi Programming 网站主页名称是“About Borland Delphi Programming”,后来改为“About Borland(DevCo) Delphi Programming”,今天(2006-11-14)他的新名字是“About CodeGear Delphi Programming”!

原文名称:Borland Delphi no more - It's CodeGear Delphi!
原文地址:http://delphi.about.com/od/humorandfun/a/codegear.htm
原文日期:2006-11-15

编程语言调查:28% 的人在使用 Delphi!

根据 CodeProject.com 上编程语言调查的当前情况,有 28% 的开发者使用 Delphi 谋生!

注:此调查目前已结束。这儿是调查结果:http://www.codeproject.com/script/survey/detail.asp?survey=613
原文写作时调查结果是 25%,调查结束时,最终的调查结果是 28%。



原文名称:Programming language poll: 25% are using Delphi!
原文地址:http://delphi.about.com/b/a/257649.htm
原文日期:2006-11-1

2006-11-01

FastReport 4 发布!

FastReport 是一款 Borland Delphi/C++ Builder/BDS 下的报表制作工具,功能强大,在国内是 Delphi 下报表开发的首选工具,当前,最新的 FastReport 4 已发布了!



以下为 FastReport 4 功能特性:

Report Designer:
- new XP-style interface
- the "Data" tab with all report datasets
- ability to draw diagrams in the "Data" tab
- code completion (Ctrl+Space)
- breakpoints
- watches
- report templates
- local guidelines (appears when you move or resize an object)
- ability to work in non-modal mode, mdi child mode

Report Preview:
- thumbnails

Print:
- split a big page to several small pages
- print several small pages on one big
- print a page on a specified sheet (with scale)
- duplex handling from print dialogue
- print copy name on each printed copy (for example, "First copy", "Second copy")

Report Core:
- "endless page" mode
- images handling, increased speed
- the "Reset page numbers" mode for groups
- reports crypting (Rijndael algorithm)
- report inheritance (both file-based and dfm-based)
- drill-down groups
- frxGlobalVariables object
- "cross-tab" object enhancements:
- improved cells appearance
- cross elements visible in the designer
- fill corner (ShowCorner property)
- side-by-side crosstabs (NextCross property)
- join cells with the same value (JoinEqualCells property)
- join the same string values in a cell (AllowDuplicates property)
- ability to put an external object inside cross-tab
- AddWidth, AddHeight properties to increase width&height of the cell
- AutoSize property, ability to resize cells manually
- line object can have arrows
- added TfrxPictureView.FileLink property (can contain variable or a file name)
- separate settings for each frame line (properties Frame.LeftLine, TopLine, RightLine, BottomLine can be set in the object inspector)
- PNG images support (uncomment {$DEFINE PNG} in the frx.inc file)
- Open Document Format for Office Applications (OASIS) exports, spreadsheet (ods) and text (odt)

Enterprise components:
- Users/Groups security support (see a demo application Demos\ClientServer\UserManager)
- Templates support
- Dynamically refresh of configuration, users/groups

官方主页:http://www.fast-report.com
试用下载:http://fast-report.com/en/download/fast-report-4-download.html

2006-10-23

7 个非常好的免费 Delphi 组件集

你是否在寻找一些免费且多功能的 Delphi 组件为你的程序添加更强的功能?不用再寻找了,下面列出了在互联网上最好的一些 Delphi 组件,他们可是免费并且包含所有源代码的。

(1)JEDI - VCL

JEDI-VCL(JVCL) 库构建于 JEDI 社区捐赠的代码。他由超过 400 个可以在你的 Delphi 和 Kylix 项目中立即重用的组件构成。整个 JEDI VCL 在 Mozilla 公共许可证(MPL)条款下分发,他可以自由使用于免费软件和共享软件,以及开放源代码工程和商业项目。

网站:http://jvcl.sourceforge.net

(2)RXLib

RxLib 是用于 Borland Delphi 和 C++ Builder 的一整套组件集,他们可以构建灵活和丰富的用户界面,最重要的一点是他们完全免费。

网站:http://sourceforge.net/projects/rxlib

(3)LMD Tools - Special Edition(特别版)

LMD Tools 的免费版,将近 100 个组件,绝对免费。

网站:http://www.lmdinnovative.com

(4)Globus VCL Extensions Library(GVCL)

一个用于 Borland Delphi 3-7 和Borland C++ Builder 5 的组件和函数库,所有单元都包含源代码。这个特定的库是一个免费软件产品,在不更改安装文件内容和单元源代码的情况下可自由分发使用这个库。

网站:
http://cpr.biblio-globus.ru/GlobusLib.htm
http://www.spellabs.ru/gvclen.htm

(5)Pro VCL Extensions Library(ProLib)

用于 Borland Delphi 和 C++ Builder 的免费组件库,包含 28 个组件和几个有用的类、过程和函数。

网站:http://barabash.org/prolib/index.html

(6)Max's Components for Delphi

15 个 Delphi 组件,全部包含源代码和帮助文件。

网站:http://www.maxcomponents.net

(7)About Delphi Programming VCL 集

超过 40 个组件,全部包含源代码。

网站:http://delphi.about.com/library/bluc/ucvcl.htm

原文名称:Top 7 Free Component Sets
原文地址:http://delphi.about.com/cs/toppicks/tp/aatpfreevclset.htm

2006-10-22

将 Delphi 组件 TWebBrowser 重设为空白页

Delphi 组件 TWebBrowser 允许在你的应用程序中显示 HTML 和一些 Web 化的文档。
在代码中导航到一个文档使用 Navigate 方法。

现在在窗体上,有一个 TWebBrowser 组件,命名为“WebBrowser1”,让其导航到 About Delphi Programming 中文版的主页你可以使用以下的代码行:
webBrowser1.Navigate('http://delphi.about.com') ;

假如,因为一些原因,你不得不清除 Web 浏览器窗口,重新设置并显示一个空白页,你需要导航到一个空白页。

以下的代码演示重设 TWebBrowser 让其显示一个空白页:
webBrowser1.Navigate('about:blank') ;

原文名称:Reset the TWebBrowser Delphi control to an Empty (Blank) Page
原文地址:http://delphi.about.com/od/adptips2006/qt/blankwebbrowser.htm

如何直接载入 HTML 到 WebBrowser

下面的代码演示如何载入一个字符串中的“静态”HTML 到一个 TWebBrowser 中:

用法:简单地拖动一个 TWebBrowser 组件的实例到窗体上,在窗体的 OnCreate 事件中载入 HTML 代码:

procedure WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string) ;
var
sl: TStringList;
ms: TMemoryStream;
begin
WebBrowser.Navigate('about:blank') ;
while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;

if Assigned(WebBrowser.Document) then
begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms) ;
ms.Seek(0, 0) ;
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject) ;
var
sHTML : string;
begin
sHTML := 'GOTO' +
'About Delphi Programming';
WBLoadHTML(WebBrowser1,sHTML) ;
end;

原文名称:How to load HTML directly to a WebBrowser
原文地址:http://delphi.about.com/cs/adptips2004/a/bltip0104_4.htm

2006-10-15

获取计算机名称和 Windows 用户名称

两个技巧:

(1)确定运行你的程序的机器在网络上的名称;
(2)获取当前使用机器的用户的名称。
function GetComputerNetName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;

Function GetUserFromWindows: string;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 255;
SetLength(userName, UserNameLen) ;
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else
Result := 'Unknown';
End;

原文名称:Get Computer Name, Get Windows User Name
原文地址:http://delphi.about.com/cs/adptips2002/a/bltip0102_3.htm