Druckvorschau / WebGadget - Maximieren-Gadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag von marcelx »

Danke für Ihr Antwort.
Also komplett selbst erstellen oder dem Anwender überlassen
@ts-soft:
Wie ist es gemeint?
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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.
Zuletzt geändert von marcelx am 26.06.2017 13:46, insgesamt 1-mal geändert.
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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 :)
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Druckvorschau / WebGadget - Maximieren-Gadget

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Antworten