Page 2 sur 2

Publié : lun. 09/mai/2005 10:15
par gansta93
Il me semble qu'il y a une dll à utiliser.

Publié : jeu. 19/mai/2005 9:53
par Progi1984
kiriasse a écrit :

Code : Tout sélectionner

; === Déclaration des constantes 
; --- Window 
#FllPrin = 0 

; --- Gadget 
#Gadget_Editeur = 0 

; === Déclaration des variables globales, des structures, des listes, tableaux...
Global sEnTeteRTF.s
Global sInfoRTF.s
Global NL.s

; --- sEnTeteRTF
NL = Chr(13) + Chr(10)
sEnTeteRTF = "{\rtf1 \ansi \deftab1134 \deff0 \fs18" + NL 
sEnTeteRTF = sEnTeteRTF + "{\fonttbl" + NL
sEnTeteRTF = sEnTeteRTF + "{\f0 \fswiss Arial;}" + NL
sEnTeteRTF = sEnTeteRTF + "{\f1 \froman Times New Roman;}" + NL
sEnTeteRTF = sEnTeteRTF + "}" + NL
sEnTeteRTF = sEnTeteRTF + "{\colortbl" + NL 
sEnTeteRTF = sEnTeteRTF + ";" + NL 
sEnTeteRTF = sEnTeteRTF + "\red0\green0\blue0;" + NL 
sEnTeteRTF = sEnTeteRTF + "\red255\green0\blue0;" + NL 
sEnTeteRTF = sEnTeteRTF + "}" + NL

; --- sInfoRTF
sInfoRTF = sEnTeteRTF + NL + "{" + NL
sInfoRTF = sInfoRTF + "\plain \cf2 \fs30 \qc \li0 \b TEXTE AU FORMAT RTF" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\par"+ NL 
sInfoRTF = sInfoRTF + "\plain \f0 \fs20 \cf0 \ql \li100 \ri0 • Ceci est une petite démo qui consiste à afficher du texte au format RTF dans un EditorGadget de PureBasic." + NL
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\plain \f0 \fs20 \cf0 \ql \li100 \ri100 \b • Caractères gras" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\plain \f0 \fs20 \cf0 \ql \li100 \ri100 \i • Caractères en italique" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "\par" + NL 
sInfoRTF = sInfoRTF + "}}" + NL

; === Déclaration des procédures 
Procedure Affiche_FllPrin() 
    If OpenWindow(#FllPrin, 0, 0, 620, 450, #PB_Window_SystemMenu|#PB_Window_ScreenCentered,"RTF et EditorGadget")=0
        End
    EndIf 
    If CreateGadgetList(WindowID())=0
        End
    EndIf 
    EditorGadget(#Gadget_Editeur, 20, 20, 580, 410, #PB_Container_Raised) 
    SendMessage_(GadgetID(#Gadget_Editeur), #EM_SETTARGETDEVICE, #Null, 0)
    AddGadgetItem(#Gadget_Editeur, 0, sInfoRTF)
EndProcedure 

; === Début du programme
Affiche_FllPrin()

; === Sortie du programme
Repeat
    Event = WaitWindowEvent() 
Until Event = #PB_EventCloseWindow

End
Ce code permet de mettre du RTF dans un Editorgadget. Mais comment récupérer le code RTF de la ligne 0, par exemple ?

Publié : jeu. 19/mai/2005 12:35
par nico
C'est tout à fait possible, il faut sélectionner la ligne concernée la copier et récupérer le contenu du presse papier dans le format RTF.
Il te faudra utiliser les API.

Lorque l'on copie du texte, selon sa nature, il est copier dans différents formats.

Publié : jeu. 19/mai/2005 19:59
par Progi1984
Merci !

Publié : jeu. 19/mai/2005 20:14
par nico
Je viens de terminer cet exemple:

Code : Tout sélectionner

; Nico
; Une partie de cette procédure est une reprise
; d'un code du Soldat Inconnu
; PB V3.93, le 19/05/05

Procedure.s GetRichText()
If OpenClipboard_(0) 
  NbFormat = CountClipboardFormats_() 
  ;Debug "Nombre de format contenu dans le presse papier : " + Str(NbFormat) 
  format = 0 
  For n = 1 To NbFormat 
    ;Debug Str(n) + "\" 
    format = EnumClipboardFormats_(format) 
    Nom.s = Space(255) 
    GetClipboardFormatName_(format, @Nom.s, 255) 
    ;Debug "     Format = " +  Str(format) + " (" + Nom + ")" 
    Hmem = GetClipboardData_(format) 
    *lpmem=GlobalLock_(Hmem)
    If *lpmem
      If Nom="Rich Text Format"
        Texte.s= PeekS(*lpmem)
      EndIf 
    GlobalUnLock_(Hmem)
    EndIf 
  Next 
  CloseClipboard_() 
Else 
  Debug "Erreur" 
EndIf 
ProcedureReturn Texte 
EndProcedure 


If OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"EditorGadget")
  CreateGadgetList(WindowID(0)) 
  EditorGadget (0,10,40,280,220,#PB_Container_Raised)
  ButtonGadget(1,10,10,200,20,"Récupérer le texte au format RTF")
  For a=0 To 5 
    AddGadgetItem(0,a,"Line "+Str(a)) 
  Next 
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case  #PB_EventGadget
        Select EventGadgetID()
          Case 1
            SendMessage_(GadgetID(0),#EM_SETSEL, 0, -1)
            SendMessage_(GadgetID(0),#WM_COPY,0,0)
            MessageRequester("Texte RTF",GetRichText())
        EndSelect 
    EndSelect 
    Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf 

Publié : jeu. 19/mai/2005 20:27
par Progi1984
Merci à Mr qui code plus vite que son ombre !