Fórum Receber dados da calculadora #263672

28/12/2004

0

Olá pessoa tudo bem com vcs? espero que sim.
Eu to precisando fazer um programa para interagir com uma calculadora de um outro programa, tipo eu tem um programa que vai organizar os valores certinho, estes valores eu preciso pegar em um campo edit da calculadora semelhante a calculadora do windows, porque preciso fazer um relatório ae para econimizar tempo, eu gostaria de saber como fazer isto.


Diegogm

Diegogm

Responder

Posts

28/12/2004

Martins

Vc terá q trabalhar com alguns ponteiros e apontadores para conseguir isso, para pegar os valores da Calc. do Windows é feito assim.

Primeiro você precisa criar uma type com as variaveis de sistema. Isso pode ser feito depois da cláusula implementation.
...
implementation

{$R *.DFM}

Type
//Dados para a procura
PDadoProcura = ^TDadoProcura;
TDadoProcura = record
Win : THandle;
YPos : Integer;
end;

Agora você precisa criar a function que procura a calculadora

//Procura pelo TStatic visível com a menor coordenada Y

function ListaFilhos(Win: THandle; lp: LPARAM): Boolean; stdcall;
var
P: PDadoProcura;
R: TRect;
ClassName: array[0..255] of char;
begin
P:=PDadoProcura(lp);
GetClassName(Win, ClassName, sizeof(ClassName));
//Verifica se é um campo estático
If StrPas(ClassName) = ´Static´ Then
begin
//Verifica se está visível
If IsWindowVisible(Win) Then
begin
//Pega a posição e o tamanho da janela
GetWindowRect(Win, R);
//Verifica se a coordenada Y é menor
If R.Top < P^.YPos then
begin
//É, assume que é esta
P^.YPos := R.Top;
P^.Win := Win;
end;
end;
end;
//Continua chamando a enumeração
Result:=True;
end;
//Retorna o valor do campo Label da Calculadora cuja coordena Y é menor
//e estiver visível

Agora pegue o valor da calculadora

function ResultadoDaCalculadora : String;
var
CalcWin: THandle;
P : TDadoProcura;
Buffer: array[0..80] of char;
begin
Result:=´´;
//Pega o handle da calculadora, se estiver aberta
CalcWin:= FindWindow(´SciCalc´,nil); //FindWindow(´NomedaJanela´, nil)
If CalcWin <> 0 Then
begin
//Assume nenhuma janela em coordenada Y absurda
P.Win:=0;
P.YPos:=Maxint;
//Lista todas as janelas filhas
EnumChildWindows(CalcWin,@ListaFilhos,LPARAM(@P));
//Verifica se realmente achou
If P.Win <> 0 then
begin
//Recupera o texto da janela
GetWindowText(P.Win, Buffer, sizeof(Buffer));
Result:=Buffer;
end
Else
//Opa, a calculadora não é conhecida
Raise Exception.Create(´Esta calculadora não é familiar.´);
end
Else
//A calculadora não está aberta
Raise Exception.Create(´A calculadora não está aberta.´);

end;

Use o programa assim

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=ResultadoDaCalculadora;
end;


Essa dica eu peguei na Web faz um bom tempo, tem mais ou menos 2 anos, e na época me foi muito util.

Espero q possa lhe ajudar.

Boa Sorte

[b:a04be84818]Martins[/b:a04be84818]


Responder

Gostei + 0

29/12/2004

Dopi

Outra dica é vc usar um componente para Calculadora... a RXLib tem uma....

No projeto ACBr existe o componente ACBrCalculadora, que além das operaçoes básicas, emula uma ´fita´ com os resultados...

Exemplo:

if ACBrCalculadora1.Execute then
   Result  :=  ACBrCalculadora1.Valor



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar