Italia
Foro

Erledigt: Druckerformat umstellen

 

Thomas
Freier
Mit einem hier gefundenen Script stelle Io l' Drucker auf Querformat um. Erfolgt die Aktion aus einem Dialog, wird der Inhalt des Dialogfensters gelöscht. Beim Hauptfenster keine Probleme.
Wie lässt sich das verhindern oder giebt es eine bessere Lösung?
KompilierenMarkierenSeparieren
 $P+
Set("ErrorLevel", 0)
 $H IncludeWindows.ph
 $H Includemessages.ph
 $H Includecommctrl.ph
 $H IncludeStructs.ph
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Drucker auf quer stellen
DEF @GetProfileString(5) !"kernel32","GetProfileStringA"
DEF @OpenPrinter(3) !"winspool.drv","OpenPrinterA"
DEF @DocumentProperties(6) !"winspool.drv","DocumentPropertiesA"
DEF @ClosePrinter(1) !"winspool.drv","ClosePrinter"
DEF @GetLastError(0) !"kernel32","GetLastError"
DEF @DocumentPropertiesW(6) !"winspool.drv","DocumentPropertiesW"
DEF @RegCREATEKEY(3)!"ADVAPI32","RegCreateKeyA"Schlüssel erstellen
def @RegSetValueEx(6) !"ADVAPI32","RegSetValueExA"
def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)

