Druckerdialog [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Druckerdialog [erledigt]

Beitrag von Ewald »

Hallo,
bei der Abarbeitung von irgendwelchen automatischen Abläufen erzeuge ich mehrere Druckjobs, die nach
Programmende gestartet werden und dem User die Möglichkeit geben, den Druck über das Windows-Druckmenü
auszulösen. Leider sagt das Menü nichts über den anstehenden Druckjob aus - also, was genau gedruckt wird.

Ich suche eine Möglichkeit, wie ich aus EXPRESS++ heraus eine Meldung an den Druck-Dialog mitgeben kann.
In der Kopfzeile, da wo jetzt standardmäßig "Drucken" steht, möchte ich je Druckjob zusätzlich eine Info mitgeben, was
gedruckt werden soll. Also z.B. "Drucken Inventurbelege".
Da gibt es doch bestimmt einen Parameter, den ich mal wieder übersehen habe.
Bild
Bin für jeden Tip wie immer dankbar.
Gruß
Ewald
Zuletzt geändert von Ewald am Mi, 23. Dez 2009 14:24, insgesamt 1-mal geändert.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Ewald »

Es gib da in den DCPRINT OPTIONS den Parameter "TITLE". Dem hätte ich das zugetraut. Das bleibt bei mir aber ohne den gewünschten Erfolg.
Wenn das mit EXPRESS++ nicht zu realisieren ist, wie sieht es dann wohl mit reinem XBASE++ Code aus ?
Geht da wohl was ?
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Druckerdialog

Beitrag von Manfred »

Hi Ewald,

den TITLE hatte ich auch erst als Vorschlag, bis mir aufgefallen ist, dass der benutzt werden kann um über PDF dem Druckjob einen Namen zu geben, wenn man den automatisch speichern will, aber nicht um oben den Text "Drucken" zu verändern.

Im Prinzip müßtest Du die Frage auf das reine Xbase++ Forum erweitern und dann hoffen, dass Günther Beyes es liest. Der hat ja immer irgendwelche tollen Ideen, wie man sowas lösen kann/könnte.
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!!
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Ewald »

Hallo Manfred,
nachdem diese Anforderung bei mir auf dem Tisch liegt bin ich überrascht, dass das nicht irgendwo vorgesehen sein soll.
Ich habe grade mal nachgesehen, wie sich Office da verhält und 1 x Excel und 1 x Word geöffnet und jeweils einen Druck ausgelöst.
Da steht auch nur stumpf "Drucken". Das führt da aber nicht zu Problemen, da der Druckdialog fest in das Fenster genagelt ist und der User sieht, wozu der Dialog gehört.
Schaun mer mal ...
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Koverhage »

Hallo Ewald,

swoeit mir bekannt gibt es nur diese Möglichkeit. Müsstest alle Zeilen ändern die hinten // neu
haben.
Das Problem ist, Du musst das bei dem Express++ Update machen.

Code: Alles auswählen

FUNCTION DC_PrinterDialog( aOptions, oPrinter )

LOCAL .................................................................. ;

      lGroups, nHwnd, nAHwnd, cATitle := space(200)   // ab nHwnd neu

IF nDialogStyle = 2

  oDlg := XbpPrintDialog():new()
  oDlg:enablePrintToFile := .t.
  oDlg:enableNumCopies := .t.
  oDlg:enableCollate := .t.
  oDlg:numCopies := nCopies
  IF !Empty(nFrom) .AND. !Empty(nTo)
    oDlg:pageRange := { nFrom, nTo }
  ENDIF

  oDlg:create()
  lSelect := .f.

  oThread := Thread():new()
  Sleep(10)
  oThread:start({||oPrinter := _PrinterDialog(oDlg,oPrinter,@lSelect)})

  nAHwnd := GetForegroundWindow()                                     // Neu
  GetWindowTextA( nAHwnd,@cATitle,200 )                           // Neu

  DO WHILE !lSelect
    nEvent := AppEvent(@mp1,@mp2,@oXbp,10)
    IF Valtype(oXbp) = 'O'
      oXbp:handleEvent(nEvent,mp1,mp2)
    ENDIF
    nHwnd := GetForegroundWindow()                                     // Neu
    SetWindowTextA( nHwnd,@cTitle,len(cTitle) )                    // Neu
  ENDDO

  SetWindowTextA( nAHwnd,@cATitle,len(cATitle) )                // Neu

Gruß
Klaus
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Druckerdialog

Beitrag von Lewi »

Hallo Ewald,
bei der Abarbeitung von irgendwelchen automatischen Abläufen erzeuge ich mehrere Druckjobs, die nach
Programmende gestartet werden und dem User die Möglichkeit geben, den Druck über das Windows-Druckmenü
auszulösen.
Der Windows-Druckspooler läßt sich mittels API-Funktion abfragen. Dort landen allerdings nur Druckaufträge, die einem Device zugeordnet sind.

Und was eigentlich "nach Programmende"? Wenn ich Deine Ausführungen Recht verstehe, erzeugst Du keine Druck-Jobs, weil "vor" dem Druck eines jeweiligen Beleges eine Druckerauswahl erfolgen soll. Ich wüßte keine Möglichkeit, wie man einen Druck-Job auf den Weg bringen kann, ohne das ein Device angegeben werden muss und anschließend Windows von sich aus einen Druckerdialog einblendet. Wird kein dezidierter Drucker angegeben, druckt Windows auf den eingestellten Standard-Drucker. Der Druckerdialog muß demnach immer ein Teil der eigenen Programm-Logik sein.

Viele Grüße
Olaf
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Ewald »

Hallo Olaf,
durch jahrelanges Training ist es mir wohl gelungen, einfache Abläufe kompliziert darzustellen ;-)
Die Ausdrucke sind Bestandteil des Programmes. Mit nach Programmende meinte ich die Verarbeitung der Daten.
Ich mache mal ein sinnloses Beispiel.

Code: Alles auswählen

proc main
@ 0,0 dcprint say "Auftragsnummer " 
* Erfassung weiterer Daten.
dcread gui 

fdruckelieferschein()     
fdruckerechnung()

return

function fdruckelieferschein
dcprint on to oprinter 
*ausgabe  Lieferschein
dcprint off
return

function fdruckerechnung
dcprint on to oprinter
*ausgabe rechnung
dcprint off
return

Wenn jetzt die Funktion fdruckelieferschein läuft, erscheint das Durckmenu mit der Kopfzeile Drucken. Und ich hätte gerne da stehen "Drucken Lieferschein"
Aus der Funktion fdruckerechnung heraus sollte dort dann stehen "Drucken Rechnung". Also muß ich eine Variable an das Druckerauswahlmenü weitergeben und dort verarbeiten können.


@ Klaus,

das muss ich erst mal verdauen.

Danke
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Tom »

Hallo, Ewald.

Laut Doku zu "DCPRINT ON" und "DCPRINT OPTIONS" sollte der Inhalt der Option "TITLE" auch in der Titelzeile des Druckerdialogs erscheinen. Das ist ein Bug. Bist Du in Rogers Forum registriert? Dann solltest Du das dort mal zur Kenntnis geben.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Koverhage »

Hallo Tom,

das gilt nur wenn der Express++ Dialog verwendet wird. Habe das schon öfters bei Roger bemängelt.

Gruß
Klaus
Gruß
Klaus
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Ewald »

Hallo Klaus,
stimmt, mit dem Express Dialog funktioniert das heute noch. Danke für den Tip.

Code: Alles auswählen

dcprint on to oprinter font cfontname  ;
dialogstyle DCPRINT_DIALOG_EXPRESS ;
title "Irgendwas irgendwohin drucken"
Bild

Spricht eigentlich irgendwas dagegen, diesen Dialog noch zu verwenden ?
Und kann man den evtl. irgendwie eindeutschen ohne den Quellcode der LIB zu verändern ?

Gruß
Ewald
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Koverhage »

Ewald,

es ist schon lange her, das ich mit dem Express++ Dialog gearbeitet habe, aber der war schon mal
in deutsch.
DC_LANGSET hast Du gesetzt ?

Tom:
Leider konnte ich Roger bisher nicht überreden, die hier gepostete Lösung einzubauen :(
Gruß
Klaus
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckerdialog

Beitrag von Ewald »

Hallo Klaus,
natürlich hatte ich DC_LANGSET nicht gesetzt.
Habe ich aber nachgeholt und jetzt ist alles gut.
Deine gepostete Lösung baue ich in die DCLIPX ein sobald hier der Wahnsinn mit den Jahresendgeschäften gelaufen ist (und ich das ohne Herzklabaster überstehe :angel8: ).

@Alle
ich wünsche allen ein frohes Weihnachtsfest.

Gruß
Ewald
Antworten