Seite 1 von 3

RTF-Texte mit #PB_Editor_RTF kopieren

Verfasst: 15.08.2006 09:45
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]

Verfasst: 15.08.2006 14:17
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

Re: RTF-Texte mit #PB_Editor_RTF kopieren

Verfasst: 15.08.2006 14:31
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.

Verfasst: 15.08.2006 20:49
von Eckhard.S
Hallo Kaeru!

Ach, das war nur der Konjunktiv.. Mist! :(
Gibt es denn keine Lösung für die Aufgabe?

Verfasst: 15.08.2006 21:36
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.

Verfasst: 15.08.2006 21:58
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 

Verfasst: 15.08.2006 22:14
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

Verfasst: 16.08.2006 08:15
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 ...

Verfasst: 16.08.2006 17:20
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.

Verfasst: 16.08.2006 17:37
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