Seite 1 von 2

Drucken DOS-Datei

Verfasst: Do, 10. Mai 2012 12:32
von Rolf Ramacher
ich habe eine Druckdatei die durch clipper erzeugt wird. wenn ich diese über Word ausdrucke stimmt die formatierung überhaupt nicht und bekomme sie auch nicht ganz hin. wenn ich diese anzeige und mit memoread und im mle-feld anzeige - stimmt sie annähernd ist fas OK

jetzt habe ich sie versucht mit GraStringAt - auszudrucken - kommt gar nichts leeres Blatt, dann habe ich einen Text versucht auszudrucken - kommt auch nix. Irgendwo habe ich etwas übersehen, denn etiketten drucke ich auf diesem wEge aus.

Code: Alles auswählen

	If file("ker.lit")
		cZwText:=memoread("ker.lit")

	   oDlg := XbpPrintDialog():new() 

	   // Druckausgabe nicht standardmäßig in Datei umleiten 
   	oDlg:enablePrintToFile := .f. 
	   oDlg:printToFile       := .f. 
		oDlg:pageRange 		  := {1,99 }
	   oDlg:create() 
	
	   // Konfiguriertes Drucker Objekt erzeugen 
	   oPrinter := oDlg:display() 
	   oDlg:destroy() 
	
	   IF oPrinter <> NIL 
			oPrinter:setOrientation(XBPPRN_ORIENT_PORTRAIT)
	
	      // Neuen Presentation-Space erzeugen 
	      oPS   := XbpPresSpace():new() 
	      // Bedruckbarer Bereich auf dem Papier 
	      aSize := oPrinter:paperSize() 
	      aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4]  } 
	      oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC ) 
			aPos:={aSize[1]+50,aSize[2]-50}

			oPrinter:Startdoc()
				oFont := XbpFont():new():create( "18.Courier New" )
				GraSetFont( oPs, oFont )
		      GraStringAt( oPS, aPos , cZwtext ) 
				

			oPrinter:Enddoc()
	
	      oPrinter:destroy() 
	      oPS:destroy() 
	
		endif
	Endif

Re: Drucken DOS-Datei

Verfasst: Do, 10. Mai 2012 13:14
von georg
Hallo, Rolf -


wie sieht es aus, wenn Du beim Druck aus Word eine Schrift mit fester Breite verwendest, z.b. Lucida Console? Die proportionale Schrift versaut meistens eine Formatierung, die auf fester Zeichenbreite eingestellt ist.


Gruss,

Georg

Re: Drucken DOS-Datei

Verfasst: Do, 10. Mai 2012 16:35
von Rolf Ramacher
Hi Georg,

den WEg über Word - hatte ich schon Times New Roman, aber auch ,mit Lucia Console. nicth viel besser

Re: Drucken DOS-Datei

Verfasst: Do, 10. Mai 2012 18:19
von Wolfgang Ciriack
Hallo Rolf,
probier mal COURIER NEW.

Re: Drucken DOS-Datei

Verfasst: Fr, 11. Mai 2012 12:17
von Rolf Ramacher
das Drucken über Word, denke , werden wir vergessen können. Word macht da seine Interne Formatierung . egal welche Schriftart ich auswhähle.

Die Frage ist, warum kommt ein leeres Blatt raus wenn mit GraStringAt drucke ??

Re: Drucken DOS-Datei

Verfasst: Fr, 11. Mai 2012 13:12
von Tom
Die Frage ist, warum kommt ein leeres Blatt raus wenn mit GraStringAt drucke ??
Mmmh. Deine Berechnung von "aPos" ist für mich nicht ganz schlüssig. Druck doch mal einfach nur ein "X" an diese Position - oder den Text an eine Position, die auf jeden Fall richtig sein müsste. Wenn man außerhalb des PP platziert, wird eben auch nichts angezeigt oder gedruckt. Außerdem willst Du, wenn ich das richtig sehe, einen längeren Text mit Umbrüchen drucken, und das geht m.E. ohnehin nicht auf diese Weise.

Re: Drucken DOS-Datei

Verfasst: Fr, 11. Mai 2012 13:52
von Rolf Ramacher
Hi Tom.

