Gelöst! RTF-Text in Editorgadget importieren

Anfängerfragen zum Programmieren mit PureBasic.
EmmJott
Beiträge: 46
Registriert: 25.10.2024 12:23

Gelöst! RTF-Text in Editorgadget importieren

Beitrag von EmmJott »

Guude Morsche (wie man in Hessen die Leute freundlich grüßt),

würde gerne mittels Editorgadget einen rtf-formatierten Text darstellen. Geht das überhaupt?
Bar jeder Ahnung war die Überlegung, mittels

Code: Alles auswählen

rftext:
IncludeBinary "C:\...\rtf-text.rtf"
den Text einzubauen um dann irgendwann im Programmablauf den Text ins Gadget einzufügen. Und hier kommt der Punkt: Wenn das überhaupt geht, wie macht man das?
Zuletzt geändert von EmmJott am 16.11.2024 12:29, insgesamt 1-mal geändert.
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: RTF-Text in Editorgadget importieren

Beitrag von mk-soft »

Sollte hier mit gehen ...

Code: Alles auswählen

;-TOP

; *****************************************************************************
; AddTextRTF by mk-soft, v1.05, 27.03.2018

CompilerIf #PB_Compiler_Version < 550
  Procedure Ascii(Text.s)
    Protected *mem = AllocateMemory(StringByteLength(Text, #PB_Ascii) + 1)
    If *mem
      PokeS(*mem, Text, -1, #PB_Ascii)
    EndIf
    ProcedureReturn *mem
  EndProcedure
  Procedure UTF8(Text.s)
    Protected *mem = AllocateMemory(StringByteLength(Text, #PB_UTF8) + 1)
    If *mem
      PokeS(*mem, Text, -1, #PB_UTF8)
    EndIf
    ProcedureReturn *mem
  EndProcedure
CompilerEndIf

Procedure AddTextRTF(Gadget, Text.s , NewLine=#False)
  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 = Ascii(Text)
    SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
    SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
    FreeMemory(*szBuffer)
  CompilerElse
    AddGadgetItem(Gadget, -1 , Text)
  CompilerEndIf
EndProcedure

; *****************************************************************************

If OpenWindow(0, 0, 0, 540, 260, "Richedit Unicode EditorGadget", #PB_Window_SystemMenu |  #PB_Window_ScreenCentered)
  EditorGadget(0, 5, 5, 530, 250)
  SendMessage_(GadgetID(0), #EM_SETTEXTMODE, #TM_RICHTEXT, 0)
  
  Global Notiz$
  Global a$ = ""
  
  a$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
  a$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
  a$ + "{\*\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"
  a$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €"
  a$ + "}"
  
  AddTextRTF(0, a$)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
EmmJott
Beiträge: 46
Registriert: 25.10.2024 12:23

Re: Gelöst! RTF-Text in Editorgadget importieren

Beitrag von EmmJott »

Herzlichen Dank! Wenn es Euch nicht gäbe, ...
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Gelöst! RTF-Text in Editorgadget importieren

Beitrag von mk-soft »

Kleines Update mit DataSection ...

Code: Alles auswählen

;-TOP

; *****************************************************************************
; AddTextRTF by mk-soft, v1.05, 27.03.2018

CompilerIf #PB_Compiler_Version < 550
  Procedure Ascii(Text.s)
    Protected *mem = AllocateMemory(StringByteLength(Text, #PB_Ascii) + 1)
    If *mem
      PokeS(*mem, Text, -1, #PB_Ascii)
    EndIf
    ProcedureReturn *mem
  EndProcedure
  Procedure UTF8(Text.s)
    Protected *mem = AllocateMemory(StringByteLength(Text, #PB_UTF8) + 1)
    If *mem
      PokeS(*mem, Text, -1, #PB_UTF8)
    EndIf
    ProcedureReturn *mem
  EndProcedure
CompilerEndIf

Procedure AddTextRTF(Gadget, Text.s , NewLine=#False)
  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 = Ascii(Text)
    SendMessage_(hEdit, #EM_SETSEL, ndx, ndx)
    SendMessage_(hEdit, #EM_REPLACESEL, 0, *szBuffer)
    FreeMemory(*szBuffer)
  CompilerElse
    AddGadgetItem(Gadget, -1 , Text)
  CompilerEndIf
EndProcedure

; ----

Procedure CatchTextRTF(Gadget, *szTextRTF)
  If *szTextRTF
    SendMessage_(GadgetID(Gadget), #WM_SETTEXT, 0, *szTextRTF)
  EndIf
EndProcedure

; *****************************************************************************

CompilerIf #PB_Compiler_IsMainFile
  
  If OpenWindow(0, 0, 0, 540, 260, "Richedit Unicode EditorGadget", #PB_Window_SystemMenu |  #PB_Window_ScreenCentered)
    EditorGadget(0, 5, 5, 530, 250)
    SendMessage_(GadgetID(0), #EM_SETTEXTMODE, #TM_RICHTEXT, 0)
    
    Global Notiz$
    Global a$ = ""
    
    a$ + "{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Segoe WP SemiLight;}}"
    a$ + "{\colortbl ;\red0\green128\blue128;\red51\green51\blue51;}"
    a$ + "{\*\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"
    a$ + "\cf1\ul\b\i\fs28 APPNAME é à ç è ê @ €"
    a$ + "}"
    
    ;AddTextRTF(0, a$)
    CatchTextRTF(0, ?rtfText)
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  
  DataSection
    rtfText:
    IncludeBinary "ReadMe.rtf"
    Data.w 0
  EndDataSection
  
CompilerEndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten