Seite 2 von 3

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:26
von Fanpost
Moin, danke für die Meldungen und Meinungen - ich verstehe jetzt nun nur noch Bahnhof

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 17:19
von Fanpost
Hat keiner eine Antwort auf meine Frage?

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 17:26
von Bisonte
ähm Kiffi beantwortete deine Frage und der Rest hat nur versucht, das ganze etwas aufzumotzen ;)

Du solltest die Posts auch lesen und nicht nur überfliegen... da stehen wichtige Sachen drin (wenn du dann
Kiffis Antwort umsetzen möchtest)

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 19:24
von Fanpost
Danke an Alle und für die "Kopfwäsche", funktioniert nun.

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 25.11.2015 10:01
von Fanpost
Moin,

ich habe nun versucht die Druckroutine mit Filenamen zu versehen, aber irgendwo hat sich ein Fehler eingeschlichen. Ich möchte auch PDF mit Filename erstellen. Wo habe ich den Fehler gemacht?

Code: Alles auswählen

Procedure FormularDrucken(Filename.s)
   Protected WebObject.IWebBrowser2
   WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
   Protected filename_Unicode
   ; convert to unicode
  filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)                
  Protected filename_BSTR
  ; create bstr
  filename_BSTR = SysAllocString_(filename_Unicode)
  ; fill variant
  Protected VariantIn.VARIANT
  VariantIn\vt = #VT_BSTR
  VariantIn\bstrVal = filename_BSTR
     If GetGadgetState(Checkbox_1)=#PB_Checkbox_Checked
       WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
         Else
      WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
   EndIf
   FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR)  
 EndProcedure

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 25.11.2015 10:54
von ts-soft
Da mir der restliche Code zum sofortigem ausführen fehlt, hier mal erratene Lösung:

Code: Alles auswählen

Procedure FormularDrucken(Filename.s)
  Protected WebObject.IWebBrowser2
  WebObject = GetWindowLongPtr_(GadgetID(#Adresse), #GWL_USERDATA)
  Protected filename_Unicode
  ; convert to unicode
  filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)               
  Protected filename_BSTR
  ; create bstr
  filename_BSTR = SysAllocString_(filename_Unicode)
  ; fill variant
  Protected VariantIn.VARIANT
  VariantIn\vt = #VT_BSTR
  VariantIn\bstrVal = filename_BSTR
  If GetGadgetState(Checkbox_1)=#PB_Checkbox_Checked
    WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0)
  Else
    WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, @VariantIn, 0)
  EndIf
  FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR) 
EndProcedure

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 25.11.2015 13:24
von Fanpost
Hallo ts-soft, habe den geänderten Code ausprobiert und es wird kein Drucker angesprochen.

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 25.11.2015 13:43
von ts-soft
Ich hab leider keinen, sofort ausführbaren Code zur Verfügung und werde den auch nicht selber schreiben.
Entweder Du lieferst den nach, auf ein minimum reduziert, oder jemand anders macht das.

So bin ich leider nicht in der Lage was zu testen. Weiß ja noch nicht mal, ob:

Code: Alles auswählen

GetGadgetState(Checkbox_1)
als Globale Variable existiert oder vielleicht doch ein Konstanter Wert, und nur das # vergessen.

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 26.11.2015 18:35
von Fanpost

Code: Alles auswählen

GetGadgetState(Checkbox_1)
ist eine Globale Variable.
Aus Krankheitsgründen liefere ich einen minimierten Code später nach. Danke!

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 27.11.2015 16:16
von Fanpost
Hier ist der minimale Code. Speichern mit Namen funktioniert, jedoch die Druckroutine nicht. Bei der Druckroutine soll der Filename auch übergeben werden, da für PDF -Druck benötigt wird.
Was fehlt in der Procedure Formulardrucken (Filename.s) oder ist falsch?

Leider muss händisch in das pbf-File:

Global G$
G$=FormatDate("%yy%mm%dd", Date()) + "001HL"

eingefügt werden.

Code: Alles auswählen

;pb-File
EnableExplicit

IncludeFile "HTML_alt_PBF.pbf"

#OLECMDID_PRINT               = 6
#OLECMDEXECOPT_DONTPROMPTUSER = 2
#OLECMDID_PRINTPREVIEW        = 7
#OLECMDEXECOPT_PROMPTUSER     = 3 
#OLECMDID_SAVEAS              = 4
#VT_BSTR = 8

OpenWindow_1()

Global Filename.s, SNummer$,txtSeriennummer,string_kname,Filename$
;G$=FormatDate("%yy%mm%dd", Date()) + "001HL"   ;  muss in pbf
;Global G$; muss in pbf

