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

📄 tip04.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><head><title>心得04</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> </p><a href=http://202.98.107.86/tyb/delphi/note\d_note04.htm><p align=left><b><span class=font1>心得04</span></b></a></p><p><span class=font1><br>嘿嘿,今天找到了Windows95的<b>“浏览文件夹”对话框的调用方法</b>。<br>竟然简单得很:用SHBrowseForFolder。同时还找到了另外几个有用<br>的API,SHGetDesktopFolder,SHChangeNotify,SHAddToRecentDocs,<br>SHFileOperation,SHGetFileInfo,SHGetInstanceExplorer等等。</span></p><p><span class=font1>98-10-28 21:04<br><b>多线程里有文章</b><br>我编的金手指(Webmoney)运行得挺好,只有一点:拨号后常常<br>会发生“非法指令”错,导致中途退出。这个中原因也很不易<br>找。但我发现在Dialup过程中,产生了第二条Thread,心念一<br>动,在DialStatusDlg里的Dial成功后,并不立即关闭这一Form,<br>增加了一段延时(2秒),此后拨号功能使用起来就一切完全正<br>常,这说明,很可能是拨号完成后,立即关闭产生拨号过程的<br>Form,会造成拨号Thread完成返回时找不着“北”,极易发生<br>上述的“非法指令”错。<br><br>98-10-28<br>我的<a href=http://www.ciw.com.cn/ciw/771/d0901.htm>介绍RXLib的文章</a>在<a href=http://www.ciw.com.cn>《中国计算机报》</a>上发表了。在这里介绍一<br>下<b>安装过程</b>。(仅对2.50版而言)</span></p><p><span class=font1>运行RXLib.zip里的rxlib250.zip里的rxinst.exe,它自动释放到Delphi<br>下的RX子目录里。运行Delphi,选择File-&gt;Open...,打开unit里的<br>DCLRXCTL.dpk,点击 Install,不一会,RX Controls元件组就装好<br>了。<b>关闭这个Package窗口</b>,打开DCLRXDB.dpk,再Install,装上<br>RX DBAware。<b>关闭这个Package窗口</b>,打开DCLRXTLS.dpk,Install,<br>出现错误提示;注意到Code 窗口里有一Dclrx4的页,关闭这一页,<br>再Install,OK。</span></p><p><span class=font1>到这一步,安装已经算是完成了。下面打开RX\Demo\RXDemo.dpr,运<br>行一下。哼!一点都不Cool…… 但别忙下结论,好好看一下,是不是<br>每一项新功能都极其实用呢?</span></p><p><span class=font1>98-10-26<br>今天在maillist上抓到<b>两个有用的例程</b>:<br>unit Tools;<br>interface<br>uses<br>Windows,<br>WinSock,<br>SysUtils;<br><br>function LocalIP : string;<br>function LocalComputerName : string;<br><br>implementation<br><br>{$R *.DFM}<br>function LocalIP : string;<br>type<br>TaPInAddr = array [0..10] of PInAddr;<br>PaPInAddr = ^TaPInAddr;<br>var<br>phe : PHostEnt;<br>pptr : PaPInAddr;<br>Buffer : array [0..63] of char;<br>I : Integer;<br>GInitData : TWSADATA;<br><br>begin<br>WSAStartup($101, GInitData);<br>Result := '';<br>GetHostName(Buffer, SizeOf(Buffer));<br>phe :=GetHostByName(buffer);<br>if phe = nil then Exit;<br>pptr := PaPInAddr(Phe^.h_addr_list);<br>I := 0;<br>while pptr^[I] &lt;&gt; nil do begin<br>result:=StrPas(inet_ntoa(pptr^[I]^));<br>Inc(I);<br>end;<br>WSACleanup;<br>end;<br><br>function LocalComputerName : string;<br>var<br>Buffer : pchar;<br>I : Integer;<br>begin<br>getmem(buffer,100);<br>i:=99;<br>GetComputerName(Buffer,i);<br>Result := string(Buffer);<br>freemem(buffer);<br>end;</span></p><p><span class=font1>98-10-25<br>在调试GameMenu时,每当我在Delphi集成环境里第二遍或第三遍运行的<br>时候,就会出现<b>莫名其妙的死机现象</b>,最后系统会不稳定,还总是会出<br>现蓝底白字的提示画面。总是找不到原因,只要不在集成环境里运行,<br>重复多少遍都没问题。后来我一步一步地单步执行,发现在<br>&nbsp; SmallImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo,<br>&nbsp; SizeOf(SHFileInfo), SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX);<br>处程序会自动分成两个线程同时运行。这说明ShGetFileInfo调用是一<br>个线程级的系统调用。后来又发现,在集成环境中如果在上次运行结束<br>后等好几秒钟再运行,就没有死机现象再发生。看来Delphi有一套自己<br>的管理线程的机制,在多线程环境里,程序结束后,有的线程并没有结<br>束,如果立即再次运行,往往会造成系统崩溃。</span></p><p><span class=font1>98-10-23<br><b>INI文件注意事项</b><br>INI文件的优点显而易见:它是文本文件,能够直接查看和编辑;Delphi<br>提供了对INI文件的极其方便的过程和函数。在使用中,应该注意,如<br>果运行下面语句,那么将在Windows子目录中打开这一INI文件:<br>&nbsp;&nbsp;&nbsp; ini:=tinifile.create('myapp.ini');<br>如想打开当前工作目录里的myapp.ini,应该这样写:<br>&nbsp;&nbsp;&nbsp; ini:=tinifile.create('.\myapp.ini');</span></p><p><span class=font1>98-10-20<br>“金手指”由于使用了Net Manage公司的控件THTML,造成必须同时安<br>装NM*.dll和好几个.ocx文件才能运行。都怪我只顾低头编程,没有测<br>试安装方面的问题。THTML还有一个缺点就是当一个请求超时或找不到<br>对方地址时,会产生难以控制的异常,并退出程序。到处找THTML的替<br>代控件也找不到,问了一位网上高手也没有帮助,真愁人啊!</span></p><p><span class=font1>想起ACTIVE-X。在菜单里找到并选中Import ActiveX Control,出现<br>所有Delphi能够安装的ActiveX组件。在各式各样的组件里,我找到了<br>描述为“Microsoft Internet Controls(Version 1.1)”,文件路径为 <br>c:\windows\system\shdocvw.dll的ActiveX控件。(这名字可够怪,是不是<br>微软害怕别人看出这就是他的杀手锏:<b>IE4</b>?)</span></p><p><span class=font1>安装(Install),选OK,下面的对话框询问要不要现在就Rebuild,选yes。<br>结束后,将在ActiveX组里出现三个新增组件:Webbrowser_V1,<br>Webbrowser和ShellFolderViewOC。关闭当前Package窗口,并保存。</span></p><p><span class=font1>把一个Webbrowser放入Form里,属性窗口即出现它的长串的属性。找<br>了许久,也没有找到自己料想的“URL”属性。难道我弄错了?我不愿<br>就此放手,因为已没有别的选择。增加一个按钮Button1,双点进入它<br>的onClick事件,输入Webbrowser1,又键入一个点,很快,Webbrowser<br>的属性、事件、方法都显示出来了。(Delphi3的Code Insight真好用。)<br>我逐个翻找,发现了:Navigate: procudure(CONST:UTL...一看有门,我<br>按照函数原形,在前面定义:var ov:olevariant;然后输入代码:<br>webbrowser1.Navigate('http://default/afg/index.htm',ov,ov,ov,ov);<br>运行,硬盘哗哗地响了一段时间,出现了我的主页!效果和使用IE4一<br>模一样!!看看办公室没别人,我哈哈大笑了两声。</span></p><p><span class=font1>素闻Delphi3拥有对ActiveX的绝好支持,今日方始亲身体会得到。信手<br>得来的别人的控件,Delphi象用自己的一样随心所欲。选取View|Browser,<br>在对象浏览器里查看新增的Webbrowser等控件的各项属性,哇噻!<br>简直是把整个IE4浏览器搬进来了。</span></p><p><span class=font1>98-10-17<br>经历了5个不眠之夜,终于写完了“<b>金手指</b>”(Webmoney)。呼!<br>累惨了。今天为它申请了一个免费域名<a href=http://webmoneys.yeah.net>http://webmoneys.yeah.net</a>,<br>把它放在963个人主页站上。</span></p><p><span class=font1>98-10-13<br>正当我为编程拨号发愁时,在<a href=http://delphi32.sonic.net.cn/delphigb/default.htm LAST_VISIT=905832334 LAST_MODIFIED=898835255 ADD_DATE=898835268>32 Bit Delphi 深度历险</a>发现<br><b>一个好控件:Dialup。</b>安装后,用起来简直好极了,看了demo<br>后我知道,我需要的90%以上的拨号功能都能用它实现。我越来越<br>喜欢Delphi,有了开放的控件,编起程序来用上别人做的现成的<br>好东西,方便极了。</span></p><pre><span class=font1>值得一提的是<a href=http://delphi32.sonic.net.cn/delphigb/default.htm LAST_VISIT=905832334 LAST_MODIFIED=898835255 ADD_DATE=898835268>32 Bit Delphi 深度历险</a>这个站点,看来已有两
三个月没有更新过了,但仍有很大的参考价值,速度也比较快。这
里的控件是我所见过的中文站点中最多、最全的建议朋友们如果想
找控件的话,就到这里来找找。</span></pre><pre><span class=font1>98-10-12 1:15
上月调试GameMenu时,出现了<b>莫名其妙的系统故障</b>,结果再次打
开Gamemenu.dpr时,竟然连续出现错误,大体是什么VCL30.dpr,
什么&quot;Access violation&quot; &quot;FFFFFFFF&quot;,还有
  Error reading FileList.columns: Stream read error.

