Seite 1 von 1

Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 23.06.2017 12:15
von marcelx
Hallo zusammen,

ich benutzt folgenden code (quelle nicht mehr gefunden) für Druckvorschau.
Wie kann ich die Funktionalität "Maximieren-Gadget" auf das Druck-Fenster bekommen?
EDIT: ein Bild sagt mehr als ...
Bild

Code: Alles auswählen

Enumeration
  #myWindow
EndEnumeration
Enumeration
  #myWebGadget
  #Print
  #Preview
EndEnumeration

Enumeration 1
  #OLECMDID_OPEN         
  #OLECMDID_NEW       
  #OLECMDID_SAVE         
  #OLECMDID_SAVEAS           
  #OLECMDID_SAVECOPYAS   
  #OLECMDID_PRINT       
  #OLECMDID_PRINTPREVIEW       
  #OLECMDID_PAGESETUP       
  #OLECMDID_SPELL           
  #OLECMDID_PROPERTIES 
  #OLECMDID_CUT         
  #OLECMDID_COPY       
  #OLECMDID_PASTE           
  #OLECMDID_PASTESPECIAL   
  #OLECMDID_UNDO           
  #OLECMDID_REDO         
  #OLECMDID_SELECTALL       
  #OLECMDID_CLEARSELECTION
  #OLECMDID_ZOOM           
  #OLECMDID_GETZOOMRANGE     
  #OLECMDID_UPDATECOMMANDS 
  #OLECMDID_REFRESH           
  #OLECMDID_STOP             
  #OLECMDID_HIDETOOLBARS     
  #OLECMDID_SETPROGRESSMAX   
  #OLECMDID_SETPROGRESSPOS 
  #OLECMDID_SETPROGRESSTEXT   
  #OLECMDID_SETTITLE         
  #OLECMDID_SETDOWNLOADSTATE 
  #OLECMDID_STOPDOWNLOAD     
EndEnumeration

Enumeration 0
  #OLECMDEXECOPT_DODEFAULT     
  #OLECMDEXECOPT_PROMPTUSER       
  #OLECMDEXECOPT_DONTPROMPTUSER   
  #OLECMDEXECOPT_SHOWHELP       
EndEnumeration


