Kompletten inneren Bereich von ScrollareaGadget drucken

Anfängerfragen zum Programmieren mit PureBasic.
Olaf.Renns
Beiträge: 27
Registriert: 26.02.2009 10:11

Kompletten inneren Bereich von ScrollareaGadget drucken

Beitrag von Olaf.Renns »

Hallo,

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)