Problem mit EditorGadget
Verfasst: 08.06.2015 04:18
Ich erstell ein EditorGadget welches ich per WriteString auslese und den Inhalt in eine Datei speichere.
Nun habe ich schon ewig rumprobiert und leider nichts hinbekommen mit dem EditorGadget was brauchbar ist.
Wenn Text von z.B. einer Internet-Seite kopiert und in das "Information TEXT"- Feld, das untere, eingefügt wird, ist nach Abspeichern, der Text 2 Zeichen nach rechts eingerückt.
Die Textformatierung des eingefügten Textes müsste beim Einfügen irgendwie per Code entfernt werden. Denn wenn ich längeren Text von Hand eintippe oder Langen Text, Zeilenweise einfüge funktioniert es.
Ich meine damit nicht wie der Text im EditorGadget angezeigt wird, sondern nach abspeichern.
Ich habe den Text schon im EditorGadget zentriert, mit margin, links eingerückt --> hat nach dem speichern ncihts geändert
gleicher Fehler.
Beim Schreiben in die Datei macht es im Moment noch nicht das was es soll. Den kompletten Text an den linken Rand oder andere Möglichkeit wäre (was noch besser passt) den abgespeicherten Text in der nfo Datei zentrieren aus dem Feld Info:
Ich hoffe es kann jemand helfen.
Hier mal ein Bild wie es Derzeit gespeichert wird. Am liebsten hätte ich den Text gern Zentriert dargestellt.

VG
Nun habe ich schon ewig rumprobiert und leider nichts hinbekommen mit dem EditorGadget was brauchbar ist.
Wenn Text von z.B. einer Internet-Seite kopiert und in das "Information TEXT"- Feld, das untere, eingefügt wird, ist nach Abspeichern, der Text 2 Zeichen nach rechts eingerückt.
Die Textformatierung des eingefügten Textes müsste beim Einfügen irgendwie per Code entfernt werden. Denn wenn ich längeren Text von Hand eintippe oder Langen Text, Zeilenweise einfüge funktioniert es.
Ich meine damit nicht wie der Text im EditorGadget angezeigt wird, sondern nach abspeichern.
Ich habe den Text schon im EditorGadget zentriert, mit margin, links eingerückt --> hat nach dem speichern ncihts geändert

Beim Schreiben in die Datei macht es im Moment noch nicht das was es soll. Den kompletten Text an den linken Rand oder andere Möglichkeit wäre (was noch besser passt) den abgespeicherten Text in der nfo Datei zentrieren aus dem Feld Info:
Ich hoffe es kann jemand helfen.
Code: Alles auswählen
;===============================================================================================
; NFO VIEWER RAW VERSION for ASCII / ANSI SCENE ART NFO FILES
; PUREBASIC v5.3 Windows 7 x86 & x64 tested
;
; matbal + UDG in MAY 2015
; feel free to use
;
; REMEMBER: SET IN COMPILER As FOLLOW: CHECK Box - Create unicode executable !!!!!
;
; Thats it.
;
; see Pic.
;===============================================================================================
EnableExplicit
Global Btn_Nfo, load, paste, save
Enumeration
#Window_0
EndEnumeration
Enumeration
#Frame3D_big
#Text_Nfo
#Editor_Nfo
#Font_Editor_Nfo_NFO
#Text_Info
#Editor_Info
#Font_Editor_Info
#Text_Releasedatum
#Date
#btnPaste
#btnPaste2
#btnRemove
#btnLoad
#btnSave
EndEnumeration
;}
Structure CharField
c.c[0]
EndStructure
Procedure.s ReadNFO(File$, *CodePage)
; Liest eine NFO-Datei ein.
; File$ = Dateiname der NFO-Datei
; *CodePage = Zeiger auf die Ersatz-Zeichen für die ASCII-Werte 128-255
Protected Text$
Protected *c.character
Protected a.a
Protected *t.CharField = *CodePage
Protected fmt
If ReadFile(1, File$)
fmt = ReadStringFormat(1) ; Dateiformat ermitteln
If fmt = #PB_Ascii ; ASCII?
Text$ = Space(Lof(1)) ; Stringspeicher für Text
*c = @Text$ ; Zeiger auf erstes Zeichen im String
While Not Eof(1) ; solange Dateiende nicht erreicht ist
a = ReadAsciiCharacter(1) ; ASCII-Zeichen lesen
If a < 128 ;
*c\c = a ; kleine Zeichen übernehmen
Else
*c\c = *t\c[a-128] ; größere Zeichen ersetzen
EndIf
*c + SizeOf(character)
Wend
Else ; Unicode oder UTF8?
Text$ = ReadString(1, fmt | #PB_File_IgnoreEOL) ; Text einfach laden
EndIf
CloseFile(1)
EndIf
ProcedureReturn Text$
EndProcedure
Procedure WriteNFO(File$, Text$, *CodePage)
; Speichert eine NFO-Datei
; File$ = Dateiname der NFO-Datei
; Text$ = zu speichernder Inhalt
; *CodePage = Zeiger auf die Ersatz-Zeichen für die ASCII-Werte 128-255
If Text$ = "" : ProcedureReturn : EndIf ; Abbrechen, wenn kein Text da ist
; zuerst Rückwärts-Ersetztabelle aufbauen
Dim Rep.a($ffff)
Protected *t.charField = *CodePage
Protected i
For i = 128 To 255
Rep(*t\c[i-128]) = i
Next i
; Datei schreiben
If CreateFile(1, File$)
Protected *c.character = @Text$ ; Zeiger auf erstes Zeichen
While *c\c ; solange Zeichen da sind
If *c\c < 128 ; kleine Zeichen
WriteAsciiCharacter(1, *c\c) ; speichern
ElseIf Rep(*c\c) ; große Zeichen mit CP850-Ersatz
WriteAsciiCharacter(1, Rep(*c\c)) ; Ersatz speichern
Else ; große Zeichen ohne CP850-Ersatz
WriteAsciiCharacter(1, '.') ; Punkt speichern
Debug "Zeichen nicht in CodePage 850"
EndIf
*c + SizeOf(character)
Wend
CloseFile(1)
EndIf
EndProcedure
DataSection
TableCP850:
Data.s "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ "
EndDataSection
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, hWnd, cur1, Eingabetext1$, Eingabetext2$, Eingabetext3$, File$, cursorpos.POINT, fmt, Text$, *c.character
hWnd = OpenWindow(#Window_0, 398, 8, 710, 766, "NFO MAKER-VIEWER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
; Eigener Cursor
SetClassLong_(load, #GCL_HCURSOR, 0)
SetClassLong_(paste, #GCL_HCURSOR, 0)
SetClassLong_(Btn_Nfo, #GCL_HCURSOR, 0)
SetClassLong_(save, #GCL_HCURSOR, 0)
; Cursor laden
cur1 = LoadCursor_(0, #IDC_HAND)
;===============================================================================================
;- NFO FIELD
;===============================================================================================
TextGadget(#Text_Nfo, 47, 30, 80, 15, "ASCII NFO:") ;x;y;länge;höhe
EditorGadget(#Editor_Nfo, 45, 45, 620, 380,#PB_Editor_WordWrap) ;x;y;länge;höhe;Zeilenumbruch am Ende
SetGadgetFont(#Editor_Nfo, LoadFont(#Font_Editor_Nfo_NFO, "Consolas", 10, #PB_Font_HighQuality)) ; Button Font
TextGadget(#Text_Info, 47, 435, 90, 15, "Information TEXT:") ;x;y;länge;höhe
EditorGadget(#Editor_Info, 45, 450, 620, 180,#PB_Editor_WordWrap) ;x;y;länge;höhe;Zeilenumbruch am Ende
SetGadgetFont(#Editor_Info, LoadFont(#Font_Editor_Info, "Consolas", 10, #PB_Font_HighQuality)) ; Button Font
TextGadget(#Text_Releasedatum, 45, 640, 120, 13, "NFO Releasedatum") ;x;y;länge;höhe
DateGadget(#Date, 45, 655, 155, 20, "%dd/%mm/%yyyy", Date()); get current Date
Btn_Nfo = ButtonGadget(#btnRemove,45,690,70,50,"Clear All") ; Button: Lösche Inhalt in NFO Feld / BTN del Content in EditorGadget
paste = ButtonGadget(#btnPaste, 125, 690, 140, 50, "paste ASCII from clipboard")
paste = ButtonGadget(#btnPaste2, 276, 690, 140, 50, "paste Text from clipboard")
load = ButtonGadget(#btnLoad, 485, 690, 85, 50, "lade NFO")
save = ButtonGadget(#btnSave, 580, 690, 85, 50, "speicher NFO")
;===============================================================================================
FrameGadget(#Frame3D_big, 10, 10, 690, 740, "Info Viewer")
;===============================================================================================
;
;- HAUPTSCHLEIFE / MAIN
;
;===============================================================================================
Repeat
Event = WaitWindowEvent()
Gosub changecursor
;===============================================================================================
;- LESE VARIABELN AUS DEN EINGABEFELDERN / READ VARs FROM EditorGadget FIELD
;===============================================================================================
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnSave ; Speichern
Eingabetext1$= GetGadgetText(#Editor_Nfo); Eingabe auslesen , read input by EditorGadget Field
Eingabetext2$= GetGadgetText(#Date) ; Eingabe auslesen , read input by EditorGadget Field
Eingabetext3$= GetGadgetText(#Editor_Info); Eingabe auslesen , read input by EditorGadget Field
;===============================================================================================
;- DATEI SPEICHERN AUFRUFEN / call save dialog
;===============================================================================================
File$=SaveFileRequester("SAVE NFO FILE", "C:\bbcode.nfo ", "NFO FILE(*.nfo)|*.nfo", 0)
;===============================================================================================
;- SPEICHERE VARIABELN AUS DEN EINGABEFELD IN EINE *.NFO DATEI / Save VARs from input Field to *.NFO
;===============================================================================================
; als ASCII in CP850 speichern
WriteNFO(File$, Eingabetext1$ + #CRLF$ + Eingabetext2$ + #CRLF$ + Eingabetext3$, ?TableCP850)
Case #btnLoad ; NFO laden
File$ = OpenFileRequester("Load NFO File", "", "NFO File (*.nfo)|*.nfo", 0)
Text$ = ReadNFO(File$, ?TableCP850)
If Text$ > ""
SetGadgetText(#Editor_Nfo, Text$)
EndIf
Case #btnRemove ; Anzeige löschen
ClearGadgetItems(#Editor_Nfo)
ClearGadgetItems(#Editor_Info)
Case #btnPaste
SendMessage_(GadgetID(#Editor_Nfo),#WM_PASTE,0,0)
Case #btnPaste2
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
EndSelect
Case #PB_Event_CloseWindow
;===============================================================================================
;- PROGRAMM BEENDEN / End
;===============================================================================================
EventWindow = EventWindow()
If EventWindow = #Window_0
DestroyCursor_(cur1)
CloseWindow(#Window_0)
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
;
; Ende
;
DestroyCursor_(cur1)
End
;
; SUBROUTINE zum wechseln des MouseCursors / SUB to change Cursor behavior
;
changecursor:
GetCursorPos_(cursorpos.POINT)
MapWindowPoints_(0, hWnd, cursorpos, 1)
Select ChildWindowFromPoint_(hWnd, cursorpos\x | cursorpos\y << 32)
Case load : SetCursor_(cur1) ; Cursor ueber/ over btn_load
Case paste : SetCursor_(cur1) ; Cursor ueber/ over btn_paste
Case Btn_Nfo : SetCursor_(cur1) ; Cursor ueber/ over btn_NFO
Case save : SetCursor_(cur1) ; Cursor ueber/ over save
EndSelect
Return

VG