Drucken

Stgt

Mitglied
hi

weiß jemand von euch, wie man zeilenweise drucken kann.
Also es soll eine Zeile gedruckt werden und dann angehalten werden .
Sprich die Seite soll nicht durchgezogen werden.
danke
gruß
 
moin


Erstmal ne standart Antwort/Frage von mir:
Welcher Compiler?
Welche Bibliotheken stehen dir zur verfügung(MFC/API/reines C/C++);
In welcher Sprache, C oder C++?


mfg
umbrasaxum
 
Hi,
Fruher unter DOS habe ich genau diesen Effekt erreicht, indem ich die Zeichen einfach an LPT Port ausgegeben habe, der Drucker druckt sie dann sodort und wartet auf das naechste. Ich glaube Zeichen 0x01 war dann das Zeichen um das Papier auszuwerfen. Mit inout32.dll wird es unter XP vielleicht sogar klappen.
 
hi

wie hast du das dann gemacht. Kannst du mir das bitte mal zeigen.
Also ich hab gedacht es würde so gehen:

#include <stdio.h> // Präprozessor-Direktiven
int main()
{
FILE *Drucker;
int Logfehler;

// Ausgabe des Ergebnisses
Drucker = fopen("PRN","w");
fprintf(Drucker," L O G F E H L E R \n\n");
fprintf(Drucker,"%d",Logfehler);
fclose(Drucker);
return 0;
}


danke, gruß
 
Hi,
Ich habe das nicht mit WinAPI gemacht, wie du, sondern mit Assembler direkt die LPT Ports angeschprochen. LPT1 = 0x378. Das waren aber auch alte Zeiten...
Hier: http://www.logix4u.cjb.net/
kannst du die inpout32.dll runterladen, und unter Windows NT Versionen auch den LPT port per Out32 direkt ansprechen.

Etwa so:
Code:
Out32( 0x378, 'A' ); // Der Drucker soll erstmal ein "A" drucken
Out32( 0x378, 10 ); // Dann in die naechste Zeile
Vor der ausgabe zum Drucker mit Out32 muss du auch keine HANDLES initialisieren, wie du das sonst unter Windows machst. Hab aber selber mit Out32 nicht ausprobiert.. :-(
 
Hi,
inpout.dll hat auch nichts mit Assembler zu tuhn... ist fur C++ und Basic gedacht.

Falls du nur deinen Logfehler ausgeben willst, und der Drucker 2 Blätter Papier ausgibt, anstatt einen, versuchs mal mit insgesamt nur 1nem fprintf()
Code:
fprintf(Drucker," L O G F E H L E R %d \n\n", Logfehler);
 
aso, okay

das ist so ein NAdeldrucker mit endlospapier und mein problem oder bedenken wäre dass er das ganze Blatt durchzieht, aber er soll immer was drucken wenn es eine fehlermeldung gibt.
Also brauch ich doch noch eine endloschleife....
Ach ich muss %c anstatt %d nehmen oder? und dann anstatt int Logfehler; char Logfehler
oder?
danke
 
Hi,
wenn du char Logfehler machst, dann begrenzt du den Wert von Logfehler auf 0-255. Also falls du Werte uber 255 hast, und uberhaupt, ist es sicherer int zu nehmen. Wenn du statt %d, %c nimmst, dann zeigst du nicht die Zahl an, sondern ein Zeichen mit dem entsprechenden ASCII code. D.h. falls Logfehler 0x41 ist, kommt beim Drucker "L O G F E H L E R A" raus, denn 0x41 ist ein ASCII Wert fur "A".

Falls du jedoch als Logfehler einen String nehmen willst, dann sieht das ganze so aus:
Code:
char *Logfehler;
Logfehler = "Irgendein fehler, hehe"; // FehlerString zuweisung
fprintf(Drucker," L O G F E H L E R %s \n\n", Logfehler);
Glaube jedoch nicht dass das erwünscht war, oder?

um jetzt per Out32 den text auszugeben, muss man selber eine Ausgabeschleife mit sprintf machen:
Code:
char *Logfehler;
char DerGanzeFahler[1000];  // einen String erstellen
Logfehler = "Irgendein fehler, hehe"; // FehlerString zuweisung

sprintf(DarGanzeFehler," L O G F E H L E R %s \n\n", Logfehler); // den string fullen

// Zusammengesetzten Text an Drucker ausgeben
for(int i=0;DerGanzeFehler[i] != 0;i++)
{
  Out32( 0x378, DerGanzeFehler[i];
}
 

Neue Beiträge

Zurück