📄 tip00.htm
字号:
<html><head><title>心得00</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=font1> </span></p><p><span class=font1> </span></p><p><span class=font1><i>98.5.24</i><br><b>INI文件的操作要点</b><br>(1)在interface关键字后的uses子句中加入<br> uses ...,inifiles;<br>(2)设置变量:var inifile:=TIniFile;<br>(3)使用前,一定要先做:<br> inifile:=TIniFile.Create(inifilename);<br> 我在这里绕了个弯子,写成<br> inifile.Create(inifilename);<br><br><b>TShiftState</b>用来检测CTRL,ALT,Shift,以及鼠标按键的状态,<br>常常用在键盘或鼠标的事件处理程序之中。<br><br><b>DCU文件(编译的库单元)的重用</b><br>(1)在interface里的uses子句中引用。如Windows,Dialogs,<br> 等等,要求被引用的DCU一定要放在Delphi 3\Lib子目录中。<br>(2)在implementation里的uses子句中引用。如果是自行编写的<br> DCU文件,应采用这一方式,并将被引用的DCU文件放入当前<br> 工程所在的子目录中。<br><b>executefile</b>函数(在FmxUtils.DCU中定义)不能用在FormCreate<br> 事件中。真奇怪......<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> with MyTable do<br> 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 按住Shift键再用鼠标点击组件,可以选择多个组件。<br> --= 下面这条是我摸索出来的 =--<br>Ctrl-drag 按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)<br> 里拖动鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容<br> 器的可视组件但不包括该容器组件。<br><br><i>98.5.5</i><br><b>使用QReport的若干经验</b><br>1)QuickRep1.DataSet:=query1<br> 不然无输出结果<br>2)从qrpt2man.doc中查知,格式化输出结果的方法是:<br> 在QRDBText.Mask中设为.00;0,将使输出带两位小数。<br>3)设置Group时,先加入一个QGroup,再加入一个QRBand,将QGroup的<br> 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> b:boolean;<br>begin<br> s:=trim(Inputbox('NewPassword','Password','masterkey'));<br> b:=s<>'';<br> s1:=s;<br> if b then<br> b:=InputQuery('Confirm Password','Password',s1);<br> if not b or (s1<>s) then<br> ShowMessage('Password Failed');<br>end; // 试试吧!<br><br><b>使你的form适应不同的显示分辨率</b><br>假设你在800*600的分辨率下设计的form,第一步:<br>inplementation<br>const<br> ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}<br> ScreenHeight: LongInt = 600;<br><br>{$R *.DFM}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br> scaled := true;<br> if (screen.width <> ScreenWidth) then<br> begin<br> height := longint(height) * longint(screen.height) div ScreenHeight;<br> width := longint(width) * longint(screen.width) div ScreenWidth;<br> scaleBy(screen.width, ScreenWidth);<br> end;<br>end;<br><br>下一步,要让每个子控制的字体改变到合适的大小:<br>type<br> TFooClass = class(TControl); { needed to get at protected }<br> { font property }<br><br>var<br> i: integer;<br>begin<br> for i := ControlCount - 1 downto 0 do<br> TFooClass(Controls[i]).Font.Size :=<br> (NewFormWidth div OldFormWidth) *<br> 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>这样你就可以随时引发一个"password invalid"的例外:<br>if Password<>CorrectPassword then<br> 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> 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> with DocSourceForm do<br> begin<br> show; // 显示HTML源码的FORM<br> Memo1.lines.clear; // 清空memo1中内容<br> Memo1.lines.add(HTML1.SourceText); // 植入源码<br> Memo1.SelStart:=0 // ***<br> SendMessage(Memo1.Handle, // Memo1的窗口句柄<br> EM_ScrollCaret //将Edit Control中的caret光标滚动到视野中<br> 0,0 //这两个参数暂不使用<br> 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 --上面几个过程调用成功即返回0值<br><br></span></p><p><span class=font1><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; </span></p><p><span class=font1><b>几个常用函数</b> MessageBeep --播放Windows标准声音文件 MessageBox --显示一个信息对话框 TWinControl类: SetFocus 设置为当前输入焦点 AsString 比 AsInteger 在表间字段互相赋值时更有效,更不易出错。 Application.Message('errtext','errcaption',mb_OK);弹出一对话框,按OK确定。 </span></p><p><span class=font1><i>1998.4.15</i> <b>用ExecuteFile执行一外部程序</b> uses ShellAPI; // 提供 ShellExecute 函数在demos\doc\filmanex目录下,有一FMXUtils中提供各种文件操作增强函数, 其中Function ExecuteFile(filename,params,WDir,SW_SHOW) 可运行外部程序。 </span></p><p><span class=font1><i>1998.4.10</i> <b>连入远程ORACLE服务器(续)</b> 今天我发现,只需在TDatabase元件中,设DriverName为ORACLE,在Parms中加入 Server Name=orac, 照样能连入远程的ORACLE服务器,根本不需要设置BDE alias。 </span></p><p><span class=font1><i>1998.4.9</i> <b>发布自己的应用程序</b> 今天使用DELPHI自带的Install Shield,做了一个安装程序。在没有装DELPHI的 机器上安装我做的数据库应用程序。开始系统提示找不到别名,最后我运行了一 下Bdeadmin.exe,增设一个别名,OK! </span></p><p><span class=font1><i>1998.4.8</i> <b>连入远程ORACLE服务器</b> 今天使用BDE设置oracle, OK。Net Protocol:TNS/ServerName=orac </span></p><p><span class=font1><i>1998.4.6</i> <b>自动登录远程数据库</b> Database.Parms的内容如下: user name=[yourname] Database.Parms[1]:='password=yourpass' 再把Login Prompt一项设为False,其它的就不用再说了吧? </span></p><p><span class=font1><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! </span><p> </p><p><span class=font2>版主:西安 梁 明<br>日期:99-07-29<br>E-mail:<a href=mailto:delphifan@990.net>delphifan@990.net</a></span></p><hr></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -