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

📄 d_note05.htm

📁 网友学习笔记.rar
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<br>
&nbsp; WFileName := Directory+'\FooBar.lnk';<br>
&nbsp; MyPFile.Save(PWChar(WFileName),False);<br>
&nbsp; MyReg.Free;<br>
end;<br>
这个生成的快捷方式运行的结果是在Notepad中打开Autoexec.bat文件。</p>

<p>98-11-24 15:14&nbsp; (这几个也是从网上找的,但我记不清出处了……)<br>
<strong>生成非矩形窗口</strong><br>
利用win32 API函数setwindowrgn可以将窗口定义为任何形状,以下是将窗口定义为园角矩形的例子:<br>
procedure TPortForm.FormCreate(Sender: TObject);<br>
var hr :thandle;<br>
begin<br>
&nbsp; hr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形(win API函数)<br>
&nbsp; setwindowrgn(handle,hr,true); //设置园角窗口<br>
end;<br>
为了使该窗口更好,应在onResize事件处理程序放相同的代码。<br>
(以下为我的示例)<br>
-- var hr :thandle;<br>
-- begin<br>
-- hr:=CreateEllipticRgn(0,0,200,400);<br>
-- setwindowrgn(handle,hr,true); //设置园角窗口<br>
<br>
------------------------<br>
getkeyboardstate(ks);//检测键盘函数<br>
if odd(ks[VK_NUMLOCK]) then ...<br>
</p>

<p>98-11-20 15:18&nbsp;&nbsp; 以下tips摘自<a href="http://ftp.maoming.gd.cn/c/lyzyd/Client.htm">http://ftp.maoming.gd.cn/c/lyzyd/Client.htm</a><br>
<strong>任意打印</strong><br>
  有时我们要打印任意排列的表或往已经印好的登记表上对号入座写上数据时,可以新建一个窗体(假设为Form1),再把Form1的BorderStyle设为bsNone、AutoScroll设为True,接下来再创建一个新窗体(假设为Form2),再建个按钮Button1,编写代码:<br>
procedure TForm2.Button1Click(Sender: TObject);<br>
begin<br>
&nbsp; Form1.Width :=900;<br>
&nbsp; Form1.Height :=800;<br>
&nbsp; Form1.Print;<br>
end;<br>
接下来你在Form1上对应的位置写上数据,运行后按Button1就会一五一十的打印下来了。<br>
关闭外部应用程序<br>
如何在 Delphi 应用程序中, 去关闭外部已开启的应用程序?<br>
下面给出一段在 Delphi 中关闭计算器程序为例:<br>
var<br>
&nbsp; HWndCalculator : HWnd;<br>
begin<br>
&nbsp; // find the exist calculator window<br>
&nbsp; HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist 
Calculator<br>
&nbsp; if HWndCalculator &lt;&gt; 0 then <br>
&nbsp;&nbsp;&nbsp; SendMessage(HWndCalculator, WM_CLOSE, 0, 0);<br>
end;<br>
<br>
<strong>隐藏桌面上的图标</strong>--使桌面上的图标消失,连桌面上的右键功能也不能使用<br>
var<br>
&nbsp; hDesktop : THandle;<br>
begin<br>
&nbsp; hDesktop := FindWindow('Progman', nil);<br>
&nbsp; ShowWindow(hDesktop, SW_HIDE);<br>
end;</p>