ich habe jetzt aSize genommen - und einen Text mit angegeben - nix

so sieht es jetzt aus

Code: Alles auswählen

  oDlg := XbpPrintDialog():new() 

	   // Druckausgabe nicht standardmäßig in Datei umleiten 
   	oDlg:enablePrintToFile := .f. 
	   oDlg:printToFile       := .f. 
		oDlg:pageRange 		  := {1,99 }
	   oDlg:create() 
	
	   // Konfiguriertes Drucker Objekt erzeugen 
	   oPrinter := oDlg:display() 
	   oDlg:destroy() 
	
	   IF oPrinter <> NIL 
			oPrinter:setOrientation(XBPPRN_ORIENT_PORTRAIT)
	
	      // Neuen Presentation-Space erzeugen 
	      oPS   := XbpPresSpace():new() 
	      // Bedruckbarer Bereich auf dem Papier 
	      aSize := oPrinter:paperSize() 
	      aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4]  } 
	      oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC ) 
			aPos:={aSize[1]+50,aSize[2]-50}

			oPrinter:Startdoc()
				oFont := XbpFont():new():create( "18.Courier New" )
				GraSetFont( oPs, oFont )
		      GraStringAt( oPS, aSize , "CL-Sieger" ) 
				

			oPrinter:Enddoc()
	
	      oPrinter:destroy() 
	      oPS:destroy() 
	
		endif

Re: Drucken DOS-Datei

Verfasst: So, 13. Mai 2012 3:54
von AUGE_OHR
Rolf Ramacher hat geschrieben:ich habe jetzt aSize genommen - und einen Text mit angegeben - nix

Code: Alles auswählen

 aPos:={aSize[1]+50,aSize[2]-50}
Tom sprach von aPos ...

hm ... aSize[1] ist doch die maximale Papierbreite, oder ? was bekommst du bei o:paperSize() ?
1 Papierbreite in 1/10 mm (= nXsize)
2 Papierhöhe in 1/10 mm (= nYsize)
3 Linker Rand in 1/10 mm (= nLeftMargin)
4 Unterer Rand in 1/10 mm (= nBottomMargin)
5 Rechter Rand in 1/10 mm (= nRightMargin)
6 Oberer Rand in 1/10 mm (= nTopMargin)
7 Breite in Pixel
8 Höhe in Pixel

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 9:25
von Rolf Ramacher
Könnt ihr mir mal auf ie Sprünge helfen.

asize hat folgende Daten {1979,2855} - das bedeutet maximale breite 1979, max. Höhe 2855 oder bin ich da falsch, wo muß ich denn da mit dem Druck anfangen ?

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 9:33
von Martin Altmann
Moin Rolf,
denke nach - dann kommst Du drauf 8)
Wenn die Breite und Höhe 1979 und 2855 ist und Du an der Stelle 2029 und 2805 druckst, dann liegt das ausserhalb des sichtbaren Bereiches!

Viele Grüße,
Martin

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 9:45
von Rolf Ramacher
alles klar Martin,

ich denke jetzt komme ich klar

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 11:18
von Rolf Ramacher
irgendwie komme ich nicht ganz weiter.

die Datei wird richtig gelesen. die Anzahl der Zeilen ist richtig - aber er druckt nur die Überschrift - mit der Anzahl der Zeilen-. in diesem Fall 19 x

Code: Alles auswählen

	   IF oPrinter <> NIL 
			oPrinter:setOrientation(XBPPRN_ORIENT_PORTRAIT)
	
	      // Neuen Presentation-Space erzeugen 
	      oPS   := XbpPresSpace():new() 
	      // Bedruckbarer Bereich auf dem Papier 
	      aSize := oPrinter:paperSize() 
	      aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4]  } 
	      oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC ) 
			aPos:={30,aSize[2]-50}

			cZwText:=memoread("ker.lit")
			nZeile:=MLcount(cZwText,500)
