Ouvrir tiroir caisse

farouk - 8 avril 2017 à 13:16 - Dernière réponse : Whismeril 10536 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention
- 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
Afficher la suite 

2 réponses

Répondre au sujet
SamirVW31 1 Messages postés vendredi 22 septembre 2017Date d'inscription 22 septembre 2017 Dernière intervention - Modifié par jordane45 le 23/09/2017 à 09:42
0
Utile
1
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.
Whismeril 10536 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 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.
Commenter la réponse de SamirVW31

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.