<p>98-11-16 20:36<br>
今天又被Delphi耍了一回。 :(<br>
在调试程序时,原本好好的一个Dialog,忽然在运行时出现:<br>
Cannot make a visible window modal<br>
真是奇怪,这是什么意思呢?我的调用部分如下:<br>
reportsdlg:=treportsdlg.create(self);<br>
reportsdlg.showmodal;<br>
reportsdlg.free;<br>
当我单步跟踪时,我发现在create之后,将会执行reportsdlg的onshow事件。<br>
这可奇了,从来没见到过create后立该就show的。难道Delphi出现了bug?<br>
<br>
心中既然认定了是bug,思路就走向错误的方向。我把reportsdlg里的全部元<br>
件和代码删除,只留下刚建立form时的骨架,再运行,还是老样子!<br>
<br>
我打开了老版本的程序,二者仔细比较。终于发现,我误把reportsdlg的form<br>
的visible属性设成了true。<br>
<br>
当TForm.visible=true时,调用了create之后,会自动再调用show的。因此不<br>
能再用showmodal来以模态显示它。</p>

<p>98-11-16 23:04<br>
请看下面的语句有什么错误:<br>
with dm.Dw_ioTable do<br>
begin<br>
first;<br>
while not eof do // Delete All<br>
begin<br>
delete;<br>
next;<br>
end;<br>
end;<br>
看出来了吗?应该去掉那个'next'!不然的话,只能删除一半的记录。<br>
chat* fool angela -- 这时候,文安生觉得自己笨得象只小笨猪!</p>

<p>98-11-8 21:42<br>
在使用Dialup控件的过程中,我感觉由于它是个多线程的控件,程序写起来很不凑<br>
手。常常是一个本来很简单的概念,实现起来要在多处进行控制。比如拨号,调用<br>
完异步Dial方法后,指令流立即返回到调用的下一行,而有可能半分多钟之后,拨<br>
号才成功,在这期间主程序只能等待;拨号成功后,只能由ActiveConnection事件<br>
得到信息并取得控制权。这完全不是我们平常所用的思维模式。经过反复试验,我<br>
写了一个<strong>DialStatus.pas</strong>单元,它既是一个Dialog,又是一个过程的集合。有了它,<br>
无论测试连接状态、拨号、挂断,都只要一条指令就能完成。<br>
<br>
98-11-7 23:18<br>
一个月来,写了一个Webmoney,一个Backup it!。加上以前写的,也算有几样“作<br>
品”了。同时<strong>经验和体会</strong>也有一些:<br>
&middot;写程序时每用一个控件或变量,要起个明明白白的名字,如EditBtn,sPrjName等,<br>
最好要养成一个好的习惯,如integer变量名前可缀以i,string型的缀s,字符串<br>
列表的可缀ss,指针缀p,等等。(其实这都是我个人的想法,并没有见任何官方<br>
的正式文件。)<br>
&middot;写到一些关键复杂的部分,要随手做注释,这同时也可理顺一下自己的思路。几<br>
十行的小程序自然可省去不写,但程序越大,注释的作用就越大,大得超乎想象。<br>
&middot;重复的部分可单列一个过程或函数。可减少出错的机会。<br>
&middot;每个独立的由多个文件组成的工程最好单独放在一个子目录里。最好在工程第一<br>
个Form时,就选Save All,然后建立一个目录,并存入。此后,每当建立并储存<br>
新的单元,都会自动存在这里的。(老生常谈?)<br>
&middot;好象还有一些,但记不得了。将来随时补记吧。<br>
<br>
98-11-7 22:43<br>
近日在看程序时忽然明白了一个关窍:那就是<strong>MessageBox</strong>比<strong>MessageDlg</strong>好。<br>
<br>
唉,我以前写程序在调试时用showmessage()显示信息,正式写时就用<br>
MessageDlg(),但它有个毛病:显示出的按钮总是&quot;Yes&quot;,&quot;No&quot;,&quot;OK&quot;,&quot;Cancel&quot;<br>
字样,令我的号称“全中文”的软件减色不少。为什么不能打出Windows的<br>
标准的带中文按钮的对话框来呢?原来要用MessageBox!比如:<br>
if MessageDlg('是否真的退出?',mtInformation,[mbYes,mbNo],0)=mrYes then close;<br>
用MessageBox写就成了:<br>
if MessageBox(handle,'是否真的退出?',pchar(caption),mb_IconInformation+mb_YesNo)=mrYes 
then close;<br>
二者差不太多,但还是有区别的:<br>
&middot;MessageDlg的按钮caption是英文,MessageBox是中文(在中文Windows95下)<br>
&middot;MessageDlg带HelpCtx(即Help Context,一般用不着),而MessageBox可以自定对话框标题(常用)<br>
&middot;MessageDlg是Delphi对MessageBox的二次实现,在Uses里要加Dialogs声明<br>
<br>
害得我对从前的程序一通好改!<br>
<br>
另外,ShowMessage()实际上与MessageDlg同出一辙,这就是为什么它也要Uses 
Dialogs,同理,<br>
我们也可以写一个自己的ShowMessage:<br>
procedure myShowmessage(msg:string);<br>
begin<br>
MessageBox(handle,pchar(msg),pchar(caption),mb_IconInformation+mb_OK);<br>
end;<br>
<!--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 + -