Vous êtes sur la page 1sur 6

TITULO DA JANELA ATIVA:

var
titulo: string;
begin
setlength( titulo, 255 );
GetWindowText( GetforegroundWindow, PChar(titulo), 255);
end;

DETECTAR INATIVIDADE:
function Inativo: Integer;
var
InpInfo: TLastInputInfo;
begin
InpInfo.cbSize := SizeOf(TLastInputInfo) ;
GetLastInputInfo(InpInfo) ;
Result := (GetTickCount - InpInfo.dwTime) DIV 1000;
end;
unit untPrincipal;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TfrmPrincipal = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
btnPara: TBitBtn;
btnSair: TBitBtn;
btnConfigura: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lblModelo: TLabel;
lblSerial: TLabel;
lblBaudRate: TLabel;
Label7: TLabel;
pnlBruto: TPanel;
Label8: TLabel;
pnlCodigo: TPanel;
Label9: TLabel;
pnlValUnit: TPanel;
Label10: TLabel;
pnlTara: TPanel;
Label11: TLabel;
pnlCont: TPanel;
Label12: TLabel;
pnlValTot: TPanel;
Label13: TLabel;
pnlLiquido: TPanel;
Label14: TLabel;
Label15: TLabel;
lblStatus: TLabel;

Timer1: TTimer;
Button1: TButton;
procedure btnParaClick(Sender: TObject);
procedure btnConfiguraClick(Sender: TObject);
procedure btnSairClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure MudaPanelsCaption(Valor: String); //Funo complementar que muda
//todos os captions dos objetos
Panels
//com o valor desejado.
procedure ObtemConfiguracoes; //Funo complementar que chama a funo
//ObtemParametrosBalanca da Dll.
public
{ Public declarations }
end;
//Declarao de um novo tipo de varivel(PInteger) referente um ponteiro Integer,
//para uso na funo ObtemParametrosBalanca.
//Isto necessrio pois a funo ObtemParametrosBalana no retorna valor, e sim
//preenche a varivel ponteiro com o valor requisitado.
type
PInteger = ^Integer;
var
frmPrincipal: TfrmPrincipal;
//Variaveis que armazenaro os retornos da funo ObtemParametrosBalanca
Modelo, Porta, BaudRate: Integer;
//Mascara para formatacao do peso com casas decimais
mascara : String;
//Varivel que armazenar o modelo da balana, funo ObtemNomeBalanca
CModelo: array[0..50] of char;
Const
PcScale = 'PcScale.dll'; //Contante para no ficar repetindo
//o nome do arquivo da Dll
implementation
{$R *.DFM}
//----------------------------------------------------------------//
{
INICIO FUNCOES DA DLL PcScale
}
//----------------------------------------------------------------//
{Declara a funo ConfiguraBalanca existente na DLL "PcScale.dll"}
function ConfiguraBalanca(Balanca: Integer; Aplicativo: THandle): Boolean;
stdcall; external PcScale;
{Declara a funo InicializaLeitura existente na DLL "PcScale.dll"}
function InicializaLeitura(Balanca: Integer): Boolean;
stdcall; external PcScale;

{Declara a funo ObtemInformacao existente na DLL "PcScale.dll"}


function ObtemInformacao(Balanca: Integer; Campo: Integer): double;
stdcall; external PcScale;
{Declara a funo FinalizaLeitura existente na DLL "PcScale.dll"}
function FinalizaLeitura(Balanca: Integer) : Boolean;
stdcall; external PcScale;
{Declara a funo ExibeMsgErro existente na DLL "PcScale.dll"}
function EnviaPrecoCS(Balanca : integer; Preco : double) : Boolean;
stdcall; external PcScale;
{Declara a funo FinalizaLeitura existente na DLL "PcScale.dll"}
function ObtemParametrosBalanca(Balanca: Integer; Modelo: PInteger;
Porta: PInteger; BaudRate: PInteger
): Boolean
stdcall; external PcScale;
{Declara a funo ObtemNomeBalanca existente na DLL "PcScale.dll"}
Procedure ObtemNomeBalanca(Modelo: Integer; Ret: PChar);
stdcall; external PcScale;
{Declara a funo ExibeMsgErro existente na DLL "PcScale.dll"}
Procedure ExibeMsgErro(Aplicativo : THandle);
stdcall; external PcScale;

