zebra www qln420 qln220 precio portatil impresora etiquetas español configuracion delphi bluetooth firemonkey delphi-xe7

www - Conéctate a través de Bluetooth con Delphi XE7 usando una impresora portátil



zebra qln420 manual (2)

En tu bucle, sigues asignando a lDevice . Si hay un segundo dispositivo no emparejado, entonces el lDevice lo señala. Necesita Exit superior una vez que haya detectado que está emparejado.

Además, personalmente no me gusta plantear excepciones deliberadamente. Si una instancia de clase es nula, entonces debería salir, nolt profundiza en ella ...

Por ejemplo

if FBluetoothManager = nil then begin Memo1.Lines.Add(''FBluetoothManager esta nulo''); Exit; end;

Estoy tratando de comunicarme con una impresora Sewoo LK-P32 a través de Bluetooth. Para esto estoy usando Delphi XE7 . Hice algunos ejemplos que vienen con Delphi y no estoy teniendo éxito. Puse la impresora emparejada en la tableta y aún así no puedo imprimir continuamente.

Cuando imprimo algo, tengo que reiniciar la aplicación, para poder imprimir algo nuevamente. Debajo de mis fuentes

¿Alguien podría ayudarme? ¿Apoyo en este tema? Me queda poco tiempo para probar otras tecnologías.

Método que inicia la comunicación con la impresora.

procedure TForm2.ButtonClickStart(Sender: TObject); var Msg, Texto: string; I, B: Integer; BluetoothAdapter: TBluetoothAdapter; ListaDeAparelhosPareados: TBluetoothDeviceList; LServices: TBluetoothServiceList; begin try Memo1.Lines.Add(''Ponto 1''); FBluetoothManager := TBluetoothManager.Current; if FBluetoothManager = nil then Memo1.Lines.Add(''FBluetoothManager esta nulo''); Memo1.Lines.Add(''Ponto 2''); BluetoothAdapter := FBluetoothManager.CurrentAdapter; if BluetoothAdapter = nil then Memo1.Lines.Add(''BluetoothAdapter esta nulo''); ListaDeAparelhosPareados := BluetoothAdapter.PairedDevices; Memo1.Lines.Add(''Ponto 3''); if ListaDeAparelhosPareados = nil then Memo1.Lines.Add(''ListaDeAparelhosPareados esta nulo''); for I := 0 to ListaDeAparelhosPareados.Count - 1 do begin LDevice := ListaDeAparelhosPareados[I] as TBluetoothDevice; if LDevice.IsPaired then begin LServices := LDevice.GetServices; for B := 0 to LServices.Count - 1 do begin ServiceGUI := GUIDToString(LServices[B].UUID); Guid := LServices[B].UUID; ServiceName := LServices[B].Name; Memo1.Lines.Add(LServices[B].Name + '' --> '' + ServiceGUI); Memo1.GoToTextEnd; end; end; end; except on E: Exception do begin Msg := E.Message; Memo1.Lines.Add(''Erro ao Conectar na Impressora: '' + Msg); Memo1.GoToTextEnd; end; end; end;

Método que envía el texto a la impresora.

procedure TForm2.ButtonClickSendText(Sender: TObject); var FSocket: TBluetoothSocket; ToSend: TBytes; Msg, Texto: String; begin try Memo1.Lines.Add(''Aparelho pareado:'' + BoolToStr(LDevice.IsPaired)); Memo1.Lines.Add(''Dados do Guid:'' + GUIDToString(Guid)); FSocket := LDevice.CreateClientSocket(Guid, true); if FSocket = nil then Memo1.Lines.Add(''FSocket nulo''); Memo1.Lines.Add(''Criou Bluetooth Cliente.''); Memo1.GoToTextEnd; if FSocket <> nil then begin // FSocket.Connect; FSocket.Connect; Memo1.Lines.Add(''Criou socket cliente com o ServerSocket''); Texto := #27 + ''|cA'' + ''Teste'' + #13#10; ToSend := TEncoding.UTF8.GetBytes(Texto); FSocket.SendData(ToSend); Memo1.Lines.Add(''Enviou '' + Texto + '' para a impressora.''); end else begin Memo1.Lines.Add(''FSocket nulo.''); end; except on E: Exception do begin Msg := E.Message; Memo1.Lines.Add(''Erro ao Conectar na Impressora: '' + Msg); Memo1.GoToTextEnd; end; end; end;


Volví a crear su programa y obtengo el mismo problema, pero cambiar su código, ahora funciona bien para mí.

El problema esta aqui

if FSocket <> nil then begin // FSocket.Connect; FSocket.Connect; Memo1.Lines.Add(''Criou socket cliente com o ServerSocket''); Texto := #27 + ''|cA'' + ''Teste'' + #13#10; ToSend := TEncoding.UTF8.GetBytes(Texto); FSocket.SendData(ToSend); Memo1.Lines.Add(''Enviou '' + Texto + '' para a impressora.''); end

Primero, recomiendo agregar Fsocket como propiedad privada y crear SOLO UN objeto fsocket. Por lo tanto, su código cambiará a

if (Assigned(LDevice)) And (Assigned(FSocket)) then Begin if Not FSocket.Connected then FSocket.Connect End Else Begin FSocket := LDevice.CreateClientSocket(Guid, True); Memo1.Lines.Add(''Device Socked created to ''+LDevice.DeviceName); FSocket.Connect; End;

Después de conectarse, puede llamar a un TTimer para enviar lo que desea, o crear un método para verificar si Fsocket está conectado.

if Assigned(FSocket) then Begin if FSocket.Connected then Begin Texto := #27 + ''|cA'' + ''Teste'' + #13#10; ToSend := TEncoding.UTF8.GetBytes(Texto); FSocket.SendData(ToSend); Sleep(100); End; End;

Además, puede agregar una suspensión entre 2 comandos, para asegurarse de que la impresora reciba y ejecute los datos.

En mi caso utilicé un módulo Bluetooth hc-06 de ancho Arduino.