等等。把子目录下的内容完全拷贝到另一台好机器上,同样错误
再次出现。一个多月前倒是有个备份,可那以后我又改了好多……
真的不想重新来过!只好想想办法。在资源管理器里双点main.dfm,
Delphi现身出来把它打开成为一个文本文件(用Notepad等工具
是不成的。)记得有一个错误信息是关于“ListView”的。找到
ListView那行:</span></pre><pre><span class=font1>    object FileList: TListView
      Left = 0
      Top = 0
      Width = 246
      Height = 329
      Align = alClient
      ColumnClick = False
      OnClick = FileListDblClick
      Columns = &lt;
        item
          Caption = '文件名'
          Width = 450
        end
        item
          Caption = '大小'
        end
        item
          Caption = '文件类型'
          Width = 150
        end
        item
          Caption = '文件日期'
          Width = 130
        end&gt;
        ... (略去12行)
    end
看来这个ListView的Column属性可能不大对。试着把Columns=
到end&gt;和它们之间的行删掉,save,再打开Gamemenu.dpr,行
了!!!

但在进一步调试时,存盘后又出现了同样的错误。我增加了一
个ListView,各项属性调成和FileList一样,删除FileList,
把就增元件改名为ListView,这回彻底解决了问题。

这可是我自学Delphi以来解决的影响最大的困难。我想回头再
仔细看一下到底是哪一行出的毛病,但就是找不着了。虽然有
一点点莫名其妙,但仍值得大书特书。</span></pre><pre><span class=font1>1998-10-10
正在编写一个简易浏览器,在<b>自动拨号上网</b>部分遇到了一点麻烦:
  shellexecute(self.handle,'connect',
               'C:\WINDOWS\Start Menu\Internet\169.lnk','','',sw_show);
