PB 5.73 Richtext to Web => TXT Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

PB 5.73 Richtext to Web => TXT Problem

Beitrag von Velindos »

Hallo Leute,
wenn ich die

Procedure.s RTF_Get_Raw_Richtext_Ascii(Gadget)

im PB 5.71 verwende, läuft alles besten´s!

Im PB 5.73 kommt nur Mist raus?

Code: Alles auswählen

; PB 5.73 Richtext to Web
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enumeration
  #Edt_Win
  #Edt_Btn
  #Edt_Btn2
  #Edt_Btn3
  #Edt_Btn4
EndEnumeration
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global iPage_Richtext
Global iPage_Lesetext
Global iPage_Htmltext
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global Parser_NOTIZ$ = ""
Global Parser_Puffer$ = ""
Global Parser_RawRichText$
; *****************************************************************************
Parser_NOTIZ$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
Parser_NOTIZ$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
Parser_NOTIZ$ + "{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote  bedeutet)\cf1\f0\par"
Parser_NOTIZ$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €   é à ç è ê Ö Ü Ä ö ü ä €  "
Parser_NOTIZ$ + "}"
; *****************************************************************************
; SetGadgetRichtText by mk-soft, v1.05, 27.03.2018
Procedure SetGadgetRichtText(Gadget, Text.s , NewLine=#False)
  Debug "=>" + Text
  ; -------------------------------
  If Left(Text, 5) <> "{\rtf"
    Text = "{\rtf " + Text + "}"
  EndIf
  ; -------------------------------
  If NewLine
    Text = Left(Text, Len(text) - 1) + "\line}"
  EndIf
  ; -------------------------------
  CompilerIf #PB_Compiler_Unicode
    ; -------------------------------
    Protected hEdit = GadgetID(Gadget)
    Protected ndx = GetWindowTextLength_(hEdit)
    ;     Protected *szBuffer = UTF8(Text)
    Protected *szBuffer = Ascii(Text)
    ; -------------------------------
    SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
    SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
    FreeMemory(*szBuffer)
    ; -------------------------------
  CompilerElse
    ; -------------------------------
    ; AddGadgetItem(Gadget, -1 , Text)
    ;  SetGadgetItemText(Gadget,#PB_Web_HtmlCode, Text)
    ; -------------------------------
  CompilerEndIf
  ; -------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{  [STRUCT] CALLBACK_COOKIE 
Structure _CALLBACK_COOKIE_
  *Buffer
  Pos.l
EndStructure
;}
; ================================
Procedure.i RTF_GadgetReplaceAll(Gadget.i, ToReplace.s, Text.s, Flags.i = 0)
  Protected GadgetID.i = GadgetID(Gadget), Info.FINDTEXT, TextLength.i = Len(ToReplace)
  Protected Count.i, Range.CHARRANGE
  Protected Found
  Protected Exit
  ; --------------
  ; Debug "ToReplace= "+ToReplace
  ; Debug "Text= "+Text
  ; --------------
  Info\lpstrText  = @ToReplace
  Info\chrg\cpMin = 0
  Info\chrg\cpMax = -1
  ; --------------
  Flags|#FR_DOWN
  ; --------------
  SendMessage_(GadgetID, #EM_SETSEL, 0, 0)
  ; --------------
  Repeat
    Found = SendMessage_(GadgetID, #EM_FINDTEXT, Flags, @Info)
    If Found > -1
      Info\chrg\cpMin = Found + 1
      ; Debug "FOUND"
      Range\cpMin = Found
      Range\cpMax = Found + TextLength
      SendMessage_(GadgetID, #EM_EXSETSEL, 0, @Range)
      SendMessage_(GadgetID, #EM_REPLACESEL, 0, @Text)
      Count + 1
    Else
      ; Debug "END FOUND"
      ProcedureReturn Count
      ; Exit = #True
    EndIf
    ; --------------
  ForEver
  ; --------------
  ; Until Exit
  ; --------------
EndProcedure
Procedure RTF_Get_Raw_ASCII_Callback(*dwCookie._CALLBACK_COOKIE_, *pbBuff, cb, *pcb.LONG)
  ; über Struct
  If *dwCookie\Pos + cb > MemorySize(*dwCookie\Buffer)
    *dwCookie\Buffer = ReAllocateMemory(*dwCookie\Buffer, *dwCookie\Pos + cb + SizeOf(CHARACTER))
  EndIf
  CopyMemory(*pbBuff, *dwCookie\Buffer + *dwCookie\Pos, cb)
  *dwCookie\Pos + cb
  *pcb\l = cb
  ProcedureReturn 0
EndProcedure
Procedure.s RTF_Get_Raw_Richtext_Ascii(Gadget)
  ; -----------------------------------------------------
  Protected stream.EDITSTREAM, CC._CALLBACK_COOKIE_, Result.s
  ; -----------------------------------------------------
  RTF_GadgetReplaceAll(Gadget,"„","“")
  ; -----------------------------------------------------
  ; über Struct
  CC\Buffer = AllocateMemory(2048)
  ; -----------------------------------------------------
  CC\Pos    = 0
  ; -----------------------------------------------------
  stream\pfnCallback = @RTF_Get_Raw_ASCII_Callback()
  ; -----------------------------------------------------
  stream\dwCookie    = @CC
  ; -----------------------------------------------------
  SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF | #SFF_PLAINRTF, @stream)
  ; -----------------------------------------------------
  ; Das geht mit leerraum
  ; -----------------------------------------------------
  ; 5.71 Ascii oder Unicode nicht gleich zwischen den Ständen
  Result = PeekS(CC\Buffer, MemorySize(CC\Buffer) , #PB_Ascii)
  ; -----------------------------------------------------
  ; 5.73 Ascii oder Unicode nicht gleich zwischen den Ständen
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_Unicode)
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_UTF8)
  ; -----------------------------------------------------
  FreeMemory(CC\Buffer)
  ; -----------------------------------------------------
  ProcedureReturn Result
  ; -----------------------------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Richtext_From_Callback(dwCookie, pbBuff, cb, pcb)
  If cb
    ;{ Liest einen String von der angegebenen Speicheradresse.
    Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_Ascii)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_UTF8)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_Unicode)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb,#PB_UTF16 )
    ;}
  EndIf
  pcb = cb
EndProcedure
Procedure.s SetGadgetRtfText(gad)
  Parser_RawRichText$=""
  
  Protected str.EDITSTREAM\dwCookie=0
  str\dwError=0
  str\pfnCallback = @Richtext_From_Callback()
  SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_RTF,@str)
  
  ProcedureReturn Parser_RawRichText$
EndProcedure
Procedure.s SetGadgetLeseText(gad)
  Parser_RawRichText$=""
  
  Protected str.EDITSTREAM\dwCookie=0
  str\dwError=0
  str\pfnCallback = @Richtext_From_Callback()
  ; SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_RTF,@str)
   SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_TEXT,@str)
  ;SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_TEXTIZED,@str)
  ;SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_UNICODE,@str)
  
  ProcedureReturn Parser_RawRichText$
