procedure TFrmMain.sbCancleBmp;
var 
   i:Integer;
   sbRegRun:TSpeedButton;
begin
   sbRegRun:=TSpeedButton.Create(Self);
   sbRegRun.Parent :=plSetting;
   For i:=0 to FrmMain.ComponentCount-1 do Begin
     if FrmMain.Components[i] is TSpeedButton then begin 
         sbRegRun:=TSpeedButton(FrmMain.Components[i]);
           if sbRegRun.Name = sbCollocate.Name  then exit ;
           if sbregrun.Name <>'sbBmp' then begin
             sbRegRun.Glyph.Assign(nil);  
               if (sbRegRun.Name=sbName) Then begin
                  sbRegRun.Glyph:=sbBmp.Glyph ;
               end;
           end;
     end;
   end;
   sbRegRun.Free;
end;
不好意思上面的代码粘错了!

解决方案 »

  1.   

    看的好晕,目的是不是着重显示被激活的SPDBTN???
    如果是的话,考虑一下用tag来处理
    出现那样的问题,理论上不可能,是否把panel内的SPDBTN的onclick统统指向了sbCancleBmp?????????没看完的说
      

  2.   

    你的代码很危险。应该这样procedure TFrmMain.sbCancleBmp;
    var 
       i:Integer;
       sbRegRun:TSpeedButton;
       sbTemp :TSpeedButton;
    begin
       sbRegRun:=TSpeedButton.Create(Self);
       sbRegRun.Parent :=plSetting;
       For i:=0 to FrmMain.ComponentCount-1 do Begin
         if FrmMain.Components[i] is TSpeedButton then begin 
             sbTemp:=TSpeedButton(FrmMain.Components[i]);
               if sbTemp.Name = sbCollocate.Name  then exit ;
               if sbTemp.Name <>'sbBmp' then begin
                 sbTemp.Glyph.Assign(nil);  
                   if (sbTemp.Name=sbName) Then begin
                      sbTemp.Glyph:=sbBmp.Glyph ;
                   end;
               end;
         end;
       end;
       sbRegRun.Free;
    end;总之,不要让你的sbRegRun指针乱指才好。希望对你有启发。你的程序的变量我还没猜明白。呵呵
      

  3.   

    呵呵~!
    我怎么觉得你的代码有问题呢?
    sbTemp还没初始化吧!我是个菜鸟,我是这样认为的!
      

  4.   

    考!问题搞得莫名其妙!
     这个sbCollocate也不清楚!
     我想应该是这样的:
      if sbTemp.Name = sbCollocate.Name  then Continue;