点击button1后调用一个线程每隔0.5ms改变shape1的颜色,来实现闪烁效果,在点击button2后关闭线程。分不多,请各位大侠帮忙。

解决方案 »

  1.   

    是这样的,我动态创建了36个shape,用来当指示灯1~36。另有一个ComboBox1,String的值对应为1~36,如果ComboBox1的Text值为N(N介于1~36之间),则第N个shape闪烁,就是每隔一段时间(例如0.5ms)切换Brush的颜色,同时不影响其它操作,如果点击确定按钮后则该shape的颜色固定为红色。最原先想用两个timer,分别控制延时,然后在ComboBox的change事件里面判断当前的值,然后把Timer1的Enabled属性设为True。主要问题是这样的:在点击comoBox的下拉菜单后,先随便选个值,则对应shape闪烁,然后再随便选个值(注意:两次选值时ComboBox的下拉菜单要一直打开),当前被选中的值对应的shape也闪烁。问题来了:第一个shape可能还是红色的,我怎么把它擦掉。简单点说就是我现在不知道onchange事件怎么写才能保证当前选择的shape闪烁而原先的哪个不为红色。下面的是两个timer的,开始Enabled属性都为False;哪位高人指点一下change事件该怎么写?不用线程也可以。
    procedure TParaAddForm.Timer1Timer(Sender: TObject);
    var
      I,J: Integer;
    begin
      //**************************红色********************//
      I:=ComboBox10.ItemIndex;
      J:=StrToInt(ComboBox10.Items.Strings[I]);
      lgtShp[J].Brush.Color:=clMaroon;
      Timer1.Enabled:=False;
      Timer2.Enabled:=True;
    end;procedure TParaAddForm.Timer2Timer(Sender: TObject);
    var
      I,J: Integer;
    begin
      //**************************灰色********************//
      I:=ComboBox10.ItemIndex;
      J:=StrToInt(ComboBox10.Items.Strings[I]);
      lgtShp[J].Brush.Color:=clBtnface;
      Timer2.Enabled:=False;
      Timer1.Enabled:=True;
    end;
      

  2.   

    用一个TIMER就可闪烁了;判断下当前颜色;
      

  3.   

    outer2000(天外流星),虽然没有给出我想要的,但是你第二次回复到是点醒了我,让我少用了一个timer,优化了代码,目前问题已经搞定,谢谢。另外也感谢chinaok朋友。