Seite 1 von 1

Richprobleme mit UTF8

Verfasst: 14.02.2014 12:45
von Velindos
Hallo Leute!
Wollte mal mein Richtext auf UTF8 umstellen. Nun läuft das Kopieren/Einfügen des Text laut Forum. Aber ReplaceString geht nicht mehr! Hat jemand einen Tip?

Code: Alles auswählen

; RichEdit in UTF8 betreiben
Enumeration
  #Window
  #Work_Stichwort
  #Work_Notiz
  #Zoom_Stichwort
  #Zoom_Button
  #Work_TextModus
  #Zoom_EditorGadget
  #Work_EditorlKlick
  #Work_ClearButton
  #Zoom_StringButton
  #Zoom_EditorlKlick
  #Work_TextVorlage
  #Zoom_EditorLinie
  #Work_EditorLinie
  ;RichText Variables
  #RichLibrary                ;RichText Variables
  #WM_SETTEXT     = 12        ;RichText Variables
  #SF_RTF         = 2         ;RichText Variables
  #EM_STREAMOUT   = 1098      ;RichText Variables
EndEnumeration
;PB4
Fensterueberschrift$ = "RTF-Kopieren Einfügen Auslesen"
Global Notiz.s                ;Notiz String
Global EinfuegeString.s
Global KleineLinie$ ="----------------------------------------------"
Global GrosseLinie$ = "-------------------------------------------------------------------------------------------"
Global Richtext.s
Richtext = "{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fswiss\fcharset0 Verdana;}}"
Richtext + "{\colortbl ;\red255\green102\blue0;\red128\green128\blue128;}"
Richtext + "\viewkind4\uc1\pard\qc\f0\fs20\par"
Richtext + "\cf1\ul\b\i\fs28 APPNAME \cf2\fs20\par"
Richtext + "\cf0\ulnone\b0\i0\par"
Richtext + "\cf2 Aplicaci\'f3 d'extracci\'f3 de proves\par"
Richtext + "\par"
Richtext + "\cf2 Copyright 2010 - \b Company \b0 S.A.\par"
Richtext + "\cf2 Avda. Meridian  183\par"
Richtext + "\cf2 08516 - Barcelona\par"
Richtext + "----------------------------------------------\par"
Richtext + "\par"
Richtext + "\cf2 Tel: 934 764 xxx - Fax: 938 545 xxx\par"
Richtext + "\par"
Richtext + "\cf2 web: http://www.company.es * mail: company@company.es\par"
Richtext + "\par"
Richtext + "\cf2 Informaci\'f3 d'Activaci\'f3: XXXX-XXXX-XXXX\par"
Richtext + "}"
; ************* BEGIN RichText Variables *************
Prototype SendMessage(hwnd,msg,wParam,lParam)
OpenLibrary(#RichLibrary,"User32.dll")
Global SendMessage_.SendMessage = GetFunction(#RichLibrary,"SendMessageA")

CompilerIf Defined(EDITSTREAM,#PB_Structure) = 0
  Structure EDITSTREAM
    dwCookie.l
    dwError.l
    pfnCallback.l
  EndStructure
CompilerEndIf
Procedure StreamOut(dwCookie,pbBuff,cb,*pcb)
  SetGadgetText(dwCookie,PeekS(pbBuff))
  Notiz = PeekS(pbBuff)                          ; der ausgelesene RTF-Code
EndProcedure
; ************* END RichText Variables *************

; ************* Mainprogram *************
Global FontID1
FontID1 = LoadFont(1, "Courier", 10)    ; Font f<r die Darstellung

If OpenWindow(#Window,  0, 0,667, 732, Fensterueberschrift$,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  SetWindowColor(#Window,RGB(100, 150, 100))
  
  ButtonGadget(#Work_TextVorlage, 1, 5, 351, 20, "TEXT ins Gadget einfügen") 
  ButtonGadget(#Work_EditorlKlick, 355, 5, 310, 20, "Kopieren ins untere Gadget")
  
  StringGadget(#Work_Stichwort, 1, 30, 351, 20,"Stichwort")
  ButtonGadget(#Work_ClearButton, 353, 30, 100, 20, "Gadget Clear")
   ButtonGadget(#Work_TextModus, 567, 30, 100, 20, "Gadget CLIP") 
 
  ButtonGadget(#Work_EditorLinie, 2, 55, 20, 20, "L")
  EditorGadget(#Work_Notiz, 2, 80, 351, 289, #PB_Editor_WordWrap)  ;#PB_Editor_ReadOnly
  SetGadgetFont(#Work_Notiz, FontID1)
  
  ButtonGadget(#Zoom_EditorlKlick, 352, 372, 310, 20, "Kopieren ins obere Gadget")
  StringGadget(#Zoom_Stichwort, 1, 394, 351, 20,"")
  ButtonGadget(#Zoom_StringButton, 353, 394, 100, 20, "Gadget Clear")
  
  ButtonGadget(#Zoom_EditorLinie, 2, 417, 20, 20, "L")
  EditorGadget(#Zoom_EditorGadget, 2, 440, 660, 289, #PB_Editor_WordWrap);#PB_Editor_ReadOnly
  SetGadgetFont(#Zoom_EditorGadget, FontID1)
  
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case #Work_TextVorlage
            *mem = AllocateMemory(StringByteLength(Richtext, #PB_UTF8) + 1)
            PokeS(*mem, Richtext, -1, #PB_UTF8)
            SetGadgetText(#Work_Notiz, PeekS(*mem))
            FreeMemory(*mem)
            SetGadgetText(#Work_Stichwort, "Stichwort @üÄÖ€")
          Case #Work_TextModus
            If ClipModus = 0
              ResizeGadget(#Work_Notiz, 2, 80, 660, 289) ; TextModus Editorfeld  2, 368, 351, 289
              Notiz = ReplaceString(Notiz,KleineLinie$, GrosseLinie$)                 ; Kleine auf Grosse Linie
              ClipModus = 1
            Else
              ResizeGadget(#Work_Notiz,  2, 80, 351, 289) ; TextModus Editorfeld  2, 368, 351, 289
              Notiz=ReplaceString(Notiz,GrosseLinie$,KleineLinie$ )                 ; Kleine auf Grosse Linie
              ClipModus = 0
            EndIf
            
          Case #Zoom_StringButton
            SetGadgetText(#Zoom_Stichwort, "")
            SetGadgetText(#Zoom_EditorGadget, "")
            
          Case #Work_ClearButton
            SetGadgetText(#Work_Stichwort, "")
            SetGadgetText(#Work_Notiz, "")
            
          Case #Work_EditorLinie
            EinfuegeString = Chr(13)+KleineLinie$ +Chr(13)
            SendMessage_(GadgetID(#Work_Notiz),#EM_REPLACESEL,1,@EinfuegeString)
            
          Case #Zoom_EditorLinie
            EinfuegeString =  Chr(13)+GrosseLinie$ +Chr(13)
            SendMessage_(GadgetID(#Zoom_EditorGadget),#EM_REPLACESEL,1,@EinfuegeString)
            
          Case #Zoom_EditorlKlick
            SetGadgetText(#Work_Stichwort, GetGadgetText(#Zoom_Stichwort))
            ; Richtext aus Gadget lesen und auf Notiz schreiben
            Stream.EDITSTREAM
            Stream\dwCookie    = 2
            Stream\pfnCallback = @StreamOut()
            SendMessage_(GadgetID(#Zoom_EditorGadget), #EM_STREAMOUT, #SF_RTF, @Stream)  
            ; Richtext ins Gadget schreiben 
            Debug "RTF-Code: "+ Notiz                                               ; der ausgelesene RTF-Code
            Notiz = ReplaceString(Notiz, GrosseLinie$, KleineLinie$)                  ; Kleine auf Grosse Linie
            SetGadgetText(#Work_Notiz, Notiz)
            
          Case #Work_EditorlKlick
            SetGadgetText(#Zoom_Stichwort, GetGadgetText(#Work_Stichwort))
            ; Richtext aus Gadget lesen und auf Notiz schreiben
            Stream.EDITSTREAM
            Stream\dwCookie    = 2
            Stream\pfnCallback = @StreamOut()
            SendMessage_(GadgetID(#Work_Notiz), #EM_STREAMOUT, #SF_RTF, @Stream)  
            ; Richtext ins Gadget schreiben 
            Debug "RTF-Code: "+ Notiz                                               ; der ausgelesene RTF-Code
            Notiz = ReplaceString(Notiz, KleineLinie$, GrosseLinie$)                  ; Kleine auf Grosse Linie
            SetGadgetText(#Zoom_EditorGadget, Notiz)
            
        EndSelect
        
    EndSelect
  ForEver
  
EndIf ; Open Window

End
Gruss ... Velindos

Re: Richprobleme mit UTF8

Verfasst: 14.02.2014 14:37
von ts-soft
RichEdit unterstützt IMHO nur ASCII oder UNICODE, kein UTF-8!

Code: Alles auswählen

Case #Work_TextVorlage
  *mem = AllocateMemory(StringByteLength(Richtext, #PB_UTF8) + 1)
  PokeS(*mem, Richtext, -1, #PB_UTF8)
  SetGadgetText(#Work_Notiz, PeekS(*mem))
  FreeMemory(*mem)
  SetGadgetText(#Work_Stichwort, "Stichwort @üÄÖ€")
Durch das PeekS wird der String wieder in das Format der CompilerSettings gewandelt.
Das andere Format lebt nur im Speicher :wink:
Ich weiß ja nicht, was Du genau vorhast, und warum, aber das wird wohl nicht funktionieren.

Gruß
Thomas

Re: Richprobleme mit UTF8

Verfasst: 16.02.2014 11:58
von Velindos
Hallo CodeCommander,
nun um das zu definieren.

Wenn ich den Code im "NEIN => Compiler Optionen = Unicode-Executable erstellen!" betreibe, erhalte ich folgende Ausgabe.

Code: Alles auswählen

RTF-Code: {\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fswiss\fcharset0 Verdana;}}
{\colortbl ;\red255\green102\blue0;\red128\green128\blue128;}
\viewkind4\uc1\pard\qc\f0\fs20\par
\cf1\ul\b\i\fs28 APPNAME \cf2\fs20\par
\cf0\ulnone\b0\i0\par
\cf2 Aplicaci\'f3 d'extracci\'f3 de proves\par
\par
Copyright 2010 - \b Company \b0 S.A.\par
Avda. Meridian  183\par
08516 - Barcelona\par
---------------------------------------------\par
\par
Tel: 934 764 xxx - Fax: 938 545 xxx\par
\par
web: http://www.company.es * mail: company@company.es\par
\par
Informaci\'f3 d'Activaci\'f3: XXXX-XXXX-XXXX\par
}
Wenn ich den Code im "JA => Compiler Optionen = Unicode-Executable erstellen!" betreibe, erhalte ich folgende Ausgabe.

Debug "RTF-Code: "+ Notiz

Code: Alles auswählen

RTF-Code: ???????????????????????????????????‰??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????4??????????‰????????????†????«?????????????????????????????????????????›?????8??????????????????????????????????????????????????????????????????????????
Nun funktioniert der Austauschen(ReplaceString) der kleinen Linie auch nicht mehr obwohl er vorher funktionierte!

Gruss ... Velindos