Procedure Print_Preview(type)
  WebGadget(#myWebGadget, 0, 0, 0, 0, "")
  HideGadget(#myWebGadget, 1)  
  HTML.s = "<html><head><title>Test</title></head><body>T e s t</body></html>"
  SetGadgetItemText(#myWebGadget, #PB_Web_HtmlCode, HTML)
  WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#myWebGadget), #GWL_USERDATA) 
  Repeat
    While WindowEvent(): Wend
    Delay(1)
    WebObject\get_Busy(@IsBusy.l)
  Until IsBusy = 0    
  WebObject\ExecWB(type, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
  FreeGadget(#myWebGadget)
EndProcedure

OpenWindow(#myWindow, #PB_Any, #PB_Any, 800, 615, "", #PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
 
ButtonGadget(#Preview, 140, 10, 100, 20, "Print_Preview")

Repeat
  EventID = WaitWindowEvent()
  Select EventID
    Case  #PB_Event_Gadget
      Select EventGadget()
        Case #Preview
          Print_Preview(#OLECMDID_PRINTPREVIEW)
        Case #Print
          Print_Preview(#OLECMDID_PRINT)          
      EndSelect
  EndSelect       
Until EventID = #PB_Event_CloseWindow
Danke schon mal

MarcelX

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 24.06.2017 21:13
von GlassJoe
Leider hab ich auch keine Lösung für das Problem gefunden, nur schon mal eine Richtung.

Schmeiss mal

Code: Alles auswählen

  Global Global_Bla
  
  Procedure.i CheckWin(WindowHandle.i, Parameter.i) 
    
    Title$ = Space(256) : GetWindowText_(WindowHandle,@Title$,256) 
    
    If FindString(Title$, "Druckvorschau", 1)
      Global_Bla = WindowHandle
      ProcedureReturn 0 
    Else 
      ; returning <> 0 will continue till all windows are searched 
      ProcedureReturn 1
    EndIf 
    
  EndProcedure 
  
  Procedure SomeStuff(bla)
    
    Repeat
      If Global_Bla > 0
        Delay(3000)
        Debug "HERE"
        ShowWindow_(Global_Bla,#SW_HIDE)
        Delay(1000)
        ShowWindow_(Global_Bla,#SW_SHOW) 
        Break
      EndIf
    ForEver 
    
  EndProcedure
Über deine

Procedure Print_Preview(type)

Prozedur, und

Code: Alles auswählen

  CreateThread(@SomeStuff(),0)
unter

Code: Alles auswählen

  ButtonGadget(#Preview, 140, 10, 100, 20, "Print_Preview")
Dann schmeiss noch

MessageRequester("","OUT",#PB_MessageRequester_Ok)

unter

Code: Alles auswählen

    WebObject\ExecWB(type, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
    FreeGadget(#myWebGadget)
Wenn das alles machst kommst du ans Fenster Handle der Druckvorschau (Bitte mit Debugger starten) leider nimmt das Fenster um's verrecken keine Änderungen an !

Und noch was wird dir dann auffallen, der Messagerequester wird sofort ausgeführt (und gleich überdeckt von der Druckvorschau, Fenster weckschieben dann siehst es im Hintergrund) was dafür
spricht das deine Print_Preview Schleife sofort geschlossen wird.

Ohne Thread mit Repeat & Delay wäre es gar nicht möglich (ohne eine API Funktion die PB klar macht, ob das Fenster schon wirklich sichtbar ist, daß Handle gibt es nämmlich schon locker eine Sekunde zuvor)
irgendwas an das noch nicht sichtbare Fenster zu schicken.

Ich hab ja stark die Vermutung das die Druckvorschau kein echtes Fenster ist, sondern eines dieser verdammten ToolWindows, auf die mann kaum Einfluss hat.

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 24.06.2017 22:59
von ts-soft
Nochmals zur Erinnerung: Keine Gadgets in einem Thread erstelllen! Das gilt insbesondere für das WebGadget, das in
keinem Falle Threadsicher ist.

Das Object bietet wohl keine Funktion zum maximieren, jedenfalls hab ich nichts gefunden. Also komplett selbst
erstellen oder dem Anwender überlassen.

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 25.06.2017 12:22
von marcelx
Danke für Ihr Antwort.
Also komplett selbst erstellen oder dem Anwender überlassen
@ts-soft:
Wie ist es gemeint?

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 25.06.2017 12:35
von ts-soft
Naja, selbst eine Druckvorschau mit z.B. VectorDrawing erstellen. Ist natürlich eine Ecke aufwendiger als so ein
fertiges Object, dafür hast Du aber auch volle Kontrolle.

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 25.06.2017 14:05
von marcelx
Naja, selbst eine Druckvorschau mit z.B. VectorDrawing erstellen
OK
Hatte ich ursprünglich realisiert, bis ich den zitierte code fand.
Die Verwendung von WebObject\ExecWB hat schon viel Vorteilen.
EDIT: Übrigens, wenn ich ein Druckvorschau mit FF mache, geht es mit Maximieren und Co.

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 25.06.2017 15:08
von GlassJoe
marcelx hat geschrieben:
Naja, selbst eine Druckvorschau mit z.B. VectorDrawing erstellen
OK
Hatte ich ursprünglich realisier, bis ich den zitierte code fand.
Die Verwendung von WebObject\ExecWB hat schon viel Vorteilen.
EDIT: Übrigens, wenn ich ein Druckvorschau mit FF mache, geht es mit Maximieren und Co.
Weil alles von Mozilla keine Standard Fenster benutzt (kannst zb keine Submenu ID ermittlen/auflisten lassen per API) ist alles XUL basiert, desshalb auch so träge Oberfläche, und übler Ram Verbrauch.

ps: K-Meleon benutzt auch die Gecko Engine von Mozilla, nur ohne den XUL Mist :)

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 26.06.2017 09:58
von marcelx
Kennt sich ein aus mit den IWebBrowser2 interface
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Vielleicht mit IWebBrowser2::ShowBrowserBar Method

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Verfasst: 24.11.2017 10:51
von marcelx
Hallo,

ich habe folgende festgestellt:
wenn das ursprüngliche Fenster auf maximale Größe ist, wird das Druckvorschau-Fenster auch maximale.

Code: Alles auswählen

SetWindowState(#myWindow, #PB_Window_Maximize)
nach

Code: Alles auswählen

SetGadgetItemText(#myWebGadget, #PB_Web_HtmlCode, HTML)
und

Code: Alles auswählen

SetWindowState(#myWindow, #PB_Window_Normal)
nach

Code: Alles auswählen

FreeGadget(#myWebGadget)
Gruß
MarcelX