Anfängerfragen zum Programmieren mit PureBasic.
Fanpost
Beiträge: 97 Registriert: 27.01.2013 14:43
Beitrag
von Fanpost » 24.11.2015 14:34
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?
Kiffi
Beiträge: 10714 Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Beitrag
von Kiffi » 24.11.2015 15:15
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
a²+b²=mc²
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
Beitrag
von ts-soft » 24.11.2015 16:03
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)
Zuletzt geändert von
ts-soft am 24.11.2015 16:04, insgesamt 1-mal geändert.
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 24.11.2015 16:04
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:
RSBasic
Admin
Beiträge: 8047 Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:
Beitrag
von RSBasic » 24.11.2015 16:05
@NicTheQuick
64 Bit-Kompatibilität.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 24.11.2015 16:06
RSBasic hat geschrieben: 64 Bit-Kompatibilität.
Was möchtest du damit sagen?
RSBasic
Admin
Beiträge: 8047 Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:
Beitrag
von RSBasic » 24.11.2015 16:08
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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 24.11.2015 16:10
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.
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
Beitrag
von ts-soft » 24.11.2015 16:13
Noch etwas kürzer
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
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 24.11.2015 16:23
Ich vermeide das Kopieren lieber, wenn es nicht notwendig ist.