Proc Drucker_Orientation_Umstellen

    Parameters Orientation%1=Hochformat, 2=Querformat
    Declare SectionName$,KeyName$,DefautString$,ReturnBuffer#,Printername$,PHANDLE#,Länge2&
    Declare Pdevice$,DevMode#,DevMode2#,Fehler&
    Declare SubKey$
    Declare Handle#
    DIM ReturnBuffer#,256
    SectionName$="Windows"
    KeyName$="device"
    DefautString$=""
    @GetProfileString(@ADDR(SectionName$),@ADDR(KeyName$),@ADDR(DefautString$),ReturnBuffer#,256)
    Printername$=@SubStr$(@STRING$(ReturnBuffer#,0),1,",")
    Dispose ReturnBuffer#
    Pdevice$=""
    DIM PHANDLE#,4
    Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
    Länge2&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
    DIM DevMode#,Länge2&
    FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
    Fehler&=@Word(DevMode#,44+32)
    Alte Ausgelesene Ausrichtung:
    old_prnRi&=Fehler&
    DIM DevMode2#,Länge2&
    WORD DEVMODE#,44+32=Orientation%
    Dim Handle#,4
    SubKey$="PrintersDevModePerUser"
    @RegCREATEKEY($80000001,@addr(SubKey$),Handle#)
    @RegSetValueEx(@LONG(Handle#,0),@ADDR(Printername$),0,3,DEVMODE#,Länge2&)
    @RegCloseKey(@LONG(Handle#,0))
    SubKey$="PrintersDevModes2"
    @RegCREATEKEY($80000001,@addr(SubKey$),Handle#)
    @RegSetValueEx(@LONG(Handle#,0),@ADDR(Printername$),0,3,DEVMODE#,Länge2&)
    @RegCloseKey(@LONG(Handle#,0))
    Dispose Handle#
    @Sendmessage($FFFF,$001A,0,0)
    @Sendmessage($FFFF,$001B,0,0)
    Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
    Fehler&=@GetLastError()
    FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
    Fehler&=@GetLastError()
    Fehler&=@Word(DevMode2#,44+32)
    Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
    Dispose PHANDLE#
    Dispose DevMode2#
    Dispose DevMode#

Endproc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetAutoPaint 0

Proc Statistik_Neu

    Declare old_prnRi&  alte Druckerausrichtung
    Declare text$

    If MS_Druck%=1

        Drucker_Orientation_Umstellen 2 Druck auf quer einstellen
        text$= "*Statistik"
        StartPrint text$

        If %Printing = 0

            Return

        EndIf

    EndIf

    case MS_Druck%=0 : startpaint B_dlg&
    UseFont "Arial",18,0,1,0,0
    TextColor @RGB(0,0,0),-1
    DrawText 210,100,"Mitgliederstatistik nach Eintrittsjahren"
    UseFont "Arial",12,0,0,0,0
    TextColor @RGB(0,0,0),-1
    DrawText 870,630,"Stand: "+Date$(0)
    Line 120,520-950,520
    UsePen 0,0,rgb(255,255,255)
    UseBrush 1,rgb(255,0,0)
    Rectangle 100,525,110,535
    UseBrush 1,rgb(0,255,0)
    Rectangle 100,540,110,550
    UseBrush 1,rgb(0,0,255)
    Rectangle 100,555,110,565
    case MS_Druck%=0 : endpaint B_dlg&

    If MS_Druck%=1

        endprint
        Drucker_Orientation_Umstellen old_prnRi&  Drucker auf alte Richtung stellen

    EndIf

EndProc

Proc Statistik

    Parameters MS_art%
    var B_dlg& = @Create("DIALOG",%hwnd,"  Mitglieder-Statistik " ,10,10,1018,720)
    var      MS_Datei$ = "Datei"
    var      MS_Beenden$ = "Beenden"
    var      MS_Druck$ = "Drucken"
    var      hMenu& = ~CreateMenu()
    var      hMenuPopup& = ~CreateMenu()
    ~AppendMenu(hMenuPopup&, ~MF_STRING, 4101, @Addr(MS_Druck$))
    ~AppendMenu(hMenuPopup&, ~MF_STRING, 4102, @Addr(MS_Beenden$))
    ~AppendMenu(hMenu&, ~MF_POPUP, hMenuPopup&, @Addr(MS_Datei$))
    ~SetMenu(B_Dlg&, hMenu&)
    var   MS_Druck%=0
    Statistik_neu
    @SetFocus(b_dlg&)

    While 1

        WaitInput
        case %wmpaint=1:Statistik_neu

        If %key = 2

            BREAK

        ElseIf @Int(@Abs(%MenuItem)) = 4102

            BREAK

        ElseIf @Int(@Abs(%MenuItem)) = 4101

            MS_Druck%=1
            Statistik_neu
            MS_Druck%=0
            @SetFocus(b_dlg&)

        EndIf

    Wend

    @DestroyWindow(B_dlg&)

Endproc

################################## H A U P T T E I L ####################################
Cls
Statistik
WaitInput
@DestroyWindow(a class=s4 href='./../../function-references/xprofan/hwnd/'>hWnd)
End
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.11.2009  
 




Dieter
Zornow
Bei Dialogen muss man halt immer %wmPaint abfragen und gegebenenfalls neu zeichnen.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
27.11.2009  
 



Bei SubKey$="PrintersDevModePerUser" und SubKey$="Printers\DevModes2" fehlen Backslashs: SubKey$="Printers\DevModePerUser" SubKey$="Printers\DevModes2" - dass Problem selbst hat aber Dieter schon beschrieben: Nur das Hauptfenster (hWnd) zeichnet selbständig neu weil Roland das extra fürs Hauptfenster so eingebaut hat.

Noch Kleinigkeit: Du verwendest B_DLG& in statistik_neu, deklariert ist die Variable aber in Statistik. Die Variablensichtbarkeit des Interpreter lässt dies ("natürlich")/zwar zu, der lexikalischen Variablensichtbarkeit steht dies aber im Wege.

Hierbei würde sich empfehlen, einfach b_dlg& an statistik_neu per Parameter zu trasferimento oder die ganze Funktion statistik_neu in die Funktion statistik (proc in proc) ablegen.
 
27.11.2009  
 




Thomas
Freier
Das mit %wmPaint ist mir klar. Stelle jetzt den Drucker vor dem Dialogaufbau um und nach dem Schliessen wieder zurück.
 
Gruß Thomas
Windows XP SP2, XProfan X2
28.11.2009  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.381 Views

Untitledvor 0 min.
rquindt24.04.2020
GDL26.03.2016
Muemmelmann24.09.2014
Andre Rohland04.05.2013
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

Thomas Freier (2x)
iF (1x)
Dieter Zornow (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie