当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 新苏黎世报的一篇文章回顾了非典型肺炎在中国的蔓延情况和中国政府应对危机的做法。文章最后得出两项结论: “第一,不容忽视的是,中国的经济现代化以及随之而来的中国融入世界经济的过程必然产生深远的社会后果。第二,非典型肺炎表明,不进行彻底的政治改革,中国的经济改革必然只是残缺易碎的单个作品。回顾一下最近几周和几个月发生的事情,人们就可以意识到,中国的现实生活中,无能和威权相互矛盾地交织在一起:一......
 ·能给个域名->ip地址的例子吗    »显示摘要«
    摘要: 如题 在线等待谢谢 ......


今天在上遇見一貼,是關於vcl屬性的問題,胡亂給人家答了一通,發現自己反而糊塗了

今天在csdn上遇見一貼,是關於vcl屬性的問題,胡亂給人家答了一通,發現自己反而糊塗了  
   
  那貼是說在他自己動態生成的一個空件里加屬性  
  type  
      MYStaticText=class(TStaticText)  
      published  
          property   onMouseWheel;  
          property   OnMouseWheelDown;  
          property   OnMouseWheelUp;  
      end;      
   
   
  我回貼:  
   
  這三個屬性在TControl中聲明如下  
   
  protected  
  property   OnMouseWheel:   TMouseWheelEvent   read   FOnMouseWheel   write   FOnMouseWheel;  
  property   OnMouseWheelDown:   TMouseWheelUpDownEvent   read   FOnMouseWheelDown  
              write   FOnMouseWheelDown;  
  property   OnMouseWheelUp:   TMouseWheelUpDownEvent   read   FOnMouseWheelUp   write  
              FOnMouseWheelUp;  
   
  因爲是protected,所以可以被它的派生類訪問,  
   
  TControl->TWinControl->TCustomStaticText->TStaticText->MYStaticText  
   
  所以onMouseWheel;   OnMouseWheelDown;   OnMouseWheelUp;你就不用再……  
   
   
  其實這裡已經錯了,打開一個StaticText,發現它的事件里根本沒有這三個屬性  
  其實這裡還能理解,因爲看StaticText的定義,publish部分沒有這三個屬性。  
  好,所以  
   
  他回貼:  
   
  我看了TForm的声明,其中就有MouseWheel属性,而TForm也是由TControl派生而来的。  
   
   
  我一看是真的!但是只是  
   
  property   OnMouseWheel;  
   
  沒有像TControl那樣複雜的從屬性域中去讀寫,  
   
  那麽按照這個道理,我就離所應當的理解成派生類里不需重新定義一個屬性的讀寫域  
   
  只要做一下聲明就行了  
   
  但是打開一個基本的form,會看到Tform1並沒有聲明這些屬性,但是在屬性列表里照樣可以看見  
  type  
      TForm1   =   class(TForm)  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
     
   
  所以我現在糊塗了,  
   
  同樣一個定義  
  TStaticText   =   class(TCustomStaticText)  
  TForm1   =   class(TForm)  
   
  且TCustomStaticText和TForm都是從TControl中派生的,  
  爲什麽在TControl中聲明的一些屬性會丟掉,就像   OnMouseWheel;  
   
  如果是因爲在派生類里沒有聲明的原因,那麽類死  
  type  
      TForm1   =   class(TForm)  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  tform1怎麽不丟屬性?     這是怎麽回事?    
 

NO.1   作者: firetoucher

嗯,这位仁兄真有鲁迅先生遗风哈

NO.2   作者: ehom

本就如此,是你理解错误,Protected部分声明只是让其在派生类中可见,但不可有可用,而只有在Published和Public部分声明才能在派生类中使用,当然这里如果不是做成控见,没必要加入运行期信息,应该在Public部分声明,而非Published

NO.3   作者: sunnf

up

NO.4   作者: qxj

阿德你的信誉值怎么少了?

NO.5   作者: rustle

那么还有个疑问就是如果在派生类里面没有将其Published  
  那么这个属性就不能用吗?  
   
      在类的继承树上的任何一个位置public或者published了这个属性,那么从此以后它就能用了  
   
      protected的只能被子类使用,private的外部不可见  
   
      但是如果在同一单元内,就都是可见的了。  
       
      published和public的区别仅仅在于如果你将它作为控件发布的时候在不在object   inspertor中出现而已...  
 

NO.6   作者: tpmao

真是的   ,吾人子弟1!!!真是的   ,吾人子弟1!!!真是的   ,吾人子弟1!!!真是的   ,吾人子弟1!!!

NO.7   作者: rustle

因为label1接收不到这个消息啊  
   
  不然borland为什么不公开这个...

NO.8   作者: FrameSniper

哈哈,信誉值少了,呵呵,好高兴啊,呵呵楼主的信誉值少了,呵呵!!!!

NO.9   作者: rustle

unit   Unit1;  
   
  interface  
   
  uses  
      Forms,   Dialogs,   StdCtrls,   Controls;  
   
  type  
      TLabelxxx   =   class(Tlabel)  
      private  
          procedure   CMMouseWheel(var   Message:   TCMMouseWheel);   message   CM_MOUSEWHEEL;  
      end;  
      TForm1   =   class(TForm)  
          procedure   Label1Click(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          xxx:   TLabelxxx;  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.Label1Click(Sender:   TObject);  
  begin  
   
  end;  
   
  {   TLabelxxx   }  
   
  procedure   TLabelxxx.CMMouseWheel(var   Message:   TCMMouseWheel);  
  begin  
      ShowMessage(xxx);  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      xxx   :=   TLabelxxx.Create(Self);  
      xxx.Parent   :=   self;  
      xxx.Left   :=   0;  
      xxx.   :=   0;  
      xxx.Width   :=   self.Width;  
      xxx.Height   :=   self.Height;  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      xxx.Free;  
  end;  
   
  end.  
      onmousewheel事件是,通过CM_MOUSEWHEEL触发的,而作为TLabel并不接收到这个消息,上面的程序演示了这一点,所以borland并不公开Onmousewheel,Tbutton是可以接收到的,但是对于Button,OnmouseWheel没有意思,所以同样不公开...  
      over...  
      你可以将上面的TLabel换成其他的试试...


    摘要: 在模拟器上一切正常,但在真实机器就会抛出异常,什么都不写出来 代码如下 public void paint(graphics g) { for (int i = 0; i < 4; i++) { //清空上次写的号码 g.setcolor(255, 255, 255); g.fillrect(start_x + 1, start_y + cell_height * i + ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE