Seite 1 von 1

Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 27.06.2007 22:18
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

Verfasst: 27.06.2007 22:29
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

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 27.06.2007 22:39
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.

Verfasst: 27.06.2007 22:52
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)

Verfasst: 27.06.2007 23:02
von edel

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 22.02.2013 11:31
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é

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 28.02.2013 13:23
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

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 28.02.2013 13:28
von ts-soft
Im ScintillaGadget kannst Du das Zeilenumbruchformat einstellen. Ein Windows Control wird per Default
immer #CRLF$ verwenden.

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 08.03.2013 11:28
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é

Re: Inhalt vom EditorGadget mit 1 x WriteData speichern?

Verfasst: 08.03.2013 12:07
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