num:=NumAt(CRLF,cZwtext)
msgbox(cZwText)
msgbox(var2lchar(nZeile))
msgbox(var2lchar(num))
			oPrinter:Startdoc()
				oFont := XbpFont():new():create( "18.Courier New" )
				GraSetFont( oPs, oFont )
		
				For i = 1 to nZeile
					cDatenSatz:=alltrim(MemoLine(cZwText,500,i,4,.f.))
					cZwtext:=strtran(cZwText,"(s16.66H","")
					cZwtext:=strtran(cZwText,"(s10H","")
			      GraStringAt( oPS, aPos , cZwText ) 
					aPos[02]-=20					
				Next i
			oPrinter:Enddoc()
	
	      oPrinter:destroy() 
ich habe auch memline - ohne parameter 4+5 gemacht - das gleiche ergebnis

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 11:59
von Rolf Ramacher
So jetzt habe ich es fast. Hatte einen Fehler im Code.
aber ein Zeichen ein quadratisches Kästchen - bekomme ich nicht ersetzt. finde ich auch nicht in der Ascii-Tabelle. es ist nicht chr(10) oder chr(13)

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 12:17
von brandelh
es könnte 26 (Dateiende z.b. von MemoWrit() ) oder 141 (weiche Zeilenschaltung => HardCR() ) sein ...

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:22
von Rolf Ramacher
Hi Hubert,

nein vom memowrit kann es nicht kommen das Zeichen, ich mache jetzt kein memowrit mehr. Chr(141) DOS oder Windows. bei Windows-Tabelle steht nichts und bei DOS ist dies ein anderes Zeichen.

vielleicht ContoAnsiCp() - werde mal probieren - hat nichts gebracht

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:29
von brandelh
gib doch den String Zeichen für Zeichen in eine alternate Datei mit dem ASC() Wert aus oder nimm einen Editor (wie MED) der anzeigt welcher Code ein Zeichen hat ...

Code: Alles auswählen

cT := "Ein String mit seltsamen Zeichen"
nStart := 1       // eventuell einschränken
nLen := len(cT)     // eventuell einschränken
for x := 1 to nLen
   nV := asc(cT[x])
   if nV >= 32 
     cV := cT[x]
   else
     cV := " "
   endif 
   ? "'"+cV+"'  => ",nV
next

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:31
von Tom
Gegen Kästchen im Ausdruck gibt es doch die Funktion "NoSquares".

Code: Alles auswählen

GraStringAt( oPS, aPos , NoSquares(cZwText) ) 

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:35
von Rolf Ramacher
Hi Tom

diese Funktion habe ich nicht - vielleicht erst ab Version 3.55 ?

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:44
von Tom
@Rolf: Das war ein Scherz. 8)

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:52
von Martin Altmann
Tom,
das wird er schon so aufgefasst haben - warum sonst sollte er von Version 3.55 schreiben :?: :lol:

Viele Grüße,
Martin

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:54
von brandelh
Tom hat geschrieben:@Rolf: Das war ein Scherz. 8)
Und wie sollte man ohne Hinweis darauf kommen [-X
Ich ging davon aus, dass es mit eXpress zusammen hängt :badgrin:

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 13:59
von Tom
warum sonst sollte er von Version 3.55 schreiben
Originelle Schreibung der Build-Nummer (Rolf benutzt 331)? :wink:

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 14:07
von Martin Altmann
Hmm - sei doch nicht so Vorurteilsbelastet 8)

Viele Grüße,
Martin

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 14:13
von Tom
@Rolf: Welches Zeichen wird denn nicht gedruckt? Du kannst die Datei doch ansehen. Wenn es um Umlaute geht, kann auch das Gegenteil von ConvToAnsiCP(), nämlich ConvToOemCP(), Wirkung erzielen.

Sorry wegen des Scherzes. Konnte ich mir einfach nicht verkneifen. Deine Fehlerbeschreibungen sind halt manchmal etwas haarsträubend. 8)

Re: Drucken DOS-Datei

Verfasst: Mo, 14. Mai 2012 14:22
von Rolf Ramacher
Hi Tom

dabei habe ich gar nicht mehr so viele Haare auf'm Kopf. Ich habe es gefunden - es chr(27) aus dem dos-ascii-zeichensatz - wird dann wohl
umgewandelt autom. -