Webobjekt mit Dateiamen speichern - wie?

Anfängerfragen zum Programmieren mit PureBasic.
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Moin, danke für die Meldungen und Meinungen - ich verstehe jetzt nun nur noch Bahnhof
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Hat keiner eine Antwort auf meine Frage?
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Danke an Alle und für die "Kopfwäsche", funktioniert nun.
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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
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: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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
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
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Hallo ts-soft, habe den geänderten Code ausprobiert und es wird kein Drucker angesprochen.
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: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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.
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
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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!
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag 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
Antworten