Procedure FormularErstellen()
   
  Protected SNummer$
  
  SNummer$ = GetGadgetText(txtSeriennummer)
  
     
   Protected HTML.s
   
   HTML + "</head><body>"
   HTML + "<div style='position:absolute; left:10mm; top:10mm; color:#000000;font-weight:bold;font-family:arial; font-size:22px;'>Formular</div>"
   HTML + "<div style='position:absolute; left:60mm; top:12mm; color:#000000;font-weight:bold;font-family:arial; font-size:17px;'>Seriennummer:</div>"
   HTML + "<div style='position:absolute; left:100mm; top:12mm; color:#000000;font-family:arial; font-size:17px;'>"+SNummer$+"</div>"
   HTML + "</body></html>"
   
   SetGadgetItemText(#Adresse, #PB_Web_HtmlCode, HTML)
   
EndProcedure

Procedure FormularDrucken(Filename.s)
  Protected WebObject.IWebBrowser2
  WebObject = GetWindowLongPtr_(GadgetID(#Adresse), #GWL_USERDATA)
  Protected filename_Unicode
  ; convert to unicode
  filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)               
  Protected filename_BSTR
  ; create bstr
  filename_BSTR = SysAllocString_(filename_Unicode)
  ; fill variant
  Protected VariantIn.VARIANT
  VariantIn\vt = #VT_BSTR
  VariantIn\bstrVal = filename_BSTR
  If GetGadgetState(Checkbox_1)=#PB_Checkbox_Checked
    WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0)
  Else
    WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, @VariantIn, 0)
  EndIf
  FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR) 
EndProcedure


  Procedure FormularSpeichern(Filename.s)
    
 Protected WebObject.IWebBrowser2
 WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
 Protected filename_Unicode
 filename_Unicode = AllocateMemory(StringByteLength(Filename.s, #PB_Unicode) + 2)
PokeS(filename_Unicode, Filename, -1, #PB_Unicode)
   Protected filename_BSTR
  ; create bstr
  filename_BSTR = SysAllocString_(filename_Unicode)
  ; fill variant
  Protected VariantIn.VARIANT
  VariantIn\vt = #VT_BSTR
  VariantIn\bstrVal = filename_BSTR
  If WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0) = #S_OK
    MessageRequester("","Formular wurde gespeichert !")
  Else
    MessageRequester("","Formular wurde nicht gespeichert !")
  EndIf
  FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR)
  EndProcedure
 
 
 
Repeat
   
   Select WaitWindowEvent()
         
      Case #PB_Event_Gadget
         
         Select EventGadget()
               
           Case Button_machhtml
               Filename.s = SNummer$
               FormularErstellen()
               
           Case Button_Speichern
              SNummer$ = GetGadgetText(txtSeriennummer)
              Filename.s = SNummer$
              FormularSpeichern(Filename.s)
            
                     
              
            Case Button_Drucken
               SNummer$ = GetGadgetText(txtSeriennummer)
               Filename.s = SNummer$
               FormularDrucken(Filename.s) 
               
               
         EndSelect
         
      Case #PB_Event_CloseWindow
         
         Select EventWindow()
               
            Case Window_1
               Break
               
         EndSelect
         
   EndSelect
   
ForEver

Code: Alles auswählen

;pbf-file
Global Window_1

Global Button_machhtml, lblSeriennummer, txtSeriennummer, Text_2, Text_3, Button_Drucken, Button_Speichern, Checkbox_1,G$

Enumeration FormGadget
  #Adresse
EndEnumeration

Enumeration FormFont
  #Font_Window_1_0
EndEnumeration

LoadFont(#Font_Window_1_0,"Arial Narrow", 18)
G$=FormatDate("%yy%mm%dd", Date()) + "001HL"

Procedure OpenWindow_1(x = 0, y = 0, width = 960, height = 200)
  Window_1 = OpenWindow(#PB_Any, x, y, width, height, "Formular Erstellung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  Button_machhtml = ButtonGadget(#PB_Any, 610, 80, 100, 25, "Formular erstellen")
  GadgetToolTip(Button_machhtml, "erzeugt eine html-Datei")
  lblSeriennummer = TextGadget(#PB_Any, 614, 50, 86, 20, "Seriennummer:")
  txtSeriennummer = StringGadget(#PB_Any, 724, 45, 105, 25, G$)
  Text_2 = TextGadget(#PB_Any, 630, 10, 340, 30, "Formulareingaben:")
  SetGadgetFont(Text_2, FontID(#Font_Window_1_0))
  Text_3 = TextGadget(#PB_Any, 10, 10, 300, 30, "Formular:")
  SetGadgetFont(Text_3, FontID(#Font_Window_1_0))
  Button_Drucken = ButtonGadget(#PB_Any, 725, 80, 100, 25, "Formular drucken")
  Button_Speichern = ButtonGadget(#PB_Any, 840, 80, 100, 25, "Formular speichern")
  WebGadget(#Adresse, 10, 45, 590, 105, "about:blank")
  Checkbox_1 = CheckBoxGadget(#PB_Any, 610, 120, 110, 25, "Standarddrucker")
EndProcedure