Bonjour,
Pour ouvrire le tiroire caisse qui est relie a une imprimante par cable rj12 ( Comme le cable telephonique ) sachant que cette imprimante est relie a l'ordinateur par usb c'est tres simple.
il faut envoyer une chaine de caracteres a l'imprimante que elle va la transferer a la caisse qui va s'ouvrir automatiquement.
Maintenant pour envoyer ce message a l'imprimante il faut utiliser l'impression direct par RAW
le code en question en hexadecimal est :
1B 70 00 0D 0A
et voici la fonction en delphi qui permet l'envoie de ce code a l'imprimante :
function WriteRawDataToPrinter( Str: String): Boolean;
var
PrinterHandle: THandle;
DocInfo: TDocInfo1;
i: Integer;
B: Byte;
Escritos: DWORD;
PrinterName: String;
begin
Printer.PrinterIndex := -1;
PrinterName := Printer.Printers.Strings[Printer.PrinterIndex];
Result:= FALSE;
if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
try
FillChar(DocInfo,Sizeof(DocInfo),#0);
with DocInfo do
begin
pDocName:= PChar('SAMIRVW31');
pOutputFile:= nil;
pDataType:= 'RAW';
end;
if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
try
if StartPagePrinter(PrinterHandle) then
try
while Length(Str) > 0 do
begin
if Copy(Str, 1, 1) = '\' then
begin
if Uppercase(Copy(Str, 2, 1)) = 'X' then
Str[2]:= '$';
if not TryStrToInt(Copy(Str, 2, 3),i) then
Exit;
B:= Byte(i);
Delete(Str, 1, 3);
end else B:= Byte(Str[1]);
Delete(Str,1,1);
WritePrinter(PrinterHandle, @B, 1, Escritos);
end;
Result:= TRUE;
finally
EndPagePrinter(PrinterHandle);
end;
finally
EndDocPrinter(PrinterHandle);
end;
finally
ClosePrinter(PrinterHandle);
end;
end;
Attention noublier pas de convertir cette chaine hexadecimal en binaire qui va donner :
WriteRawDataToPrinter
(chr(27)+chr(112)+chr(0)+chr(13)+chr(10));
et noublie pas : uses printers,winspool;
Merci j'espere que la reponse a ce sujet a ete utile,
Bonne chance mes amis.
23 sept. 2017 à 23:14
merci à Jordane d'avoir rendu ton code lisible grâce à la coloration. Voir la procédure ici pour tes prochaines interventions.
Cependant j'ai une petite remarque, la question date de 5 mois, j'espère pour Farouk qu'il a trouvé une solution depuis.
Mais si ça n'est pas le cas, quand il lira le mail de notification de réponse à sa question, tu vas peut être lui donner une fausse joie.
En effet, il n'a pas parlé d'imprimante, mais d'un adaptateur usb/rj.
Ton code marchera peut être, mais à la lecture de ton post envoyer une syntaxe d'impression à un périphérique qui n'est pas une imprimante, j'ai comme un doute.