Seite 1 von 3

Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 14:34
von Fanpost
Ich speicher mein HTML-Formular wie folgt ab:

Code: Alles auswählen

Procedure FormularSpeichern()
   Protected WebObject.IWebBrowser2
   WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
   WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DontPROMPTUSER, 0, 0)
 EndProcedure  
 
Mit dieser Prozedur wird mit dem Dateinamen "blank" gespeichert.
Wie kann ich einen Dateinamen hinzufügen?

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 15:15
von Kiffi

Code: Alles auswählen

#VT_BSTR = 8

Procedure FormularSpeichern(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 WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0) = #S_OK
    MessageRequester("","Saved sucessfully")
  Else
    MessageRequester("","could not save file")
  EndIf
  
  FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR)   
  
EndProcedure
(habe ich Dir am 23. Juni per Mail gesendet)

Grüße ... Peter

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:03
von ts-soft
Kiffi hat geschrieben:

Code: Alles auswählen

  WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
Besser mit GetWindowLongPtr_

Code: Alles auswählen

WebObject = GetWindowLongPtr_(GadgetID(#Adresse), #GWL_USERDATA)

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:04
von NicTheQuick
Diese zwei Zeilen würde ich aber ändern von

Code: Alles auswählen

filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)       
in

Code: Alles auswählen

CompilerIf #PB_Compiler_Unicode
	filename_Unicode = @Filename
CompilerElse
	filename_Unicode = AllocateMemory((Len(Filename) + 1) * SizeOf(Unicode))
	PokeS(filename_Unicode, Filename, -1, #PB_Unicode)
CompilerEndIf
Dafür muss am Ende aber auch noch das hier hin:

Code: Alles auswählen

CompilerIf Not #PB_Compiler_Unicode
	FreeMemory(filename_Unicode)
CompilerEndIf
@ts-soft: :?:

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:05
von RSBasic
@NicTheQuick
64 Bit-Kompatibilität.

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:06
von NicTheQuick
RSBasic hat geschrieben:64 Bit-Kompatibilität.
Was möchtest du damit sagen?

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:08
von RSBasic
NicTheQuick hat geschrieben:@ts-soft: :?:
Gegenfrage: Was wolltest du damit sagen? Ich dachte, du wüsstest nicht, warum ts-soft gesagt hat, dass GetWindowLongPtr_() besser sei, als GetWindowLong_().
Oder was hast du damit gemeint?

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:10
von NicTheQuick
Sein Post war vorher noch kaputt formatiert und unvollständig, da hab ich nicht kapiert, was er sagen wollte. Jetzt hat er es ja wieder editiert.

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:13
von ts-soft
Noch etwas kürzer :wink:

Code: Alles auswählen

filename_Unicode = AllocateMemory(StringByteLength(Filename.s, #PB_Unicode) + 2)
PokeS(filename_Unicode, Filename, -1, #PB_Unicode)

;
;
FreeMemory(filename_Unicode)
PS: Beim ersten Posting von mir fehlte noch ein [ /code ]. Das sah einfach nur schrecklich aus :lol:

Re: Webobjekt mit Dateiamen speichern - wie?

Verfasst: 24.11.2015 16:23
von NicTheQuick
Ich vermeide das Kopieren lieber, wenn es nicht notwendig ist. :)