窗体内有很多种控件,启动时我想让它显示crHourGlass,包括,Panel里的控件也是这样显示,启动后显示正常
for   I   :=   0   to   ComponentCount   -   1   do   
          if   Components[I]   is   TWinControl   then   
          begin   
             (Components[I] as TLabel).Cursor:=crHourGlass;
             (Components[I] as Tdbgrid).Cursor:=crHourGlass;
             (Components[I] as Tedit).Cursor:=crHourGlass;
             (Components[I] as Tbutton).Cursor:=crHourGlass;
             (Components[I] as TstaticText).Cursor:=crHourGlass;
             (Components[I] as Tcombobox).Cursor:=crHourGlass;
          end;
为何上面的代码运行时会报错呢!!

解决方案 »

  1.   


    for  I  :=  0  to  ComponentCount  -  1  do
              if  Components[I]  is  TWinControl  then
              begin
                TWinControl(Components[I]).Cursor := crHelp;
              end;
    (Components[I] as TLabel)不同类型转换的时候会有问题
      

  2.   

    这样也可以procedure TForm1.FormCreate(Sender: TObject);
    var
      I: integer;
    begin
    for  I  :=  0  to  ComponentCount  -  1  do
              if  Components[I]  is  TWinControl  then
              begin
                (Components[i] as TWinControl).Cursor := crHelp ;
              end;
    end;
      

  3.   

    你的问题是在循环中没有对Components[I]进行类型判断,一个类型被同时转换为多中类型,所以会错
      

  4.   

    for  I  :=  0  to  ComponentCount  -  1  do  
              if  Components[I]  is  TWinControl  then  
              begin  
                if (Components[I] is TLabel) then (Components[I] as TLabel).Cursor:=crHourGlass; 
                 .....
              end; 
    其实不用这么麻烦,直接
    Screen.Cursor := crHourGlass;
    即可。
      

  5.   

    Screen.Cursor := crHourGlass; 
    俺就这么用的 限定下范围就可以了