⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_note00.htm

📁 网友学习笔记.rar
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>

<head>
<title>心得00</title>
<meta NAME="Author" CONTENT="安富国">
<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0">


<meta name="Microsoft Border" content="tlb, default"></head>

<body><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>

<h1 align="center">心得00</h1>

<h4 align="center"><nobr>[ 心得00 ]</nobr> <nobr>[ <a href="d_note01.htm">心得01</a> ]</nobr> <nobr>[ <a href="d_note02.htm">心得02</a> ]</nobr> <nobr>[ <a href="d_note03.htm">心得03</a> ]</nobr> <nobr>[ <a href="d_note04.htm">心得04</a> ]</nobr> <nobr>[ <a href="d_note05.htm">心得05</a> ]</nobr> <nobr>[ <a href="d_note06.htm">心得06</a> ]</nobr> <nobr>[ <a href="d_question.htm">疑难问题</a> ]</nobr></h4>
</td></tr><!--msnavigation--></table><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top" width="1%">

<p></p>
</td><td valign="top" width="24"></td><!--msnavigation--><td valign="top">

<p> </p>

<p><i>98.5.24</i><br>
<b>INI文件的操作要点</b><br>
(1)在interface关键字后的uses子句中加入<br>
&nbsp;&nbsp; uses ...,inifiles;<br>
(2)设置变量:var inifile:=TIniFile;<br>
(3)使用前,一定要先做:<br>
&nbsp;&nbsp; inifile:=TIniFile.Create(inifilename);<br>
&nbsp;&nbsp; 我在这里绕了个弯子,写成<br>
&nbsp;&nbsp; inifile.Create(inifilename);<br>
<br>
<b>TShiftState</b>用来检测CTRL,ALT,Shift,以及鼠标按键的状态,<br>
常常用在键盘或鼠标的事件处理程序之中。<br>
<br>
<b>DCU文件(编译的库单元)的重用</b><br>
(1)在interface里的uses子句中引用。如Windows,Dialogs,<br>
&nbsp;&nbsp; 等等,要求被引用的DCU一定要放在Delphi 3\Lib子目录中。<br>
(2)在implementation里的uses子句中引用。如果是自行编写的<br>
&nbsp;&nbsp; DCU文件,应采用这一方式,并将被引用的DCU文件放入当前<br>
&nbsp;&nbsp; 工程所在的子目录中。<br>
<b>executefile</b>函数(在FmxUtils.DCU中定义)不能用在FormCreate<br>
&nbsp;&nbsp; 事件中。真奇怪......<br>
<br>
<b>内置的版本号控制功能</b><br>
在Project Options中的VersionInfo项里,有版本信息的定制,<br>
包括一个有趣的版本号自动增加功能(Auto-increment build<br>
number),即每Build一次,版本号中的Build Number加1。选中<br>
Include version information in project,编译,用资源管<br>
理器里找到生成的.exe文件,点右键,查看“属性”一项,就<br>
会看到在属性中多了一页“版本”,里面就是你刚才输入的各<br>
项内容。<br>
<br>
<i>98.5.17</i><br>
<b>定制Speedbar</b><br>
右键点击左上角的加速键条(speedbar),选中Properties,<br>
在列表框中找到你想要加入speedbar的命令按钮,将它拖到<br>
speedbar上的合适位置即可。如果speedbar上没有多余的空间<br>
来容纳新的按钮,可把鼠标在speedbar右框处变为双向箭头的<br>
形状,向右拖动一段距离,就可腾出空间。如想删除speedbar<br>
上的某个按钮,可简单地把它拖出speedbar的范围,就能删除。<br>
<br>
<i>98.5.13</i><br>
<b>计算出的字段</b><br>
在写一个程序时,我要在DBGrid中显示出一个memo的部分信息,当我把那个<br>
memo字段放进去后,运行时只能显示出“(memo)”字样。从书上找到计算字<br>
段的用法后,我在TTable中增加一个计算字段MemoHeader,宽度为40,在此<br>
TTable的OnCalcFields事件中输入:<br>
&nbsp; with MyTable do<br>
&nbsp;&nbsp;&nbsp; FieldByName('memoheader').asstring:=FieldByName('memo').asstring;<br>
在DBGrid中放入MemoHeader,运行,OK!<br>
<br>
<b>字段编辑器</b><br>
解决了上面的问题后,我继续学习字段编辑器的作用。原来,DELPHI通过字<br>
段编辑器,近乎完美地实现了数据库的字段级的控制,这包括:<br>
1)字段在DBGrid中标题、宽度、能否可见;<br>
2)字段的显示格式和编辑时输入的过滤条件;<br>
3)字段是否只读;<br>
4)字段的类型:数据字段/计算字段/查询字段/内部计算字段;<br>
5)字段的显示/赋值/修改等事件的定制。<br>
Delphi真的...很强哟!<br>
<br>
<i>98.5.7</i><br>
<b>设计Form时的快捷键</b><br>
Del 删除所选组件<br>
Esc 选择当前组件的容器(通常是Panel,Group或Form)<br>
F11 在Form或Unit和对象检查器之间切换<br>
F12 在Form和代码编辑器间切换<br>
Ctrl-F12 显示“查看Unit”对话框<br>
Shift-F12 显示“查看Form”对话框<br>
TAB 下一个组件<br>
Shift-TAB 上一个组件<br>
方向键 选中此方向上最近的组件<br>
Ctrl-方向键 将所选组件移动一个点<br>
Shift-方向键 将所选组件改变一个点的大小<br>
Ctrl-Shift-方向键 将所选组件移动一个格<br>
Shift-click&nbsp;&nbsp;&nbsp;&nbsp; 按住Shift键再用鼠标点击组件,可以选择多个组件。<br>
&nbsp; --= 下面这条是我摸索出来的 =--<br>
Ctrl-drag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
里拖动鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
器的可视组件但不包括该容器组件。<br>
<br>
<i>98.5.5</i><br>
<b>使用QReport的若干经验</b><br>
1)QuickRep1.DataSet:=query1<br>
&nbsp;&nbsp; 不然无输出结果<br>
2)从qrpt2man.doc中查知,格式化输出结果的方法是:<br>
&nbsp;&nbsp; 在QRDBText.Mask中设为.00;0,将使输出带两位小数。<br>
3)设置Group时,先加入一个QGroup,再加入一个QRBand,将QGroup的<br>
&nbsp;&nbsp; FooterBand设为刚才的QRBand,就可将其联系起来。<br>
4)在Group中打印的合计数,其ResetAfterPrint设为True,可实现分组合计。<br>
<br>
<i>98.5.4</i><br>
看了《中国计算机报》4月30日软件与应用版的《Delphi中创建Splash窗口》,<br>
心里又是高兴又是惋惜。高兴的是我已经知道了这个方法(说明我水平不低:)<br>
惋惜的是我应该写一篇同类的稿件,说不定...<br>
(见我在4月16日的专题)<br>
<br>
<i>98.4.30</i><br>
<b>今天新学了个format函数,对给定的字符串格式化,返回结果字符串:</b><br>
format('%*.*f',[8,2,123.456]); //等价于format('%*8.2f',[123.456])<br>
format('%d %d %0:d %d'[10,20]);<br>
<br>
<b>取得系统信息</b><br>
GetSystemInfo<br>
<br>
<i>98.4.29</i><br>
(以下TIPS取自DelphiTI.zip)<br>
<b>播放一个wav文件<br>
use mmsystem;</b><br>
SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC)<br>
<br>
<b>优化WIN95下的ORACLE连接</b><br>
在[ORA_HOME]\NETWORK\ADMIN\SQLNET.ORA中增加一行<br>
AUTOMATIC_IPC=OFF<br>
(据说可将连接时间从15秒缩短至3秒!不过我试过似乎没啥改变...)<br>
<br>
<b>设置WIN95的墙纸</b><br>
var s:string;<br>
s:='c:\windows\athena.bmp';<br>
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,Pchar(s),0);<br>
<br>
<b>InputBox,InputQuery和ShowMessage函数的威力</b><br>
uses dialogs;<br>
var s,s1:string;<br>
&nbsp;&nbsp;&nbsp; b:boolean;<br>
begin<br>
&nbsp; s:=trim(Inputbox('NewPassword','Password','masterkey'));<br>
&nbsp; b:=s<>'';<br>
&nbsp; s1:=s;<br>
&nbsp; if b then<br>
&nbsp;&nbsp;&nbsp;&nbsp; b:=InputQuery('Confirm Password','Password',s1);<br>
&nbsp; if not b or (s1<>s) then<br>
&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage('Password Failed');<br>
end;&nbsp; // 试试吧!<br>
<br>
<b>使你的form适应不同的显示分辨率</b><br>
假设你在800*600的分辨率下设计的form,第一步:<br>
inplementation<br>
const<br>
&nbsp; ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}<br>
&nbsp; ScreenHeight: LongInt = 600;<br>
<br>
{$R *.DFM}<br>
<br>
procedure TForm1.FormCreate(Sender: TObject);<br>
begin<br>
&nbsp; scaled := true;<br>
&nbsp; if (screen.width <> ScreenWidth) then<br>
&nbsp; begin<br>
&nbsp;&nbsp;&nbsp; height := longint(height) * longint(screen.height) div ScreenHeight;<br>
&nbsp;&nbsp;&nbsp; width := longint(width) * longint(screen.width) div ScreenWidth;<br>
&nbsp;&nbsp;&nbsp; scaleBy(screen.width, ScreenWidth);<br>
&nbsp; end;<br>
end;<br>
<br>
下一步,要让每个子控制的字体改变到合适的大小:<br>
type<br>
&nbsp; TFooClass = class(TControl); { needed to get at protected }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{ font property }<br>
<br>
var<br>
&nbsp; i: integer;<br>
begin<br>
&nbsp; for i := ControlCount - 1 downto 0 do<br>
&nbsp;&nbsp;&nbsp; TFooClass(Controls[i]).Font.Size :=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (NewFormWidth div OldFormWidth) *<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TFooClass(Controls[i]).Font.Size;<br>
end;<br>
<br>
<br>
<i>98.4.27</i><br>
<b>用raise引发一个错误处理例程</b><br>
示例:先给出下面的定义<br>
type EPasswordInvalid=class(Exception);<br>
这样你就可以随时引发一个&quot;password invalid&quot;的例外:<br>
if Password<>CorrectPassword then<br>
&nbsp;&nbsp; raise EPasswordInvalid.Create('Increect Password entered');<br>
运行后,出现信息框<br>
Project Project1.exe raise exception class EPasswordInvalid<br>
with message 'Incorrect Password entered'. Process stopped.<br>
Use step or run to continue.<br>
再按Run按钮,出现一个信息框:<br>
&nbsp; Incorrect Password entered.<br>
<br>
<i>1998.4.26</i><br>
<b>从DEMO例程中学到的若干小技巧</b><br>
在demo\internet\http\webbrows\main.pas中,<br>
procedure TForm1.DocumentSourceClick(Sender:Tobject);<br>
begin<br>
&nbsp;&nbsp;with DocSourceForm do<br>
&nbsp;&nbsp;begin<br>
&nbsp;&nbsp;&nbsp;&nbsp;show;&nbsp; // 显示HTML源码的FORM<br>
&nbsp;&nbsp;&nbsp;&nbsp;Memo1.lines.clear; // 清空memo1中内容<br>
&nbsp;&nbsp;&nbsp;&nbsp;Memo1.lines.add(HTML1.SourceText); // 植入源码<br>
&nbsp;&nbsp;&nbsp;&nbsp;Memo1.SelStart:=0 // ***<br>
&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(Memo1.Handle, // Memo1的窗口句柄<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EM_ScrollCaret //将Edit Control中的caret光标滚动到视野中<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,0 //这两个参数暂不使用<br>
&nbsp;&nbsp;end;<br>
end;<br>
(此SendMessage系一WinAPI调用,给一个或一组窗口发送消息,直到<br>
相应窗口处理此消息后才有返回值。相似的另一函数为PostMessage,<br>
它将消息放入消息队列中后立即返回。)<br>
*** 清空当前选择并将光标移动到指定字符(0代表第一个字符)。如同时<br>
设memo1.sellength为一非0值,可选择一段文本。<br>
<br>
<i>1998.4.23</i><br>
<b>几个有关子目录的操作的过程:</b><br>
MkDir(str);<br>
ChDir(str);<br>
GetDir(DriveID,str);<br>
SetCurrentDir(str);<br>
IOResult&nbsp; --上面几个过程调用成功即返回0值<br>
<br>
</p>

<p><i>1998.4.16</i> 在demo\db下有一MastApp,演示了<b>如何在启动一个大程序前期显示一个小小封面</b> 
splash.pas: begin SplashForm:=TsplashForm.Create(Application); SplashForm.show; 
SplashForm.update; //这一句强制调用WinAPI的UpdateWindow函数 ... ... end. <b>另一种在函数中返回值的方法:</b> 
Function MyFunc(...):integer; begin ... ... MyFunc:=8; //只要对函数名赋值,函数立即返回。 
end; </p>

<p><b>几个常用函数</b> MessageBeep --播放Windows标准声音文件 MessageBox --显示一个信息对话框 
TWinControl类: SetFocus 设置为当前输入焦点 AsString 比 AsInteger 
在表间字段互相赋值时更有效,更不易出错。 
Application.Message('errtext','errcaption',mb_OK);弹出一对话框,按OK确定。 </p>

<p><i>1998.4.15</i> <b>用ExecuteFile执行一外部程序</b> uses ShellAPI; // 提供 
ShellExecute 函数在demos\doc\filmanex目录下,有一FMXUtils中提供各种文件操作增强函数, 
其中Function ExecuteFile(filename,params,WDir,SW_SHOW) 可运行外部程序。 </p>

<p><i>1998.4.10</i> <b>连入远程ORACLE服务器(续)</b> 
今天我发现,只需在TDatabase元件中,设DriverName为ORACLE,在Parms中加入 
Server Name=orac, 照样能连入远程的ORACLE服务器,根本不需要设置BDE alias。 
</p>

<p><i>1998.4.9</i> <b>发布自己的应用程序</b> 今天使用DELPHI自带的Install 
Shield,做了一个安装程序。在没有装DELPHI的 
机器上安装我做的数据库应用程序。开始系统提示找不到别名,最后我运行了一 
下Bdeadmin.exe,增设一个别名,OK! </p>

<p><i>1998.4.8</i> <b>连入远程ORACLE服务器</b> 今天使用BDE设置oracle, OK。Net 
Protocol:TNS/ServerName=orac </p>

<p><i>1998.4.6</i> <b>自动登录远程数据库</b> Database.Parms的内容如下: 
user name=[yourname] Database.Parms[1]:='password=yourpass' 再把Login Prompt一项设为False,其它的就不用再说了吧? 
</p>

<p><i>1998.4.1</i> <b>在Win95 的 ORACLE client 中增加ODBC驱动</b> 进入ORACLE 
32-bit Adminstrator,选System DSN,Add,选择Oracle73(已在Easy Install中设好): 
Data Source Name: <u>orac</u> Description:<u>My Oracle 7.3 ODBC</u> SQL*Net Connect 
String:<u>tns:orac</u> --OK! 
<!--msnavigation--></td></tr><!--msnavigation--></table><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>

<p align="center"> </p>
</td></tr><!--msnavigation--></table></body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -