Estou precisando editar o código abaixo para que o mesmo funcione com banco de dados, mas como sou novo em delphi estou quebrando a cabeça sem saber como fazer isso, precisaria que algum coega do forum me desse umas dicxas de como fazer para implementar este código com BD
Basicamente ele manda informações para um microterminal, eu consegui fazer ele enviar informações e recebe-las em um memo ele pesquisa produto e usuário em DOIS arquivos texto respectivamente:
PRODUTO.TXT
VENDA.TXT
No caso eu deveria fazer com que ele me funcionasse para comanda eletrônica em PADARIA se algum amiogo já fez algo assim ou ao menos saiba implementar me ajude por gentileza
Copiei abaixo a unit do exemplo que vêm junto com o microterminal:
PS: A comunicação com o terminal esta funcionando ok
unit UTerminal;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, ScktComp, StdCtrls, ActnList, Buttons,
ImgList, jpeg;
type
PVendaItem = ^TVendaItem;
TVendaItem = record
idProduto: Integer;
quantidade: Real;
descricao: string[255];
balancaRetorno: string[255];
valor: Real;
valorTotal: Real;
pesar: Boolean;
end;
// PONTEIRO PARA CONTROLE E AÇÕES DOS TERMINAIS
PTerminal = ^TTerminal;
TTerminal = record
IP: string; // ARMAZENAR IP DO TERMINAL
tecla: string; // TECLA DIGITADA
teclado: string; // BUFFER DO TECLADO
delai: Integer; // CONTADOR DO DELAY DO TERMINAL
estado: Integer; // PONTO DE EXECUÇÃO DO PROGRAMA
estadoProximo: Integer; //USADO QUANDO TIVER DELAI
tecladoAguardar: Boolean; // ESPERAR DIGITAÇÃO
texto: string; // TEXTO DE ENTRADA
textoPos: Integer; // POSIÇÃO DENTRO TEXTO QUE SERÁ RECEBIDO
imprimir: Boolean;
socket: TCustomWinSocket;
// OPERADOR
operadorID: Integer;
operadorNome: string;
// VENDA
itens: TList; // LISTA DE ITENS COMPRADOS
ValorTotal: Real; // VALOR TOTAL DA COMPRA
end;
TFTerminal = class(TForm)
Panel1: TPanel;
Bevel1: TBevel;
servidor: TServerSocket;
Panel2: TPanel;
Splitter1: TSplitter;
Bevel2: TBevel;
edPorta: TEdit;
Label1: TLabel;
ActionList1: TActionList;
actConecta: TAction;
Timer1: TTimer;
Memo1: TMemo;
rgSerial: TRadioGroup;
Label2: TLabel;
Label3: TLabel;
Panel3: TPanel;
lstConexao: TListBox;
Label4: TLabel;
ImageList1: TImageList;
actSair: TAction;
SpeedButton2: TSpeedButton;
Panel4: TPanel;
Image1: TImage;
Bevel3: TBevel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure servidorClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure servidorClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure servidorClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Timer1Timer(Sender: TObject);
procedure actSairExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
// LISTA DE POINTEIROS DE TERMINAIS
terminais: TList;
// PROCEDURES PARA MANIPULACAO DE LISTA PONTEIROS
procedure listaLimpar(xlista: TList);
// PROCEDURES E FUNÇÕES PARA CONTROLE DE TERMINAIS
function terminalCriar(xip: string): Pointer;
procedure terminalDestruir(xterminal: Pointer);
function terminalLocalizar(xip: string): Pointer;
// MANIPULADORES DE SOCKET
procedure servidorDesconectar;
procedure servidorConectar;
// MANIPULADORES DO TERMINAL
// TECLADO
function terminalTeclaTratar(xterminal: Pointer): Boolean; // TRATAR TECLA PRECIONADA NO TERMINAL
procedure terminalTeclaPontoAjustar(xterminal: Pointer); // TESTA SE A TECLA PONTO FOI PRECIONADA
procedure terminalGet(xterminal: Pointer; str: string);
// DISPLAY DO TERMINAL
procedure terminalDisplayPosicionar(xterminal: Pointer; xlinha, xcoluna: Byte);
procedure terminalDisplayEnviar(xterminal: Pointer; xtexto: string);
procedure terminalDisplayLimpar(xterminal: Pointer);
// BALANCA
procedure terminalBalanca(xterminal: Pointer);
// IMPRIMIR
procedure terminalImprimir(xterminal: Pointer; dados: string);
// VARIAVEIS
procedure terminalLimparVariaveis(xterminal: Pointer);
// TRATAR ESTADO DO TERMINAL
procedure terminalEstado(xterminal: Pointer);
// PROCURAR USUARIO
function usuarioGet(xidUsuario: Integer; var xnome: string): Boolean;
// PROCURAR PRODUTO
function produtoGet(xidProduto: Integer; var xdescricao: string; var xvalor: Real; var xpeso: Boolean): Boolean;
public
{ Public declarations }
end;
const
// ESTADOS DO TERMINAL
ESTADOOPERADOR = 10;
ESTADOPRODUTO = 20;
ESTADOFECHARVENDA = 90;
ESTADOESPERAR = -1;
ESTADOINICIAL = ESTADOOPERADOR;
ESTADOFINAL = 9999;
// NOMES DOS ARQUIVOS
ARQUIVOUSUARIO = 'Usuario.txt';
ARQUIVOPRODUTO = 'Produto.txt';
// LAYOUT ARQUIVO USUARIO
USUARIOCODFIM = 5;
USUARIONOME = USUARIOCODFIM + 1;
// LAYOUT O ARQUIVO DE PRODUTOS
PRODUTOCODFIM = 5;
PRODUTODESCRICAOINICIO = 7;
PRODUTODESCRICAOQTD = 20;
PRODUTOVALOR = 28;
PRODUTOVALORQTD = 8;
PRODUTOPESO = 37;
PRODUTOPESOTAMANHO = 1;
var
FTerminal: TFTerminal;
implementation
{$R *.dfm}
{ TFTerminal }
function TFTerminal.terminalCriar(xip: string): Pointer;
var
wterminal: PTerminal;
begin
Result := terminalLocalizar(xip);
if Result = nil then
begin
New(wterminal);
wterminal.IP := xip;
wterminal.ValorTotal := 0;
wterminal.itens := TList.Create;
terminais.Add(wterminal);
Result := wterminal;
end;
end;
procedure TFTerminal.terminalDestruir(xterminal: Pointer);
begin
; // DESTRUIR O TERMINAL QUANDO O MESMO FOR DESCONECTADO
if xterminal = nil then
Exit;
PTerminal(xterminal)^.socket := nil;
; // LIMPAR LISTA DE VENDAS
listaLimpar(PTerminal(xterminal)^.itens);
; // DESTRUIR LISTA DE VENDAS
FreeAndNil(PTerminal(xterminal)^.itens);
; // REMOVER TERMINAL DA LISTA DE TERMINAIS
terminais.Delete(terminais.IndexOf(xterminal));
; // LIMPAR TERMIANL DA MEMORIA
Dispose(xterminal);
end;
function TFTerminal.terminalLocalizar(xip: string): Pointer;
var
i: Integer;
begin
Result := nil;
for i := 0 to terminais.Count - 1 do
begin
if PTerminal(terminais.Items[i])^.IP = xip then
Result := terminais.Items[i];
end;
end;
procedure TFTerminal.FormCreate(Sender: TObject);
begin
; // CRIAR LISTA DE TERMINAIS
terminais := TList.Create;
end;
procedure TFTerminal.listaLimpar(xlista: TList);
var
i: Integer;
begin
if xlista = nil then
Exit;
for i := xlista.Count - 1 downto 0 do
begin
if xlista.Items[i] <> nil then
Dispose(xlista.Items[i]);
end;
xlista.Clear;
end;
procedure TFTerminal.FormDestroy(Sender: TObject);
begin
; // DESETRUIR LISTA DE TERMINAIS
servidorDesconectar;
listaLimpar(terminais);
FreeAndNil(terminais);
end;
procedure TFTerminal.servidorClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
lstConexao.Items.Add(Socket.RemoteAddress);
Socket.Data := terminalCriar(Socket.RemoteAddress);
PTerminal(Socket.Data)^.socket := Socket;
terminalLimparVariaveis(Socket.Data);
terminalEstado(Socket.Data);
end;
procedure TFTerminal.servidorClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
widList: Integer;
begin
terminalDestruir(Socket.Data);
widList := lstConexao.Items.IndexOf(Socket.RemoteAddress);
if widList >= 0 then
lstConexao.Items.Delete(widList);
end;
procedure TFTerminal.servidorDesconectar;
var
i: Integer;
begin
with servidor do
begin
for i := Socket.ActiveConnections - 1 downto 0 do
begin
with servidor.Socket.Connections[i] do
begin
terminalDisplayLimpar(Data);
terminalDisplayEnviar(Data, 'SERVIDOR DESCONECTADO');
terminalDestruir(Data);
end;
end;
lstConexao.Items.Clear;
actConecta.ImageIndex := 0;
actConecta.Hint := 'Conectar';
Close;
end;
end;
procedure TFTerminal.servidorConectar;
begin
with servidor do
begin
Port := StrToInt(edPorta.Text);
actConecta.ImageIndex := 1;
actConecta.Hint := 'Desconectar';
Open;
end;
end;
procedure TFTerminal.terminalDisplayEnviar(xterminal: Pointer; xtexto: string);
begin
; // ENVIAR TEXTO PARA O TERMINAL
with PTerminal(xterminal)^ do
begin
socket.SendText(xtexto);
end;
end;
procedure TFTerminal.terminalDisplayPosicionar(xterminal: Pointer; xlinha,
xcoluna: Byte);
var
StrTemp: string;
begin
StrTemp := Chr(27) + '[' + FormatFloat('00', xlinha) + ';' + FormatFloat('00', xcoluna) + 'H';
with PTerminal(xterminal)^ do
begin
Socket.SendText(StrTemp);
end;
end;
procedure TFTerminal.terminalDisplayLimpar(xterminal: Pointer);
begin
with PTerminal(xterminal)^ do
begin
socket.SendText(#27'[H'#27'[J');
terminalDisplayPosicionar(xterminal, 1, 1);
end;
end;
function TFTerminal.terminalTeclaTratar(xterminal: Pointer): Boolean;
// TRATAR TECLA PRECIONADA NO TERMINAL
var
gpict: string;
tamanho: Integer;
begin
with PTerminal(xterminal)^ do
begin
if tecla = Chr(0) then
begin
Result := False;
Exit;
end;
; // TECLA DEL PRECIONADA
if tecla = Chr(27) then
begin
if textoPos = 1 then
begin
teclado := Chr(27);
tecladoAguardar := False;
Result := True;
end
else
begin
while textoPos > 1 do
begin
tecla := Chr(8) + Chr(16) + Chr(8); // BACKSPACE
terminalDisplayEnviar(xterminal, tecla);
textoPos := textoPos - 1;
end;
teclado := '';
Result := False;
end;
Exit;
end;
if tecla = Chr(8) then // BACKSPACE
begin
if textoPos > 1 then
begin
gpict := Copy(texto, textoPos - 1, 1);
if (gpict = '/') or (gpict = '.') then
begin
terminalDisplayEnviar(xterminal, Tecla);
textoPos := textoPos - 1;
end;
textoPos := textoPos - 1;
teclado := copy(teclado, 1, textoPos - 1);
tecla := tecla + ' ' + Chr(8);
terminalDisplayEnviar(xterminal, Tecla);
end;
Result := False;
Exit;
end;
if tecla = Chr(13) then // ENTER
begin
tecladoAguardar := false;
Result := true;
Exit;
end;
gpict := copy(texto, textoPos, 1);
; // PEDIDO DE PESO
if gpict = #3 then
begin
; // todo peso foi recebido
if Tecla = #3 then
begin
tecladoAguardar := False;
Result := True;
Exit;
end
else
begin
; // PROTOCOLO DA BALANÇA <STX> PPPPP <ETX>
if (tecla <> #2) and (tecla <> #3) then
teclado := teclado + tecla;
end;
end;
if gpict = 'X' then // QUALQUER TECLA
begin
teclado := teclado + tecla;
textoPos := textoPos + 1;
terminalDisplayEnviar(xterminal, Tecla);
end
else if gpict = '9' then // SOMENTE ACEITAR NUMEROS E "." OU "/" OU "-"
begin
if ((Tecla[1] in ['0'..'9'])) or (Tecla = '.') or (Tecla = '/') or (Tecla = '-') then
begin
if Tecla = '.' then begin
terminalTeclaPontoAjustar(xterminal);
end
else
begin
teclado := teclado + tecla;
textoPos := textoPos + 1;
terminalDisplayEnviar(xterminal, tecla);
end;
end;
end
else
begin
if gpict = 'A' then // Somente teclas alfabéticas
begin
if tecla[1] in ['A'..'Z'] then
begin
teclado := teclado + tecla;
textoPos := textopos + 1;
terminalDisplayEnviar(xterminal, Tecla);
end;
end
else
if gpict = '*' then // Digitação de senha
begin
if tecla[1] in ['0'..'9'] then // caso apenas número
begin
teclado := teclado + tecla;
textoPos := textoPos + 1;
tecla := '*';
terminalDisplayEnviar(xterminal, tecla);
end;
end
else
begin
Result := False;
Exit;
end;
end;
tamanho := Length(texto) + 1;
gpict := copy(texto, textoPos, 1);
if tamanho = textoPos then
begin
Result := true;
tecladoAguardar := False;
end
else
begin
if gpict = '/' then
begin
tecla := '/';
textoPos := textoPos + 1;
terminalDisplayEnviar(xterminal, Tecla);
Result := False;
end
else
if gpict = '.' then
begin
tecla := '.';
textoPos := textoPos + 1;
terminalDisplayEnviar(xterminal, Tecla);
Result := False;
end
else
begin
Result := False;
end;
end;
end;
end;
procedure TFTerminal.terminalTeclaPontoAjustar(xterminal: Pointer);
// TESTA SE A TECLA PONTO FOI PRECIONADA
var
PosPonto: integer;
StrDisp: string;
spPic: integer;
begin
with PTerminal(xterminal)^ do
begin
PosPonto := 1;
while (copy(texto, PosPonto, 1) <> '.') do
begin
PosPonto := PosPonto + 1;
if PosPonto = length(texto) then
begin
Exit;
end;
end;
if PosPonto = length(texto) then
begin
exit;
end;
spPic := PosPonto - 1 - length(texto);
StrDisp := '';
while spPic > 0 do
begin
StrDisp := StrDisp + ' ';
spPic := spPic - 1;
end;
strdisp := strdisp + teclado;
sppic := textoPos;
while sppic > 1 do
begin
terminalDisplayEnviar(xterminal, chr(8));
sppic := sppic - 1;
end;
textoPos := posponto;
terminalDisplayEnviar(xterminal, strdisp);
teclado := strdisp;
end;
end;
procedure TFTerminal.terminalLimparVariaveis(xterminal: Pointer);
begin
with PTerminal(xterminal)^ do
begin
textoPos := 0;
estado := ESTADOINICIAL;
estadoProximo := -2;
tecladoAguardar := False;
delai := 0;
operadorID := 0;
operadorNome := '';
ValorTotal := 0;
listaLimpar(itens);
end;
end;
procedure TFTerminal.terminalGet(xterminal: Pointer; str: string);
begin
with PTerminal(xterminal)^ do
begin
if not tecladoAguardar then
begin
tecladoAguardar := true;
textoPos := 1;
texto := str;
teclado := '';
end;
end;
end;
procedure TFTerminal.terminalBalanca(xterminal: Pointer);
begin
with PTerminal(xterminal)^ do
begin
socket.SendText(#27 + '[?24h' + #27 + '[5i' + #5 + #27 + '[4i'); //Serial 1 para MT TCP
// socket.SendText(Chr(27) + '[?24r' + Chr(27) + '[5i' + Chr(5) + Chr(27) + '[4i');// serial 0 para MT TCP
end;
end;
procedure TFTerminal.terminalImprimir(xterminal: Pointer; dados: string);
begin
with PTerminal(xterminal)^ do
begin
if not imprimir then
begin
Memo1.Lines.Add(dados);
end
else
begin
case rgSerial.ItemIndex of
0:
begin
socket.SendText(#27 + '[?24h' + #27 + '[5i' + Dados + #27 + '[4i');
end;
1:
begin
socket.SendText(#27 + '[?24r' + #27 + '[5i' + Dados + #27 + '[4i');
end;
2:
begin
socket.SendText(#27 + '[?24l' + #27 + '[5i' + Dados + #27 + '[4i');
end;
end;
end;
end;
end;
procedure TFTerminal.terminalEstado(xterminal: Pointer);
var
prodDesc: string;
prodValor: Real;
prodPesar: Boolean;
waux, waux1: string;
wproduto: PVendaItem;
i, cod: Integer;
begin
; // TRATAR ESTADO DO TERMINAL
if xterminal = nil then
Exit;
with PTerminal(xterminal)^ do
begin
case estado of
ESTADOESPERAR:
begin
; // AGUARDAR UMA RESPOSTA ( DELAI )
estado := estadoProximo;
estadoProximo := -2;
end;
ESTADOOPERADOR:
begin
; // PEDIR OPERADOR NA TELA DO TERMINAL
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'OPERADOR:');
terminalGet(xterminal, '****');
estado := estado + 1;
end;
ESTADOOPERADOR + 1:
begin
; // VALIDAR OPERADOR
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '') or (teclado = #27) then
begin
estado := ESTADOOPERADOR
end
else
begin
; // PROCURAR USUÁRIO NO ARQUIVO TEXTO
; // AQUI VOCÊ PODE TAMBÉM OLOCAR SUA CONSULTA NO BANCO DE DADOS
if usuarioGet(StrToInt('0' + teclado), operadorNome) then
begin
estado := ESTADOPRODUTO;
end
else
begin
teclado := '';
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'OPERADOR NAO');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, 'ENCONTRADO');
estado := ESTADOESPERAR;
estadoProximo := ESTADOOPERADOR;
delai := 3;
end;
end;
end;
end;
ESTADOPRODUTO:
begin
; // PEDIR CÓDIGO DO PRODUTO
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'V.TOTAL: ' + FormatFloat('0.00', ValorTotal));
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, 'PRODUTO: ');
terminalGet(xterminal, '99999');
estado := estado + 1;
end;
ESTADOPRODUTO + 1:
begin
; // VALIDAR PRODUTO
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '') then
begin
if tecla[1] = #13 then
begin
; // VERIFICAR SE FECHA A VENDA
if itens.Count >= 1 then
estado := ESTADOFECHARVENDA // FECHAR A VENDA
else
estado := ESTADOPRODUTO; // CONTINUAR EM PRODUTOS
end
else
begin
estado := ESTADOPRODUTO;
end;
end
else if (teclado = #27) then
begin
; // CANCELAR A VENDA
ValorTotal := 0;
operadorID := 0;
operadorNome := '';
listaLimpar(itens);
estado := ESTADOOPERADOR;
end
else
begin
; // PROCURAR PRODUTO NO ARQUIVO TEXTO
; // AQUI VOCÊ PODE TAMBÉM OLOCAR SUA CONSULTA NO BANCO DE DADOS
if produtoGet(StrToInt('0' + teclado), prodDesc, prodValor, prodPesar) then
begin
; // ACRECESNTAR PRODUTO NA LISTA DE VENDA
New(wproduto);
wproduto.idProduto := StrToInt('0' + teclado);
wproduto.valor := prodValor;
wproduto.descricao := prodDesc;
wproduto.pesar := prodPesar;
PTerminal(xterminal)^.itens.Add(wproduto);
; // VERIFICAR SE O PRODUTO É DE PESAR OU NÃO
if wproduto.pesar then
begin
; // SOLICITAR PESO PARA A BALANÇA
terminalGet(xterminal, #3);
estado := ESTADOPRODUTO + 4;
end
else
begin
; // SOLICITAR QUANTIDADE DE PRODUTOS
estado := ESTADOPRODUTO + 2;
end;
end
else
begin
; // PRODUTO NÃO ENCONTRADO
teclado := '';
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'PRODUTO NAO');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, 'ENCONTRADO');
estado := ESTADOESPERAR;
estadoProximo := ESTADOPRODUTO;
delai := 3;
end;
end;
end;
end;
ESTADOPRODUTO + 2:
begin
; // PEDIR QUANTIDADE DE PRODUTOS
delai := 0;
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, PVendaItem(itens.Items[itens.Count - 1])^.descricao);
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, 'QTD: ');
terminalGet(xterminal, '9999999');
estado := estado + 1;
end;
ESTADOPRODUTO + 3:
begin
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '') then
begin
estado := ESTADOPRODUTO + 2;
end
else if (teclado = #27) then
begin
Dispose(itens.Items[itens.Count - 1]);
itens.Delete(itens.Count - 1);
estado := ESTADOPRODUTO;
end
else
begin
with PVendaItem(itens.Items[itens.Count - 1])^ do
begin
quantidade := StrToFloat('0' + teclado);
valorTotal := valor * quantidade;
end;
ValorTotal := ValorTotal +
PVendaItem(itens.Items[itens.Count - 1])^.valorTotal;
estado := ESTADOPRODUTO;
end;
end;
end;
ESTADOPRODUTO + 4:
begin
; // SOLICITAR PESO PARA BALANÇA
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'AGUARDANDO PESO...');
teclado := '';
terminalBalanca(xterminal);
estado := estado + 1;
delai := 4;
end;
ESTADOPRODUTO + 5:
begin
if terminalTeclaTratar(xterminal) then
begin
if teclado = '' then
begin
terminalGet(xterminal, Chr(3));
estado := ESTADOPRODUTO + 4;
delai := 4;
end
else
begin
with PVendaItem(itens.Items[itens.Count - 1])^ do
begin
balancaRetorno := teclado;
waux := Copy(Trim(teclado), 1, 2);
waux1 := Copy(Trim(teclado), 3, 3);
Val(waux + '.' + waux1, quantidade, cod);
valorTotal := valor * quantidade;
ValorTotal := ValorTotal +
PVendaItem(itens.Items[itens.Count - 1])^.valorTotal;
end;
estado := ESTADOPRODUTO;
end;
end
else
begin
if delai <= 0 then
begin
teclado := '';
terminalBalanca(xterminal);
delai := 4;
end;
end;
end;
ESTADOFECHARVENDA:
begin
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'IMPRIMIR ?');
terminalDisplayPosicionar(xterminal, 2, 1);
terminalDisplayEnviar(xterminal, '1-SIM 2-NAO');
terminalGet(xterminal, '9');
estado := estado + 1;
end;
ESTADOFECHARVENDA + 1:
begin
if terminalTeclaTratar(xterminal) then
begin
if (teclado = '') then
begin
estado := ESTADOFECHARVENDA;
end
else if (teclado = #27) or (teclado = '2') then
begin
imprimir := False;
teclado := '';
estado := estado + 1;
end
else
begin
imprimir := True;
estado := estado + 1; ;
end;
end;
end;
ESTADOFECHARVENDA + 2:
begin
terminalDisplayLimpar(xterminal);
terminalDisplayEnviar(xterminal, 'VENDA FINALIZADA');
Memo1.Lines.Clear;
terminalImprimir(xterminal, 'OPERADOR: ' + operadorNome);
terminalImprimir(xterminal, '');
for i := 0 to itens.Count - 1 do
begin
with PVendaItem(itens.Items[i])^ do
begin
if pesar then
begin
terminalImprimir(xterminal,
descricao + ' - ' +
FormatFloat('0.000 kg', quantidade) + ' - ' +
balancaRetorno + ' - ' +
FormatFloat('R$ 0.00', valor) + ' - ' +
FormatFloat('R$ 0.00', valorTotal)
);
end
else
begin
terminalImprimir(xterminal,
descricao + ' - ' +
FormatFloat('0', quantidade) + ' - ' +
FormatFloat('R$ 0.00', valor) + ' - ' +
FormatFloat('R$ 0.00', valorTotal)
);
end;
end;
end;
terminalLimparVariaveis(xterminal);
estado := ESTADOINICIAL;
end;
ESTADOFINAL:
begin
if terminalTeclaTratar(xterminal) then
begin
terminalLimparVariaveis(xterminal);
estado := ESTADOINICIAL;
end;
end;
end;
end;
end;
procedure TFTerminal.servidorClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
StrTemp: string;
wterminal: Pointer;
i: Integer;
begin
StrTemp := UpperCase(Socket.ReceiveText);
wterminal := Socket.Data;
if wterminal <> nil then
begin
with PTerminal(wterminal)^ do
begin
for i := 1 to Length(StrTemp) do
begin
tecla := copy(StrTemp, I, 1);
terminalEstado(wterminal);
end;
tecla := Chr(0); // TECLA NULA
terminalEstado(wterminal); // CHAMAR TRATAMENTO DE TECLAS PARA ATUALIZÇÃO DE TELA DO TERMINAL
end;
end;
end;
function TFTerminal.usuarioGet(xidUsuario: Integer;
var xnome: string): Boolean;
var
widusuario: string;
warquivo: TStringList;
i: Integer;
begin
try
widusuario := FormatFloat('00000', xidUsuario);
warquivo := TStringList.Create;
warquivo.LoadFromFile(ARQUIVOUSUARIO);
for i := 0 to warquivo.Count - 1 do
begin
Result := Pos(widusuario, warquivo[i]) > 0;
if Result then
begin
xnome := Trim(Copy(warquivo[i], USUARIONOME, Length(warquivo[i]) - USUARIOCODFIM));
Break;
end;
end;
finally
FreeAndNil(warquivo);
end;
end;
function TFTerminal.produtoGet(xidProduto: Integer; var xdescricao: string;
var xvalor: Real; var xpeso: Boolean): Boolean;
var
widProduto, wvalor: string;
wvalorReal: Real;
warquivo: TStringList;
i, cod: Integer;
begin
try
widProduto := FormatFloat('00000', xidProduto);
warquivo := TStringList.Create;
warquivo.LoadFromFile(ARQUIVOPRODUTO);
for i := 0 to warquivo.Count - 1 do
begin
Result := Pos(widProduto, warquivo[i]) > 0;
if Result then
begin
xdescricao := Trim(Copy(warquivo[i], PRODUTODESCRICAOINICIO, PRODUTODESCRICAOQTD));
wvalor := Trim(Copy(warquivo[i], PRODUTOVALOR, PRODUTOVALORQTD));
Val(Trim(wvalor), wvalorReal, cod);
xvalor := wvalorReal;
xpeso :=
Trim(Copy(warquivo[i], PRODUTOPESO, Length(warquivo[i]) - PRODUTOPESOTAMANHO)) = '1';
Break;
end;
end;
finally
FreeAndNil(warquivo);
end;
end;
procedure TFTerminal.Timer1Timer(Sender: TObject);
var
i: Integer;
begin
for I := 0 to Servidor.Socket.ActiveConnections - 1 do
begin
if Servidor.Socket.Connections[i].Data <> nil then
begin
with PTerminal(Servidor.Socket.Connections[i].Data)^ do
begin
if delai > 0 then
begin
delai := delai - 1;
if delai <= 0 then
begin
terminalEstado(Servidor.Socket.Connections[i].Data);
end;
end;
end;
end;
end;
end;
procedure TFTerminal.actSairExecute(Sender: TObject);
begin
Application.Terminate;
end;
procedure TFTerminal.FormShow(Sender: TObject);
begin
servidor.Port:=1001;
servidor.Active:=true;
end;
end.
Pergunta
FABIO-2012
Boa tarde amigos!
Estou precisando editar o código abaixo para que o mesmo funcione com banco de dados, mas como sou novo em delphi estou quebrando a cabeça sem saber como fazer isso, precisaria que algum coega do forum me desse umas dicxas de como fazer para implementar este código com BD
Basicamente ele manda informações para um microterminal, eu consegui fazer ele enviar informações e recebe-las em um memo ele pesquisa produto e usuário em DOIS arquivos texto respectivamente:
PRODUTO.TXT
VENDA.TXT
No caso eu deveria fazer com que ele me funcionasse para comanda eletrônica em PADARIA se algum amiogo já fez algo assim ou ao menos saiba implementar me ajude por gentileza
Copiei abaixo a unit do exemplo que vêm junto com o microterminal:
PS: A comunicação com o terminal esta funcionando ok
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.