运行到此,会出现熟悉的拨号窗口,但要等待按回车。怎样才能自动拨号呢?
(又:怎样得到当前IP地址?)</span></pre><pre><span class=font1>1998-10-10
昨天上《中国计算机报》站点一看,简直要打心眼里乐出来:这期发表了两篇!不
错嘛。可惜这两个星期忙着搬家,几乎都荒废了Delphi的学习。今天上网,又找
到许多中文Delphi站点。看到网上的朋友个个功力非凡,我心忐忑;下载了几个
好东西,我意踌躇。革命尚未成功,同志仍需努力!

98-10-10 23:14
<b>定制 Code Insight</b>
在编制Delphi程序时,有一个小小的细节老是处理不好:输入
begin ... end 语句对,有人为了减少出错的机会,喜欢这样
做:输入“begin”,回车,回车,“end;”,再用光标键回
到begin下方继续输入内容;有人为减少击键次数,直接输入
begin,内容,end。对我来说,这两种方法都有可取之处。用
Code Insight试试吧。在主菜单里选 Tools -&gt; Environment,
找到 Code Insight 一栏,点击“Add”,“Shortcut Name”
为 begin,“Description”输入“begin ... end”。最后在
下方的文本框里输入:

begin
  |
end;

OK。回到熟悉的编辑窗口,输入begin,按Ctrl-J,真爽!不知
这个小小的改动,将会带来多少方便。

⌨️ 快捷键说明

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