Inhalt vom EditorGadget mit 1 x WriteData speichern?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von Kurzer »

Weiß jemand, wie ich an die Memoryadresse komme, an der der Text eines EditorGadgets gespeichert ist?
Ich vermute, daß es eine Struktur ist (die dann auch die Größe des Speichers enthält)

Ich würde den Text gern mit WriteData() in einem Rutsch speichern, statt jede Zeile einzeln in einem Loop wegzuschreiben.

Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
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

Beitrag von ts-soft »

Code: Alles auswählen

Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
  ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure

Procedure Editor_Save(Gadget, File.s)
  Protected FileID.l, result.l
  Protected StreamData.EDITSTREAM
  FileID = CreateFile(#PB_Any, File)
  If FileID
    StreamData\dwCookie = FileID(FileID)
    StreamData\dwError = #Null
    StreamData\pfnCallback = @StreamFileOut_Callback()
    If UCase(GetExtensionPart(File)) = "RTF"
      result = SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF, @StreamData)
    Else
      result = SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_TEXT, @StreamData)
    EndIf
    CloseFile(FileID)
  EndIf
  ProcedureReturn result
EndProcedure
Ich denke mal, das ist der schnellste weg
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von edel »

Kurzer hat geschrieben:Weiß jemand, wie ich an die Memoryadresse komme, an der der Text eines EditorGadgets gespeichert ist?
Ich vermute, daß es eine Struktur ist (die dann auch die Größe des Speichers enthält)

Ich würde den Text gern mit WriteData() in einem Rutsch speichern, statt jede Zeile einzeln in einem Loop wegzuschreiben.

Markus
Das geht nur mit dem Stringgadget und #EM_GETHANDLE.
Fuer das EditorGadget hat ts ja schon etwas gepostet.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

@ts-soft: Vielen Dank.

Aber... uff, ich benutze es erstmal "as is" und versuche es später genau zu verstehen (wenn ein paar weitere PB-skill-Striche in meinem footer zu sehen sind).
Wo kriegt man solche infos her... z.B. über die EDITSTREAM Struktur, bzw. erstmal das Wissen, daß man den Editor-Inhalt als Stream wegschreiben kann?
Ich vermute, Du bist schon länger unter Windows als coder unterwegs und vermutlich nicht nur in PB.

Naja, da merkt man doch, daß ich auf der DOSE noch nie so richtig programmiert habe (bin Alt-Amiganer mit ca. 14 Jahren codingpause)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von Elektrolurch »

Hallo

ich habe gestern mal den Beispielcode von ts-soft ausprobiert.
Nun habe ich einmal eine generelle Frage dazu.
Ich lade in meinem Programm eine XML Datei im Unix Format in das Editorgaget,
wenn ich es nun mit obigem Code wieder speichere hat es das Windows Format.
Außerdem hat sich die größe der Datei geändert, obwohl beide Dateien im Editor noch gleich aussehen.

Nun meine Fragen, hat das Auswirkungen auf die Funktion?
Gibt es eine Möglichkeiten das Editorgadget in die Datei zu speichern ohne, dass sich das Format ändert?

Danke schon einmal im voraus.

BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von fabulouspaul »

Elektrolurch hat geschrieben:Hallo
...
Nun meine Fragen, hat das Auswirkungen auf die Funktion?
Gibt es eine Möglichkeiten das Editorgadget in die Datei zu speichern ohne, dass sich das Format ändert?
...
Wenn ich mich richtig erinnere verwendet Unix nur <LF>, wo Windows <CR><LF> verwendet.

Ich habe mal den Editorinhalt mit GetGadgetText() "am Stück" in eine Datei gespeichert. Vorher habe ich die <CR> mit RemoveString() entfernt. Zwar habe ich keine Unix-Datei, aber meine DOS-Datei ist genau so aus dem Editor gekommen, wie ich es erwartet habe.

Ist leicht umzusetzen und vielleicht einen Versuch wert. :D
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: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von ts-soft »

Im ScintillaGadget kannst Du das Zeilenumbruchformat einstellen. Ein Windows Control wird per Default
immer #CRLF$ verwenden.
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
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von Elektrolurch »

Hallo fabulouspaul & ts-soft.

sorry ich war krank, daher meine späte Antwort.
Ich komme erst am Wochenende wieder dazu weiter zu basteln.

@ts-soft
das scintillagadget kannte ich bislang noch nicht.
Kannst du mir zeigen wo man das einstellt, bei einem ersten Blick in die Hilfe fand ich nichts. :cry:

@fabulouspaul
Ich werde es noch mal versuchen.
Ich hatte aber zuerst auch so einen Versuch gestartet, wenn ich mich recht erinnere war das File aber da auch zu lange.
Möglicherweise habe ich zu schnell aufgegeben und einen eigenen Fehler übersehen.

@all
Allerdings habe ich festgestellt die Anwendung verarbeitet das XMLFile auch trotz der zusätzliche <CR>
Momentan geht es mir also lediglich ums Prinzip.

Danke André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
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: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Beitrag von ts-soft »

Hilfe zum ScintillaGadget: http://www.scintilla.org/ScintillaDoc.html
Hilfe zum setzen des EOL (EndOfLine) Modes: http://www.scintilla.org/ScintillaDoc.h ... SETEOLMODE
Ungetestet, aber sollte dann so funktionieren:

Code: Alles auswählen

ScintillaSendMessage(#Gadget, #SCI_SETEOLMODE, #SC_EOL_LF)
Gruß
Thomas
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
Antworten