Ouvrir tiroir caisse

farouk - 8 avril 2017 à 13:16
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 23 sept. 2017 à 23:14
Bonjour,
svp , j'ai un probléme ,j'utilise DELPHI 5 et j'ai un tiroir caisse 'cash drower 4141' connecté a mon PC via ---toroir-----rj12----adaptateurusb----usb to mon PC.JE VEUT OUVRIR CE TIROIR PAR CODE DELPHI SANS UTILISER LA CLé.
qulqun m'aider ces urgent

1 réponse

SamirVW31 Messages postés 1 Date d'inscription vendredi 22 septembre 2017 Statut Membre Dernière intervention 22 septembre 2017
Modifié le 23 sept. 2017 à 09:42
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.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 sept. 2017 à 23:14
Bonjour

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
Maintenant pour envoyer ce message a l'imprimante il faut utiliser l'impression direct par RAW
envoyer une syntaxe d'impression à un périphérique qui n'est pas une imprimante, j'ai comme un doute.
0
Rejoignez-nous