TTimer w pragramie konsolowym

0

Chciałbym w programie konsolowym utworzyć obiekt typu TTimer. W VCL muszę użyć unitu ExtCtrls, a w aplikacji konsolowej?

0

TTimer jest zdefiniowany w module ExtCtrls, zatem właśnie ten moduł musisz wykorzystać.

0

Nie rozpoznaje modułu ExtCtrls. Aplikacja konsolowa w Delphi Tokyo. Zawsze pisałem programiki okienkowe wykorzystujące VCL, a tu stawiam pierwsze kroki.

1

W Tokyo przy aplikacjach konsolowych gdy chcesz wykorzystać moduł VCL musisz podać jego pełną nazwę Vcl.ExtCtrls, bo Delphi się nie domyśli (chyba nie przewidzieli, że ktoś w konsoli będzie szalał z VCL).

0

Wpisuję Vcl.ExtCtrls do Uses, ale nie też nie rozpoznaje modułu.
To znaczy, że w aplikacjach konsolowych nie używa się timerów? Dlaczego?

0

Ponieważ masz do dyspozycji zwyczajne wątki (TThread).

0

Dziękuję za odpowiedź. Tak się właśnie domyślałem.

2
didzni napisał(a):

Wpisuję Vcl.ExtCtrls do Uses, ale nie też nie rozpoznaje modułu.

Bzdura moduł musi widzieć i naprawdę nie wiem co robisz źle.

didzni napisał(a):

To znaczy, że w aplikacjach konsolowych nie używa się timerów? Dlaczego?

Można używać ale jest to utrudnione, ze względu na konieczną obsługę pętli komunikatów.
Np. https://stackoverflow.com/questions/12026951/using-vcl-ttimer-in-delphi-console-application

2

Oczywiście, że działa. Może nie najlepszy przykład ale działa:

program ConsoleTimer;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, Vcl.ExtCtrls, Vcl.Forms;

type
  TTimerClass = class
    procedure OnTimerProc(Sender: TObject);
  end;

var
  T1: TTimer;
  TimerClass: TTimerClass;
  I: Integer;

procedure TTimerClass.OnTimerProc(Sender: TObject);
begin
  Writeln('OnTimer');
end;

begin
  try
    TimerClass := TTimerClass.Create;
    try
      T1 := TTimer.Create(nil);
      try
        T1.OnTimer := TimerClass.OnTimerProc;
        T1.Enabled := True;
        for I := 0 to 30 do
        begin
          Application.ProcessMessages;
          Sleep(100);
        end;
        Writeln(':)');
        Sleep(2000);
      finally
        T1.Free;
      end;
    finally
      TimerClass.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
0

Fakt, da się. Zapomniałem o Vcl.Forms. Przeanalizowałem przykład. Już nie będę szalał. Będę używał wątków. Z tym Timerem to tak z przyzwyczajenia. A plik wynikowy z VCLem jest trzy razy większy. O, już jadą po mnie......

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