unit GlobalForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TGlobalFrm = class(TForm)
    GlobalProcessEdit: TEdit;
    GlobalThreadEdit: TEdit;
    LocalThreadEdit: TEdit;
    SharedDataEdit: TEdit;
    ReadBtn: TButton;
    IncBtn: TButton;
    DecBtn: TButton;
    SetBtn: TButton;
    CreateThread: TButton;
    procedure ReadBtnClick(Sender: TObject);
    procedure IncBtnClick(Sender: TObject);
    procedure DecBtnClick(Sender: TObject);
    procedure SetBtnClick(Sender: TObject);
    procedure CreateThreadClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  GlobalFrm: TGlobalFrm;

implementation

uses GlobalHdr, DelayThread;

procedure ReadInfo(var GlobalInfo: TGlobalInfo; var LocalThreads: integer);
  stdcall; external 'GlobalData.dll';

procedure SetSharedInteger(NewValue: integer);
  stdcall; external 'GlobalData.dll';

procedure IncSharedInteger;
  stdcall; external 'GlobalData.dll';

procedure DecSharedInteger;
  stdcall; external 'GlobalData.dll';


{$R *.DFM}

procedure TGlobalFrm.ReadBtnClick(Sender: TObject);

var
  GlobalInfo: TGlobalInfo;
  LocalThreads: integer;

begin
  ReadInfo(GlobalInfo, LocalThreads);
  GlobalProcessEdit.Text := IntToStr(GlobalInfo.GlobalProcesses);
  GlobalThreadEdit.Text := IntToStr(GlobalInfo.GlobalThreads);
  SharedDataEdit.Text := IntToStr(GlobalInfo.SharedNumber);

  LocalThreadEdit.Text := IntToStr(LocalThreads);
end;

procedure TGlobalFrm.IncBtnClick(Sender: TObject);
begin
  IncSharedInteger;
  ReadBtnClick(Sender);
end;

procedure TGlobalFrm.DecBtnClick(Sender: TObject);
begin
  DecSharedInteger;
  ReadBtnClick(Sender);
end;

procedure TGlobalFrm.SetBtnClick(Sender: TObject);

var
  NewInt: integer;

begin
  NewInt := StrToInt(SharedDataEdit.Text);
  SetSharedInteger(NewInt);
end;

procedure TGlobalFrm.CreateThreadClick(Sender: TObject);

var
  NewThread: TDelayThread;

begin
  NewThread := TDelayThread.Create(true);
  NewThread.FreeOnTerminate := true;
  NewThread.Resume;
end;

end.