Ver la Versión Completa : Leer codigo de barras y peso a travez de un puerto serie
Wolfyx
01-12-2006, 00:58:36
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
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 (http://delphi.about.com/od/adptips2004/a/bltip0604_4.htm)
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:=...
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...
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.