EndProcedure
; *****************************************************************************
OpenWindow(#Edt_Win,0,0,300,475,"PB 5.73 Richtext to Web => TXT Problem",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Edt_Win))
iPage_Richtext = EditorGadget(#PB_Any,5,5,290,140,#PB_Editor_WordWrap)
iPage_Lesetext = EditorGadget(#PB_Any,5,155,290,140,#PB_Editor_WordWrap)
iPage_Htmltext = WebGadget(#PB_Any,5,300,290,145,"")

; TextGadget(iPage_Htmltext,5,5,300,290,145,"")
; StringGadget(iPage_Htmltext,5,300,290,145,"")

ButtonGadget(#Edt_Btn,5,450,125,20,"RTF => TXT")
ButtonGadget(#Edt_Btn3,130,450,20,20,"C")
ButtonGadget(#Edt_Btn2,150,450,125,20,"TXT => HTML")
ButtonGadget(#Edt_Btn4,275,450,20,20,"C")

SetGadgetRichtText(iPage_Richtext, Parser_NOTIZ$)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow: End
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Edt_Btn
          ; Richtext ins 2.Gadget
          SetGadgetText(iPage_Lesetext,"")
          Debug "#Edt_Btn"
          Parser_Puffer$ = SetGadgetRtfText(iPage_Richtext)
          SetGadgetRichtText(iPage_Lesetext,Parser_Puffer$)
        Case #Edt_Btn3
          SetGadgetText(iPage_Lesetext,"")
        Case #Edt_Btn2
          ; Version 1
          ; Vom 2.Gadget ins 3.Gadget(HTML)
          ;           Parser_Puffer$ = SetGadgetLeseText(iPage_Lesetext)
          ;           SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode, Parser_Puffer$)
          ; Version 2
          ; Vom 1.Gadget ins 3.Gadget(HTML)
          Parser_Puffer$ = RTF_Get_Raw_Richtext_Ascii(iPage_Richtext)
          SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode, Parser_Puffer$)
        Case #Edt_Btn4
          SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode,"")
      EndSelect
  EndSelect
ForEver
Kann mir jemand sagen warum?

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von ccode_new »

Hallo Velindos,

was bedeutet:
Im PB 5.73 kommt nur Mist raus?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von Velindos »

Hallo,
einfach mal das Probieren.
Hier der Beweis das €uro geht!
---------------------------------------------
• So können wir den “Riverdale“-Star gar nicht. (was so viel wie “Baumwollburg“ bedeutet)
=======================
• APPNAME é à ç è ê @ ? é à ç è ê Ö Ü Ä ö ü ä ?
---------------------------------------------
Hier der Beweis das ÜÖÄ ?uro geht! xxx?
</body></html>
Anschliessend in "HTML - Fenster" und schon fehlen die Zeichen.

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von ccode_new »

Ach ja!

Also fangen wir mal mit der Fehleranalyse an.

1. Unter PB 5.71 erhalte ich eine anderes formatierte RTF-Ausgabe als unter PB 5.73.
(PB-Scripte sind in UTF8 kodiert - laut Menüauswahl)
Bei beiden Versionen (5.71 und 5.73) erhalte ich aber ein korrektes € - Zeichen. (UTF8-PB-Script)
Aber die Formatierung unterscheidet sich.

Bild
Bild

2. Du hast garantiert eine falsche PB-Script-Formatierung.
(Gehe ins Menü->Datei->Datei-Format->Codierung: Utf8)
Hier sollte Utf8 ausgewählt sein.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von Velindos »

Hallo,
das war es nicht. Hab die Sache mit
<meta charset='utf-8'>
gelöst!

Code: Alles auswählen

; PB 5.73 Richtext to Web
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enumeration
  #Edt_Win
  #Txt_Rich
  #Txt_Lese
  #Txt_Html
  #Edt_Btn
  #Edt_Btn2
  #Edt_Btn3
  #Edt_Btn4
  #Edt_Btn5
EndEnumeration
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global iPage_Richtext
Global iPage_Lesetext
Global iPage_Htmltext
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global Parser_NOTIZ$ = ""
Global Parser_Puffer$ = ""
Global Parser_RawRichText$
Global HTML.s = ""
; *****************************************************************************
Parser_NOTIZ$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
Parser_NOTIZ$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
Parser_NOTIZ$ + "{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote  bedeutet)\cf1\f0\par"
Parser_NOTIZ$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €   é à ç è ê Ö Ü Ä ö ü ä €  "
Parser_NOTIZ$ + "}"
; *****************************************************************************
; SetGadgetRichtText by mk-soft, v1.05, 27.03.2018
Procedure SetGadgetRichtText(Gadget, Text.s , NewLine=#False)
  Debug "=>" + Text
  ; -------------------------------
  If Left(Text, 5) <> "{\rtf"
    Text = "{\rtf " + Text + "}"
  EndIf
  ; -------------------------------
  If NewLine
    Text = Left(Text, Len(text) - 1) + "\line}"
  EndIf
  ; -------------------------------
  CompilerIf #PB_Compiler_Unicode
    ; -------------------------------
    Protected hEdit = GadgetID(Gadget)
    Protected ndx = GetWindowTextLength_(hEdit)
    ;     Protected *szBuffer = UTF8(Text)
    Protected *szBuffer = Ascii(Text)
    ; -------------------------------
    SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
    SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
    FreeMemory(*szBuffer)
    ; -------------------------------
  CompilerElse
    ; -------------------------------
    ; AddGadgetItem(Gadget, -1 , Text)
    ;  SetGadgetItemText(Gadget,#PB_Web_HtmlCode, Text)
    ; -------------------------------
  CompilerEndIf
  ; -------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{  [STRUCT] CALLBACK_COOKIE 
Structure _CALLBACK_COOKIE_
  *Buffer
  Pos.l
EndStructure
;}
; ================================
Procedure.i RTF_GadgetReplaceAll(Gadget.i, ToReplace.s, Text.s, Flags.i = 0)
  Protected GadgetID.i = GadgetID(Gadget), Info.FINDTEXT, TextLength.i = Len(ToReplace)
  Protected Count.i, Range.CHARRANGE
  Protected Found
  Protected Exit
  ; --------------
  ; Debug "ToReplace= "+ToReplace
  ; Debug "Text= "+Text
  ; --------------
  Info\lpstrText  = @ToReplace
  Info\chrg\cpMin = 0
  Info\chrg\cpMax = -1
  ; --------------
  Flags|#FR_DOWN
  ; --------------
  SendMessage_(GadgetID, #EM_SETSEL, 0, 0)
  ; --------------
  Repeat
    Found = SendMessage_(GadgetID, #EM_FINDTEXT, Flags, @Info)
    If Found > -1
      Info\chrg\cpMin = Found + 1
      ; Debug "FOUND"
      Range\cpMin = Found
      Range\cpMax = Found + TextLength
      SendMessage_(GadgetID, #EM_EXSETSEL, 0, @Range)
      SendMessage_(GadgetID, #EM_REPLACESEL, 0, @Text)
      Count + 1
    Else
      ; Debug "END FOUND"
      ProcedureReturn Count
      ; Exit = #True
    EndIf
    ; --------------
  ForEver
  ; --------------
  ; Until Exit
  ; --------------
EndProcedure
Procedure RTF_Get_Raw_ASCII_Callback(*dwCookie._CALLBACK_COOKIE_, *pbBuff, cb, *pcb.LONG)
  ; über Struct
  If *dwCookie\Pos + cb > MemorySize(*dwCookie\Buffer)
    *dwCookie\Buffer = ReAllocateMemory(*dwCookie\Buffer, *dwCookie\Pos + cb + SizeOf(CHARACTER))
  EndIf
  CopyMemory(*pbBuff, *dwCookie\Buffer + *dwCookie\Pos, cb)
  *dwCookie\Pos + cb
  *pcb\l = cb
  ProcedureReturn 0
EndProcedure
Procedure.s RTF_Get_Raw_Richtext_Ascii(Gadget)
  ; -----------------------------------------------------
  Protected stream.EDITSTREAM, CC._CALLBACK_COOKIE_, Result.s
  ; -----------------------------------------------------
  RTF_GadgetReplaceAll(Gadget,"„","“")
  ; -----------------------------------------------------
  ; über Struct
  CC\Buffer = AllocateMemory(2048)
  ; -----------------------------------------------------
  CC\Pos    = 0
  ; -----------------------------------------------------
  stream\pfnCallback = @RTF_Get_Raw_ASCII_Callback()
  ; -----------------------------------------------------
  stream\dwCookie    = @CC
  ; -----------------------------------------------------
  SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF | #SFF_PLAINRTF, @stream)
  ; -----------------------------------------------------
  ; Das geht mit leerraum
  ; -----------------------------------------------------
  ; 5.71 Ascii oder Unicode nicht gleich zwischen den Ständen
  Result = PeekS(CC\Buffer, MemorySize(CC\Buffer) , #PB_Ascii)
  ; -----------------------------------------------------
  ; 5.73 Ascii oder Unicode nicht gleich zwischen den Ständen
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_Unicode)
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_UTF8)
  ; -----------------------------------------------------
  FreeMemory(CC\Buffer)
  ; -----------------------------------------------------
  ProcedureReturn Result
  ; -----------------------------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Richtext_From_Callback(dwCookie, pbBuff, cb, pcb)
  If cb
    ;{ Liest einen String von der angegebenen Speicheradresse.
    Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_Ascii)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_UTF8)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb ,#PB_Unicode)
    ; Parser_RawRichText$ + PeekS(pbBuff, cb,#PB_UTF16 )
    ;}
  EndIf
  pcb = cb
EndProcedure
Procedure.s SetGadgetRtfText(gad)
  Parser_RawRichText$=""
  
  Protected str.EDITSTREAM\dwCookie=0
  str\dwError=0
  str\pfnCallback = @Richtext_From_Callback()
  SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_RTF,@str)
  
  ProcedureReturn Parser_RawRichText$
EndProcedure
Procedure.s SetGadgetLeseText(gad)
  Parser_RawRichText$=""
  
  Protected str.EDITSTREAM\dwCookie=0
  str\dwError=0
  str\pfnCallback = @Richtext_From_Callback()
  ; SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_RTF,@str)
  SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_TEXT,@str)
  ;SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_TEXTIZED,@str)
  ;SendMessage_(GadgetID(gad),#EM_STREAMOUT,#SF_UNICODE,@str)
  
  ProcedureReturn Parser_RawRichText$
EndProcedure
; *****************************************************************************
OpenWindow(#Edt_Win,0,0,300,475,"PB 5.73 Richtext to Web => TXT Problem",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Edt_Win))
TextGadget(#Txt_Rich,5,5,290,20,"[RTF] Richtext herein kopieren!")
iPage_Richtext = EditorGadget(#PB_Any,5,25,290,110,#PB_Editor_WordWrap)

TextGadget(#Txt_Lese,5,140,290,20,"[TXT] Lesetext wird angezeigt!")
iPage_Lesetext = EditorGadget(#PB_Any,5,160,290,110,#PB_Editor_WordWrap)

TextGadget(#Txt_Html,5,280,290,20,"[HTML] wird angezeigt!")
iPage_Htmltext = WebGadget(#PB_Any,5,300,290,145,"")

; TextGadget(iPage_Htmltext,5,5,300,290,145,"")
; StringGadget(iPage_Htmltext,5,300,290,145,"")

ButtonGadget(#Edt_Btn,5,450,70,20,"RTF => TXT")
ButtonGadget(#Edt_Btn3,75,450,20,20,"C")
ButtonGadget(#Edt_Btn2,120,450,75,20,"RTF => HTML")
ButtonGadget(#Edt_Btn5,200,450,75,20,"TXT => HTML")
ButtonGadget(#Edt_Btn4,275,450,20,20,"C")

SetGadgetRichtText(iPage_Richtext, Parser_NOTIZ$)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow: End
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Edt_Btn
          ; Richtext ins 2.Gadget
          SetGadgetText(iPage_Lesetext,"")
          Debug "#Edt_Btn"
          Parser_Puffer$ = SetGadgetRtfText(iPage_Richtext)
          SetGadgetRichtText(iPage_Lesetext,Parser_Puffer$)
        Case #Edt_Btn3
          SetGadgetText(iPage_Lesetext,"")
        Case #Edt_Btn2
          ; "RTF => HTML"
          Parser_Puffer$ = RTF_Get_Raw_Richtext_Ascii(iPage_Richtext)
          HTML.s = "<!DOCTYPE html><head><meta charset='utf-8'></head><body>"+Parser_Puffer$+"</body></html>"
          SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode, HTML)
        Case #Edt_Btn5
          ; "TXT => HTML"
          Parser_Puffer$ = GetGadgetText(iPage_Lesetext)
          Debug "=> "+#PB_Compiler_Version
          CompilerIf #PB_Compiler_Version > 571
            HTML.s = "<!DOCTYPE html><head><meta charset='utf-8'></head><body>"+Parser_Puffer$+"</body></html>"
          CompilerElse
            HTML.s = "<!DOCTYPE html><head></head><body>"+Parser_Puffer$+"</body></html>"
          CompilerEndIf
          SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode, HTML)
        Case #Edt_Btn4
          SetGadgetItemText(iPage_Htmltext, #PB_Web_HtmlCode,"")
      EndSelect
  EndSelect
ForEver
Jetzt läuft der Code unter PB 5.71 und PB 5.73

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von ccode_new »

:allright:

-> Wieder was gelernt und ein Problem weniger.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von Velindos »

Hallo!

Freud mich. Habe eines Gelöst und schon kommt das Nächste.

Wenn ich den TEXT von WORK zu MEMO kopiere, taucht PLÖTZLICH ein zusätzliches #CRLF auf! Somit wird das Ding immer Länger!

Jemand eine Ahnung wie ich das verhindern kann?

Code: Alles auswählen

; PB 5.73 Richtext to Web
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enumeration
  #Edt_Win
  #Txt_Rich
  #Txt_Lese
  #Txt_Html
  #Btn_RTF
  #Btn_WORK_MEMO
  #Btn_DATA
  #Clear_Work
  #Btn_MEMO_WORK
  #Clear_Memo
  #Clear_Web
  #Btn_MEMO_HTML
  #Btn_WORK_HTML
EndEnumeration
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global iPage_Work
Global iPage_Memo
Global iPage_Web
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global Line$ =   "-------------------------------------------------------------------"
Global DPLine$ = "==============================================="
Global HTMLLine$ =   "<hr>"
Global HTMLLine2$ =  "<HR COLOR=#FF00FF SIZE=2>"
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Global Parser_NOTIZ$ = ""
Global Parser_PUFFER$ = ""
Global Parser_RawRichText$
Global HTML.s = ""
; *****************************************************************************
Parser_NOTIZ$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
Parser_NOTIZ$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
Parser_NOTIZ$ + "{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote  bedeutet)\cf1\f0\par"
Parser_NOTIZ$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €   é à ç è ê Ö Ü Ä ö ü ä €  "
Parser_NOTIZ$ + "}"

; Global Parser_NOTIZ2$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}{\f2\fnil\fcharset0 MS Shell Dlg;}} {\colortbl ;\red0\green128\blue128;\red51\green51\blue51;} \viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \ldblquote Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \ldblquote Baumwollburg\ldblquote bedeutet)\cf1\f0\par \pard\ul\b\i\fs28 APPNAME \'e9 \'e0 \'e7 \'e8 \'ea @ \'80 \'e9 \'e0 \'e7 \'e8 \'ea \'d6 \'dc \'c4 \'f6 \'fc \'e4 \'80 \cf0\ulnone\b0\i0\f2\fs17\par } "
Global Parser_NOTIZ2$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana"+Chr(59)+"}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight"+Chr(59)+"}{\f2\fnil\fcharset0 MS Shell Dlg"+Chr(59)+"}} {\colortbl "+Chr(59)+"\red0\green128\blue128"+Chr(59)+"\red51\green51\blue51"+Chr(59)+"} \viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \'84Riverdale\ldblquote -Star gar nicht. \cf2\f1 (was so viel wie \'84Baumwollburg\ldblquote bedeutet)\par -------------------------------------------------------------------\cf1\f0\par \pard\ul\b\i\fs28 APPNAME \'e9 \'e0 \'e7 \'e8 \'ea @ \'80 \'e9 \'e0 \'e7 \'e8 \'ea \'d6 \'dc \'c4 \'f6 \'fc \'e4 \'80 \cf0\ulnone\b0\i0\f2\fs17\par } "

; *****************************************************************************
; SetGadgetRichtText by mk-soft, v1.05, 27.03.2018
Procedure SetGadgetRichtText(Gadget, Text.s , NewLine=#False)
  Debug "=>" + Text
  ; -------------------------------
  If Left(Text, 5) <> "{\rtf"
    Text = "{\rtf " + Text + "}"
  EndIf
  ; -------------------------------
  If NewLine
    Text = Left(Text, Len(text) - 1) + "\line}"
  EndIf
  ; -------------------------------
  CompilerIf #PB_Compiler_Unicode
    ; -------------------------------
    Protected hEdit = GadgetID(Gadget)
    Protected ndx = GetWindowTextLength_(hEdit)
    ;     Protected *szBuffer = UTF8(Text)
    Protected *szBuffer = Ascii(Text)
    ; -------------------------------
    SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
    SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
    FreeMemory(*szBuffer)
    ; -------------------------------
  CompilerElse
    ; -------------------------------
    ; AddGadgetItem(Gadget, -1 , Text)
    ;  SetGadgetItemText(Gadget,#PB_Web_HtmlCode, Text)
    ; -------------------------------
  CompilerEndIf
  ; -------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;{  [STRUCT] CALLBACK_COOKIE 
Structure _CALLBACK_COOKIE_
  *Buffer
  Pos.l
EndStructure
;}
; ================================
Procedure RTF_Get_Raw_ASCII_Callback(*dwCookie._CALLBACK_COOKIE_, *pbBuff, cb, *pcb.LONG)
  ; über Struct
  If *dwCookie\Pos + cb > MemorySize(*dwCookie\Buffer)
    *dwCookie\Buffer = ReAllocateMemory(*dwCookie\Buffer, *dwCookie\Pos + cb + SizeOf(CHARACTER))
  EndIf
  CopyMemory(*pbBuff, *dwCookie\Buffer + *dwCookie\Pos, cb)
  *dwCookie\Pos + cb
  *pcb\l = cb
  ProcedureReturn 0
EndProcedure
Procedure.s RTF_Get_Raw_Richtext_Ascii(Gadget)
  ; -----------------------------------------------------
  Protected stream.EDITSTREAM, CC._CALLBACK_COOKIE_, Result.s
  ; -----------------------------------------------------
  ; über Struct
  CC\Buffer = AllocateMemory(2048)
  ; -----------------------------------------------------
  CC\Pos    = 0
  ; -----------------------------------------------------
  stream\pfnCallback = @RTF_Get_Raw_ASCII_Callback()
  ; -----------------------------------------------------
  stream\dwCookie    = @CC
  ; -----------------------------------------------------
  SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF | #SFF_PLAINRTF, @stream)
  ; -----------------------------------------------------
  ; Das geht mit leerraum
  ; -----------------------------------------------------
  ; 5.71 Ascii oder Unicode nicht gleich zwischen den Ständen
  Result = PeekS(CC\Buffer, MemorySize(CC\Buffer) , #PB_Ascii)
  ; -----------------------------------------------------
  ; 5.73 Ascii oder Unicode nicht gleich zwischen den Ständen
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_Unicode)
  ; Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_UTF8)
  ; -----------------------------------------------------
  FreeMemory(CC\Buffer)
  ; -----------------------------------------------------
  ProcedureReturn Result
  ; -----------------------------------------------------
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- Windows
OpenWindow(#Edt_Win,0,0,300,575,"PB 5.73 Richtext to Web => TXT Problem",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Edt_Win))
ButtonGadget(#Btn_DATA,280,5,20,20,"#")

ButtonGadget(#Btn_MEMO_WORK,5,5,90,20,"MEMO => WORK")
ButtonGadget(#Clear_Work,95,5,20,20,"C")
TextGadget(#Txt_Rich,120,7,290,20,"[RTF] Richtext herein kopieren!")
iPage_Work = EditorGadget(#PB_Any,5,25,290,160,#PB_Editor_WordWrap)

ButtonGadget(#Btn_WORK_MEMO,5,190,90,20,"WORK => MEMO")
ButtonGadget(#Clear_Memo,95,190,20,20,"C")
TextGadget(#Txt_Lese,120,192,290,20,"[TXT] Lesetext wird angezeigt!")
iPage_Memo = EditorGadget(#PB_Any,5,210,290,160,#PB_Editor_WordWrap)

ButtonGadget(#Btn_RTF,280,400,20,20,"RTF")

ButtonGadget(#Btn_MEMO_HTML,5,400,90,20,"MEMO => HTML")
ButtonGadget(#Btn_WORK_HTML,95,400,90,20,"WORK => HTML")

ButtonGadget(#Clear_Web,190,400,20,20,"C")
TextGadget(#Txt_Html,220,402,290,20,"[HTML]")
iPage_Web = WebGadget(#PB_Any,5,425,290,145,"")

; TextGadget(iPage_Web,5,5,300,290,145,"")
; StringGadget(iPage_Web,5,300,290,145,"")


; SetGadgetRichtText(iPage_Work, Parser_NOTIZ$)
SetGadgetRichtText(iPage_Work, Parser_NOTIZ2$)
;}
;-- REPEAT
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow: End
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #Btn_DATA
          SetGadgetText(iPage_Work,"")
          SetGadgetRichtText(iPage_Work, Parser_NOTIZ2$)
          
        Case #Clear_Work
          SetGadgetText(iPage_Work,"")
        Case #Btn_WORK_MEMO
          Parser_PUFFER$ = RTF_Get_Raw_Richtext_Ascii(iPage_Work)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,Line$,DPLine$)
          Debug "Parser_PUFFER$ = "+Parser_PUFFER$
          ClearGadgetItems(iPage_Memo)
          SetGadgetRichtText(iPage_Memo,Parser_PUFFER$)
          
        Case #Clear_Memo
          SetGadgetText(iPage_Memo,"")
        Case #Btn_MEMO_WORK
          Parser_PUFFER$ = RTF_Get_Raw_Richtext_Ascii(iPage_Memo)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,DPLine$,Line$)
          ClearGadgetItems(iPage_Work)
          SetGadgetRichtText(iPage_Work,Parser_PUFFER$)
          
        Case #Btn_RTF
          ; "RTF => HTML"
          Parser_Puffer$ = RTF_Get_Raw_Richtext_Ascii(iPage_Work)
          HTML.s = "<!DOCTYPE html><head><meta charset='utf-8'></head><body>"+Parser_Puffer$+"</body></html>"
          SetGadgetItemText(iPage_Web, #PB_Web_HtmlCode, HTML)
          
        Case #Btn_WORK_HTML
          ;{ "TXT => HTML"
          Parser_PUFFER$ = GetGadgetText(iPage_Work)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,DPLine$,HTMLLine2$)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,Line$,HTMLLine$)
          Debug "=> "+#PB_Compiler_Version
          CompilerIf #PB_Compiler_Version > 571
            HTML.s = "<!DOCTYPE html><head><meta charset='utf-8'></head><body>"+Parser_PUFFER$+"</body></html>"
          CompilerElse
            HTML.s = "<!DOCTYPE html><head></head><body>"+Parser_PUFFER$+"</body></html>"
          CompilerEndIf
          SetGadgetItemText(iPage_Web, #PB_Web_HtmlCode, HTML)
          ;}
        Case #Btn_MEMO_HTML
          ;{ "TXT => HTML"
          Parser_PUFFER$ = GetGadgetText(iPage_Memo)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,DPLine$,HTMLLine2$)
          Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,Line$,HTMLLine$)
          Debug "=> "+#PB_Compiler_Version
          CompilerIf #PB_Compiler_Version > 571
            HTML.s = "<!DOCTYPE html><head><meta charset='utf-8'></head><body>"+Parser_PUFFER$+"</body></html>"
          CompilerElse
            HTML.s = "<!DOCTYPE html><head></head><body>"+Parser_PUFFER$+"</body></html>"
          CompilerEndIf
          
          SetGadgetItemText(iPage_Web, #PB_Web_HtmlCode, HTML)
          ;}
          
          
        Case #Clear_Web
          SetGadgetItemText(iPage_Web, #PB_Web_HtmlCode,"")
      EndSelect
  EndSelect
ForEver
;}
Gruss ... Velindos!

PS: Zusätzlich beachte man das der Buttontext im 5.71 passt und im 5.73 zu gross ist!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von ccode_new »

Hi!
Velindos hat geschrieben:Freud mich. Habe eines Gelöst und schon kommt das Nächste.

Wenn ich den TEXT von WORK zu MEMO kopiere, taucht PLÖTZLICH ein zusätzliches #CRLF auf! Somit wird das Ding immer Länger!

Jemand eine Ahnung wie ich das verhindern kann?
Das kann ich so nicht bestätigen.

Ich habe mal alles auf UTF8 umgestellt, aber es ändert nichts an den tausenden RTF-Konventions-Problemen.

Code: Alles auswählen

;...
Protected *szBuffer = UTF8(Text)
;...
 #SF_USECODEPAGE = $20
SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #CP_UTF8 << 16 | #SF_USECODEPAGE | #SF_RTF | #SFF_PLAINRTF, @stream)
Result = PeekS(CC\Buffer, MemorySize(CC\Buffer), #PB_UTF8)
;...
Aber was zur Hölle ist das hier:

Code: Alles auswählen

\par -------------------------------------------------------------------
Es erzeugt mit seinen 67 Zeichen genau eine Linie, aber ist das Standard?
Hierbei wird das - Zeichen irgendwie zum = Zeichen.

Hier sind z.Bsp. RTF-Befehle gelistet : (für die RTF-Freaks)
RTF-Befehle
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von Velindos »

Hallo!

Danke für deinen Tip mit den "RTF-Befehle"! Zu dem
Aber was zur Hölle ist das hier:
Um Notizen lesbarer zu machen habe ich mir eine (line)
------------------------------------------------------------------------------------------
und für besondere Zwecke des hervorheben des TEXTES eine double line eingebaut
=============================================
In meinen Velindos stelle ich die Notiz in einen Work bzw. Memo Fenster dar, diese unterscheiden sich in der Grösse. Dh.ersetzte ich diese line durch eine Kleinere bzw. Grössere!
------------------------------------------------------------------------------------------
Der tausch der "line" erfolgt über:
Parser_PUFFER$ = ReplaceString(Parser_PUFFER$,Line$,HTMLLine$)
------------------------------------------------------------------------------------------
Man sieht hier auch das Problem der beiden Linien, das Sie verschiedenen Längen haben!
Wenn ich den TEXT von WORK zu MEMO kopiere, taucht PLÖTZLICH ein zusätzliches #CRLF auf! Somit wird das Ding immer Länger!
diese kommen vom

Code: Alles auswählen

    Protected hEdit = GadgetID(Gadget)
    Protected ndx   = GetWindowTextLength_(hEdit)
    Protected *szBuffer = UTF8(Text)
    SendMessage_(hEdit, #EM_SETSEL, ndx,  -1)
    SendMessage_(hEdit, #EM_REPLACESEL,0,*szBuffer)
    FreeMemory(*szBuffer)
.. verstehe ich nicht, wie entferne ich jetzt das CRLF!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PB 5.73 Richtext to Web => TXT Problem

Beitrag von ccode_new »

Huhu!

Ersetze:

Code: Alles auswählen

Protected hEdit = Gadget
Protected ndx = GetWindowTextLength_(hEdit)
Protected *szBuffer = UTF8(Text)
    ; -------------------------------
    ;SendMessage_(hEdit, #EM_SETSEL, 0, 0)
    ;SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
SetGadgetText(hEdit, PeekS(*szBuffer,#PB_Any,#PB_UTF8))
FreeMemory(*szBuffer)
...und probiere :)

Und hier mal deine korrigierte RTF-Zeichenkette:

Code: Alles auswählen

Global Parser_NOTIZ2$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\hyphauto1\hyphhotz2{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana"+Chr(59)+"}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight"+Chr(59)+"}{\f2\fnil\fcharset0 MS Shell Dlg"+Chr(59)+"}}{\colortbl "+Chr(59)+"\red0\green128\blue128"+Chr(59)+"\red51\green51\blue51"+Chr(59)+"}\viewkind4\uc1\pard\nowidctlpar\cf1\f0\fs20 So kennen wir den \u8222\ Riverdale-Star\u8220\\ gar nicht. \cf2\f1(was so viel wie \u8222\ Baumwollburg\u8220\\ bedeutet) \par\pard ------------------------------------------------------------------- \cf1\f0\pard\ul\b\i\fs28 APPNAME \'e9 \'e0 \'e7 \'e8 \'ea @ € \'e9 \'e0 \'e7 \'e8 \'ea \'d6 \'dc \'c4 \'f6 \'fc \'e4 € \cf0\ulnone\b0\i0\f2\fs17\par\chdpl }"
->Und hier die Erklärung warum z.B. so etwas \'84, oder so etwas \'80 ,.. nicht geht:
Erklärung
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten