Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Carattere particolare.. come rappresentarlo...

    Non importa con che linguaggio, anche se io utilizzo Delphi, vorrei sapere come mai il carattere #27 lanciato da progetto Delphi non mi fa funzionare una stampante di tessere con cui sto lavorando. Invece funziona se apro l'editor MS-DOS e incollo la stringa <ESC> + comando stampante. Come interpreta MS-DOS il carattere #27 rispetto a Delphi ... sto uscendo pazzo!!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Senza avere una minima parte di codice sorgente a disposizione non è possibile capire come mai il tuo progetto Delphi invia in modo errato il carattere alla stampante.

    Tuttavia, l'interpretazione del carattere non è diversa tra Delphi e MS-DOS, che non si possono comunque paragonare (al massimo Windows e MS-DOS) poichè il primo è un ambiente di sviluppo, il secondo è un sistema operativo.

    Se in DOS (o dal Prompt dei Comandi di Windows) l'invio dei dati funziona, probabilmente l'errore è da ricercare nel programma Delphi che stai realizzando...magari non è nemmeno un problema del carattere ESCAPE.

    Non sapendo quale stampante utilizzi, in che modo comunichi con essa, con quali funzioni e/o componenti e senza codice sorgente, non c'è proprio modo di capire quale sia il problema.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ti spiego subito.
    Creo un oggetto printers a cui invio tramite canvas il mio comando ESC che per la stampante è il carattere che identifica l'inizio dei
    comandi.
    Come ti ho già detto <ESC> nome comando (MF) e carattere #13 di fine comando.
    Se vuoi capire la diversa interpretazione del #27 tra Windows e Dos fai questa prova.
    1 - Apri un qualsiasi Editor ASCII e inserisci il carattere esc (che ti viene mostrato come un quadratino) seguito dai caratteri MF.
    2 - salva il tutto
    3 - vai su Prompt MS-DOS
    4 - digita edit e carica il tuo nome file
    5 - vedi che l'ESC per il DOS è un'altro tipo di char

    Il codice delphi è il seguente :



    printers := nil;
    printers := tprinter.Create;
    try
    printers.BeginDoc;
    printers.Canvas.TextOut(0,0, #27+'MF'+#13);
    finally
    printers.Enddoc;
    printers.Free;
    end;

    e non ne vuol sapere. Credo perchè #27 non è lo stesso carattere che lui scrive su DOS quando metto l'<ESC>

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    La differente rappresentazione del carattere ESC in ambiente DOS e Windows è solo, appunto, una differente rappresentazione, ma il carattere memorizzato all'interno del file, che questo venga visualizzato, inviato alla seriale, spedito via TCP su Internet, è sempre quello corrispondente al codice ASCII 27.

    Il codice ASCII è uno standard ed è il codice numerico "27" ad essere importante, non il modo con cui viene visualizzato che dipende poi dal programma, dal font e da tante altre cose.

    Osservando il tuo codice, credo di aver capito la vera origine del problema, anzi direi che il carattere ESC è l'unica cosa giusta.

    Innanzitutto, usi in modo errato la classe TPrinter, che non deve essere creata dal programmatore ma viene creata automaticamente da Delphi per ogni stampante installata in Windows, sempre che la stampante che stai cercando di utilizzare sia dotata di un driver appropriato...ma so che molte stampanti di etichette e simili accettano comandi solo tramite seriali, ed è quindi impossibile sfruttare le funzionalità di stampa e spooling offerte da Windows.

    In secondo luogo, il protocollo che mi hai illustrato sembra una sequenza di comandi adatti per stampare. I caratteri che costituiscono i comandi devono essere inviati direttamente alla stampante, mentre tu stai cercando di "disegnare" quei comandi sull'oggetto Canvas che rappresenta la tela grafica della stampante, ammesso che questa sia veramente accessibile e utilizzabile (dipende dalla disponibilità di driver di stampa per Windows).

    In definitiva, la stampa deve avvenire inviando la sequenza di caratteri direttamente alla stampante, seriale o parallela che sia, invece di scrivere il testo corrispondente ai comandi sulla "pagina virtuale" fornita dal Canvas, che probabilmente non sarà nemmeno utilizzabile da quella stampante.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Esatto questo era un pensiero che mi avevo sfiorato a un certo punto della mia ricerca ma mi ero bloccato alla domanda : in che modo invio comandi DIRETTAMENTE alla stampante. C'è un modo alternativo al Canvas?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Per sapere come inviare i comandi, occorre conoscere il mezzo di comunicazione.

    Cosa collega la stampante al PC?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    La parallela...

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Osserva questo esempio che potrebbe fare al caso tuo.

    Al posto dell'istruzione WriteLn usa la Write passando come parametro i singoli caratteri oppure l'intera stringa che costituisce il comando.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Mitico.. infatti funziona. Ma sei un Guru... però ora c'è un'altro problema... come faccio a usare il CANVAS per scrivere sulla mia tessera e mandargli dei comandi nella stessa stampata? Sono 2 oggetti diversi!!!!

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Il Canvas rappresenta una tela virtuale nella quale disegnare elementi grafici che verranno poi inviati alla stampante tramite le funzioni di Windows relative ai servizi di stampa, traducendo i contenuti usando il driver opportuno fornito dal produttore della stampante.

    Nel tuo caso, nutro seri dubbi che la stampante disponga di un driver per Windows (basta controllare in Stampanti e fax nel Pannello di Controllo).

    Se la stampante funziona solamente ricevendo comandi dalla porta parallela, occorre consultare il manuale per sapere se la stampante è in grado di "rendere" contenuti grafici avanzati che non siano solo testo e quali sono, in caso affermativo, i comandi per farlo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.