Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Leer codigo de barras y peso a travez de un puerto serie (https://www.clubdelphi.com/foros/showthread.php?t=38063)

Wolfyx 01-12-2006 00:58:36

Leer codigo de barras y peso a travez de un puerto serie
 
A los amigos del foro
Estoy desarrollando una aplicacion que lea el codigo de barras y el peso de una balanza a travez del puerto serie, estoy usando los componentes de Asyncpro, alguien que me envie algun ejemplo de como asignar la cadena a un tedit y avance automaticamente al siguiente control (tedit).

saludos
gracias

AzidRain 01-12-2006 01:23:22

Despues de mandar la cadena al TEdit, manda un caracter TAB o ENTER segun lo tengas programado para que se salte al sgiuiente campo. Recuerda que la mayor parte de estos aparatos funcionan emulando un teclado.

No se si pudieras poner algo de código...seria mas fácil.

Wolfyx 01-12-2006 01:45:39

envio algo del codigo..
 
este es el codigo que tengo, te comento que para avanzar entre campos uso el enter o tab, es decir ambos...como te daras cuenta el problema les que si pasas un producto por el lector, la cadena se sigue concatenando...


procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I : Word;
C : Char;
Cadena : String;
begin
cadena := '';
for I := 1 to Count do
begin
C := ApdComPort1.GetChar;
case C of
#0..#31 : //;
else cadena := cadena + C;
end;
end;
edit1.Text := edit1.Text + cadena;
end;

gracias por tu ayuda estimado AzidRain

perdon si no envio la respuesta de manera correcta, soy nuevo en el foro, y no se exactamente como funciona...

Wolfyx 01-12-2006 21:44:38

este es el codigo que tengo, te comento que para avanzar entre campos uso el enter o tab, es decir ambos...como te daras cuenta en el codigo que pongo el problema es que si pasas un producto por el lector, la cadena se sigue concatenando...


procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I : Word;
C : Char;
Cadena : String;
begin
cadena := '';
for I := 1 to Count do
begin
C := ApdComPort1.GetChar;
case C of
#0..#31 : //;
else cadena := cadena + C;
end;
end;
edit1.Text := edit1.Text + cadena;
end;

gracias por tu ayuda estimado AzidRain

perdon si no envio la respuesta de manera correcta, soy nuevo en el foro, y no se exactamente como funciona...

AzidRain 04-12-2006 05:23:32

He estado trantando de subirte la respuesta pero no se que pasa pero no me deja...:( De todos modos te paso el tip directamente de mi cuate Mirko Gajic en
About.Com

Código Delphi [-]
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean) ;
{
Parameters :
* key : virtual keycode of the key to send. For printable keys this is simply the ANSI code (Ord(character)) .
* shift : state of the modifier keys. This is a set, so you can set several of these keys (shift, control, alt, mouse buttons) in tandem. The TShiftState type is declared in the Classes Unit.
* specialkey: normally this should be False. Set it to True to specify a key on the numeric keypad, for example.

Description:
Uses keybd_event to manufacture a series of key events matching the passed parameters. 
The events go to the control with focus. Note that for characters key is always the upper-case version of the character. Sending without any modifier keys will result in a lower-case character, sending it with [ ssShift ] will result in an upper-case character!
}
type
   TShiftKeyInfo = record
     shift: Byte ;
     vkey: Byte ;
   end;
   ByteSet = set of 0..7 ;
const
   shiftkeys: array [1..3] of TShiftKeyInfo =
     ((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
     (shift: Ord(ssShift) ; vkey: VK_SHIFT),
     (shift: Ord(ssAlt) ; vkey: VK_MENU)) ;
var
   flag: DWORD;
   bShift: ByteSet absolute shift;
   j: Integer;
begin
   for j := 1 to 3 do
   begin
     if shiftkeys[j].shift in bShift then
       keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
   end;
   if specialkey then
     flag := KEYEVENTF_EXTENDEDKEY
   else
     flag := 0;

   keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
   flag := flag or KEYEVENTF_KEYUP;
   keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;

   for j := 3 downto 1 do
   begin
     if shiftkeys[j].shift in bShift then
       keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0) ;
   end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
Example of usage:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm1.SpeedButton1Click(Sender: TObject) ;
begin
// Simulate PRINTSCREEN - snapshot of the full screen
PostKeyEx32(VK_SNAPSHOT, [], False) ;

// Simulate PRINTSCREEN - snapshot of the active window
PostKeyEx32(VK_SNAPSHOT, [ssAlt], False) ;

// Simulate left Windows key
PostKeyEx32(VK_LWIN, [], False) ;

// Simulate Alt+F4 - close active window
PostKeyEx32(VK_F4, [ssAlt], False) ;
end;

Esta función simula teclazos directametne en tu aplicación, de manera que puedes insertar este codigo debajo del edit1.Text:=...
Código Delphi [-]
Edit1.SetFocus // Le das el foco al Edit donde vas a poner lo que leas del scanner
PostKeyEx32(VK_TAB,[],false) //Pasamos con un tab al siguiente control
Ya lo probe y funciona bien...


La franja horaria es GMT +2. Ahora son las 19:13:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi