Zmiana wartości zmiennej podczas repeat

0

Mam w funkcji buttona pętlę repeat która przeszukuje kolejno linie memo oraz procedurę WMHOTKEY w której po naciśnięciu klawisza Esc zmienia się wartość zmiennej.
Problem polega na tym, że wartość tej mojej zmiennej zmienia się dopiero po zakończeniu pętli a mnie właśnie chodzi o to by zmieniała się w chwili naciśnięcia przycisku podczas trwania pętli.
Co zatem radzicie?
Pozdrawiam i z góry dziękuję za odpowiedzi

0

Radzę przetrzeźwieć zanim coś nasmarujesz na forum. Wartość zmiennej zmienia się podczas wpisania jakieś wartości do niej.

0

yhh skąd tyle sarkazmu w ludziach...
Jeśli w mojej procedurze po naciśnięciu przycisku wartość zmienia się np na 1 to chyba przypisuje do niej wartość?
Tyle że ta waartość przypisuje sie dopiero po zakończeniu pętli

0

@MCvx - podaj kod, albo szklaną kulę do wróżenia.

0

Zmienia się po zakończeniu pętli, bo nie używasz wątków.

0

Dajmy na to, że mam taki program:

  private
    { Private declarations }
        ESC : Integer;
    procedure WMHOTKEY(var Msg : TMessage); message WM_HOTKEY;

var
  X : integer;

procedure TForm1.WMHOTKEY(var Msg: TMessage);
begin
if Msg.WParam = ESC then
begin
ShowMessage('Przypisywanie X = 1');
X := 1;
end;
 end;

procedure TForm1.PracaClick(Sender: TObject);
Var
L : Integer;
begin
If XY.Lines[0] <> '' then
begin
repeat
For L := 0 to XY.Lines.Count -1 do
begin
{...}
If X = 1 then ShowMessage('Zmiana wartości');
Sleep(500);
end;
until (L = Xy.Lines.Count);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
const
VK_ESCAPE = 27;
begin
  ESC := GlobalAddAtom('Hotkey1');
  RegisterHotKey(Handle, ESC, 0, VK_ESCAPE);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, ESC);
  GlobalDeleteAtom(ESC);
end;

I program będzie działał na takiej zasadzie, że komunikat "Przypisywanie X = 1" pojawi się dopiero po zakończeniu pętli, a komunikat "Zmiana wartości" wyświetli się dopiero po drugim wciśnięciu przycisku (ale to wiadomo dlaczego w tym wypadku) a w moim przypadku potrzebuje uzyskać taki efekt, że któryś z komunikatów wyświetli sie w chwili wciśnięcia klawisza

0

chyba po prostu wystarczyło dodać u mnie Application.ProcessMessages;

1

To jest bardzo złe rozwiązanie { Application.ProcessMessages }.
Lepiej zrób tą pętle na wątkach lub ewentualnie na timierze { ba w związku z tym sleep(500) timer to nawet lepsze rozwiązanie }

1 użytkowników online, w tym zalogowanych: 0, gości: 1