Unit MainForm;

{
  Definice tridy a obsluha hlavniho formulare
  programu pro praci s ovladacem logptm.sys
}

Interface

Uses
  Windows, Messages, SysUtils, Variants,
  Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, ExtCtrls;

Type
  TMainWindow = Class (TForm)
    ListView1: TListView;
    MainMenu1: TMainMenu;
    Akce1: TMenuItem;
    Start1: TMenuItem;
    Stop1: TMenuItem;
    N1: TMenuItem;
    Konec1: TMenuItem;
    pravy1: TMenuItem;
    Vymazatudlosti1: TMenuItem;
    Timer1: TTimer;
    Procedure Konec1Click(Sender: TObject);
    Procedure FormCreate(Sender: TObject);
    Procedure Start1Click(Sender: TObject);
    Procedure Vymazatudlosti1Click(Sender: TObject);
    Procedure Stop1Click(Sender: TObject);
    Procedure FormClose(Sender: TObject; var Action: TCloseAction);
    Procedure Timer1Timer(Sender: TObject);
  end;

Var
  MainWindow: TMainWindow;

Implementation

Uses
  DriverCommands, Events, Utils;

{$R *.DFM}


Procedure TMainWindow.Konec1Click(Sender: TObject);
{
  Reakce na kliknuti na polozku menu "Konec".
  Formular se jednoduse zavre.
}
begin
Close;
end;

Procedure TMainWindow.FormCreate(Sender: TObject);
{
  Volana tesne po vytvoreni formulare. Pokusi se
  nainstalovat ovladac logpmt.sys do systemu. Pokud
  se operace podari, umozni stisknout polozku "Start"
  v menu.
}
Var
  Ret : Boolean;
begin
Ret := LogptmDriverInit;
Start1.Enabled := Ret;
end;

Procedure TMainWindow.Start1Click(Sender: TObject);
{
  Reakce na stisk polozky "Start". Spusti ovladac,
  pripoji se k jeho zarizeni a zapne casovac, pri
  jehoz obsluze budou odebirany udalosti zaznamenane
  ovladacem.
}
Var
  Res : Boolean;
begin
Res := LogptmDriverLoad;
If Res Then
  begin
  // Ovladac je spusten, tudiz klikani na
  // polozku "Start" by nemelo valny smysl,
  // a proto se zakaze
  Start1.Enabled := False;
  Stop1.Enabled := True;
  // Start casovace
  Timer1.Enabled := True;
  end;
end;

Procedure TMainWindow.Vymazatudlosti1Click(Sender: TObject);
{
  Reakce na stisk polozky "Vymazat udalosti".
  Smaze obsah komponenty ListView, ktera
  zobrazuje zachycene udalosti.
}
begin
ListView1.Clear;
end;

procedure TMainWindow.Stop1Click(Sender: TObject);
{
  Reakce na volbu "Stop".
  Zastavi casovac, odpoji se od zarizeni
  a uvolni ovladac logptm.sys z jadra.
}
Var
  Res : Boolean;
begin
Timer1.Enabled := False;
LogptmDriverUnload;
Stop1.Enabled := False;
Start1.Enabled := True;
end;

Procedure TMainWindow.FormClose(Sender: TObject; var Action: TCloseAction);
{
  Vola se behem zavirani formulare (po vyvolani metody
  Close). Odinstauje ovladac. Pokud je aktivni, uvolni
   jej z jadra.
}
begin
If Stop1.Enabled Then
  LogptmDriverUnload;

LogptmDriverFinit;
end;

Procedure TMainWindow.Timer1Timer(Sender: TObject);
{
  Obsluha casovace. Zde probiha transfer udalosti
  mezi ovladacem a aplikaci.
}

Var
  Res : Boolean;
  E : PUM_EVENT;
begin
Res := True;
// Casovac "tika" kazdou vterinu. Pri kazdem tiku se odebiraji z
// ovladace udalosti, dokud se jejich seznam nevyprazdni,
While Res Do
  begin
  Res := LogptmDriverGetEvent(E);
  If Res Then
    begin
    DisplayEvent(E, ListView1.Items.Add);
    HeapFree(GetProcessHeap, 0, E);
    end;
  end;
end;

End.

