innerhalb eines Scrollareagadgets befindet sich eine eigenes Steuerelement, das der Benutzer individuell erweitern kann. Da dieses Steuerelement auch über den Fensterbereich ragen kann, habe ich mich für die Nutzung eines Scrollareagadgets entschieden.
Nun bestand die Anfrage dieses Steuerelement auch drucken zu können. Um einen schnelle Workaround zu schaffen, habe ich das bisher mit folgendem Code gemacht, was aber mehr als bescheiden ist. Leider ist mir nach erster Recherche auch keine bessere Lösung ins Auge gefallen (Außer bereits live alle Veränderungen zu speichern und anhand dieser Liste das ScrollareaGadget quasi 'nachzubauen')
Vielleicht hat jemanden einen entscheidenden Tipp parat. Ich würde mich freuen. Angehängt das deutlich vereinfachte Beispiel, was ich bisher nutze:
Code: Alles auswählen
OpenLibrary(0, "user32.dll")
Prototype PrintWindow(hwnd, hdc, flags)
PrintWindow_.PrintWindow = GetFunction(0, "PrintWindow")
OpenWindow(0,0,0,320,420,"",$CA0001)
ButtonGadget(1, 10, 15, 80, 25, "Print")
ScrollAreaGadget(0, 10, 50, 300,260,277,800,30)
ButtonGadget(2, 10, 15, 80, 25, "Button 1")
ButtonGadget(3, 10, 755, 80, 25, "Button 2")
CloseGadgetList()
Repeat
ev = WaitWindowEvent()
If ev=#PB_Event_Gadget
If EventGadget() = 1
a.l=GadgetHeight(0)
b.l=WindowHeight(0)
c.l=GetWindowLong_(GadgetID(0),#GWL_STYLE)
ResizeWindow(0,#PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetY(0) + GetGadgetAttribute(0, #PB_ScrollArea_InnerHeight) + GetSystemMetrics_(#SM_CXHSCROLL))
ResizeGadget(0,#PB_Ignore, #PB_Ignore, #PB_Ignore, GetGadgetAttribute(0, #PB_ScrollArea_InnerHeight) + GetSystemMetrics_(#SM_CXHSCROLL))
MessageRequester("","Now i can print the full gadget!")
GetWindowRect_(GadgetID(0), @listrect.RECT)
width = listrect\right-listrect\left
height = listrect\bottom-listrect\top
CreateImage(0, width, height, 24)
hdc = StartDrawing(ImageOutput(0))
PrintWindow_(GadgetID(0), hdc, #Null)
StopDrawing()
result = DefaultPrinter()
If result
result = StartPrinting("Job 1")
If result
newwidth = PrinterPageWidth()/3
newheight = newwidth/width*height
ResizeImage(0, newwidth, newheight)
StartDrawing(PrinterOutput())
DrawImage(ImageID(0),0,0)
StopDrawing()
StopPrinting()
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,a.l)
ResizeWindow(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,b.l)
Else
MessageRequester("oops!", "Could not start printing!")
EndIf
Else
MessageRequester("oops!", "Default printer not found!")
EndIf
EndIf
EndIf
Until ev=#WM_CLOSE
CloseLibrary(0)