ブルートゥース経由でSewoo LK-P32プリンターと通信しようとしています。このために、私はDelphi XE7を使用しています。 Delphiに付属しているいくつかの例を作成しましたが、成功していません。ペアリングしたプリンターをタブレットに置いても、連続して印刷できません。
何かを印刷するときは、アプリケーションを再起動する必要があるため、何かを再度印刷できます。私の情報源の下。
誰かが私を助けることができますか?この問題をサポートしますか?私の時間は他の技術を試すのに短いです。
プリンターとの通信を開始する方法
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;
テキストをプリンターに送信する方法
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;
私はあなたのプログラムを再作成しました、そして私は同じ問題を抱えています、しかしあなたのコードを変えることは今私にとってうまく働いています。
問題はここにあります
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
まず、Fsocketをプライベートプロパティとして追加し、fsocketオブジェクトを1つだけ作成することをお勧めします。したがって、コードは次のように変更されます
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;
接続後、TTimerを呼び出して必要なものを送信できます。oFsocketが接続されているかどうかを確認するメソッドを作成します。
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;
また、2つのコマンドの間にスリープを追加して、データがプリンターによって受信および実行されるようにすることもできます。
私の場合、Arduino幅のBluetoothhc-06モジュールを使用しました。
ループでは、lDevice
に割り当て続けます。ペアリングされていない2番目のデバイスがある場合、lDevice
はそれを指しています。ペアリングされていることを検出したら、top Exit
が必要です。
また、私は個人的に意図的に例外を発生させるのは好きではありません。クラスインスタンスがnilの場合は、終了する必要があります。ドリルダウンしないでください。
例えば
if FBluetoothManager = nil then
begin
Memo1.Lines.Add('FBluetoothManager esta nulo');
Exit;
end;