//----------------------------------------------------------------//
{
FIM FUNCOES DA DLL PcScale
}
//----------------------------------------------------------------//
//----------------------------LEMBRETES---------------------------//
{
- Lembre-se que neste exemplo foi usado um objeto Timer para
que o mesmo repeta as chamadas da Dll. Como opo pederiamos
ter usado uma Thread.
- A Dll PcScale.dll deve sempre estar no diretrio Windows\System,
ou no mesmo caminho onde do executvel que a usa estiver rodando.
}
//----------------------------LEMBRETES---------------------------//
procedure TfrmPrincipal.ObtemConfiguracoes;
begin
if ObtemParametrosBalanca(0, @Modelo, @Porta, @BaudRate) then
begin
ObtemNomeBalanca(Modelo, CModelo);
lblModelo.Caption := CModelo;
lblSerial.Caption := 'COM' + IntToStr(Porta);
lblBaudRate.Caption := IntToStr(BaudRate);
end;
end;
procedure TfrmPrincipal.MudaPanelsCaption(Valor: String);
var
i: Integer;
begin
for i := 0 to frmPrincipal.ComponentCount - 1 do

begin
if (frmPrincipal.Components[i] is TPanel) then
(frmPrincipal.Components[i] as TPanel).Caption := Valor
end;
end;
procedure TfrmPrincipal.btnParaClick(Sender: TObject);
begin
if (Sender as TBitBtn).Caption = '&Testar' then
begin
if InicializaLeitura(0) then
begin
Timer1.Enabled := True;
btnConfigura.Enabled := false;
btnSair.Enabled := false;
(Sender as TBitBtn).Caption := '&Parar';
(Sender as TBitBtn).Hint := 'Para o teste de leitura da balana.';
end
else
ExibeMsgErro(Self.Handle);
end
else
begin
Timer1.Enabled := false;
if not FinalizaLeitura(0) then ExibeMsgErro(Self.Handle);
MudaPanelsCaption('---------');
btnConfigura.Enabled := true;
btnSair.Enabled := true;
lblStatus.Caption := 'Parado...';
(Sender as TBitBtn).Caption := '&Testar';
(Sender as TBitBtn).Hint := 'Inicia o teste de leitura da balana.'
end;
end;
procedure TfrmPrincipal.btnConfiguraClick(Sender: TObject);
begin
if Not ConfiguraBalanca(0, Self.Handle) then
ExibeMsgErro(Self.Handle)
else
ObtemConfiguracoes;
end;
procedure TfrmPrincipal.btnSairClick(Sender: TObject);
begin
if frmPrincipal.CloseQuery then
Application.Terminate;
end;
procedure TfrmPrincipal.Timer1Timer(Sender: TObject);
var
status, aux: integer;
begin
status := StrToInt(FloatToStr(ObtemInformacao(0,0)));
case status of
0: lblStatus.Caption := 'Falha comuncando-se com a balana.';
1: lblStatus.Caption := 'Peso Oscilando.';
2: lblStatus.Caption := 'Peso Estvel.';
3: lblStatus.Caption := 'Sobrecarga de Peso ou Alivio de Plataforma.';
4: lblStatus.Caption := 'Erro lendo licensa do Software.';
end;

if ( status = 1 ) or ( status = 2 ) then


begin
// vamos construir uma mascara para formatar o peso com as casas
// decimais da balana
if mascara = '' then
begin
mascara := '0.';
for aux := 1 to StrToInt(FloatToStr(ObtemInformacao(0,8))) do
begin
mascara := mascara + '0';
end;
end;
pnlBruto.Caption
pnlTara.Caption
pnlLiquido.Caption
pnlCont.Caption
pnlCodigo.Caption
pnlValUnit.Caption
pnlValTot.Caption

:=
:=
:=
:=
:=
:=
:=

FormatFloat(mascara,ObtemInformacao(0,1));
FormatFloat(mascara,ObtemInformacao(0,2));
FormatFloat(mascara,ObtemInformacao(0,3));
FloatToStr(ObtemInformacao(0,4));
FloatToStr(ObtemInformacao(0,5));
FloatToStr(ObtemInformacao(0,6));
FloatToStr(ObtemInformacao(0,7));

end
else
MudaPanelsCaption('---------');
end;
procedure TfrmPrincipal.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := false;
if Application.MessageBox('Confirma a Sada?', 'Ateno', MB_YESNO +
MB_ICONQUESTION) = IDYES then
begin
Timer1.Enabled := false;
if Not FinalizaLeitura(0) then ExibeMsgErro(Self.Handle);
CanClose := true
end;
end;
procedure TfrmPrincipal.FormShow(Sender: TObject);
begin
ObtemConfiguracoes;
end;
procedure TfrmPrincipal.Button1Click(Sender: TObject);
var
Preco : String;
aux : boolean;
begin
Preco := '';
aux := true;
while aux do
begin
if InputQuery('Preo/kg', 'Digite o preo/kg a ser enviado: (xxxx,xx)', Prec
o) then
begin
if Trim(Preco) <> '' then
begin

try
StrToFloat(Preco);
aux:=false;
except on exception do
ShowMessage('Digite um valor nmerico.');
end;
end;
end
else exit;
end;
if EnviaPrecoCS(0,StrToFloat(Preco)) then
ShowMessage('Preo/kg enviado com sucesso.')
else
ExibeMsgErro(Self.Handle);
end;
end.

Vous aimerez peut-être aussi