📄 tip03.htm
字号:
<html><head><title>心得03</title><meta http-equiv=Content-Type content=text/html; charset=gb2312><meta name=GENERATOR content=Microsoft FrontPage 3.0><style><!--
A{text-transform: none; text-decoration: none;}
A:hover {color: #F77C02 ; text-decoration: underline;} }
--></style><style type=text/css><!--
.font1 {font-size:10.5pt; line-height:15pt; align=center}
.font2 {font-size:9pt; line-height:13pt; }
A{text-transform: none; text-decoration:none;color:#0000FF}
a:hover {text-decoration:underline;color:#FFFFF}
--></style></head><body bgcolor=#FFFFFF><p><span class=font2> </span></p><pre><span class=font2><i>98-8-23 22:00</i>
<b>raise的用法</b>
看Demo时学的:
raise Exception.Create('Project ID is required');
在工程文件中Application.Run语句之前加入下面语句,可不让主Form在运行时显示:
Application.ShowMainForm := False;
在CSDemos.dpr中,有许多有用的c/s编程技巧……
<i>98-8-23 21:40</i>
<b>在Delphi代码中定义数据库</b>
近来由于应用上的需要,要在运行中动态生成数据库,结构不定。我想一定要用
BDE32API中的知识才能实现。无意中在5月7日的《中国计算机报》上发现一篇文
章《在Delphi代码中定义数据库》,帮了我的大忙。部分代码如下:
procedure tform1.create_tbl;
var tbl:ttable;
begin
tbl:=ttable.create(self); // 如没有声明中的"tform1.",Delphi不认这个self
with tbl do
begin
datebasename:=;dbdemos';
tablename:='my_tbl';
with fielddefs do
begin
clear;
add('No',ftInteger,0,false);
add('Name',ftString,0,false);
...
end;
with indexdefs do
begin
clear;
add('primary','no',[ixPrimary,ixUnique]);
...
end;
CreateTable;
end;
end;
<i>98-8-20 22:24</i>
<b>异种数据库之间的互相转换</b>
记得过去曾经见到过一篇文章,介绍如何用一极简单的方法将异种数据库之间
的表(Table)相互转化,但没有记住作者是用了什么方法。现在,我需要有这
样一种工具,怎么也找不到,只能用笨办法,一条记录一条记录地Insert。好
在刚刚在看Help文件时找到了要找的:那就是用TBatchMove!真是的,天天都
在我眼皮底下晃,为什么到现在才发现……
有个Demo工程在Delphi 3\HELP\EXAMPLES\BATCHMV之下,功能很全的。
<i>98-8-20 22:22</i>
<b>在程序运行一耗时操作时改变鼠标形状</b>
begin
screen.cursor:=crHourglass;
try
... // do some long-time work
finally
screen.cursor:=crDefault;
end;
end;
<i>1998-08-19 11:03</i>
<b>在TQuery中查询时关键字冲突</b>
我用了这样一个查询:
select no,name,py,belong from dwbm
结果Delphi提示"Invalid use of keyword...",换成
select "no",name,py,belong from dwbm
查询结果的第一列又恒为 "no",经反复试验,最后终于成功了:
select "a"."no",name,py,belong from dwbm a
<i>1998-08-18 14:06</i>
<b>我的第一篇Delphi文章《Delphi使用技巧四则》</b> 请看
<a href=http://www.ciw.com.cn/ciw/751/d0902.htm>http://www.ciw.com.cn/ciw/751/d0902.htm</a>
这是中国计算机报的站点。
<i>98-8-15 20:56</i>
<b>InsertRecord和AppendRecord的一条注意事项</b>
在用InsertRecord插入一条记录时,发现有两个字段颠倒了。又核对了一
遍数据库(table)中的字段顺序,没有发现不一致的地方。想起用了Field
Editor,会不会是……打开Field Editor,果然,为了显示的需要,我把
其中两个字段对调了位置。原来,InsertRecord中的字段顺序应该与Field
Editor中的顺序一致才行。这一点,好象书上和联机帮助上都没有提到过。
这一点,对AppendRecord也同样。
<i>98-8-12 21:44</i>
<b>一夜之间</b>
昨天朋友找我帮忙,编制一个数据库应用软件,必须在今天早上之前完成。
我答应了,因为我知道Delphi的能力,也了解到这个应用并不是多么复
杂。结果,从晚8点到晚0点,程序顺利作成,而且没有忘记加了个About
版权信息对话框和一个Splash启动封面。连我也从来没有想到过一夜之
间做好一个界面漂亮功能齐全的软件!
记得有本书上介绍一位程序员用Delphi用了一天一夜的时间,为一家大
公司开发出一套大型软件的演示版,击败了他的一个在此之前总是比他
提前完成的竞争对手。在这24小时里,他不光拚命地工作,而且还要应
付失火、朋友拜访、嘴唇被碰破、失恋等意外事件。但最终,他还是胜
利了。所有这些,都只是因为:他用上了Delphi!
哈哈!Delphi真是给咱们程序员脸上贴金!
<i>98-8-12 9:39</i>
<b>TSplitter的用法</b>
见到过一些文档中提到过在运行中改变两个Panel的边界的方法。其实,Delphi 3.0
提供了一个组件TSplitter,可以非常轻松地实现上述功能。步骤如下:
1、加入Panel1,Align设为alLeft。(也可根据情况设为right,bottom或top)
2、在Form1的空白处加入一个Splitter,可以看到它自动处于紧贴Panel1的位置。
如果不是紧贴,可以把它的Align设成和Panel1一样即好。
3、加入Panel2,Align设为alClient。(必须有一个Panel为alClient)
运行,把鼠标放在两个Panel之间,当光标改变成双向箭头形状时拖动它。
试一下,是不是很爽?
<i>98-8-7 18:07</i>
<b>pchar的一个特别之处</b>
var p:pchar;
begin
getmem(p,10);
p:='';
if p='' then
...
这是错误的! if 语句应该这样写
if p+'a'='a' then ...
才行。您要是不信,试一下就知道了。
<i>98-8-7 10:18</i>
<b>使用OnFilterRecord时应注意的一个问题</b>
我在制作一个数据库应用程序时遇到下面的现象:
运行时好好的,退出程序时,出现
'Invalid variant type conversion'.
程序中的实现过程如下:
procedure TMainForm.RadioButton1Click(Sender: TObject);
begin
Datamodule2.payedquery.OnFilterRecord := BfsjFilter;
end;
...
procedure TMainForm.BfsjFilter(DataSet: TDataSet; var Accept: Boolean);
begin
accept:=(copy(dataset['Bfsj'],1,6)>=monthfrom.text);
end;
真奇怪。用单步执行,原来在Close之后,程序又执行了TMainForm.BfsjFilter中的
语句。有办法了:
在Mainform的OnClose里加入一行
Datamodule2.payedquery.OnFilterRecord := nil;
错误不再。
<i>98-8-4 22:50</i>
<b>关于文件夹的几个函数</b>
uses filectrl;
procedure ForceDirectorys(dir:string) ------------ 一次建立指定的多级文件夹
function DirectoryExists(Name: string): Boolean; - 指定文件夹是否存在
function SelectDirectory(var Directory: string; Options: TSelectDirOpts;
HelpCtx: Longint):Boolean; - 打开一个选择文件夹的对话框(英文的)
<b>快捷方式(ShortCut)</b>
uses shlobj,comobj;
var
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -