Inhalt eines Editfeldes Drucken lassen

  • Hallo Freunde der leichten Unterhaltung,

    heute habe ich ein neues Thema womit ich mich beschäftige ;)

    Ich habe mir in de Kopf gesetzt ein bestimmtes Editfeld aus meiner GUI über einen Button "ausdruckbar" zu machen.

    Ansich kein Problem mit _PrintFile sollte man jetzt denken.

    Jedoch ist der Inhalt meiner Editbox immer nur ein Abschnitt aus einer *.ini Datei und dieser sogar noch mit StringReplace formatiert wegen der Zeilenumbrüche.

    würde ich also _PrintFile benutzen würde er ja a) die gesamte Datei drucken statt nur dem grad angezeigten Teil und b) natürlich auch die Formatierungen wie [CRLF] da diese ja erst im Skript ersetzt werden.

    Wie also kann ich das Editfeld so ausdrucken lassen wie ich es eigentlich auch direkt in der GUI aktuell sehe?

    Google und hier die Boardinterne Suchfunktion ergaben leider immer nur Hinweise auf _PrintFile.

    LG
    Mirko

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (17. November 2011 um 20:24)

  • Moin Moin,

    so z.B.?

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #include <file.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=C:\_AutoIT\AutoIt.de\FormEditControl_to_FilePrint.kxf
    $FormEditControlFilePrint = GUICreate("FormEditControlFilePrint", 615, 438, 607, 124)
    $Edit1 = GUICtrlCreateEdit("", 48, 48, 449, 297)
    GUICtrlSetData(-1, StringFormat("ganz viel\r\nTest\r\nund \r\nnoch\r\nmehr \r\ntext"))
    $ButtonDrucken = GUICtrlCreateButton("Drucken!", 40, 368, 483, 49)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonDrucken
    $hTempdatei = FileOpen(@TempDir & "\temp.txt",2)
    FileWrite($hTempdatei,GUICtrlRead($Edit1)) ; Text in TempDatei
    FileClose($hTempdatei)
    _FilePrint(@TempDir & "\temp.txt") ; Drucken :)
    FileDelete(@TempDir & "\temp.txt") ; Aufräumen
    EndSwitch
    WEnd

    [/autoit]

    Einfach in eine Temp-Datei schreiben - dann kannst du sie mit _FilePrint aufrufen
    Natürlich solltest du ein paar mehr Prüfungen einbauen (ob das Dateierstellen / Drucken geklappt hat etc.)

    BLinz

  • Joah wunderbar.... mußte noch nen kleines Sleep einbauen, da die Datei sonst schneller gelöscht war bis der Druckauftrag zustande kam ;)

    Aber hier hab ich doch glatt noch was zu bemängeln^^

    Soweit ich die Funktion _FilePrint richtig gesehen habe wird über die shell32.dll das notepad geöffnet, mit Hide versteckt und darüber der Print durchgeführt.


    Notepad hat aber die blöde eigenschaft, über dem Dokument den Dokumentennamen (in unserem Beispiel temp.txt) mit auszudrucken und unten drunter noch Page 1 usw.

    Wenn ich denselben ausdruck über Wordpad mache druckt er solchen Mist nicht mit aus. Google hoch und runter gesucht - aber nichts gefunden wie man über Wordpad drucken könnte. Gibts da auch irgendeinen shell32 Zugriff?

    Schließlich läßt es sich ja auch einfach mit dem Befehl wordpad.exe starten so wie sonst die notepad.exe...

    Hat da noch wer Rat?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Schau dir mal das Beispiel für ShellExecute in der Hilfe an - da gibt es auch drucken (wenn die Datei ein Dokument ist).
    sonst nenne die erstellte Datei doch .rtf statt .txt - rtf sollte er mit Wordpad öffnen, ob FilePrint das macht weis ich nicht,
    ShellExecute sollte die passende Anwendung nehmen.

    Ansonsten - wordpad direkt ansteuern (also wordpad.exe + datei + schalter für drucken) - wie der Parameter für das drucken war müsste man mal eben googln

    BLinz

    • Offizieller Beitrag

    wie der Parameter für das drucken war müsste man mal eben googln


    Oder einfach mal in die Registry schauen. ;)
    Zu jedem Dateityp sind im CLASSES_ROOT unter Shell die Aufrufe (open, print etc.) hinterlegt.
    Für Wordpad-Dokumente findest du den Aufruf unter folgendem Schlüssel:
    HKEY_CLASSES_ROOT\Wordpad.Document.1\shell\print\command
    also: '"Pfad_wordpad.exe" /p "Pfad_zu_druckende_Datei"'

  • Da ich grad auf Arbeit bin kann ich den Registryteil von Bugfix nicht testen, hab mich derweil mit folgender Version rumgeschlagen:

    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonDrucken
    ShellExecute(@WindowsDir & "\system32\write.exe", "", "", "")
    Sleep(1000)
    ControlSend("Document - WordPad", "", "", GUICtrlRead($Edit1))
    Sleep(500)
    ControlSend("Document - WordPad", "", "", "^p")
    Sleep(500)
    ControlSend("Document - WordPad", "", "", "{ENTER}")
    Sleep(1000)
    ProcessClose("wordpad.exe")
    EndSwitch
    WEnd

    [/autoit]

    Jedoch funktioniert der ControlSend hier nicht, wenn ich WordPad auf minimize oder gar auf Hide setze... er öffnet es dann zwar aber sämtliche Send's gehen dann ins leere... warum auch immer...

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Das ist das Problem - das Fenster soll eigentlich gar nicht aktiv werden.

    Ich möchte eigentlich nur ein Druckbutton in der GUI von der aus der Druck startet, ohne das der entsprechende User irgendetwas anderes sieht.

    Die erste Variante hat dies perfekt umgesetzt - jedoch gefällt mir das Layout vom Notepad nicht.

    Somit hab ich die WordPad Variante probiert - da der user aber eigentlich vom Hintergrundprozess des Druckens nmichts mitbekommen soll stört es mich schon das WordPad überhaupt aufgeht. Mit WinWaitActive muss auch hier das WordPad maximiert sein um arbeiten zu können...

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Zitat:
    Für Wordpad-Dokumente findest du den Aufruf unter folgendem Schlüssel:
    HKEY_CLASSES_ROOT\Wordpad.Document.1\shell\print\command
    also: '"Pfad_wordpad.exe" /p "Pfad_zu_druckende_Datei"'


    Versteh ich nicht :D

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Den FilePrint Aufruf wie folgt ersetzen:

    [autoit]

    ShellExecute("wordpad.exe","/p " & @TempDir & "\temp.txt") ;- sichtbar

    [/autoit]

    oder wenn Worpad unsichtbar starten soll:

    [autoit]

    ShellExecute("wordpad.exe","/p " & @TempDir & "\temp.txt","","",@SW_HIDE ) ;- unsichtbar

    [/autoit]
  • Hm alles klar. Getestet, funktioniert wunderbar, Danke! Mehr kann ich nicht sagen - wie immer wird einem in diesem Board vorzüglich geholfen. Macht weiter so!!!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.