btn=class(Tshape)  
   Public  
     des:string;  
       id:Integer;  
   procedure  clicked(Sender:  TObject);  
 
 
 with  cdstables  do  
 begin  
         cdsTables.open;  
         cdsTables.First;  
             for  i:=0  to  cdsTables.RecordCount-1 do  
             begin  
with  btn.Create(self)  do  
 begin;  
ID:=cdsTables.FieldByName('ID').Asinteger;  
Top:=cdsTables.FieldByName('X').AsInteger;  
Left:=cdsTables.FieldByName('Y').AsInteger;  
 end;  
END;  
 
通过以上创建完毕后,如果当cdsTables.FieldByName('idyy').Asstring,发生变化的时候,如何能找到对应的panel,使其中对应的panel改变颜色?  
谢谢@@@

解决方案 »

  1.   

    PanList: array[1..50] of TPanle;  這樣定義就好了,根據數據庫的記錄條產生上下界數。
      

  2.   

    用楼上的,或者用动态数组,先根据查询得到要分配的内存大小,然后从0历遍到cdsTables.RecordCount-1
      

  3.   


    btn=class(Tshape)  
       Public  
         des:string;  
           id:Integer;  
       procedure  clicked(Sender:  TObject);  
    例如定义动态数组
    var
    btnAry : array of btn
     with  cdstables  do  
     begin  
             cdsTables.open;  
             cdsTables.First;  
    //给动态数组分配大小,下标从0..cdsTables.RecordCount-1 
              setlength(btnAry,cdsTables.RecordCount );
              for  i:=0  to  cdsTables.RecordCount-1 do  
              begin  
               btnary[i] := btn.create(nil)
               with  btnary[i]  do  
              begin;  
                ID:=cdsTables.FieldByName('ID').Asinteger;  
                Top:=cdsTables.FieldByName('X').AsInteger;  
                Left:=cdsTables.FieldByName('Y').AsInteger;  
               end;  
     END;  历遍的时候,就可以直接根据数组下标来历遍了