[Lazarus] Migające pole Edit
#1
Hmmm, muszę ciut zmodyfikowac program i przerobić jedno pole edycyjne, powiedzmy Edit2, tak, zeby przy uruchomieniu programu migało pulsacyjnie żółtym kolorem. No oczywiście nie cały czas tylko ze cztery razy i koniec (zwrocenie uwagi).
Jak to rozegrać żeby rozwiązanie było "lekkie" ... pętla przy aktywacji formy... może oddzielny wątek ??
Jakieś propozycje?

[dopisane później]
Teraz siadłem do środowiska i na szybko zrobiłem to na osobnym wątku. Wątek nie jest uruchamiany, przy aktywacji formy, bo minimalnie/widocznie "zamrażał " start. Świetnie natomiast sprawdza się uruchomienie wątku przy wyjściu z jakiegoś innego elementu. W przykładzie poniżej zrobiłem to na wyjściu z Edit1.

Kod:
type
 TWatek = class(TThread)
 protected
   procedure Execute; override;
   procedure Migaj;
end;


Kod:
//wyjscie z Edit1 - urchomienie wątku - teraz Edit2 miga
procedure TForm1.Edit1Exit(Sender: TObject);
var
 Watek: TWatek;
begin
 Watek:= TWatek.Create(False);
end;


procedure TWatek.Execute;
begin
 FreeOnTerminate:= TRUE;
 Synchronize(@Migaj);
end;


procedure TWatek.Migaj;
var
 i: Byte;
begin
 for i:= 0 to 4 do
 begin
   case i of
   0: Form1.Edit2.Color:=clDefault;
   1: Form1.Edit2.Color:=clYellow;
   2: Form1.Edit2.Color:=clDefault;
   3: Form1.Edit2.Color:=clYellow;
   4: Form1.Edit2.Color:=clDefault;
   end;
    Application.ProcessMessages;
    Sleep(500);
 end;
end;
Post sprawdzony przez  Arcabit Internet Security
Odpowiedz
#2
Kod:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Inc(count);
         if (Edit1.Color=clDefault) then
         begin
              Edit1.Color:=clYellow;
         end
         else
             Edit1.Color:=clDefault;

    if count>7 then Timer1.Enabled:=false;

end;
Bez użycia wątków.
1. Zawsze mam rację.
2. Jeśli nie mam racji, patrz pkt 1.
Odpowiedz




Użytkownicy przeglądający ten wątek: 1 gości