RTF-Texte mit #PB_Editor_RTF kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

RTF-Texte mit #PB_Editor_RTF kopieren

Beitrag von Eckhard.S »

Unter
http://www.purebasic.fr/english/viewtop ... hlight=rtf
ist gezeigt, wie man mit #PB_Editor_RTF einen RTF-Test kopieren kann.

Ich habe PB 4.0 Demo und bekomme beim Aufruf dann "Constant not found". Weiß jemand, wie ich es benutzen kann? Hat sich für PB 4.0 etwas geändert?

Im folgenden Code bekomme ich den Fehler, wenn ich Zeile 39 und 40 benutze ( text_eingabe$ = GetGadgetText(1,#PB_Editor_RTF) )

Code: Alles auswählen

;PB4
; ************* Variables *************

        Fensterueberschrift$ = "RTF-Test"
              Button_1     = 20   ; Button-ID
                                                     
        Global FontID1
        FontID1 = LoadFont(1, "Courier", 10)    ; Font für die Darstellung 

;RTF- Test 
text$="{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 Verdana;}}"
text$=text$ + "{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;}"
text$=text$ + "\viewkind4\uc1\pard\f0\fs20 normal \cf1 rot\cf0  \cf2 gr\'fcn\cf0  \b fett\b0  \cf3\b fettblau \cf0\b0 normal\par "
text$=text$ + "Zeilenumbruch \f1 Arial, \f2\fs28 Verdana\fs20 , \f0 Courier New\cf4\par "
text$=text$ + "}"
      
; ************* Mainprogram *************

If OpenWindow(0, 1, 1, 800, 350, Fensterueberschrift$,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
SetWindowColor(0,RGB(100, 150, 100)) 
CreateGadgetList(WindowID(0))
      EditorGadget(1, 20, 50, 650, 110)  ;#PB_Editor_ReadOnly
      SetGadgetFont(1, FontID1)
      EditorGadget(2, 20, 160, 650, 110);#PB_Editor_ReadOnly
      SetGadgetFont(2, FontID1)
      ButtonGadget(Button_1, 650+25, 130, 100, 20, "Kopiere")
      SetGadgetText(1, text$)         
Repeat 
 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break
        
    Case #PB_Event_Gadget 
      Select EventGadget() 
      
         Case Button_1
         
            
          ;  text_eingabe$ = GetGadgetText(1,#PB_Editor_RTF) ; Funktioniert nicht
          ;  SetGadgetText(2, text_eingabe$,#PB_Editor_RTF) ;  Funktioniert nicht
            
            text_eingabe$ = GetGadgetText(1)    ; Funktioniert aber ohne Farben und Schriften
            SetGadgetText(2, text_eingabe$)     ; Funktioniert aber ohne Farben und Schriften
            
            
         EndSelect
       
  EndSelect 
ForEver 

EndIf ; Open Window

End
[/code]
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

PureBasic Forum Index -> Feature Requests and Wishlists
Die Konstante gibt es nicht. Es wurde angefragt, ob es möglich wäre, sowas einzubauen...

Sven
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: RTF-Texte mit #PB_Editor_RTF kopieren

Beitrag von Kaeru Gaman »

Eckhard.S hat geschrieben:Unter
http://www.purebasic.fr/english/viewtop ... hlight=rtf
ist gezeigt, wie man mit #PB_Editor_RTF einen RTF-Test kopieren kann.
nein, er schreibt:
Joakim Christiansen hat geschrieben:This would make the whole world much bether!

I had to make my own functions for this: :wink:
http://www.purebasic.fr/english/viewtopic.php?t=22443
es würde die welt besser machen.

er musste seine eigenen funktionen dafür schreiben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Hallo Kaeru!

Ach, das war nur der Konjunktiv.. Mist! :(
Gibt es denn keine Lösung für die Aufgabe?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich hab mir den zweiten link von Jo Christiansen nicht angeschaut,
aber wenn er sagt, er musste seine eigenen funktionen dafür schreiben,
dann hat er da vielleicht schon ne lösung, guck einfach mal rein.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Habe seinen Code ausprobiert. Lässt sich leider bei mir nicht kompilieren:
"Structure CHARFORMAT not found". :(

Weißt du, ob man mit Peek an den Speicherbereich des Fensters herankommt? Wenn da bunte Zeichen oder Sonderzeichen zu sehen sind, dann muss es ja auch irgendwo im Speicher stehen. Mit den Zeigern und Peek usw. bin ich aber noch nicht vertraut.

Code: Alles auswählen

;PB4 
; ************* Variables ************* 

        Fensterueberschrift$ = "Unicode-Test" 
              Button_1     = 20   ; Button-ID 
                                                      
        Global FontID1 
        FontID1 = LoadFont(1, "Courier", 10)    ; Font für die Darstellung 

;RTF- Test 
text$="{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}}" 
text$=text$ + "{\colortbl ;\red0\green0\blue0;}" 
text$=text$ + "\viewkind4\uc1\pard\ltrpar\cf1\f0\fs20 Unicode: \u264?\u284?\u292?\u308?\u348?\u364?\u265?\u285?\u293?\u309?\u349?\u365?\cf0\f1\par " 
text$=text$ + "}" 
  

      
; ************* Mainprogram ************* 

If OpenWindow(0, 1, 1, 800, 350, Fensterueberschrift$,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
SetWindowColor(0,RGB(100, 150, 100)) 
CreateGadgetList(WindowID(0)) 
      EditorGadget(1, 20, 50, 650, 110)  ;#PB_Editor_ReadOnly 
      SetGadgetFont(1, FontID1) 
      EditorGadget(2, 20, 160, 650, 110);#PB_Editor_ReadOnly 
      SetGadgetFont(2, FontID1) 
      ButtonGadget(Button_1, 650+25, 130, 100, 20, "Copy") 
      SetGadgetText(1, text$)          
Repeat 
 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break 
        
    Case #PB_Event_Gadget 
      Select EventGadget() 
      
         Case Button_1 
          
            text_eingabe$ = GetGadgetText(1)    ; Funktioniert aber ohne Sonderzeichen 
            SetGadgetText(2, text_eingabe$)     ; Funktioniert aber ohne Sonderzeichen            


            
         EndSelect 
        
  EndSelect 
ForEver 

EndIf ; Open Window 

End 
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Eckhard.S hat geschrieben:Habe seinen Code ausprobiert. Lässt sich leider bei mir nicht kompilieren:
"Structure CHARFORMAT not found". :(
Ist in PureBasic vordefiniert! Deine PureBasic-Installation ist evtl. Fehlerhaft

Code: Alles auswählen

Structure CHARFORMAT
  cbSize.l
  dwMask.l
  dwEffects.l
  yHeight.l
  yOffset.l
  crTextColor.l
  bCharSet.b
  bPitchAndFamily.b
  szFaceName.c[32]
  _wPad2.w
EndStructure
So ist sie definiert und im Structurverzeichnis anzuschauen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ts-soft hat geschrieben:
Eckhard.S hat geschrieben:Habe seinen Code ausprobiert. Lässt sich leider bei mir nicht kompilieren:
"Structure CHARFORMAT not found". :(
Ist in PureBasic vordefiniert! Deine PureBasic-Installation ist evtl. Fehlerhaft
Dachte in der Demo gibt es gar keine Api ...
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Stimmt! Mit der Demo-Version komme ich anscheinend auf diesem Wege nicht weiter. Danke aber für die Tipps und Hilfen. Da ich ein kleines, gemeinnütziges Programm erstelle, wollte ich (vorerst) noch keine Vollversion kaufen.

Ich habe noch die Idee, dass man an den Inhalt des EditorGadgets mit Peek herankommt. Dies werde ich noch einmal in einem neuen Thema nachfragen.

Merci an alle für die Infos.
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Natuerlich kannst du in der Demo Version auch auf die API zugreifen.

Beispiel :

Code: Alles auswählen

Import "User32.lib"
  SendMessage_(hwnd,msg,wParam,lParam) As "_SendMessageA@16"  ; ansi
  ;SendMessage_(hwnd,msg,wParam,lParam) As "_SendMessageW@16" ; unicode
EndImport

#WM_CLOSE   = 16
#WM_SETTEXT = 12


hwnd = OpenWindow(0,0,0,400,400,"")

CreateGadgetList(hwnd)
Handle = EditorGadget(0,0,0,400,400)

SendMessage_(Handle,#WM_SETTEXT,0,@"Hallo")

Repeat
  Event = WaitWindowEvent()
Until Event = #WM_CLOSE
Antworten