set printer to OBJECT oP - geht das bei euch ?
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Hi Hubert,
bin mal wieder doof. Ich habe die Einleitung vergessen.
Aber anfänglich habe ich schon geschrieben, wie ich es löse. Ich habe ein Druckobjekt erzeugt und dort schicke ich es hin.
Warum ich die Zeichen einzeln drucke?
Nun, ich speicher die Vorgänge in eine Textdatei. So habe ich den Vorteil etliche Druckversionen zu mischen, ohne jedesmal wissen zu müssen, was ich drucke.
Dann drucke ich es so aus, weil..... nun wie immer, mir ist nichts besseres eingefallen. Ich weiß ja vorher nie, wie groß die Datei ist und irgendwie habe ich dann keine Idee gehabt, wie ich das lösen soll, das ich voher weiß, wieviel Buffer ich zur Verfügung stellen muß. Und dann bin ich ganz ehrlich lief der Druck (auf einem Rechner mit Drucker) und da habe ich erstmal nicht weiter nachgedacht.
Asche auf mein Haupt.
Die Texte sind aber auch nicht groß. Es sind meistens DIN-A 4 Blätter halbiert.
bin mal wieder doof. Ich habe die Einleitung vergessen.
Aber anfänglich habe ich schon geschrieben, wie ich es löse. Ich habe ein Druckobjekt erzeugt und dort schicke ich es hin.
Warum ich die Zeichen einzeln drucke?
Nun, ich speicher die Vorgänge in eine Textdatei. So habe ich den Vorteil etliche Druckversionen zu mischen, ohne jedesmal wissen zu müssen, was ich drucke.
Dann drucke ich es so aus, weil..... nun wie immer, mir ist nichts besseres eingefallen. Ich weiß ja vorher nie, wie groß die Datei ist und irgendwie habe ich dann keine Idee gehabt, wie ich das lösen soll, das ich voher weiß, wieviel Buffer ich zur Verfügung stellen muß. Und dann bin ich ganz ehrlich lief der Druck (auf einem Rechner mit Drucker) und da habe ich erstmal nicht weiter nachgedacht.
Asche auf mein Haupt.
Die Texte sind aber auch nicht groß. Es sind meistens DIN-A 4 Blätter halbiert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hallo Manfred,
ich wollte dein Programm nicht schlecht reden
Wenn es übers Netz bei eingeschaltetem Drucker geht und beim Ausgeschalteten irgendwann eine Fehlermeldung kommt, liegt es an einem Timeout - sprich der Sender ist schneller als der Empfänger, die Puffer speichern etwas zwischen, bis dann das Betriebssystem zurückmeldet, die Datei sei nicht verfübar. Offene Dateihandles und offene druckerschnittstellen sind für das BS das gleiche.
Offensichtlich kann das Xbase++ Programm nicht schnell genug erkennen, dass der Drucker nicht geht, das war schon immer so mit den set printer to befehlen unter einem Multitasking Betriebssystem.
Nur unter DOS konnte er direkt die Leitung abfragen, darum funktionierte damals ja auch die Tools Funktion.
Ich lass mich gerne widerlegen, aber ich denke so ist es.
ich wollte dein Programm nicht schlecht reden
Wenn es übers Netz bei eingeschaltetem Drucker geht und beim Ausgeschalteten irgendwann eine Fehlermeldung kommt, liegt es an einem Timeout - sprich der Sender ist schneller als der Empfänger, die Puffer speichern etwas zwischen, bis dann das Betriebssystem zurückmeldet, die Datei sei nicht verfübar. Offene Dateihandles und offene druckerschnittstellen sind für das BS das gleiche.
Offensichtlich kann das Xbase++ Programm nicht schnell genug erkennen, dass der Drucker nicht geht, das war schon immer so mit den set printer to befehlen unter einem Multitasking Betriebssystem.
Nur unter DOS konnte er direkt die Leitung abfragen, darum funktionierte damals ja auch die Tools Funktion.
Ich lass mich gerne widerlegen, aber ich denke so ist es.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Hi Hubert,
ich glaube ich habe die ganze Zeit fehlgedacht. Ich dachte Windows hat einen Spooler, in den die Daten geschickt werden. Da ist es doch egal, ob ein Drucker dran, an oder sonstwas ist? Die Meldung von Windows selbst sollte eigentlich nur kommen.
Wenn ein lokaler Drucker benutzt wird, dann gibt es doch auch keine Probleme. Dort kann ich drucken, bis mir die Petersilie aus den Ohren wächst. Ist kein Drucker dran, oder an, gibt es trotzdem keine fehlermeldung vom Programm, sondern maximal nur eine Meldung von Windows.
ich glaube ich habe die ganze Zeit fehlgedacht. Ich dachte Windows hat einen Spooler, in den die Daten geschickt werden. Da ist es doch egal, ob ein Drucker dran, an oder sonstwas ist? Die Meldung von Windows selbst sollte eigentlich nur kommen.
Wenn ein lokaler Drucker benutzt wird, dann gibt es doch auch keine Probleme. Dort kann ich drucken, bis mir die Petersilie aus den Ohren wächst. Ist kein Drucker dran, oder an, gibt es trotzdem keine fehlermeldung vom Programm, sondern maximal nur eine Meldung von Windows.
Das hatte ich auch nicht so aufgefasst. Kritik ist immer willkommen, ich bin nicht perfekt. Dazu habe ich hier schon viel zu viel gute Tipps erhaltenich wollte dein Programm nicht schlecht reden
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hallo Manfred,Ich dachte Windows hat einen Spooler, in den die Daten geschickt werden. Da ist es doch egal, ob ein Drucker dran, an oder sonstwas ist?
wenn du direkt auf LPT1 druckst, geht das nicht über den Windowsspooler. Eventuell puffern einige Treiber noch etwas dazwischen, aber es geht nicht über die Spooler.
Versuche eines:
Ein Drucker an LPT1: anschalten und im Spooler auf 'angehalten' setzen.
set printer to lpt1 ... druckt dennoch.
Schalte ihn ab und nach einer gewissen Zeit meldet Windows vom System einen Fehler, der NICHT vom Spooler kommt.
Wenn du einen freigegebnen Netzwerkdrucker ansprichst, müsste der immer gepuffert werden, aber was passiert wenn er aus ist und du mit
set printer to \\server\drucker druckst, weiß ich jetzt auch nicht.
NUR XbpPrinter kann den Druckspooler ansprechen und darauf reagieren ... ein Anhalten endet in einer Liste mit Druckaufträgen, welche jeweils eine Warnung zurückgeben. Da das Verhalten aber auch nicht immer sinnvoll ist, habe ich in meiner Druckerklasse HBPrinterX diesen Zustand z.B. als Fehler gewertet.
ABER in allen mir bekannten Programmiersprachen wird heute empfohlen erst drucken (oder kopieren) und erst wenn es schief geht den Fehler behandeln.
Sprich eine lokale Fehlerbehandlung installieren (Auszug aus Hilfe - abgewandelt:
Code: Alles auswählen
bSaveError := ErrorBlock( {|e| Break(e)} ) // Standardfehlerverhalten sichern, jetzt nur noch Break
set printer to lpt1 // hier druckausgabe öffnen, damit Zustand eindeutig ist.
...
BEGIN SEQUENCE
...
? Druckausgaben
...
RECOVER USING oError
ErrorBlock( bSaveError ) // schon hier zurück auf normale Fehlerbehandlung
... Fehlermeldung je nach Wahl ...
IF oError:osCode == 2 // Fehler: Datei existiert
...
endif
END SEQUENCE
set printer to
ErrorBlock( bSaveError )
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hallo Manfred,Manfred hat geschrieben:Hi Hubert,Aber anfänglich habe ich schon geschrieben, wie ich es löse. Ich habe ein Druckobjekt erzeugt und dort schicke ich es hin.
also laut meinen Test und was ich so höre nutz der Befehl
set printer to OBJECT oP
das Drucker Object oP hier nur zur Ermittlung von einigen Einstellungen (Portname etc.) aber es wird weder nach Windowsart gedruckt (sonst gingen auch GDI Drucker) noch der Druckspooler angesprochen.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Moin Hubert,
ich hatte früher auch immer eine Fehlerroutine eingebaut unter DOS, war aber wie oben schon erwähnt bei Windows der Meinung, dass es eben dann einfach in den internen Spooler geht. Also baue ich das wieder ein.
Tj, man lernt nie aus.
ich hatte früher auch immer eine Fehlerroutine eingebaut unter DOS, war aber wie oben schon erwähnt bei Windows der Meinung, dass es eben dann einfach in den internen Spooler geht. Also baue ich das wieder ein.
Tj, man lernt nie aus.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Jajaja,
wo soll das nur hinführen.
Ich habe den Fehler gefunden. Ich habe aus Pennerei den Printer ganz am Anfang des Programmes dem Printerobjekt zugewiesen. Klar, nach dem gedruckt wird, folgt ein Set Printer TO. Das war es dann. Danach jibbet keinen Printer mehr in dem Object.
Naja, wer keine Arbeit hat, der macht sich welche.
wo soll das nur hinführen.
Ich habe den Fehler gefunden. Ich habe aus Pennerei den Printer ganz am Anfang des Programmes dem Printerobjekt zugewiesen. Klar, nach dem gedruckt wird, folgt ein Set Printer TO. Das war es dann. Danach jibbet keinen Printer mehr in dem Object.
Naja, wer keine Arbeit hat, der macht sich welche.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Das blöde an der Sache ist immer folgendes:
Routine läuft.
Im Kopf abgehakt.
Der Rechner an dem man testet hat nicht immer die Konfig, wie der Liverechner. Da klappt es. Also wird kein Gedanke mehr verschwendet.
Dann passieren so blöde Fehler.
Routine läuft.
Im Kopf abgehakt.
Der Rechner an dem man testet hat nicht immer die Konfig, wie der Liverechner. Da klappt es. Also wird kein Gedanke mehr verschwendet.
Dann passieren so blöde Fehler.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hi,
darum verwende ich für solche Sachen (Drucken, Suchen, Lookuptabellen etc.) gerne Funktionen. Darin werden:
1. alle Umgebungsvariablen sichern
2. Drucker oder Datei öffnen bzw. einstellen
3. BEGIN SEQUENCE
4. Aktion
5. Recover
6. Recover-Action
7. END SEQUENCE
8. Alles zurücksetzten ...
UND alles mit lokalen Variablen.
Natürlich kann man nicht gleichzeitig aus 2 Funktionen auf einen LPT drucken, aber alles andere geht gleichzeitig ohne Nebenwirkungen.
darum verwende ich für solche Sachen (Drucken, Suchen, Lookuptabellen etc.) gerne Funktionen. Darin werden:
1. alle Umgebungsvariablen sichern
2. Drucker oder Datei öffnen bzw. einstellen
3. BEGIN SEQUENCE
4. Aktion
5. Recover
6. Recover-Action
7. END SEQUENCE
8. Alles zurücksetzten ...
UND alles mit lokalen Variablen.
Natürlich kann man nicht gleichzeitig aus 2 Funktionen auf einen LPT drucken, aber alles andere geht gleichzeitig ohne Nebenwirkungen.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 71 Mal
Hi,
wieder etwas dazugelernt.
verkürzt sieht es so aus:
oPrinter:create((oWsPara:nArea)->stddrucker)
Die Sache hat nur einen Haken, ich schreibe den Drucker in eine Datei, in ein Feld, welches eine grössere Breite hat, als die Bezeichnung des Druckers. Was zur Folge hat, das der Standarddrucker genommen wird und nicht der, der gewählt wurde.
So ist es richtig:
oPrinter:create(TRIM(oWsPara:nArea)->stddrucker))
Watt´n Mist, Fehler gesucht bis zum Blödwerden.
wieder etwas dazugelernt.
verkürzt sieht es so aus:
oPrinter:create((oWsPara:nArea)->stddrucker)
Die Sache hat nur einen Haken, ich schreibe den Drucker in eine Datei, in ein Feld, welches eine grössere Breite hat, als die Bezeichnung des Druckers. Was zur Folge hat, das der Standarddrucker genommen wird und nicht der, der gewählt wurde.
So ist es richtig:
oPrinter:create(TRIM(oWsPara:nArea)->stddrucker))
Watt´n Mist, Fehler gesucht bis zum Blödwerden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!