<font color=red>补课</font>,api,指针,还有外语。。(150分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
Private<br>TrayIcon:PNOTIFYICONDATA;<br>Icon:TIcon;<br>....<br>Procedure TFormCreate(Sender:Tobject);<br>&nbsp; begin<br>&nbsp; &nbsp;New(TrayIcon);<br>&nbsp; &nbsp;TrayIcon.cbSize:=Sizeof(TrayIcon^);<br>&nbsp; //Sizeof 函数:Returns the number of bytes occupied by a variable or type.<br>&nbsp; //问题0:忘了指针怎么用了,用指针能在这里能得到一个Number,不明白 <br>&nbsp; &nbsp;TrayIcon.uID:=200; &nbsp;// &nbsp;Application-defined identifier of the taskbar icon ,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;问题1:为什么是200呢?这个取值得区间是什么?<br>&nbsp; &nbsp;TrayIcon.Wnd:=Handle;//问题2:Handle默认是Form的句柄么?<br>&nbsp; &nbsp; &nbsp;//Handle to the window that will receive notification messages<br>&nbsp; &nbsp; &nbsp;//associated with an icon in the taskbar status area. <br>&nbsp; <br><br>
 
<br>&nbsp; &nbsp;// &nbsp;问题1:为什么是200呢?这个取值得区间是什么?<br>&nbsp; 它要你自己定一个一个数,随便给一个吧。如果你要添加个2任务<br>栏图标,这两个uID就不能一样。<br><br>&nbsp; //问题2:Handle默认是Form的句柄么?<br>&nbsp; Handle是要接收taskbar 图标消息的窗口句柄。
 
问题2:Handle默认是Form的句柄么?<br>是的,应为这个过程的父是TForm。所以,若没有说明,就会认为是他父的属性。<br>for example:<br>form2.caption---&gt;'form2';form1.caption--&gt;'form1'<br>procedure TForm1.XXX;<br>begin<br>showmessage(form2.caption);//show出的是 form2<br>showmessage(caption);//show出的是 form1<br>//这其实是pascal中的作用域问题<br>end;
 
错了。应该是<br>TrayIcon: TNotifyIconData;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ~~~~<br><br>procedure TForm1.FormCreate(...);<br>begin<br>&nbsp; with TrayIcon do begin<br>&nbsp; &nbsp; cbSize := SizeOf(TNotifyIconData);<br>&nbsp; &nbsp; //如果是SizeOf(TrayIcon^)返回值永远是8<br>&nbsp; &nbsp; uID := 200; &nbsp; //这个值可以是任何整数<br>&nbsp; &nbsp; Wnd := Handle; &nbsp; &nbsp;//这段代码所在模块是Unit1,所以Handle是TForm1.Handle<br>&nbsp; end;<br>end;<br>
 
uID主要是用于定义通告消息,如:<br>const<br>&nbsp; WM_NOTIFYICON = WM_USER + 200;//200和uID相同
 
问题0<br>Sizeof中的值应当是一个类型,应该是Sizeof(TNOTIFYICONDATA);(PNOTIFYICONDATA是指针<br>类型,所以取其SIZE是不准的.只有4字节).<br><br>问题2Handle默认的当然是窗口的句柄,不过用WITH除外,WITH内HANDLE是WITH当中变量的句<br>柄(如果有句柄的话).
 
To JohnsonGuo: “这段代码所在模块是Unit1,所以Handle是TForm1.Handle”。<br>&nbsp; 此言差矣!<br>&nbsp; Handle 是对象属性之一,其实这句话省略了一点,完整的写法应该是:Self.Handle 。<br>Self 相当于 C++ 的 this ,但是 Delphi 允许省略这个前缀,前提条件是该语句应处在<br>对象的类方法中,FormCreate 是 TForm1 的类方法,所以 Handle 默认是指 Form1 的句<br>柄。<br>&nbsp; 按照 JohnsonGuo 大虾的说法,如果一个 unit 里面有多个 class 该怎么解释呢?<br>其实 cgh0717 大虾在前面已经说对了。<br>&nbsp; 另外,SizeOf 方法的对象应该是“类型”或者变量,而不是指针。
 
我怎么感觉有点怪怪的, TrayIcon是指针类型的啊,<br>怎么可以用TrayIcon.cbsize呢?TrayIcon^.cbsize才对吧。<br><br>千中元看到我在OICQ上给你的留言了么?呵呵
 
johnsonGuo这段代码没错(机器是最好的检验。呵呵)<br>所以大家请继续,特别关注sizeof 里的。。<br>cheka, 什么留言,我用的是2000版本,可能收不到。ourdelphi@163.net,你再copy一次<br>&nbsp;发过来吧。
 
cheka,对指针操作,不加^好象是一样的!当然,我也已经习惯加了!<br>》Sizeof(TrayIcon^);<br>是sizeof(NotifyIconData)<br>》uID<br>随便<br>》TrayIcon.Wnd:=Handle<br>对,是这样的!<br><br><br>
 
》不加^好象是一样的<br>我连汉语也不懂了:(
 
sizeof 里面的,你原来的写法也可以,不过,<br>确实TrayIcon用 PNOTIFYICONDATA 不如用 TNotifyIconData 方便。<br>因为你用 PNOTIFYICONDATA 的话,它不过是个指针,还要用new来申请<br>内存,用完还要Dispose之。 而用 TNotifyIconData 是在进入过程的时候<br>直接在栈中申请内存,而退出的时候就无须释放了。<br><br>你原来的写法,Sizeof(TrayIcon^) 是得到TrayIcon指向的内存的大小。<br>要是写成 Sizeof(TrayIcon) 就不对了,这个是指针,在win32中,指针<br>是32位的,所以固定是4个字节<br><br>
 
就是说P^.X和P.X好象一样!
 
多人接受答案了。
 
后退
顶部