copier du texte formatté

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

copier du texte formatté

Message par Dr. Dri »

je n'ai trouvé nulle part comment copier (dans le presse papier) du texte formatté... manuellement bien entendu...

par exemple je voudrais copier
"texte" en Arial souligné 18

des pistes avec les api peut-être ?

Dri
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Peut-être une piste, l'éditeur de PureBasic le fait...
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

il fait un simple copier api de l'editor gadget en cours
moi je voudrais le faire sans gadget même invisible

Dri
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Dr. Dri a écrit :il fait un simple copier api de l'editor gadget en cours
moi je voudrais le faire sans gadget même invisible

Dri
J'ai regardé vite fait dans la doc MS

je pense qu'avec l'API SetClipboardData, tu pourras faire ce que tu veux (enfin essaye)

Il faut d'abord utilioser l'API OpenClipboard pour ouvrir le presse papier, puis vider le presse papier avec l'API EmptyClipboard, puis SetClipboardData et enfin l'API CloseClipboard
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Et en copiant le pressepapiers, au format RTF ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Progi1984 a écrit :Et en copiant le pressepapiers, au format RTF ?
c'est trop simple pour que j'y pense :lol:
je teste...

sinon je regarderai du côté des pistes de Denis ^^

Dri

[edit]
d'apres un exemple de kiriasse
http://purebasic.hmt-forum.com/viewtopic.php?t=2785

Code : Tout sélectionner

DefType.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 (dr)italique" + NL
sInfoRTF = sInfoRTF + "\par" + NL
sInfoRTF = sInfoRTF + "\par" + NL
sInfoRTF = sInfoRTF + "}}" + NL

;- presse papier
SetClipboardText(sInfoRTF)
MessageRequester("", "copié dans le presse papier")
End
ca ne fonctionne pas :(

je vais donc chercher un peu avec les api...

Dri
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

; Nico
; PB V3.93, le 23/05/05
; Copier du texte au format RTF
; dans le Presse Papier

Procedure.b SetRichTextClipboard()
  uformat=RegisterClipboardFormat_("Rich Text Format")
  If OpenClipboard_(0)
    EmptyClipboard_()
    chaine$="{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fcharset0 Arial}}\uc1\pard\ul\f0\fs36 Texte}" 
    Hmem=GlobalAlloc_(#GPTR,Len(chaine$))
    If Hmem
      *lpmem=GlobalLock_(Hmem)
      If *lpmem
        CopyMemory(chaine$,*lpmem,Len(chaine$))
        If SetClipboardData_(uformat,*lpmem)
          Valeur.b=1
        EndIf 
        GlobalUnLock_(Hmem)
      EndIf 
      GlobalFree_(Hmem)
    EndIf 
    CloseClipboard_() 
  EndIf 
  ProcedureReturn Valeur
EndProcedure 

SetRichTextClipboard() 
J'ai remarqué un truc, si on exécute ce code et on ouvre WordPad et on fait coller, ça marche.
Mais si on fait ensuite un copier d'un autre texte dans Wordpad et on exécute de nouveau le code et on fait un coller, c'est le texte de Wordpad qui s'affiche!

[Edit]
Non, c'est bon je viens de corriger, évidemment si j'oublie de vider le Presse Papier!

[EDIT]
J'ai arrangé le code.
:)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

oké ton code fonctionne nickel, sauf sur les windows 9x
c'est assez embetant...

Dri
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Dès que je pourrais, je ferais des essais sur Win98; je me demande si c'est pas la chaine elle même qui pose problème!
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

je te remercie :D

Dri
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je n'ai pas de bonnes nouvelles!

Toutes les fonctions ont l'air de donner le résultat attendu, mais au final, la chaine n'est pas copié comme on s'y attend.

Je ne sais pas. 8O
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

Essaye voir avec ça au début du code :

OpenLibrary(#PB_Any,"RICHED32.DLL")
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

les appels d'api ne gèrent pas automatiquement les ouvertures de biblio ?
sinon quelle fonction utiliser dans riched32 ??

Dri
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

Je sais pas trop....

C'est juste qu'une fois j'ai utilisé un zone texte RTF (dans la fenêtre A propos de.. de SoundEditor) et que ça a refusé de fonctionner jusqu'à ce que j'ajoute cette ligne au début de mon code.

Ca permettrait au moins de voir si W98 à cette DLL en standard ou si il faut lui ajouter. Je ne peux pas faire de test, j'ai XP et chez moi ça marche nickel.
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Répondre