le format RTF
-
- Messages : 1501
- Inscription : dim. 18/avr./2004 15:04
- Localisation : sud de la france
le format RTF
Bonjour à tous
je recherche un bout de code sur le format RTF , Dobro avez posté un exellent tuto mais il l'as effacer alors je cherche un exemple .
merci
je recherche un bout de code sur le format RTF , Dobro avez posté un exellent tuto mais il l'as effacer alors je cherche un exemple .
merci
Jbernard13
Re: le format RTF
Code : Tout sélectionner
;RichEdit.pbi
#CFM_ALLCAPS = $80
#CFM_ANIMATION = $40000
#CFM_BACKCOLOR = $4000000
#CFM_BOLD = $1
#CFM_CHARSET = $8000000
#CFM_COLOR = $40000000
#CFM_DISABLED = $2000
#CFM_EMBOSS = $800
#CFM_FACE = $20000000
#CFM_HIDDEN = $100
#CFM_IMPRINT = $1000
#CFM_ITALIC = $2
#CFM_KERNING = $100000
#CFM_LCID = $2000000
#CFM_LINK = $20
#CFM_OFFSET = $10000000
#CFM_OUTLINE = $200
#CFM_PROTECTED = $10
#CFM_REVAUTHOR = $8000
#CFM_REVISED = $4000
#CFM_SHADOW = $400
#CFM_SIZE = $80000000
#CFM_SMALLCAPS = $40
#CFM_SPACING = $200000
#CFM_STRIKEOUT = $8
#CFM_STYLE = $80000
#CFM_SUPERSCRIPT = $20000; #CFM_SUBSCRIPT
#CFM_UNDERLINE = $4
#CFM_UNDERLINETYPE = $800000
#CFM_WEIGHT = $400000
#CFE_ALLCAPS = #CFM_ALLCAPS
#CFE_AUTOBACKCOLOR = #CFM_BACKCOLOR
#CFE_AUTOCOLOR = $40000000
#CFE_BOLD = #CFM_BOLD
#CFE_DISABLED = #CFM_DISABLED
#CFE_EMBOSS = #CFM_EMBOSS
#CFE_HIDDEN = #CFM_HIDDEN
#CFE_IMPRINT = #CFM_IMPRINT
#CFE_ITALIC = #CFM_ITALIC
#CFE_LINK = #CFM_LINK
#CFE_OUTLINE = #CFM_OUTLINE
#CFE_PROTECTED = #CFM_PROTECTED
#CFE_REVISED = #CFM_REVISED
#CFE_SHADOW = #CFM_SHADOW
#CFE_SMALLCAPS = #CFM_SMALLCAPS
#CFE_STRIKEOUT = $8
#CFE_SUBSCRIPT = $10000
#CFE_SUPERSCRIPT = $20000
#CFE_UNDERLINE = $4
#CFM_SUBSCRIPT = #CFE_SUBSCRIPT | #CFE_SUPERSCRIPT
#ENM_LINK = $04000000
#PFA_JUSTIFY = 4 ;Nouvelle option d'alignement du paragraphe 2.0
#ST_DEFAULT = 0
#ST_KEEPUNDO = 1
#ST_SELECTION = 2
Structure RichEditOle
*pIntf.IRicheditOle
Refcount.l
hwnd.i
EndStructure
Interface RichEdit
Free(); libère le gadget et le conteneur d'objets
GetID.i(); renvoie l'ID PB
GethWnd.i(); renvoie le handle OS
GetX.i(); Abscisse
GetY.i(); Ordonnée
GetWidth.i(); Largeur Editeur
GetHeight.i(); Hauteur Editeur
GetReadOnly.i(); déterminer si ReadOnly oui ou non
GetCursorX.i(); Rangée du curseur
GetCursorY.i(); Colonne du curseur
GetFont.s()
GetFontSize.i()
GetFontStyle.l()
GetZoom.i(); Pourcentage Zoom
Resize(x.l, y.l, w.l, h.l)
DisableRedraw.i(bVal.i = #True);Empêche la redéfinition de l'éditeur
Clear(); Vider Editeur
GetText.s()
GetRTFText.s(); Est le flux RTF en tant que chaîne
GetSelText.s()
FindText.i(Texte.s,Drapeaux.l = #FR_DOWN);Drapeaux: #FR_DOWN, #FR_MATCHCASE, #FR_WHOLEWORD
CountWords.i()
Cut()
Copy()
Paste()
BeginUndo(); démarre l'annulation d'enregistrement
StopUndo(); termine l'annulation d'enregistrement
CanUndo.i()
Undo()
Redo()
LoadRTF(NomFichier.s, insert.l = #False)
LoadText(NomFichier.s, insert.l = #False)
SaveRTF(NomFichier.s)
SaveText(NomFichier.s)
Print(NomDoc.s = "pbprint", Dialogue.i = #False)
SetFont.i(Nom.s)
SetFontSize.i(Taille.l)
SetFontStyle.i(Style.l = 0)
SetZoom.i(zoom.i); Définir Zoom (en pour cent)
SetAlignment(Drapeau.l = #PB_Default); #PB_Text_Center, #PB_Text_Right
SetLeftMargin(pixel.w)
SetRightMargin(pixel.w)
SetCtrlBackColor.i(Couleur.l)
SetTextBackColor.i(Couleur.l)
GetTextBackColor.i()
ClearTextBackColor.i()
SetTextColor.i(CouleurTexte.l, CouleurFond.l = #PB_Default)
SetSelection.i(LigneDebut.l, CarDebut.l, LigneFin.l = #PB_Default, CarFin.l = #PB_Default)
IsTextSelected.i(); #True, lorsqu'une sélection est disponible
SetText.i(Texte.s); insère le texte à la position du curseur, ou remplace la sélection-
SetReadOnly.i(Drapeau.l); activer ou désactiver ReadOnly
SetCursorPos.i(x.l, y.l); curseur de texte
SetWordWrap.i(Drapeau.l); sur une nouvelle ligne (standard) ou à partir de
SelectAll.i(); Sélectionne tout le texte
Unselect()
Indent.i(mm.i = 10); Indentation en mm (à droite)
Outdent.i(mm.i = 10); Désengagement en mm (à gauche)
ScrollToLine(Ligne.i)
GetParagraphAlign.l()
GetLineSpacing.f()
SetLineSpacing.i(vInter.f)
IsModified.i()
SetModified.i()
IsLink.i() ;; Parce que GetFontStyle prend uniquement en charge la constante PB, mais aucune liste de liens disponibles
GetWordUnderMouse.s(x.i, y.i) ; x,y = Position de la souris par rapport au gadget!!!
GetCurrentWord.s()
Replace.i(A_Remplacer.s, Texte.s,Drapeaux.i = 0)
ReplaceAll.i(A_Remplacer.s, Texte.s,Drapeaux.i = 0)
SetBulleted.i()
GetLineCount.i()
IsSuperscript()
SetSuperscript()
IsSubscript()
SetSubscript()
ChangeFontSize(iDelta.i=1)
LimitText(iLimiter_A.i)
HideSelection(bVal.i=#True)
SetUnderlineWave()
ClearUnderlineWave()
Redraw()
GetTextLength.i()
GetTextColor.i()
IsSmallCaps()
SetSmallCaps(bVal.i = #True)
IsAllCaps()
SetAllCaps(bVal.i = #True)
CanPaste()
GetCursorPosition()
GetWordAtPosition.s(Pos.i)
GetFirstVisibleLineNumber.i()
GetFirstVisibleLinePos.i()
GetFirstVisibleLineText.s()
GetLastVisibleLineNumber.i()
GetLastVisibleLinePos.i()
GetLastVisibleLineText.s()
GetCharPosOfPreviousWord.i(Pos.i)
GetCharPosOfNextWord.i( Pos.i )
EmptyUndoBuffer()
GetFirstCharPosOnLine(iLigne.i)
GetLineLength(iLigne.i)
IsAlignLeft()
IsAlignCenter()
IsAlignRight()
IsAlignJustify()
GetWordUnderCursorStart()
GetWordUnderCursorEnd()
GetScrollPosX()
GetScrollPosY()
SetScrollPos(x.i, y.i)
SetLink(bVal = #True)
SetUndoLimit(Limite.i)
AppendText(Texte.s) ; ajoute du texte à la fin
SetHidden(bVal.i = #True)
IsHidden.i()
SetTextEx.i(sTexte.s) ;Travaux pour Unicode
SetInterface.i()
SetImage.i(hImage)
EndInterface
Structure RichEditClassTemplate
*vTable
ID.i
hWnd.i
TextInterface.ITextDocument
RTFStreamTextResult.s; Si le flux 'RTF' doit être lu dans une chaîne
TwipsPeSpaceUnit.f
WordUnderCursorRange.CHARRANGE
RichComObject.RichEditOle
EndStructure
ProcedureDLL.i New_RichEdit(x.l, y.l, w.l, h.l)
Protected *obj.RichEditClassTemplate
Protected RichEditOleObject.IRichEditOle
*obj = AllocateMemory(SizeOf(RichEditClassTemplate))
If *obj
With *obj
\vTable = ?vTable_RichEditClassTemplate
\ID = EditorGadget(#PB_Any, x, y, w, h)
\hWnd = GadgetID(\ID)
SetGadgetColor(\ID, #PB_Gadget_BackColor, #White)
SetGadgetFont(\ID, FontID(LoadFont(#PB_Any, "Arial", 10)))
SendMessage_(\hWnd, #EM_SETEVENTMASK, 0, #ENM_KEYEVENTS | #ENM_MOUSEEVENTS | #ENM_SELCHANGE | #ENM_CHANGE | #ENM_LINK)
SendMessage_(\hWnd, #EM_SETTARGETDEVICE, 0, 0)
SendMessage_(\hWnd, #EM_GETOLEINTERFACE, 0, @RichEditOleObject)
SendMessage_(\hWnd, #EM_AUTOURLDETECT , #True, 0)
If RichEditOleObject
RichEditOleObject\QueryInterface(?IID_ITextDocument, @\TextInterface)
RichEditOleObject\Release()
EndIf
SendMessage_(\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
SetActiveGadget(\ID)
EndWith
EndIf
ProcedureReturn *obj
EndProcedure
ProcedureDLL RichEdit_Free(*Ceci.RichEditClassTemplate)
FreeGadget(*Ceci\ID)
FreeMemory(*Ceci)
EndProcedure
ProcedureDLL.i RichEdit_GetID(*Ceci.RichEditClassTemplate)
ProcedureReturn *Ceci\ID
EndProcedure
ProcedureDLL.i RichEdit_GethWnd(*Ceci.RichEditClassTemplate)
ProcedureReturn *Ceci\hWnd
EndProcedure
ProcedureDLL.i RichEdit_GetX(*Ceci.RichEditClassTemplate)
ProcedureReturn GadgetX(*Ceci\ID)
EndProcedure
ProcedureDLL.i RichEdit_GetY(*Ceci.RichEditClassTemplate)
ProcedureReturn GadgetY(*Ceci\ID)
EndProcedure
ProcedureDLL.i RichEdit_GetWidth(*Ceci.RichEditClassTemplate)
ProcedureReturn GadgetWidth(*Ceci\ID)
EndProcedure
ProcedureDLL.i RichEdit_GetHeight(*Ceci.RichEditClassTemplate)
ProcedureReturn GadgetHeight(*Ceci\ID)
EndProcedure
ProcedureDLL.i RichEdit_GetReadOnly(*Ceci.RichEditClassTemplate)
Protected Style.l = GetWindowLongPtr_(*Ceci\hWnd, #GWL_STYLE)
If Style & #ES_READONLY : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_GetCursorX(*Ceci.RichEditClassTemplate)
Protected.CHARRANGE Domaine
SendMessage_(*Ceci\hWnd, #EM_EXGETSEL, 0, @Domaine)
ProcedureReturn Domaine\cpMax - (SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, SendMessage_(*Ceci\hWnd, #EM_EXLINEFROMCHAR, 0, Domaine\cpMin), 0)) + 1
EndProcedure
ProcedureDLL.i RichEdit_GetCursorY(*Ceci.RichEditClassTemplate)
Protected.CHARRANGE Domaine
SendMessage_(*Ceci\hWnd, #EM_EXGETSEL, 0, @Domaine)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_EXLINEFROMCHAR, 0, Domaine\cpMin) + 1
EndProcedure
ProcedureDLL.s RichEdit_GetFont(*Ceci.RichEditClassTemplate)
Protected.CHARFORMAT2 Format
Protected Police.s
Format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_SELECTION, @Format)
Police = PeekS(@Format\szFaceName[0])
If Police = ""
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_DEFAULT, @Format)
Police = PeekS(@Format\szFaceName[0])
EndIf
ProcedureReturn Police
EndProcedure
ProcedureDLL.i RichEdit_GetFontSize(*Ceci.RichEditClassTemplate)
Protected.CHARFORMAT2 Format
Format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_SELECTION, @Format)
ProcedureReturn Format\yHeight / 20
EndProcedure
ProcedureDLL.l RichEdit_GetFontStyle(*Ceci.RichEditClassTemplate)
Protected.CHARFORMAT2 Format
Protected Resultat.l = 0
With Format
\cbSize = SizeOf(CHARFORMAT2)
\dwMask = #CFM_BOLD | #CFM_ITALIC | #CFM_STRIKEOUT | #CFM_UNDERLINE
EndWith
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_SELECTION, @Format)
If Format\dwEffects & #CFM_BOLD
Resultat | #PB_Font_Bold
EndIf
If Format\dwEffects & #CFM_ITALIC
Resultat | #PB_Font_Italic
EndIf
If Format\dwEffects & #CFM_STRIKEOUT
Resultat | #PB_Font_StrikeOut
EndIf
If Format\dwEffects & #CFM_UNDERLINE
Resultat | #PB_Font_Underline
EndIf
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_GetZoom(*Ceci.RichEditClassTemplate)
Protected wParam.l, hParam.l, Resultat.l
Resultat = SendMessage_(*Ceci\hWnd, #EM_GETZOOM, @wParam, @hParam)
ProcedureReturn Int((wParam * 100) / hParam )
EndProcedure
ProcedureDLL RichEdit_Resize(*Ceci.RichEditClassTemplate, x.l, y.l, w.l, h.l)
ResizeGadget(*Ceci\ID, x, y, w, h)
EndProcedure
ProcedureDLL.i RichEdit_DisableRedraw(*Ceci.RichEditClassTemplate, bVal.i = #True)
; Description: Lors de l'exécution de plusieurs actions, ou d'actions sur le texte qui
; n'est pas visible dans la fenêtre, ou en cas de changement
; à plusieurs reprises de sélections - un Editeur peut scintiller
; Désactiver le gadget avec WM_SETREDRAW avant de faire les
; actions, puis en inversant permettant après aux actions qui ont
; été prises peut améliorer considérablement les performances ..
;
; Paramètre(s) ......: bVal - #True (par défaut) pour désactiver Redessiner
; - #False pour activer / réactiver Redessiner
ProcedureReturn SendMessage_(*Ceci\hWnd, #WM_SETREDRAW, 1 ! bVal, 0)
EndProcedure
ProcedureDLL RichEdit_Clear(*Ceci.RichEditClassTemplate)
ClearGadgetItems(*Ceci\ID)
SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndProcedure
ProcedureDLL.s RichEdit_GetText(*Ceci.RichEditClassTemplate)
ProcedureReturn GetGadgetText(*Ceci\ID)
EndProcedure
ProcedureDLL.i RichEdit_GetRTFStreamCallback(dwCookie, *pbBuff, cb, *pcb.Long)
Protected *Ceci.RichEditClassTemplate = dwCookie
*Ceci\RTFStreamTextResult + PeekS(*pbBuff, cb)
*pcb\l = cb
ProcedureReturn 0
EndProcedure
ProcedureDLL.s RichEdit_GetRTFText(*Ceci.RichEditClassTemplate)
Protected Flux.EDITSTREAM
Flux\dwCookie = *Ceci
Flux\pfnCallback = @RichEdit_GetRTFStreamCallback()
SendMessage_(*Ceci\hWnd, #EM_STREAMOUT, #SF_RTF | #SFF_PLAINRTF, @Flux)
ProcedureReturn *Ceci\RTFStreamTextResult
EndProcedure
ProcedureDLL.s RichEdit_GetSelText(*Ceci.RichEditClassTemplate)
Protected PosDebut.l, PosFin.l, Taille.l, *mem, Resultat.s
If SendMessage_(*Ceci\hWnd, #EM_GETSEL, @PosDebut, @PosFin)
Taille = PosFin - PosDebut + 1
Taille * SizeOf(Character)
*mem = AllocateMemory(Taille)
If *mem
SendMessage_(*Ceci\hWnd, #EM_GETSELTEXT, 0, *mem)
Resultat = PeekS(*mem)
FreeMemory(*mem)
EndIf
EndIf
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_FindText(*Ceci.RichEditClassTemplate, Texte.s,Drapeaux.l = #FR_DOWN)
Protected.FINDTEXTEX ChaineAChercher
Protected.l PosActuelleCurseur
If Texte <> ""
SendMessage_(*Ceci\hWnd, #EM_GETSEL, @PosActuelleCurseur, 0)
With ChaineAChercher
\chrg\cpMin = PosActuelleCurseur
\chrg\cpMax = GetWindowTextLength_(*Ceci\hWnd)
\lpstrText = @Texte
EndWith
If SendMessage_(*Ceci\hWnd, #EM_FINDTEXTEX,Drapeaux, @ChaineAChercher) <> -1
SendMessage_(*Ceci\hWnd, #EM_SETSEL, ChaineAChercher\chrgText\cpMin, ChaineAChercher\chrgText\cpMax)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_CountWords(*Ceci.RichEditClassTemplate)
Protected Texte.s = GetGadgetText(*Ceci\ID)
Protected Compte.i = 0
Protected DernMotCar.i = 0
Protected *p.CHARACTER
If Len(Trim(Texte)) = 0 : ProcedureReturn 0 : EndIf
*p = @Texte
While *p\c <> 0
If *p\c = ' ' Or *p\c = 9 Or *p\c = 10 Or *p\c = 13
If DernMotCar
If DernMotCar > 1
Compte + 1
EndIf
DernMotCar = 0
EndIf
Else
DernMotCar + 1
EndIf
*p + SizeOf(CHARACTER)
Wend
If Not DernMotCar : Compte - 1 : EndIf
ProcedureReturn Compte + 1
EndProcedure
ProcedureDLL RichEdit_Cut(*Ceci.RichEditClassTemplate)
SendMessage_(*Ceci\hWnd, #WM_CUT, 0, 0)
EndProcedure
ProcedureDLL RichEdit_Copy(*Ceci.RichEditClassTemplate)
SendMessage_(*Ceci\hWnd, #WM_COPY, 0, 0)
EndProcedure
ProcedureDLL RichEdit_Paste(*Ceci.RichEditClassTemplate)
SendMessage_(*Ceci\hWnd, #WM_PASTE, 0, 0)
EndProcedure
ProcedureDLL RichEdit_BeginUndo(*Ceci.RichEditClassTemplate)
If *Ceci\TextInterface
*Ceci\TextInterface\Undo(-9999994, 0)
EndIf
EndProcedure
ProcedureDLL RichEdit_StopUndo(*Ceci.RichEditClassTemplate)
If *Ceci\TextInterface
*Ceci\TextInterface\Undo(-9999995, 0)
EndIf
EndProcedure
ProcedureDLL.i RichEdit_CanUndo(*Ceci.RichEditClassTemplate)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_CANUNDO, 0, 0)
EndProcedure
ProcedureDLL RichEdit_Undo(*Ceci.RichEditClassTemplate)
SendMessage_(*Ceci\hWnd, #EM_UNDO, 0, 0)
EndProcedure
ProcedureDLL RichEdit_Redo(*Ceci.RichEditClassTemplate)
SendMessage_(*Ceci\hWnd, #EM_REDO, 0, 0)
EndProcedure
ProcedureDLL RichEdit_StreamInCallback(dwCookie, *pbBuff, cb, *pcb.Long)
Protected Longueur.q
Longueur = Lof(dwCookie) - Loc(dwCookie)
If Longueur > cb
ReadData(dwCookie, *pbBuff, cb)
*pcb\l = cb
Else
ReadData(dwCookie, *pbBuff, Longueur)
*pcb\l = Longueur
EndIf
ProcedureReturn 0
EndProcedure
ProcedureDLL RichEdit_StreamOutCallback(dwCookie, *pbBuff, cb, *pcb.Long)
WriteData(dwCookie, *pbBuff, cb)
*pcb\l = cb
ProcedureReturn 0
EndProcedure
ProcedureDLL RichEdit_LoadRTF(*Ceci.RichEditClassTemplate, NomFichier.s, insert.l = #False)
Protected.EDITSTREAM Flux
Protected Drapeau.l = #SF_RTF
If insert : Drapeau | #SFF_SELECTION : EndIf
With Flux
\dwCookie = ReadFile(#PB_Any, NomFichier)
If \dwCookie
\pfnCallback = @RichEdit_StreamInCallback()
SendMessage_(*Ceci\hWnd, #EM_STREAMIN, Drapeau, @Flux)
CloseFile(\dwCookie)
SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndIf
EndWith
EndProcedure
ProcedureDLL RichEdit_LoadText(*Ceci.RichEditClassTemplate, NomFichier.s, insert.l = #False)
Protected.EDITSTREAM Flux
Protected Drapeau.l = #SF_TEXT
If insert : Drapeau | #SFF_SELECTION : EndIf
CompilerIf #PB_Compiler_Unicode : Drapeau | #SF_UNICODE : CompilerEndIf
With Flux
\dwCookie = ReadFile(#PB_Any, NomFichier)
If \dwCookie
\pfnCallback = @RichEdit_StreamInCallback()
SendMessage_(*Ceci\hWnd, #EM_STREAMIN, Drapeau, @Flux)
CloseFile(\dwCookie)
SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndIf
EndWith
EndProcedure
ProcedureDLL RichEdit_SaveRTF(*Ceci.RichEditClassTemplate, NomFichier.s)
Protected.EDITSTREAM Flux
With Flux
\dwCookie = CreateFile(#PB_Any, NomFichier+".Rtf")
If \dwCookie
\pfnCallback = @RichEdit_StreamOutCallback()
SendMessage_(*Ceci\hWnd, #EM_STREAMOUT, #SF_RTF, @Flux)
CloseFile(\dwCookie)
SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndIf
EndWith
EndProcedure
ProcedureDLL RichEdit_SaveText(*Ceci.RichEditClassTemplate, NomFichier.s)
Protected.EDITSTREAM Flux
Protected Drapeau.l = #SF_TEXT
CompilerIf #PB_Compiler_Unicode : Drapeau | #SF_UNICODE : CompilerEndIf
With Flux
\dwCookie = CreateFile(#PB_Any, NomFichier)
If \dwCookie
\pfnCallback = @RichEdit_StreamOutCallback()
SendMessage_(*Ceci\hWnd, #EM_STREAMOUT, Drapeau, @Flux)
CloseFile(\dwCookie)
SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndIf
EndWith
EndProcedure
ProcedureDLL RichEdit_Print(*Ceci.RichEditClassTemplate, NomDoc.s = "pbprint", Dialogue.i = #False)
Protected.PRINTDLG lppd
Protected.RECT cRect
Protected.FORMATRANGE FormatRange
Protected.Docinfo Docinfo
Protected DernierCar.l, LongueurMax.l, AncienModeMap.l, OffsetX.l, OffsetY.l, HorzRes.l, VertRes.l
Protected DC.i, i.i = 1
If Dialogue
lppd\lStructsize = SizeOf(PRINTDLG)
lppd\Flags = #PD_ALLPAGES | #PD_HIDEPRINTTOFILE | #PD_NOSELECTION | #PD_RETURNDC
If PrintDlg_(@lppd)
DC = lppd\hDC
EndIf
Else
DC = DefaultPrinter()
EndIf
If DC
Docinfo\cbSize = SizeOf(Docinfo)
Docinfo\lpszDocName = @NomDoc
StartDoc_(DC, Docinfo)
LongueurMax = Len(GetGadgetText(*Ceci\ID)) - SendMessage_(*Ceci\hWnd, #EM_GETLINECOUNT, 0, 0)
AncienModeMap = GetMapMode_(DC)
SetMapMode_(DC, #MM_TWIPS)
OffsetX = GetDeviceCaps_(DC, #PHYSICALOFFSETX)
OffsetY = - GetDeviceCaps_(DC, #PHYSICALOFFSETY)
HorzRes = GetDeviceCaps_(DC, #HORZRES)
VertRes = - GetDeviceCaps_(DC, #VERTRES)
SetRect_(cRect, OffsetX, OffsetY, HorzRes, VertRes)
DPtoLP_(DC, cRect, 2)
SetMapMode_(DC, AncienModeMap)
FormatRange\hDC = DC
FormatRange\hdcTarget = DC
FormatRange\rc\left = cRect\left
FormatRange\rc\top = cRect\top
FormatRange\rc\right = cRect\right
FormatRange\rc\bottom = cRect\bottom
FormatRange\rcPage\left = cRect\left
FormatRange\rcPage\top = cRect\top
FormatRange\rcPage\right = cRect\right
FormatRange\rcPage\bottom = cRect\bottom
Repeat
StartPage_(DC)
FormatRange\chrg\cpMax = - 1
DernierCar = SendMessage_(*Ceci\hWnd, #EM_FORMATRANGE, #True, @FormatRange)
FormatRange\chrg\cpMin = DernierCar
SendMessage_(*Ceci\hWnd, #EM_DISPLAYBAND, 0, cRect)
i + 1
EndPage_(DC)
Until DernierCar >= LongueurMax Or DernierCar = -1
EndDoc_(DC)
SendMessage_(*Ceci\hWnd, #EM_FORMATRANGE, 0, 0)
EndIf
EndProcedure
ProcedureDLL.i RichEdit_SetFont(*Ceci.RichEditClassTemplate, Nom.s)
Protected.CHARFORMAT Format
With Format
\cbSize = SizeOf(CHARFORMAT)
\dwMask = #CFM_FACE
PokeS(@\szFaceName[0], Nom)
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @Format)
EndProcedure
ProcedureDLL.i RichEdit_SetFontSize(*Ceci.RichEditClassTemplate, Taille.l)
Protected.CHARFORMAT Format
With Format
\cbSize = SizeOf(CHARFORMAT)
\dwMask = #CFM_SIZE
\yHeight = Taille * 20
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @Format)
EndProcedure
ProcedureDLL RichEdit_SetFontStyle(*Ceci.RichEditClassTemplate, Style.l = 0)
Protected Format.CHARFORMAT
Protected Drapeaux.l = 0
If Style & #PB_Font_Bold :Drapeaux | #CFM_BOLD : EndIf
If Style & #PB_Font_Italic :Drapeaux | #CFM_ITALIC : EndIf
If Style & #PB_Font_StrikeOut :Drapeaux | #CFM_STRIKEOUT : EndIf
If Style & #PB_Font_Underline :Drapeaux | #CFM_UNDERLINE : EndIf
With Format
\cbSize = SizeOf(CHARFORMAT)
\dwMask = #CFM_ITALIC | #CFM_BOLD | #CFM_STRIKEOUT | #CFM_UNDERLINE
\dwEffects =Drapeaux
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @Format)
EndProcedure
ProcedureDLL.i RichEdit_SetZoom(*Ceci.RichEditClassTemplate, zoom.i)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETZOOM, zoom, 100)
EndProcedure
ProcedureDLL.i RichEdit_SetAlignment(*Ceci.RichEditClassTemplate, Drapeau.l = #PB_Default)
Protected.PARAFORMAT Format
Select Drapeau
Case #PB_Text_Center : Drapeau = #PFA_CENTER
Case #PB_Text_Right : Drapeau = #PFA_RIGHT
Default : Drapeau = #PFA_LEFT
EndSelect
With Format
\cbSize = SizeOf(PARAFORMAT)
\dwMask = #PFM_ALIGNMENT
\wAlignment = Drapeau
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETPARAFORMAT, 0, @Format)
EndProcedure
ProcedureDLL RichEdit_SetLeftMargin(*Ceci.RichEditClassTemplate, pixel.w)
SendMessage_(*Ceci\hWnd, #EM_SETMARGINS, #EC_LEFTMARGIN, $FFFF + pixel)
EndProcedure
ProcedureDLL RichEdit_SetRightMargin(*Ceci.RichEditClassTemplate, pixel.w)
SendMessage_(*Ceci\hWnd, #EM_SETMARGINS, #EC_RIGHTMARGIN, $FFFF * pixel)
EndProcedure
ProcedureDLL.i RichEdit_SetCtrlBackColor(*Ceci.RichEditClassTemplate, Couleur.l)
ProcedureReturn SetGadgetColor(*Ceci\ID, #PB_Gadget_BackColor, Couleur)
EndProcedure
ProcedureDLL.i RichEdit_SetTextBackColor(*Ceci.RichEditClassTemplate, Couleur.l)
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_BACKCOLOR
format\crBackColor = Couleur
SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_SetTextColor(*Ceci.RichEditClassTemplate, CouleurTexte.l, CouleurFond.l = #PB_Default)
Protected.CHARFORMAT2 Format
With Format
\cbSize = SizeOf(CHARFORMAT2)
\dwMask = #CFM_COLOR | #CFM_BACKCOLOR
\crTextColor = CouleurTexte
If CouleurFond = #PB_Default
\crBackColor = GetGadgetColor(*Ceci\ID, #PB_Gadget_BackColor)
Else
\crBackColor = CouleurFond
EndIf
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @Format)
EndProcedure
ProcedureDLL.i RichEdit_GetTextBackColor(*Ceci.RichEditClassTemplate)
Protected CouleurRetournee.i = #White
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_SELECTION, @format)
; Is AutoColor?
If (format\dwEffects & #CFE_AUTOBACKCOLOR) = #CFE_AUTOBACKCOLOR
CouleurRetournee = GetSysColor_(#COLOR_WINDOW)
Else
CouleurRetournee = format\crBackColor
EndIf
ProcedureReturn CouleurRetournee
EndProcedure
ProcedureDLL.i RichEdit_ClearTextBackColor(*Ceci.RichEditClassTemplate)
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_BACKCOLOR
format\dwEffects = #CFE_AUTOBACKCOLOR
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_SetSelection(*Ceci.RichEditClassTemplate, LigneDebut.l, CarDebut.l, LigneFin.l = #PB_Default, CarFin.l = #PB_Default)
Protected.CHARRANGE sel
Protected.i hWnd = *Ceci\hWnd
With sel
\cpMin = SendMessage_(hWnd, #EM_LINEINDEX, LigneDebut, 0) + CarDebut - 1
If LigneFin = #PB_Default
LigneFin = SendMessage_(hWnd, #EM_GETLINECOUNT, 0, 0) - 1
EndIf
\cpMax = SendMessage_(hWnd, #EM_LINEINDEX, LigneFin, 0)
If CarFin = #PB_Default
\cpMax + SendMessage_(hWnd, #EM_LINELENGTH, \cpMax, 0)
Else
\cpMax + CarFin - 1
EndIf
EndWith
ProcedureReturn SendMessage_(hWnd, #EM_EXSETSEL, 0, @sel)
EndProcedure
ProcedureDLL.i RichEdit_IsTextSelected(*Ceci.RichEditClassTemplate)
Protected cr.CHARRANGE
SendMessage_(*Ceci\hWnd, #EM_EXGETSEL, 0, @cr)
If cr\cpMin <> cr\cpMax
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetText(*Ceci.RichEditClassTemplate, Texte.s)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_REPLACESEL, 0, Texte)
EndProcedure
ProcedureDLL.i RichEdit_SetReadOnly(*Ceci.RichEditClassTemplate, Drapeau.l)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETREADONLY, Drapeau, 0)
EndProcedure
ProcedureDLL.i RichEdit_SetCursorPos(*Ceci.RichEditClassTemplate, x.l, y.l)
Protected.CHARRANGE Domaine
Protected.l char, lenght
char = SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, y - 1, 0)
lenght = SendMessage_(*Ceci\hWnd, #EM_LINELENGTH, char, 0)
If lenght >= x - 1
char + x - 1
EndIf
Domaine\cpMin = char
Domaine\cpMax = char
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_EXSETSEL, 0, @Domaine)
EndProcedure
ProcedureDLL.i RichEdit_SetWordWrap(*Ceci.RichEditClassTemplate, Drapeau.l)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETTARGETDEVICE, 0, Drapeau | 1)
EndProcedure
ProcedureDLL.i RichEdit_SelectAll(*Ceci.RichEditClassTemplate)
;Sélectionner tout le contenu du gadget éditeur.
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETSEL, 0, -1)
EndProcedure
ProcedureDLL.i RichEdit_Unselect(*Ceci.RichEditClassTemplate)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETSEL, -1, 0)
EndProcedure
ProcedureDLL.i RichEdit_Indent(*Ceci.RichEditClassTemplate, mm.i = 10)
Protected format.PARAFORMAT2
format\cbSize = SizeOf(PARAFORMAT2)
;A lire en premier
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT, 0, @format)
format\dxStartIndent = Int(mm * (1440/25.4)); Millimètres juste
format\dwMask = #PFM_OFFSETINDENT
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETPARAFORMAT, 0, @format)
EndProcedure
ProcedureDLL.i RichEdit_Outdent(*Ceci.RichEditClassTemplate, mm.i = 10)
Protected format.PARAFORMAT2
format\cbSize = SizeOf(PARAFORMAT2)
;A lire en premier
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT, 0, @format)
format\dxStartIndent = 0 - Int(mm * (1440/25.4)) ; Millimètres juste
format\dwMask = #PFM_OFFSETINDENT
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETPARAFORMAT, 0, @format)
EndProcedure
ProcedureDLL.i RichEdit_ScrollToLine(*Ceci.RichEditClassTemplate, Ligne.i)
ProcedureReturn SendMessage_(*Ceci\hWnd,#EM_LINESCROLL,#Null,Ligne)
EndProcedure
ProcedureDLL.l RichEdit_GetParagraphAlign(*Ceci.RichEditClassTemplate)
; Retour #PFA_LEFT - justifié à gauche
; #PFA_CENTER - Centré
; #PFA_Right - justifié à droite
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected bRet.i = #False
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT ,#Null, @paraf)
ProcedureReturn paraf\wAlignment
EndProcedure
ProcedureDLL.i RichEdit_SetLineSpacing(*Ceci.RichEditClassTemplate, vInter.f)
; Description .......: Changer Interligne
;
; Paramètre(s) ......: vInter.f 1.0 - Interligne Normal
; 1.5 - Interligne 1.5
; 2.0 - Interligne 2.0
; d'autres modifications des valeurs de l'interligne sur mesure
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
If vInter >= 1.0
If vInter = 1.0
paraf\bLineSpacingRule = 0
ElseIf vInter = 1.5
paraf\bLineSpacingRule = 1
ElseIf vInter = 2.0
paraf\bLineSpacingRule = 2
Else
paraf\bLineSpacingRule = 5 ; espacement en lignes
paraf\dyLineSpacing = Int(vInter * 20)
EndIf
paraf\dwMask = #PFM_LINESPACING
SendMessage_(*Ceci\hWnd, #EM_SETPARAFORMAT,0, @paraf)
Else
Debug("Editor_SetParaSpacing() - Interligne trop faible (< 1.0) !")
EndIf
EndProcedure
ProcedureDLL.f RichEdit_GetLineSpacing(*Ceci.RichEditClassTemplate)
; Description .......: Obtenir une sélection d'interligne
; Valeur(s) retournée(s) ...: 1.0 - Interligne Normal
; 1.5 - Interligne 1.5
; 2.0 - Interligne 2.0
; autres valeurs sont l'interligne personnalisé
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected ValeurRetournee.f
paraf\dwMask = #PFM_LINESPACING
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT,0, @paraf)
Select paraf\bLineSpacingRule
Case 0
ValeurRetournee = 1.0
Case 1
ValeurRetournee = 1.5
Case 2
ValeurRetournee = 2.0
Default
ValeurRetournee =( paraf\dyLineSpacing / 20)
EndSelect
ProcedureReturn ValeurRetournee
EndProcedure
ProcedureDLL.i RichEdit_IsModified(*Ceci.RichEditClassTemplate)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_GETMODIFY, 0, 0)
EndProcedure
ProcedureDLL.i RichEdit_IsLink(*Ceci.RichEditClassTemplate)
Protected cf2.CHARFORMAT2\cbsize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT ,#SCF_SELECTION, @cf2)
If cf2\dwEffects &#CFM_LINK : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.s RichEdit_GetWordUnderMouse( *Ceci.RichEditClassTemplate, x.i, y.i )
; x,y = Position de la souris par rapport au gadget !!!
Protected.TEXTRANGE TR
Protected.s Resultat
Protected.POINT ps
Protected.i Pos, Debut, Longueur, Taille
; Peut-être que nous avons besoin de quelques astuces d'ajustements.
ps\x = X ;* GetTwipsPerPixelX()
ps\y = Y ;* GetTwipsPerPixelY()
;obtenir le caractère à la position des coordonnées
Pos = SendMessage_(*Ceci\hWnd, #EM_CHARFROMPOS, 0,@ps)
;si rien, retourner chaîne vide
If pos <= 0 : ProcedureReturn "" : EndIf
Debut = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_LEFTBREAK, Pos)
Longueur = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_RIGHTBREAK,Pos) - Debut
If Longueur<=0 : ProcedureReturn "" : EndIf
TR\chrg\cpMin = Debut
TR\chrg\cpMax = Debut+Longueur
*Ceci\WordUnderCursorRange\cpMin = TR\chrg\cpMin
*Ceci\WordUnderCursorRange\cpMax = TR\chrg\cpMax
Taille = Longueur * SizeOf(Character)
TR\lpstrText = AllocateMemory(128+Taille)
SendMessage_(*Ceci\hWnd, #EM_GETTEXTRANGE, 0, @TR)
Resultat = PeekS(TR\lpstrText,Longueur)
FreeMemory(TR\lpstrText)
ProcedureReturn Trim(ReplaceString(ReplaceString(ReplaceString(Resultat,Chr(9)," "),Chr(13)," "),Chr(10)," "))
EndProcedure
ProcedureDLL.s RichEdit_GetCurrentWord(*Ceci.RichEditClassTemplate)
Protected TR.TEXTRANGE
Protected Resultat.s
Protected SelDebut.l
Protected SelFin.l
SendMessage_(*Ceci\hWnd, #EM_GETSEL, @SelDebut, @SelFin)
Protected Debut.i = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_LEFTBREAK, SelDebut)
Protected Longueur.i = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_RIGHTBREAK,SelDebut) - Debut
Protected Taille.i
If Longueur=0 : ProcedureReturn "" : EndIf
TR\chrg\cpMin = Debut
TR\chrg\cpMax = Debut+Longueur
Taille = Longueur* SizeOf(Character)
TR\lpstrText = AllocateMemory(128+Taille)
SendMessage_(*Ceci\hWnd, #EM_GETTEXTRANGE, 0, @TR)
Resultat = PeekS(TR\lpstrText,Longueur)
FreeMemory(TR\lpstrText)
ProcedureReturn Trim(ReplaceString(ReplaceString(ReplaceString(Resultat,Chr(9)," "),Chr(13)," "),Chr(10)," "))
EndProcedure
ProcedureDLL.i RichEdit_Replace(*Ceci.RichEditClassTemplate, A_Remplacer.s, Texte.s,Drapeaux.i = 0)
; Description .......: Remplacer un mot (pas tout le texte!)
; Paramètre(s) ......: A_Remplacer.s - Texte à Remplacé
; Texte.s - Nouveau Texte, Remplace le Texte dans 'A_Remplacer'
; Drapeaux.i - Options recherche:
; 0 - Normal
; #FR_MATCHCASE - Recherche correspondante
; #FR_Wholeword - Mots entiers, pas de sous-mots
; Valeur(s) retournée(s) ...: #True si remplacer quelque chose
Protected Info.FINDTEXT, TextLength.i = Len(A_Remplacer)
Protected Compte.i, Domaine.CHARRANGE,Trouve
Protected ValeurRetournee = #False
Info\lpstrText = @A_Remplacer
Info\chrg\cpMin = 0
Info\chrg\cpMax = -1
Drapeaux|#FR_DOWN
SendMessage_(*Ceci\hWnd, #EM_SETSEL, 0, 0)
Trouve = SendMessage_(*Ceci\hWnd, #EM_FINDTEXT,Drapeaux, @Info)
If Trouve > -1
Info\chrg\cpMin = Trouve + 1
Domaine\cpMin = Trouve
Domaine\cpMax = Trouve + TextLength
SendMessage_(*Ceci\hWnd, #EM_EXSETSEL, 0, @Domaine)
SendMessage_(*Ceci\hWnd, #EM_REPLACESEL, 0, @Texte)
ValeurRetournee = #True
EndIf
ProcedureReturn ValeurRetournee
EndProcedure
ProcedureDLL.i RichEdit_ReplaceAll(*Ceci.RichEditClassTemplate, A_Remplacer.s, Texte.s,Drapeaux.i = 0)
; Description .......: Remplacer un mot dans le Texte complet
; Paramètre(s) ......: A_Remplacer.s - Texte à Remplacer
; Texte.s - Nouveau Texte, Remplace le Texte dans 'A_Remplacer'
; Drapeaux.i - Options recherche:
; 0 - Normal
; #FR_MATCHCASE - Rechercher correspondante
; #FR_Wholeword - Mots entiers, pas de sous-mots
; Valeur(s) retournée(s) ...: Nombre de Remplacements
Protected Info.FINDTEXT, LongueurTexte.i = Len(A_Remplacer)
Protected Compte.i, Domaine.CHARRANGE,Trouve
Info\lpstrText = @A_Remplacer
Info\chrg\cpMin = 0
Info\chrg\cpMax = -1
Drapeaux|#FR_DOWN
SendMessage_(*Ceci\hWnd, #EM_SETSEL, 0, 0)
Repeat
Trouve = SendMessage_(*Ceci\hWnd, #EM_FINDTEXT,Drapeaux, @Info)
If Trouve > -1
Info\chrg\cpMin = Trouve + 1
Domaine\cpMin = Trouve
Domaine\cpMax = Trouve + LongueurTexte
SendMessage_(*Ceci\hWnd, #EM_EXSETSEL, 0, @Domaine)
SendMessage_(*Ceci\hWnd, #EM_REPLACESEL, 0, @Texte)
Compte + 1
Else
ProcedureReturn Compte
EndIf
ForEver
EndProcedure
ProcedureDLL.i RichEdit_SetBulleted(*Ceci.RichEditClassTemplate)
; Description .......: Démarrer / Modifier la sélection des puces
Protected format.PARAFORMAT
format\cbSize = SizeOf(PARAFORMAT)
format\dwMask = #PFM_NUMBERING
format\wNumbering = #PFN_BULLET
;A lire en premier
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT, 0, @format)
format\dwMask = #PFM_NUMBERING
If format\wNumbering = #PFN_BULLET
format\wNumbering = #Null
Else
format\wNumbering = #PFN_BULLET
EndIf
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETPARAFORMAT, 0, @format)
EndProcedure
ProcedureDLL.i RichEdit_InsertTable(*Ceci.RichEditClassTemplate, cols, rows, cellWidth)
Protected i, j, rtfTable.s
;initial \par ajoute un saut de ligne POUR ASSURER départs de table sur une nouvelle ligne.
;trgaph définit marginLeft dans les cellules, en twips (ici 30 twips)
rtfTable = "{\par \trgaph30 "
For i = 1 To cols
rtfTable + "\cellx" + Str(i * cellWidth)
Next
For j = 1 To rows
rtfTable + "\intbl "
For i = 1 To cols
rtfTable + "\cell "
; Si vous voulez insérer directement du texte, placez-le juste avant \cell
; Utilisez la ligne suivante à la place de ce qui précède, pour voir ce que je veux dire
; rtfTable + "\cellx" + Str(i * cellWidth)
Next
rtfTable = rtfTable + "\row"
Next
rtfTable = rtfTable + "\pard}"
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_REPLACESEL, 0, rtfTable)
EndProcedure
ProcedureDLL.i RichEdit_SetModified(*Ceci.RichEditClassTemplate, state.i=#True)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETMODIFY, state ,0)
EndProcedure
ProcedureDLL.i RichEdit_GetLineCount(*Ceci.RichEditClassTemplate)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_GETLINECOUNT, 0, 0)
EndProcedure
ProcedureDLL.i RichEdit_IsSuperscript(*Ceci.RichEditClassTemplate)
Protected cf2.CHARFORMAT2\cbsize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT ,#SCF_SELECTION, @cf2)
If cf2\dwEffects &#CFM_SUPERSCRIPT : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetSuperscript(*Ceci.RichEditClassTemplate)
Protected format.CHARFORMAT2
Protected.i Drapeaux
format\cbSize = SizeOf(CHARFORMAT2)
;bascule
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, 1, @format)
Drapeaux=format\dwEffects!Drapeaux
format\dwMask = #CFM_SUPERSCRIPT
format\dwEffects =Drapeaux
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_IsSubscript(*Ceci.RichEditClassTemplate)
Protected cf2.CHARFORMAT2\cbsize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT ,#SCF_SELECTION, @cf2)
If cf2\dwEffects &#CFM_SUBSCRIPT : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetSubscript(*Ceci.RichEditClassTemplate)
Protected format.CHARFORMAT2
Protected.i Drapeaux
format\cbSize = SizeOf(CHARFORMAT2)
;bascule
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, 1, @format)
Drapeaux=format\dwEffects!Drapeaux
format\dwMask = #CFM_SUBSCRIPT
format\dwEffects =Drapeaux
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_ChangeFontSize(*Ceci.RichEditClassTemplate, iDelta.i=1)
; Description .......: Augmenter ou diminuer la taille de la police
; Paramètre .........: Delta - Valeur d'incrémentation, Négatif ==> décrémentation
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETFONTSIZE, iDelta,0)
EndProcedure
ProcedureDLL.i RichEdit_LimitText(*Ceci.RichEditClassTemplate, iLimiter_A.i)
; Description .......: Limiter le contrôle à N caractères
; Paramètre(s) ......: iLimiter_A - Nombre de caractères
Protected.i Resultat
If iLimiter_A > 64000
Resultat = SendMessage_(*Ceci\hWnd, #EM_EXLIMITTEXT, iLimiter_A, 0)
Else
Resultat = SendMessage_(*Ceci\hWnd, #EM_LIMITTEXT, iLimiter_A, 0)
EndIf
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_HideSelection(*Ceci.RichEditClassTemplate, bVal.i=#True)
; Description .......: Définit si la marque de sélection est visible.
; Paramètre(s) ......: bVal.i - #True pour cacher, #False pour décaché
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_HIDESELECTION, bVal, 0)
EndProcedure
ProcedureDLL.i RichEdit_SetUnderlineWave(*Ceci.RichEditClassTemplate)
; Description .......: Pour marquer les passages ou des mots spéciaux avec une ligne ondulée rouge
; soulignée, vous pouvez utiliser cette procédure.
; L'utilisation est prévue pour ce correcteur orthographique, il est donc toujours
; souligner 'red'. Mais ce n'est qu'un "hack", et la
; coloration du soulignement n'a pas été documentée par ms.
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_UNDERLINETYPE
format\dwEffects = #CFE_UNDERLINE
format\bUnderlineType = #CFU_UNDERLINEWAVE | $50
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i Richedit_ClearUnderlineWave(*Ceci.RichEditClassTemplate)
; Description .......: Comme la procédure ci-dessus, elle supprime la ligne ondulée rouge
; du texte sélectionné.
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_UNDERLINETYPE
format\dwEffects = 0
format\bUnderlineType = 0;
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_Redraw( *Ceci.RichEditClassTemplate )
; Description .......: Envoie un message 'RedrawWindow()' pour le gadget.
; Utile après la désactivation / activation du dessin d'un
; Gadget.
ProcedureReturn RedrawWindow_(*Ceci\hWnd,0,0,#RDW_UPDATENOW|#RDW_ERASE|#RDW_INVALIDATE)
EndProcedure
ProcedureDLL.i RichEdit_GetTextLength( *Ceci.RichEditClassTemplate )
Protected LongueurTexte.GETTEXTLENGTHEX
LongueurTexte\flags = #GTL_NUMCHARS | #GTL_DEFAULT
;suivant le document MS, utiliser 1200 pour Unicode
CompilerIf #PB_Compiler_Unicode
LongueurTexte\codepage = 1200
CompilerElse
LongueurTexte\codepage = #CP_ACP
CompilerEndIf
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_GETTEXTLENGTHEX, @LongueurTexte, 0)
EndProcedure
ProcedureDLL.i RichEdit_GetTextColor(*Ceci.RichEditClassTemplate)
Protected CouleurRetournee.i = #White
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT,#SCF_SELECTION, @format)
If (format\dwEffects & #CFE_AUTOCOLOR) = #CFE_AUTOCOLOR
CouleurRetournee = GetSysColor_(#COLOR_WINDOWTEXT)
Else
CouleurRetournee = format\crTextColor
EndIf
ProcedureReturn CouleurRetournee
EndProcedure
ProcedureDLL.i RichEdit_IsSmallCaps(*Ceci.RichEditClassTemplate)
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT, #SCF_SELECTION, @format)
If format\dwEffects & #CFE_SMALLCAPS : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetSmallCaps(*Ceci.RichEditClassTemplate, bVal.i = #True)
;Les caractères sont composés en petites capitales. La valeur n'a aucune incidence
;sur le comment contrôle affiche le texte.
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_SMALLCAPS
If bVal
format\dwEffects = #CFE_SMALLCAPS
EndIf
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_IsAllCaps(*Ceci.RichEditClassTemplate)
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT,#SCF_SELECTION, @format)
If format\dwEffects &#CFE_ALLCAPS : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetAllCaps(*Ceci.RichEditClassTemplate, bVal.i = #True)
;Les caractères sont en majuscules. La valeur n'affecte pas la façon dont le
;contrôle affiche le texte. Cette valeur s'applique uniquement aux versions
;antérieures à Microsoft Rich Edit 3.0
Protected format.CHARFORMAT2
format\cbSize = SizeOf(CHARFORMAT2)
format\dwMask = #CFM_ALLCAPS
If bVal
format\dwEffects = #CFE_ALLCAPS
EndIf
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
ProcedureDLL.i RichEdit_CanPaste(*Ceci.RichEditClassTemplate)
; Description....: Le contenu du presse-papiers peut-il être collé dans le contrôle?
;
; Remarques .......: Des données dans deux formats presse-papiers peuvent être collées. RTF et RTF avec des objets
; Cette fonction détermine si les données sont soit au format soit dans le presse-papiers.
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_CANPASTE, 0, 0)
EndProcedure
ProcedureDLL.i RichEdit_GetCursorPosition(*Ceci.RichEditClassTemplate)
Protected SelDebut.l
Protected SelFin.l
SendMessage_(*Ceci\hWnd, #EM_GETSEL, @SelDebut, @SelFin)
ProcedureReturn SelDebut
EndProcedure
ProcedureDLL.s RichEdit_GetWordAtPosition(*Ceci.RichEditClassTemplate, Pos.i)
Protected TR.TEXTRANGE
Protected Resultat.s
Protected Debut.i = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_LEFTBREAK, Pos)
Protected Longueur.i = SendMessage_(*Ceci\hWnd, #EM_FINDWORDBREAK, #WB_RIGHTBREAK,Pos) - Debut
Protected Taille.i
If Longueur<=0 : ProcedureReturn "" : EndIf
TR\chrg\cpMin = Debut
TR\chrg\cpMax = Debut+Longueur
Taille = Longueur * SizeOf(Character)
TR\lpstrText = AllocateMemory(128+Taille)
SendMessage_(*Ceci\hWnd, #EM_GETTEXTRANGE, 0, @TR)
Resultat = PeekS(TR\lpstrText,Longueur)
FreeMemory(TR\lpstrText)
ProcedureReturn Trim(ReplaceString(ReplaceString(ReplaceString(Resultat,Chr(9)," "),Chr(13)," "),Chr(10)," "))
EndProcedure
ProcedureDLL.i RichEdit_GetFirstVisibleLineNumber(*Ceci.RichEditClassTemplate)
Protected Resultat=SendMessage_(*Ceci\hWnd,#EM_GETFIRSTVISIBLELINE,0 ,0)
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_GetFirstVisibleLinePos(*Ceci.RichEditClassTemplate)
Protected Resultat.i
Protected iLigneHaut.i= SendMessage_(*Ceci\hWnd,#EM_GETFIRSTVISIBLELINE,0 ,0)
;position du 1er car en ligne iLigneHaut
Resultat = SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, iLigneHaut ,0)
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.s RichEdit_GetFirstVisibleLineText(*Ceci.RichEditClassTemplate)
Protected iLigneHaut.i, iLongueurLigne.i, iPosCar.i, Resultat.s
iLigneHaut=SendMessage_(*Ceci\hWnd, #EM_GETFIRSTVISIBLELINE, 0 ,0)
iPosCar=SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, iLigneHaut ,0)
iLongueurLigne=SendMessage_(*Ceci\hWnd, #EM_LINELENGTH ,iPosCar ,0)
Resultat = Space(iLongueurLigne)
SendMessage_(*Ceci\hWnd, #EM_GETLINE, iLigneHaut ,@Resultat)
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_GetLastVisibleLineNumber(*Ceci.RichEditClassTemplate)
Protected iPremiereLigne.i, iDerniereLigne.i
Protected p.POINT
p\x = GadgetWidth(*Ceci\ID)
p\y = GadgetHeight(*Ceci\ID)
iPremiereLigne = SendMessage_(*Ceci\hWnd, #EM_GETFIRSTVISIBLELINE, 0 ,0)
iDerniereLigne = SendMessage_(*Ceci\hWnd, #EM_CHARFROMPOS, 0, @p)
iDerniereLigne = SendMessage_(*Ceci\hWnd, #EM_LINEFROMCHAR, iDerniereLigne, 0)
ProcedureReturn iDerniereLigne
EndProcedure
ProcedureDLL.i RichEdit_GetLastVisibleLinePos(*Ceci.RichEditClassTemplate)
Protected *self.RichEdit = *Ceci ;L'accès à leurs propres fonctions de classe
Protected Resultat.i
Protected iLigneBas.i= *self\GetLastVisibleLineNumber()
Resultat = SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, iLigneBas+1 ,0)
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.s RichEdit_GetLastVisibleLineText(*Ceci.RichEditClassTemplate)
Protected *Auto.RichEdit = *Ceci ;L'accès à leurs propres fonctions de classe
Protected iLongueurLigne.i, iPosCar.i, Resultat.s
Protected iLigneBas.i = *Auto\GetLastVisibleLineNumber()
iPosCar=SendMessage_(*Ceci\hWnd , #EM_LINEINDEX, iLigneBas ,0)
iLongueurLigne=SendMessage_(*Ceci\hWnd, #EM_LINELENGTH ,iPosCar ,0)
Resultat = Space(iLongueurLigne)
SendMessage_(*Ceci\hWnd, #EM_GETLINE, iLigneBas ,@Resultat)
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.i RichEdit_GetCharPosOfPreviousWord(*Ceci.RichEditClassTemplate, Pos.i)
ProcedureReturn SendMessage_( *Ceci\hWnd, #EM_FINDWORDBREAK, #WB_MOVEWORDLEFT, pos)
EndProcedure
ProcedureDLL.i RichEdit_GetCharPosOfNextWord(*Ceci.RichEditClassTemplate, pos)
ProcedureReturn SendMessage_( *Ceci\hWnd, #EM_FINDWORDBREAK, #WB_MOVEWORDRIGHT, pos)
EndProcedure
ProcedureDLL.i RichEdit_EmptyUndoBuffer(*Ceci.RichEditClassTemplate)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_EMPTYUNDOBUFFER, 0, 0)
EndProcedure
ProcedureDLL.i RichEdit_GetFirstCharPosOnLine(*Ceci.RichEditClassTemplate, iLigne.i)
If iLigne > 0 : iLigne -1 : EndIf
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_LINEINDEX, iLigne, 0)
EndProcedure
ProcedureDLL.i RichEdit_GetLineLength(*Ceci.RichEditClassTemplate, iLigne.i)
Protected.RichEdit *Auto = *Ceci ;L'accès à leurs propres fonctions de classe
Protected.i PosCar
PosCar = *Auto\GetFirstCharPosOnLine(iLigne)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_LINELENGTH, PosCar, 0)
EndProcedure
ProcedureDLL.i RichEdit_IsAlignLeft(*Ceci.RichEditClassTemplate)
;Vérifie si le paragraphe est aligné à gauche
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected bRet.i = #False
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT ,#Null, @paraf)
If paraf\wAlignment = #PFA_LEFT : bRet = #True: EndIf
ProcedureReturn bRet
EndProcedure
ProcedureDLL.i RichEdit_IsAlignCenter(*Ceci.RichEditClassTemplate)
;Vérifie si le paragraphe est centré
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected bRet.i = #False
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT ,#Null, @paraf)
If paraf\wAlignment = #PFA_CENTER : bRet = #True: EndIf
ProcedureReturn bRet
EndProcedure
ProcedureDLL.i RichEdit_IsAlignRight(*Ceci.RichEditClassTemplate)
;Vérifie si le paragraphe est aligné à droite
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected bRet.i = #False
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT ,#Null, @paraf)
If paraf\wAlignment = #PFA_RIGHT : bRet = #True: EndIf
ProcedureReturn bRet
EndProcedure
ProcedureDLL.i RichEdit_IsAlignJustify(*Ceci.RichEditClassTemplate)
;Vérifie si le paragraphe est justifié Aligner à droite
Protected paraf.PARAFORMAT2\cbSize = SizeOf(PARAFORMAT2)
Protected bRet.i = #False
SendMessage_(*Ceci\hWnd, #EM_GETPARAFORMAT ,#Null, @paraf)
If paraf\wAlignment = #PFA_JUSTIFY : bRet = #True: EndIf
ProcedureReturn bRet
EndProcedure
ProcedureDLL.i RichEdit_GetWordUnderCursorStart(*Ceci.RichEditClassTemplate)
ProcedureReturn *Ceci\WordUnderCursorRange\cpMin
EndProcedure
ProcedureDLL.i RichEdit_GetWordUnderCursorEnd(*Ceci.RichEditClassTemplate)
ProcedureReturn *Ceci\WordUnderCursorRange\cpMax
EndProcedure
ProcedureDLL.i RichEdit_GetScrollPosX(*Ceci.RichEditClassTemplate)
Protected pt.POINT
SendMessage_(*Ceci\hWnd, #EM_GETSCROLLPOS, 0 , @pt)
ProcedureReturn pt\x
EndProcedure
ProcedureDLL.i RichEdit_GetScrollPosY(*Ceci.RichEditClassTemplate)
Protected pt.POINT
SendMessage_(*Ceci\hWnd, #EM_GETSCROLLPOS, 0 , @pt)
ProcedureReturn pt\y
EndProcedure
ProcedureDLL.i RichEdit_SetScrollPos(*Ceci.RichEditClassTemplate,x.i,y.i)
Protected pt.POINT
pt\x = x
pt\y = y
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETSCROLLPOS, 0 , @pt)
EndProcedure
ProcedureDLL.i RichEdit_SetLink(*Ceci.RichEditClassTemplate, bVal.i = #True)
Protected Format.CHARFORMAT
With Format
\cbSize = SizeOf(CHARFORMAT)
\dwMask = #CFM_LINK
If bVal
\dwEffects = #CFE_LINK
EndIf
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION, @Format)
EndProcedure
ProcedureDLL.i RichEdit_SetUndoLimit(*Ceci.RichEditClassTemplate, Limite.l)
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETUNDOLIMIT, Limite, 0)
EndProcedure
ProcedureDLL.i RichEdit_AppendText(*Ceci.RichEditClassTemplate, sTexte.s)
Protected.SETTEXTEX DefinirTexte
Protected.i NbreLignes = SendMessage_(*Ceci\Hwnd, #EM_GETLINECOUNT, 0, 0)
Protected.i IndexLigne = SendMessage_(*Ceci\Hwnd, #EM_LINEINDEX, NbreLignes-1, 0)
Protected.i LongueurLigne = SendMessage_(*Ceci\Hwnd, #EM_LINELENGTH, IndexLigne, 0)
LongueurLigne + IndexLigne
SendMessage_(*Ceci\Hwnd, #EM_SETSEL, LongueurLigne, LongueurLigne)
SendMessage_(*Ceci\Hwnd, #EM_HIDESELECTION, 0, 0)
;Suivant la doc MS, 1200 pour Unicode
CompilerIf #PB_Compiler_Unicode
DefinirTexte\codepage = 1200
CompilerElse
DefinirTexte\codepage = #CP_ACP
CompilerEndIf
DefinirTexte\flags = #ST_SELECTION
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETTEXTEX, @DefinirTexte, @sTexte)
EndProcedure
ProcedureDLL.i RichEdit_SetHidden(*Ceci.RichEditClassTemplate, bVal.i = #True)
Protected Format.CHARFORMAT2
With Format
\cbSize = SizeOf(CHARFORMAT2)
\dwMask = #CFM_HIDDEN
If bVal
\dwEffects = #CFE_HIDDEN
EndIf
EndWith
ProcedureReturn SendMessage_(*Ceci\hWnd, #EM_SETCHARFORMAT, #SCF_SELECTION | #SCF_USEUIRULES, @Format)
EndProcedure
ProcedureDLL.i RichEdit_IsHidden(*Ceci.RichEditClassTemplate)
Protected Format.CHARFORMAT2
With Format
\cbSize = SizeOf(CHARFORMAT2)
\dwMask = #CFM_HIDDEN
EndWith
SendMessage_(*Ceci\hWnd, #EM_GETCHARFORMAT ,#SCF_SELECTION | #SCF_USEUIRULES , @format)
If format\dwEffects & #CFE_HIDDEN : ProcedureReturn #True : EndIf
ProcedureReturn #False
EndProcedure
ProcedureDLL.i RichEdit_SetTextEx(*Ceci.RichEditClassTemplate, sTexte.s)
Protected tx.SETTEXTEX
Protected *mem
Protected.SETTEXTEX DefinirTexte
;;Suivant la doc MS, 1200 pour Unicode
CompilerIf #PB_Compiler_Unicode
DefinirTexte\codepage = 1200
*mem = AllocateMemory(MemoryStringLength(@sTexte , #PB_Unicode) + 1)
CompilerElse
DefinirTexte\codepage = #CP_ACP
*mem = AllocateMemory(MemoryStringLength(@sTexte , #PB_UTF8) + 1)
CompilerEndIf
If *mem
PokeS(*mem , sTexte , -1 , #PB_UTF8)
SendMessage_(*Ceci\hwnd, #EM_SETTEXTEX , tx , *mem)
FreeMemory(*mem)
EndIf
EndProcedure
ProcedureDLL.i RichEdit_SetInterface(*Ceci.RichEditClassTemplate)
*Ceci\RichComObject\pIntf = ?vTable_RichEditOle
*Ceci\RichComObject\hwnd = *Ceci\hWnd
SendMessage_(*Ceci\hWnd, #EM_SETOLECALLBACK, 0, *Ceci\RichComObject)
ProcedureReturn *Ceci\RichComObject
EndProcedure
ProcedureDLL RichEdit_SetImage(*Ceci.RichEditClassTemplate, hImage)
Protected rtf$, bitmap.BITMAP, screenDC, hdcMF, hMF, hdc
Protected oldImage, widthTwips, heightTwips, numBytes, mem, *bytes.BYTE, *string.WORD, i, low, high
Protected tx.SETTEXTEX
Protected *mem
If GetObject_(hImage, SizeOf(BITMAP), bitmap)
If bitmap\bmWidth And bitmap\bmHeight
screenDC = GetDC_(0)
;Créer un EMF pour tenir le bitmap.
hdcMF = CreateMetaFile_(0)
If hdcMF
SetMapMode_(hdcMF, #MM_ANISOTROPIC)
SetWindowOrgEx_(hdcMF, 0, 0, 0)
SetWindowExtEx_(hdcMF, bitmap\bmWidth, bitmap\bmHeight, 0)
hdc = CreateCompatibleDC_(screenDC)
If hdc
oldImage = SelectObject_(hdc, hImage)
BitBlt_(hdcMF, 0, 0, bitmap\bmWidth, bitmap\bmHeight, hdc, 0, 0, #SRCCOPY)
SelectObject_(hdc, oldImage)
DeleteDC_(hdc)
hMF = CloseMetaFile_(hdcMF)
If hMF
;Avant de créer l'en-tête RTF nous devons calculer la largeur d'image / taille en twips.
widthTwips = MulDiv_(bitmap\bmWidth,1440,GetDeviceCaps_(screenDC, #LOGPIXELSX))
heightTwips = MulDiv_(bitmap\bmHeight,1440,GetDeviceCaps_(screenDC, #LOGPIXELSY))
;Maintenant, l'en-tête RTF.
rtf$ = "{\rtf1{\pict\wmetafile8\picw" + Str(bitmap\bmWidth) + "\pich" + Str(bitmap\bmHeight) + "\picwgoal" + Str(widthTwips) + "\pichgoal" + Str(heightTwips) + " "
;Ajouter les bits MF comme double caractère hexadécimal.
;D'abord récupérer les bits MF.
numBytes = GetMetaFileBitsEx_(hMF, 0, 0)
mem = AllocateMemory(numBytes*3)
If mem
If GetMetaFileBitsEx_(hMF, numBytes, mem) = numBytes
*bytes=mem : *string = mem + numBytes
For i = 0 To numBytes-1
low = (*bytes\b)&$f + '0': high = (*bytes\b)>>4&$f + '0'
If low > '9'
low + 7
EndIf
If high > '9'
high + 7
EndIf
*string\w = low<<8 + high
*string + 2
*bytes + 1
Next
rtf$ + PeekS(mem + numBytes, numBytes<<1, #PB_Ascii) + "}}"
Else
rtf$ = ""
EndIf
FreeMemory(mem)
Else
rtf$ = ""
EndIf
DeleteMetaFile_(hMF)
EndIf
Else
hMF = CloseEnhMetaFile_(hdcMF)
DeleteEnhMetaFile_(hMF)
EndIf
EndIf
ReleaseDC_(0, screenDC)
EndIf
EndIf
If rtf$
*mem = AllocateMemory(StringByteLength(rtf$ , #PB_UTF8) + 1)
tx\flags = #ST_SELECTION
If *mem
PokeS(*mem , rtf$ , -1 , #PB_UTF8)
SendMessage_(*Ceci\hwnd, #EM_SETTEXTEX , tx , *mem)
FreeMemory(*mem)
EndIf
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;{ Interface pour rappel OLE
ProcedureDLL RichEdit_QueryInterface(*pObject.RichEditOle, REFIID, *ppvObj.Integer)
Protected *pointeur.IRicheditOle
*pointeur=*pObject
If CompareMemory(REFIID, ?IID_IUnknown, 16) = 1 Or CompareMemory(REFIID, ?IID_IRichEditOleCallback, 16) = 1
*ppvObj\i = *pObject
*pointeur\AddRef()
ProcedureReturn #S_OK
Else
*ppvObj=0
ProcedureReturn #E_NOINTERFACE
EndIf
EndProcedure
ProcedureDLL RichEdit_AddRef(*pObject.RichEditOle)
*pObject\Refcount + 1
ProcedureReturn *pObject\Refcount
EndProcedure
ProcedureDLL RichEdit_Release(*pObject.RichEditOle)
*pObject\Refcount - 1
If *pObject\Refcount > 0
ProcedureReturn *pObject\Refcount
Else
*pObject = 0
EndIf
EndProcedure
ProcedureDLL RichEdit_GetInPlaceContext(*pObject.RichEditOle, lplpFrame, lplpDoc, lpFrameInfo)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_ShowContainerUI(*pObject.RichEditOle, fShow)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_QueryInsertObject(*pObject.RichEditOle, lpclsid, lpstg, cp)
ProcedureReturn #S_OK
EndProcedure
ProcedureDLL RichEdit_DeleteObject(*pObject.RichEditOle, lpoleobj)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_QueryAcceptData(*pObject.RichEditOle, lpdataobj, lpcfFormat, reco, fReally, hMetaPict)
ProcedureReturn #S_OK
EndProcedure
ProcedureDLL RichEdit_ContextSensitiveHelp(*pObject.RichEditOle, fEnterMode)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_GetClipboardData(*pObject.RichEditOle, lpchrg, reco, lplpdataobj)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_GetDragDropEffect(*pObject.RichEditOle, fDrag, grfKeyState, pdwEffect)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_GetContextMenu(*pObject.RichEditOle, seltype.w, lpoleobj, lpchrg, lphmenu)
ProcedureReturn #E_NOTIMPL
EndProcedure
ProcedureDLL RichEdit_GetNewStorage(*pObject.RichEditOle, lplpstg)
Protected sc, lpLockBytes, t.ILockBytes
;Essayer de créer un objet tableau d'octets qui agit en tant que «fondation» pour le fichier composé à venir.
sc = CreateILockBytesOnHGlobal_(#Null, #True, @lpLockBytes)
If sc ;Cela signifie que l'allocation a échoué.
ProcedureReturn sc
EndIf
;Allocation réussie si nous essayons maintenant de créer un objet de stockage composé de fichier.
sc=StgCreateDocfileOnILockBytes_(lpLockBytes, #STGM_SHARE_EXCLUSIVE|#STGM_READWRITE|#STGM_CREATE, 0, lplpstg)
t = lpLockBytes
t\Release()
EndProcedure
;}
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: le format RTF
Suite
Code : Tout sélectionner
DataSection
IID_ITextDocument: ; {8CC497C0-A1DF-11ce-8098-00AA0047BE5D}
Data.l $8CC497C0
Data.w $A1DF, $11ce
Data.b $80, $98, $00, $AA, $00, $47, $BE, $5D
IID_IRichEditOleCallback: ;" 0x00020D03, 0, 0, 0xC0,0,0,0,0,0,0,0x46"
Data.l $00020D03
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IUnknown: ;"{00000000-0000-0000-C000-000000000046}"
Data.l $00000000
Data.w $0000,$0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
vTable_RichEditOle:
Data.i @RichEdit_QueryInterface(), @RichEdit_AddRef(), @RichEdit_Release(), @RichEdit_GetNewStorage()
Data.i @RichEdit_GetInPlaceContext(), @RichEdit_ShowContainerUI(), @RichEdit_QueryInsertObject()
Data.i @RichEdit_DeleteObject(), @RichEdit_QueryAcceptData(), @RichEdit_ContextSensitiveHelp(), @RichEdit_GetClipboardData()
Data.i @RichEdit_GetDragDropEffect(), @RichEdit_GetContextMenu()
vTable_RichEditClassTemplate:
Data.i @RichEdit_Free()
Data.i @RichEdit_GetID()
Data.i @RichEdit_GethWnd()
Data.i @RichEdit_GetX()
Data.i @RichEdit_GetY()
Data.i @RichEdit_GetWidth()
Data.i @RichEdit_GetHeight()
Data.i @RichEdit_GetReadOnly()
Data.i @RichEdit_GetCursorX()
Data.i @RichEdit_GetCursorY()
Data.i @RichEdit_GetFont()
Data.i @RichEdit_GetFontSize()
Data.i @RichEdit_GetFontStyle()
Data.i @RichEdit_GetZoom()
Data.i @RichEdit_Resize()
Data.i @RichEdit_DisableRedraw()
Data.i @RichEdit_Clear()
Data.i @RichEdit_GetText()
Data.i @RichEdit_GetRTFText()
Data.i @RichEdit_GetSelText()
Data.i @RichEdit_FindText()
Data.i @RichEdit_CountWords()
Data.i @RichEdit_Cut()
Data.i @RichEdit_Copy()
Data.i @RichEdit_Paste()
Data.i @RichEdit_BeginUndo()
Data.i @RichEdit_StopUndo()
Data.i @RichEdit_CanUndo()
Data.i @RichEdit_Undo()
Data.i @RichEdit_Redo()
Data.i @RichEdit_LoadRTF()
Data.i @RichEdit_LoadText()
Data.i @RichEdit_SaveRTF()
Data.i @RichEdit_SaveText()
Data.i @RichEdit_Print()
Data.i @RichEdit_SetFont()
Data.i @RichEdit_SetFontSize()
Data.i @RichEdit_SetFontStyle()
Data.i @RichEdit_SetZoom()
Data.i @RichEdit_SetAlignment()
Data.i @RichEdit_SetLeftMargin()
Data.i @RichEdit_SetRightMargin()
Data.i @RichEdit_SetCtrlBackColor()
Data.i @RichEdit_SetTextBackColor()
Data.i @RichEdit_GetTextBackColor()
Data.i @RichEdit_ClearTextBackColor()
Data.i @RichEdit_SetTextColor()
Data.i @RichEdit_SetSelection()
Data.i @RichEdit_IsTextSelected()
Data.i @RichEdit_SetText()
Data.i @RichEdit_SetReadOnly()
Data.i @RichEdit_SetCursorPos()
Data.i @RichEdit_SetWordWrap()
Data.i @RichEdit_SelectAll()
Data.i @RichEdit_Unselect()
Data.i @RichEdit_Indent()
Data.i @RichEdit_Outdent()
Data.i @RichEdit_ScrollToLine()
Data.i @RichEdit_GetParagraphAlign()
Data.i @RichEdit_GetLineSpacing()
Data.i @RichEdit_SetLineSpacing()
Data.i @RichEdit_IsModified()
Data.i @RichEdit_SetModified()
Data.i @RichEdit_IsLink()
Data.i @RichEdit_GetWordUnderMouse()
Data.i @RichEdit_GetCurrentWord()
Data.i @RichEdit_Replace()
Data.i @RichEdit_ReplaceAll()
Data.i @RichEdit_SetBulleted()
Data.i @RichEdit_GetLineCount()
Data.i @RichEdit_IsSuperscript()
Data.i @RichEdit_SetSuperscript()
Data.i @RichEdit_IsSubscript()
Data.i @RichEdit_SetSubscript()
Data.i @RichEdit_ChangeFontSize()
Data.i @RichEdit_LimitText()
Data.i @RichEdit_HideSelection()
Data.i @RichEdit_SetUnderlineWave()
Data.i @Richedit_ClearUnderlineWave()
Data.i @RichEdit_Redraw()
Data.i @RichEdit_GetTextLength()
Data.i @RichEdit_GetTextColor()
Data.i @RichEdit_IsSmallCaps()
Data.i @RichEdit_SetSmallCaps()
Data.i @RichEdit_IsAllCaps()
Data.i @RichEdit_SetAllCaps()
Data.i @RichEdit_CanPaste()
Data.i @RichEdit_GetCursorPosition()
Data.i @RichEdit_GetWordAtPosition()
Data.i @RichEdit_GetFirstVisibleLineNumber()
Data.i @RichEdit_GetFirstVisibleLinePos()
Data.i @RichEdit_GetFirstVisibleLineText()
Data.i @RichEdit_GetLastVisibleLineNumber()
Data.i @RichEdit_GetLastVisibleLinePos()
Data.i @RichEdit_GetLastVisibleLineText()
Data.i @RichEdit_GetCharPosOfPreviousWord()
Data.i @RichEdit_GetCharPosOfNextWord()
Data.i @RichEdit_EmptyUndoBuffer()
Data.i @RichEdit_GetFirstCharPosOnLine()
Data.i @RichEdit_GetLineLength()
Data.i @RichEdit_IsAlignLeft()
Data.i @RichEdit_IsAlignCenter()
Data.i @RichEdit_IsAlignRight()
Data.i @RichEdit_IsAlignJustify()
Data.i @RichEdit_GetWordUnderCursorStart()
Data.i @RichEdit_GetWordUnderCursorEnd()
Data.i @RichEdit_GetScrollPosX()
Data.i @RichEdit_GetScrollPosY()
Data.i @RichEdit_SetScrollPos()
Data.i @RichEdit_SetLink()
Data.i @RichEdit_SetUndoLimit()
Data.i @RichEdit_AppendText()
Data.i @RichEdit_SetHidden()
Data.i @RichEdit_IsHidden()
Data.i @RichEdit_SetTextEx()
Data.i @RichEdit_SetInterface()
Data.i @RichEdit_SetImage()
EndDataSection
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: le format RTF
EnableExplicit
XIncludeFile "RichEdit.pbi"
Enumeration
#Fenetre_principale
#Barre_D_Outils
#Barre_Statut
#Menu
#Menu_PopUp
#im_coul_texte
#im_coul_fond
#im_coul_page
; Articles boîte à outil
#menu_Nouveau
#menu_Ouvrir
#menu_Sauvegarde
#menu_Imprimer
#menu_Quitter
#menu_Police
#menu_Rechercher
#menu_Couper
#menu_Copier
#menu_Coller
#menu_Defaire
#menu_Refaire
#menu_Gras
#menu_Italique
#menu_Souligne
#menu_Barre
#menu_Gauche
#menu_Centrer
#menu_Droite
#menu_SelectionnerTout
#menu_Tabulation
#menu_Retrait
#menu_Puces
#menu_Interligne_1
#menu_Interligne_1_5
#menu_Interligne_2_0
#menu_Zoom_10
#menu_Zoom_25
#menu_Zoom_50
#menu_Zoom_75
#menu_Zoom_100
#menu_Zoom_125
#menu_Zoom_150
#menu_Zoom_200
#menu_Zoom_400
; images
#ico_New
#ico_Open
#ico_Save
#ico_Print
#ico_Font
#ico_Search
#ico_Cut
#ico_Copy
#ico_Paste
#ico_Undo
#ico_Redo
#ico_Bold
#ico_Italic
#ico_Underline
#ico_Strikeout
#ico_Left
#ico_Center
#ico_Right
#ico_SelectAll
#ico_Indent
#ico_Outdent
#ico_List
EndEnumeration
Global.RichEdit Editeur; Variable d'objet pour notre contrôle RTF
Global.s Fichier, Titre.s = "PurePad par Micoute"
Global.i Resultat, i, j, mx, my, align, j, num_pal, id_im, l_pal, h_pal, x, y, l, h, espace, id_palette, num_palette, num_coul, Couleur
Global Dim Couleur_Base(10)
Global Dim Couleur_perso(2,10)
CatchImage(#ico_New, ?ico_new)
CatchImage(#ico_Open, ?ico_open)
CatchImage(#ico_Save, ?ico_save)
CatchImage(#ico_Print, ?ico_print)
CatchImage(#ico_Font, ?ico_font)
CatchImage(#ico_Search, ?ico_search)
CatchImage(#ico_Cut, ?ico_cut)
CatchImage(#ico_Copy, ?ico_copy)
CatchImage(#ico_Paste, ?ico_paste)
CatchImage(#ico_Undo, ?ico_undo)
CatchImage(#ico_Redo, ?ico_redo)
CatchImage(#ico_Bold, ?ico_bold)
CatchImage(#ico_Italic, ?ico_italic)
CatchImage(#ico_Underline, ?ico_underline)
CatchImage(#ico_Strikeout, ?ico_strikeout)
CatchImage(#ico_Left, ?ico_left)
CatchImage(#ico_Center, ?ico_center)
CatchImage(#ico_Right, ?ico_right)
CatchImage(#ico_SelectAll, ?ico_selectall)
CatchImage(#ico_Indent, ?ico_indent)
CatchImage(#ico_Outdent, ?ico_outdent)
CatchImage(#ico_List, ?ico_list)
Procedure Initialise_Couleur(); Couleur de la palette de base
i=0
Couleur_Base(i) = $000000 : i=i+1
Couleur_Base(i) = $000001 : i=i+1
Couleur_Base(i) = $0000FF : i=i+1
Couleur_Base(i) = $00FFFF : i=i+1
Couleur_Base(i) = $FF00FF : i=i+1
Couleur_Base(i) = $00FF00 : i=i+1
Couleur_Base(i) = $FFFF00 : i=i+1
Couleur_Base(i) = $FF0000 : i=i+1
Couleur_Base(i) = $008000 : i=i+1
Couleur_Base(i) = $FFFFFF : i=i+1
For i=0 To 2
For j=0 To 9
Couleur_perso(i,j)=$E26152 ; bleu foncé
Next
Next
EndProcedure
Procedure Create_palette(id_im,l,h)
Select id_im
Case #im_coul_texte
num_pal=0
Case #im_coul_fond
num_pal=1
Case #im_coul_page
num_pal=2
EndSelect
CreateImage(id_im,l,h+10)
StartDrawing(ImageOutput(id_im))
Box(0,0+10,l,h,$C0C0C0) ; fond gris clair
For i=0 To 10
Box(i*l/10,0+10,l/10-1,h/2-1,$9A9A9A) ; gris
Next
Box(1,0+1+10,l/10-3,h/2-3,$FFFFFF) ; blanc
LineXY(1,0+1+10,l/10-3,h/2-3+10,$0000FF)
For i=1 To 10
Box(i*l/10+1,0+1+10,l/10-3,h/2-3,Couleur_Base(i))
Next
For i=0 To 10
Box(i*l/10+1,h/2+1+10,l/10-3,h/2-3,Couleur_perso(num_pal,i))
Next
StopDrawing()
SetGadgetState(id_im,ImageID( id_im))
EndProcedure
Procedure Dessine_palette()
x=5
y=GetSystemMetrics_(#SM_CYSCREEN)-780
l=GetSystemMetrics_(#SM_CXSCREEN)-20
h=80
espace=5
l_pal=l/3-espace
h_pal=40
;OpenWindow(#Fenetre_principale, x, Y, l, h, "Palette de couleurs")
TextGadget(#PB_Any,x,y+h,l_pal,h_pal,"Couleur du texte", #PB_Text_Center)
TextGadget(#PB_Any,x+l_pal+espace,y+h,l_pal,h_pal,"Couleur du fond du texte", #PB_Text_Center)
TextGadget(#PB_Any,x+2*l_pal+2*espace,y+h,l_pal,h_pal,"Couleur de la page", #PB_Text_Center)
ImageGadget(#im_coul_texte,x,20,l_pal,h_pal,0)
Create_palette(#im_coul_texte,l_pal,h_pal)
ImageGadget(#im_coul_fond,x+l_pal+espace,20,l_pal,h_pal,0)
Create_palette(#im_coul_fond,l_pal,h_pal)
ImageGadget(#im_coul_page,x+2*l_pal+2*espace,20,l_pal,h_pal,0)
Create_palette(#im_coul_page,l_pal,h_pal)
;TextGadget(#PB_Any,x+l_pal+espace,20+h_pal,l_pal,20,"Clic droit pour choisir une Couleur", #PB_Text_Center)
EndProcedure
Procedure AddMenuEdition()
MenuItem(#menu_Rechercher, "Chercher ...", ImageID(#ico_Search))
MenuBar()
MenuItem(#menu_Couper, "Couper", ImageID(#ico_Cut))
MenuItem(#menu_Copier, "Copier", ImageID(#ico_Copy))
MenuItem(#menu_Coller, "Coller", ImageID(#ico_Paste))
MenuBar()
MenuItem(#menu_SelectionnerTout, "Sélectionner tout", ImageID(#ico_SelectAll))
MenuBar()
MenuItem(#menu_Interligne_1 , "Interligne" + " 1.0")
MenuItem(#menu_Interligne_1_5, "Interligne" + " 1.5")
MenuItem(#menu_Interligne_2_0, "Interligne" + " 2.0")
EndProcedure
Procedure AddMenuZoom()
MenuItem(#menu_Zoom_10, "10%")
MenuItem(#menu_Zoom_25, "25%")
MenuItem(#menu_Zoom_50, "50%")
MenuItem(#menu_Zoom_75, "75%")
MenuItem(#menu_Zoom_100, "100%")
MenuItem(#menu_Zoom_125, "125%")
MenuItem(#menu_Zoom_150, "150%")
MenuItem(#menu_Zoom_200, "200%")
MenuItem(#menu_Zoom_400, "400%")
EndProcedure
Procedure SetStatusbarText()
If Editeur
StatusBarText(#Barre_Statut, 0, " " + "Ligne" + " " + Str(Editeur\GetCursorY()))
StatusBarText(#Barre_Statut, 1, " " + "Colonne" + " " + Str(Editeur\GetCursorX()))
StatusBarText(#Barre_Statut, 4, " Nombre de mots: " + Str(Editeur\CountWords()))
If Couleur = 0
Couleur = Editeur\GetTextColor()
EndIf
StatusBarText(#Barre_Statut, 5, Editeur\GetFont() + "("+Str(Editeur\GetFontSize())+") Style("+RSet(Hex(Editeur\GetFontStyle()),3,"0")+") Couleur texte("+RSet(Hex(Editeur\GetTextColor()),6,"0")+") Couleur fond("+RSet(Hex(Editeur\GetTextBackColor()),6,"0")+")")
Else
StatusBarText(#Barre_Statut, 0, " " + "Ligne" + " 1")
StatusBarText(#Barre_Statut, 1, " " + "Colonne" + " 1")
StatusBarText(#Barre_Statut, 2, " Mot: ")
StatusBarText(#Barre_Statut, 3, " Zoom: 100%")
StatusBarText(#Barre_Statut, 4, " Mots: 0 Lignes: 0")
StatusBarText(#Barre_Statut, 5, " ")
EndIf
EndProcedure
Macro UpdateToolbar()
SetToolBarButtonState(#Barre_D_Outils, #menu_Gras, Editeur\GetFontStyle() & #PB_Font_Bold)
SetToolBarButtonState(#Barre_D_Outils, #menu_Italique, Editeur\GetFontStyle() & #PB_Font_Italic)
SetToolBarButtonState(#Barre_D_Outils, #menu_Souligne,Editeur\GetFontStyle() & #PB_Font_Underline)
SetToolBarButtonState(#Barre_D_Outils, #menu_Barre, Editeur\GetFontStyle() & #PB_Font_StrikeOut)
SetToolBarButtonState(#Barre_D_Outils, #menu_Gauche, Editeur\IsAlignLeft() )
SetToolBarButtonState(#Barre_D_Outils, #menu_Centrer, Editeur\IsAlignCenter() )
SetToolBarButtonState(#Barre_D_Outils, #menu_Droite, Editeur\IsAlignRight() )
EndMacro
Procedure CentrerTitreFenetre(TitreFenetre.s, NumeroFenetre)
Protected NCM.NonClientMetrics, ValeurRetournee, DcSauve, AncObjet
Protected hFonteConsole, HdcCourant, TailleTs.SIZE
Protected Espace_a_remplir, RectFenetre.Rect, NbrEspaceDemandes
NCM\cbSize = SizeOf(NCM)
ValeurRetournee = SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, 0, @NCM, 0)
hFonteConsole = CreateFontIndirect_(@NCM\lfCaptionFont)
If hFonteConsole <> 0
HdcCourant = GetDC_(WindowID(NumeroFenetre))
DcSauve = SaveDC_(HdcCourant)
AncObjet = SelectObject_(HdcCourant, hFonteConsole)
ValeurRetournee = GetWindowRect_(WindowID(NumeroFenetre), @RectFenetre)
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, @TitreFenetre, Len(TitreFenetre), @TailleTs)
Espace_a_remplir = RectFenetre\right - RectFenetre\left - 4 * NCM\iCaptionWidth - TailleTs\cx
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, " ", 1, @TailleTs)
NbrEspaceDemandes = (Espace_a_remplir / TailleTs\cx)/2
If NbrEspaceDemandes > 0
TitreFenetre = Space(NbrEspaceDemandes) + TitreFenetre
EndIf
EndIf
ValeurRetournee = SetWindowText_(WindowID(NumeroFenetre), TitreFenetre)
ValeurRetournee = RestoreDC_(HdcCourant, DcSauve) ; mettre en ordre
ValeurRetournee = DeleteObject_(hFonteConsole)
ReleaseDC_(WindowID(NumeroFenetre), HdcCourant)
EndProcedure
Initialise_Couleur()
OpenWindow(#Fenetre_principale, 0, 0, GetSystemMetrics_(#SM_CXSCREEN)-20, GetSystemMetrics_(#SM_CYSCREEN)-40, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
CentrerTitreFenetre(Titre, 0)
Dessine_palette()
If CreateImageMenu(#Menu, WindowID(#Fenetre_principale))
MenuTitle("Fichier")
MenuItem(#menu_Nouveau, "Nouveau", ImageID(#ico_New))
MenuItem(#menu_Ouvrir, "Ouvrir", ImageID(#ico_Open))
MenuItem(#menu_Sauvegarde, "Sauvegarder", ImageID(#ico_Save))
MenuBar()
MenuItem(#menu_Imprimer, "Imprimer", ImageID(#ico_Print))
MenuItem(#menu_Police, "Sélectionner police", ImageID(#ico_Font))
MenuBar()
MenuItem(#menu_Quitter, "Quitter le programme")
MenuTitle("Edition")
AddMenuEdition()
MenuTitle("Zoom")
AddMenuZoom()
EndIf
If CreatePopupImageMenu(#Menu_PopUp, WindowID(#Fenetre_principale))
AddMenuEdition()
MenuBar()
AddMenuZoom()
EndIf
If CreateToolBar(#Barre_D_Outils, WindowID(#Fenetre_principale))
ToolBarImageButton(#menu_Nouveau, ImageID(#ico_New))
ToolBarToolTip(#Barre_D_Outils, #menu_Nouveau, "Nouveau fichier")
ToolBarImageButton(#menu_Ouvrir, ImageID(#ico_Open))
ToolBarToolTip(#Barre_D_Outils, #menu_Ouvrir, "Ouvrir fichier")
ToolBarImageButton(#menu_Sauvegarde, ImageID(#ico_Save))
ToolBarToolTip(#Barre_D_Outils, #menu_Sauvegarde, "Sauvegarder fichier")
ToolBarSeparator()
ToolBarImageButton(#menu_Imprimer, ImageID(#ico_Print))
ToolBarToolTip(#Barre_D_Outils, #menu_Imprimer, "Imprimer")
ToolBarImageButton(#menu_Police, ImageID(#ico_Font))
ToolBarToolTip(#Barre_D_Outils, #menu_Police, "Sélectionner police")
ToolBarImageButton(#menu_Rechercher, ImageID(#ico_Search))
ToolBarToolTip(#Barre_D_Outils, #menu_Rechercher, "Chercher ...")
ToolBarSeparator()
ToolBarImageButton(#menu_Couper, ImageID(#ico_Cut))
ToolBarToolTip(#Barre_D_Outils, #menu_Couper, "Couper")
ToolBarImageButton(#menu_Copier, ImageID(#ico_Copy))
ToolBarToolTip(#Barre_D_Outils, #menu_Copier, "Copier")
ToolBarImageButton(#menu_Coller, ImageID(#ico_Paste))
ToolBarToolTip(#Barre_D_Outils, #menu_Coller, "Coller")
ToolBarSeparator()
ToolBarImageButton(#menu_SelectionnerTout, ImageID(#ico_SelectAll))
ToolBarToolTip(#Barre_D_Outils, #menu_SelectionnerTout, "Sélectionner tout")
ToolBarSeparator()
ToolBarImageButton(#menu_Defaire, ImageID(#ico_Undo))
ToolBarToolTip(#Barre_D_Outils, #menu_Defaire, "Défaire")
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, #True)
ToolBarImageButton(#menu_Refaire, ImageID(#ico_Redo))
ToolBarToolTip(#Barre_D_Outils, #menu_Refaire, "Refaire")
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
ToolBarSeparator()
ToolBarImageButton(#menu_Gras, ImageID(#ico_Bold), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Gras, "Gras")
ToolBarImageButton(#menu_Italique, ImageID(#ico_Italic), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Italique, "Italique")
ToolBarImageButton(#menu_Souligne, ImageID(#ico_Underline), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Souligne, "Souligné")
ToolBarImageButton(#menu_Barre, ImageID(#ico_Strikeout), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Barre, "Barré")
ToolBarSeparator()
ToolBarImageButton(#menu_Gauche, ImageID(#ico_Left))
ToolBarToolTip(#Barre_D_Outils, #menu_Gauche, "Aligner à gauche")
ToolBarImageButton(#menu_Centrer, ImageID(#ico_Center))
ToolBarToolTip(#Barre_D_Outils, #menu_Centrer, "Centrer")
ToolBarImageButton(#menu_Droite, ImageID(#ico_Right))
ToolBarToolTip(#Barre_D_Outils, #menu_Gauche, "Aligner à droite")
ToolBarSeparator()
ToolBarImageButton(#menu_Tabulation, ImageID(#ico_Indent))
ToolBarToolTip(#Barre_D_Outils, #menu_Tabulation, "Augmenter le retrait")
ToolBarImageButton(#menu_Retrait, ImageID(#ico_Outdent))
ToolBarToolTip(#Barre_D_Outils, #menu_Retrait, "Diminuer le retrait")
ToolBarSeparator()
ToolBarImageButton(#menu_Puces, ImageID(#ico_List))
ToolBarToolTip(#Barre_D_Outils, #menu_Puces, "Liste")
EndIf
If CreateStatusBar(#Barre_Statut, WindowID(#Fenetre_principale))
AddStatusBarField(80)
AddStatusBarField(80)
AddStatusBarField(200)
AddStatusBarField(80)
AddStatusBarField(140)
AddStatusBarField(#PB_Ignore)
SetStatusbarText()
EndIf
Editeur = New_RichEdit(0, 80,GetSystemMetrics_(#SM_CXSCREEN)-15, GetSystemMetrics_(#SM_CYSCREEN)-165); nous pouvons ignorer la taille, s'adapte à la taille de l'événement!
Editeur\SetLeftMargin(5)
Editeur\SetRightMargin(5)
Editeur\SetInterface()
Repeat ;- Boucle d'évènements
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
;Case #PB_Event_SizeWindow
; Editeur\Resize(0, ToolBarHeight(#Barre_D_Outils), WindowWidth(#Fenetre_principale), WindowHeight(#Fenetre_principale) - ToolBarHeight(#Barre_D_Outils) - StatusBarHeight(#Barre_Statut) - MenuHeight())
Case #WM_LBUTTONUP
If GetActiveGadget() = Editeur\GetID()
SetStatusbarText()
UpdateToolbar()
EndIf
Case #WM_MOUSEMOVE
mx = WindowMouseX(#Fenetre_principale) - GadgetX(Editeur\GetID())
my = WindowMouseY(#Fenetre_principale) - GadgetY(Editeur\GetID())
StatusBarText(#Barre_Statut, 2, " Mot: " + Editeur\GetWordUnderMouse(mx,my))
;Case #WM_RBUTTONDOWN
; If GetActiveGadget() = Editeur\GetID()
; DisplayPopupMenu(#Menu_PopUp, WindowID(#Fenetre_principale))
; EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case Editeur\GetID()
If EventType() = #PB_EventType_Change; Ce n'est pas un gadget éditeur prise en charge normale
SetStatusbarText()
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
UpdateToolbar()
EndIf
Case #im_coul_texte ;- Couleur texte
id_palette = #im_coul_texte
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextColor(Couleur)
Dessine_palette()
EndSelect
Case #im_coul_fond ;- Couleur fond
id_palette = #im_coul_fond
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextBackColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextBackColor(Couleur)
Dessine_palette()
EndSelect
Case #im_coul_page ;- Couleur page
id_palette = #im_coul_page
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetCtrlBackColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetCtrlBackColor(Couleur)
Dessine_palette()
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #menu_Nouveau
Editeur\Clear()
SetStatusbarText()
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
Case #menu_Ouvrir
Fichier = OpenFileRequester("Sélectionner fichier RTF", "", "RichText (*.rtf)|*.rtf", 0)
If Fichier
Editeur\LoadRTF(Fichier)
SetStatusbarText()
CentrerTitreFenetre(Fichier, 0)
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
EndIf
Case #menu_Sauvegarde
Fichier = SaveFileRequester("Sauvegarder sous", "", "RichText (*.rtf)|*.rtf", 0)
If Fichier
Editeur\SaveRTF(Fichier)
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
EndIf
Case #menu_Quitter
CloseWindow(#Fenetre_principale)
End
Case #menu_Imprimer
Editeur\Print("PurePad", #True); Impression avec Dialogue
Case #menu_Police
Resultat = FontRequester(Editeur\GetFont(), Editeur\GetFontSize(), #PB_FontRequester_Effects)
If Resultat
Editeur\SetFont(SelectedFontName())
Editeur\SetFontSize(SelectedFontSize())
Editeur\SetFontStyle(SelectedFontStyle())
Editeur\SetTextColor(SelectedFontColor())
SetToolBarButtonState(#Barre_D_Outils, #menu_Gras, SelectedFontStyle() & #PB_Font_Bold)
SetToolBarButtonState(#Barre_D_Outils, #menu_Italique, SelectedFontStyle() & #PB_Font_Italic)
SetToolBarButtonState(#Barre_D_Outils, #menu_Souligne, SelectedFontStyle() & #PB_Font_Underline)
SetToolBarButtonState(#Barre_D_Outils, #menu_Barre, SelectedFontStyle() & #PB_Font_StrikeOut)
EndIf
Case #menu_Rechercher
Fichier = InputRequester("Recherche PurePad", "Insérer le texte à chercher!", "")
If Fichier
If Editeur\FindText(Fichier)
MessageBeep_(#MB_OK)
Else
MessageBeep_(#MB_ICONERROR)
EndIf
EndIf
Case #menu_Couper
Editeur\Cut()
Case #menu_Copier
Editeur\Copy()
Case #menu_Coller
Editeur\Paste()
Case #menu_Defaire
Editeur\Undo()
DisableToolBarButton(0, #menu_Refaire, #False)
Case #menu_Refaire
Editeur\Redo()
Case #menu_SelectionnerTout
Editeur\SelectAll()
Case #menu_Puces
Editeur\SetBulleted()
Case #menu_Gras, #menu_Italique, #menu_Souligne, #menu_Barre
Resultat = 0
If GetToolBarButtonState(#Barre_D_Outils, #menu_Gras)
Resultat | #PB_Font_Bold
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Italique)
Resultat | #PB_Font_Italic
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Souligne)
Resultat | #PB_Font_Underline
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Barre)
Resultat | #PB_Font_StrikeOut
EndIf
Editeur\SetFontStyle(Resultat)
Case #menu_Gauche
Editeur\SetAlignment()
Case #menu_Centrer
Editeur\SetAlignment(#PB_Text_Center)
Case #menu_Droite
Editeur\SetAlignment(#PB_Text_Right)
Case #menu_Tabulation
Editeur\Indent()
Case #menu_Retrait
Editeur\Outdent()
Case #menu_Zoom_10
Editeur\SetZoom(10)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_25
Editeur\SetZoom(25)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_50
Editeur\SetZoom(50)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_75
Editeur\SetZoom(75)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_100
Editeur\SetZoom(100)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_125
Editeur\SetZoom(125)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_150
Editeur\SetZoom(150)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_200
Editeur\SetZoom(200)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_400
Editeur\SetZoom(400)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Interligne_1
Editeur\SetLineSpacing(1.0)
Case #menu_Interligne_1_5
Editeur\SetLineSpacing(1.5)
Case #menu_Interligne_2_0
Editeur\SetLineSpacing(2.0)
EndSelect
EndSelect
ForEver
End
DataSection
ico_new: IncludeBinary "Icones\New.ico"
ico_open: IncludeBinary "Icones\Open.ico"
ico_save: IncludeBinary "Icones\Save.ico"
ico_print: IncludeBinary "Icones\Printer.ico"
ico_font: IncludeBinary "Icones\FontDialog.ico"
ico_search: IncludeBinary "Icones\Find.ico"
ico_cut: IncludeBinary "Icones\Cut.ico"
ico_copy: IncludeBinary "Icones\Copy.ico"
ico_paste: IncludeBinary "Icones\Paste.ico"
ico_undo: IncludeBinary "Icones\Undo.ico"
ico_redo: IncludeBinary "Icones\Redo.ico"
ico_bold_de: IncludeBinary "Icones\Bold_DE.ico"
ico_bold: IncludeBinary "Icones\Bold.ico"
ico_italic_de: IncludeBinary "Icones\Italic_DE.ico"
ico_italic: IncludeBinary "Icones\Italic.ico"
ico_underline: IncludeBinary "Icones\Underline.ico"
ico_strikeout: IncludeBinary "Icones\Strikeout.ico"
ico_left: IncludeBinary "Icones\Left.ico"
ico_center: IncludeBinary "Icones\Center.ico"
ico_right: IncludeBinary "Icones\Right.ico"
ico_selectall: IncludeBinary "Icones\SelectAll.ico"
ico_indent: IncludeBinary "Icones\Indent.ico"
ico_outdent: IncludeBinary "Icones\Outdent.ico"
ico_list: IncludeBinary "Icones\List.ico"
EndDataSection
XIncludeFile "RichEdit.pbi"
Enumeration
#Fenetre_principale
#Barre_D_Outils
#Barre_Statut
#Menu
#Menu_PopUp
#im_coul_texte
#im_coul_fond
#im_coul_page
; Articles boîte à outil
#menu_Nouveau
#menu_Ouvrir
#menu_Sauvegarde
#menu_Imprimer
#menu_Quitter
#menu_Police
#menu_Rechercher
#menu_Couper
#menu_Copier
#menu_Coller
#menu_Defaire
#menu_Refaire
#menu_Gras
#menu_Italique
#menu_Souligne
#menu_Barre
#menu_Gauche
#menu_Centrer
#menu_Droite
#menu_SelectionnerTout
#menu_Tabulation
#menu_Retrait
#menu_Puces
#menu_Interligne_1
#menu_Interligne_1_5
#menu_Interligne_2_0
#menu_Zoom_10
#menu_Zoom_25
#menu_Zoom_50
#menu_Zoom_75
#menu_Zoom_100
#menu_Zoom_125
#menu_Zoom_150
#menu_Zoom_200
#menu_Zoom_400
; images
#ico_New
#ico_Open
#ico_Save
#ico_Print
#ico_Font
#ico_Search
#ico_Cut
#ico_Copy
#ico_Paste
#ico_Undo
#ico_Redo
#ico_Bold
#ico_Italic
#ico_Underline
#ico_Strikeout
#ico_Left
#ico_Center
#ico_Right
#ico_SelectAll
#ico_Indent
#ico_Outdent
#ico_List
EndEnumeration
Global.RichEdit Editeur; Variable d'objet pour notre contrôle RTF
Global.s Fichier, Titre.s = "PurePad par Micoute"
Global.i Resultat, i, j, mx, my, align, j, num_pal, id_im, l_pal, h_pal, x, y, l, h, espace, id_palette, num_palette, num_coul, Couleur
Global Dim Couleur_Base(10)
Global Dim Couleur_perso(2,10)
CatchImage(#ico_New, ?ico_new)
CatchImage(#ico_Open, ?ico_open)
CatchImage(#ico_Save, ?ico_save)
CatchImage(#ico_Print, ?ico_print)
CatchImage(#ico_Font, ?ico_font)
CatchImage(#ico_Search, ?ico_search)
CatchImage(#ico_Cut, ?ico_cut)
CatchImage(#ico_Copy, ?ico_copy)
CatchImage(#ico_Paste, ?ico_paste)
CatchImage(#ico_Undo, ?ico_undo)
CatchImage(#ico_Redo, ?ico_redo)
CatchImage(#ico_Bold, ?ico_bold)
CatchImage(#ico_Italic, ?ico_italic)
CatchImage(#ico_Underline, ?ico_underline)
CatchImage(#ico_Strikeout, ?ico_strikeout)
CatchImage(#ico_Left, ?ico_left)
CatchImage(#ico_Center, ?ico_center)
CatchImage(#ico_Right, ?ico_right)
CatchImage(#ico_SelectAll, ?ico_selectall)
CatchImage(#ico_Indent, ?ico_indent)
CatchImage(#ico_Outdent, ?ico_outdent)
CatchImage(#ico_List, ?ico_list)
Procedure Initialise_Couleur(); Couleur de la palette de base
i=0
Couleur_Base(i) = $000000 : i=i+1
Couleur_Base(i) = $000001 : i=i+1
Couleur_Base(i) = $0000FF : i=i+1
Couleur_Base(i) = $00FFFF : i=i+1
Couleur_Base(i) = $FF00FF : i=i+1
Couleur_Base(i) = $00FF00 : i=i+1
Couleur_Base(i) = $FFFF00 : i=i+1
Couleur_Base(i) = $FF0000 : i=i+1
Couleur_Base(i) = $008000 : i=i+1
Couleur_Base(i) = $FFFFFF : i=i+1
For i=0 To 2
For j=0 To 9
Couleur_perso(i,j)=$E26152 ; bleu foncé
Next
Next
EndProcedure
Procedure Create_palette(id_im,l,h)
Select id_im
Case #im_coul_texte
num_pal=0
Case #im_coul_fond
num_pal=1
Case #im_coul_page
num_pal=2
EndSelect
CreateImage(id_im,l,h+10)
StartDrawing(ImageOutput(id_im))
Box(0,0+10,l,h,$C0C0C0) ; fond gris clair
For i=0 To 10
Box(i*l/10,0+10,l/10-1,h/2-1,$9A9A9A) ; gris
Next
Box(1,0+1+10,l/10-3,h/2-3,$FFFFFF) ; blanc
LineXY(1,0+1+10,l/10-3,h/2-3+10,$0000FF)
For i=1 To 10
Box(i*l/10+1,0+1+10,l/10-3,h/2-3,Couleur_Base(i))
Next
For i=0 To 10
Box(i*l/10+1,h/2+1+10,l/10-3,h/2-3,Couleur_perso(num_pal,i))
Next
StopDrawing()
SetGadgetState(id_im,ImageID( id_im))
EndProcedure
Procedure Dessine_palette()
x=5
y=GetSystemMetrics_(#SM_CYSCREEN)-780
l=GetSystemMetrics_(#SM_CXSCREEN)-20
h=80
espace=5
l_pal=l/3-espace
h_pal=40
;OpenWindow(#Fenetre_principale, x, Y, l, h, "Palette de couleurs")
TextGadget(#PB_Any,x,y+h,l_pal,h_pal,"Couleur du texte", #PB_Text_Center)
TextGadget(#PB_Any,x+l_pal+espace,y+h,l_pal,h_pal,"Couleur du fond du texte", #PB_Text_Center)
TextGadget(#PB_Any,x+2*l_pal+2*espace,y+h,l_pal,h_pal,"Couleur de la page", #PB_Text_Center)
ImageGadget(#im_coul_texte,x,20,l_pal,h_pal,0)
Create_palette(#im_coul_texte,l_pal,h_pal)
ImageGadget(#im_coul_fond,x+l_pal+espace,20,l_pal,h_pal,0)
Create_palette(#im_coul_fond,l_pal,h_pal)
ImageGadget(#im_coul_page,x+2*l_pal+2*espace,20,l_pal,h_pal,0)
Create_palette(#im_coul_page,l_pal,h_pal)
;TextGadget(#PB_Any,x+l_pal+espace,20+h_pal,l_pal,20,"Clic droit pour choisir une Couleur", #PB_Text_Center)
EndProcedure
Procedure AddMenuEdition()
MenuItem(#menu_Rechercher, "Chercher ...", ImageID(#ico_Search))
MenuBar()
MenuItem(#menu_Couper, "Couper", ImageID(#ico_Cut))
MenuItem(#menu_Copier, "Copier", ImageID(#ico_Copy))
MenuItem(#menu_Coller, "Coller", ImageID(#ico_Paste))
MenuBar()
MenuItem(#menu_SelectionnerTout, "Sélectionner tout", ImageID(#ico_SelectAll))
MenuBar()
MenuItem(#menu_Interligne_1 , "Interligne" + " 1.0")
MenuItem(#menu_Interligne_1_5, "Interligne" + " 1.5")
MenuItem(#menu_Interligne_2_0, "Interligne" + " 2.0")
EndProcedure
Procedure AddMenuZoom()
MenuItem(#menu_Zoom_10, "10%")
MenuItem(#menu_Zoom_25, "25%")
MenuItem(#menu_Zoom_50, "50%")
MenuItem(#menu_Zoom_75, "75%")
MenuItem(#menu_Zoom_100, "100%")
MenuItem(#menu_Zoom_125, "125%")
MenuItem(#menu_Zoom_150, "150%")
MenuItem(#menu_Zoom_200, "200%")
MenuItem(#menu_Zoom_400, "400%")
EndProcedure
Procedure SetStatusbarText()
If Editeur
StatusBarText(#Barre_Statut, 0, " " + "Ligne" + " " + Str(Editeur\GetCursorY()))
StatusBarText(#Barre_Statut, 1, " " + "Colonne" + " " + Str(Editeur\GetCursorX()))
StatusBarText(#Barre_Statut, 4, " Nombre de mots: " + Str(Editeur\CountWords()))
If Couleur = 0
Couleur = Editeur\GetTextColor()
EndIf
StatusBarText(#Barre_Statut, 5, Editeur\GetFont() + "("+Str(Editeur\GetFontSize())+") Style("+RSet(Hex(Editeur\GetFontStyle()),3,"0")+") Couleur texte("+RSet(Hex(Editeur\GetTextColor()),6,"0")+") Couleur fond("+RSet(Hex(Editeur\GetTextBackColor()),6,"0")+")")
Else
StatusBarText(#Barre_Statut, 0, " " + "Ligne" + " 1")
StatusBarText(#Barre_Statut, 1, " " + "Colonne" + " 1")
StatusBarText(#Barre_Statut, 2, " Mot: ")
StatusBarText(#Barre_Statut, 3, " Zoom: 100%")
StatusBarText(#Barre_Statut, 4, " Mots: 0 Lignes: 0")
StatusBarText(#Barre_Statut, 5, " ")
EndIf
EndProcedure
Macro UpdateToolbar()
SetToolBarButtonState(#Barre_D_Outils, #menu_Gras, Editeur\GetFontStyle() & #PB_Font_Bold)
SetToolBarButtonState(#Barre_D_Outils, #menu_Italique, Editeur\GetFontStyle() & #PB_Font_Italic)
SetToolBarButtonState(#Barre_D_Outils, #menu_Souligne,Editeur\GetFontStyle() & #PB_Font_Underline)
SetToolBarButtonState(#Barre_D_Outils, #menu_Barre, Editeur\GetFontStyle() & #PB_Font_StrikeOut)
SetToolBarButtonState(#Barre_D_Outils, #menu_Gauche, Editeur\IsAlignLeft() )
SetToolBarButtonState(#Barre_D_Outils, #menu_Centrer, Editeur\IsAlignCenter() )
SetToolBarButtonState(#Barre_D_Outils, #menu_Droite, Editeur\IsAlignRight() )
EndMacro
Procedure CentrerTitreFenetre(TitreFenetre.s, NumeroFenetre)
Protected NCM.NonClientMetrics, ValeurRetournee, DcSauve, AncObjet
Protected hFonteConsole, HdcCourant, TailleTs.SIZE
Protected Espace_a_remplir, RectFenetre.Rect, NbrEspaceDemandes
NCM\cbSize = SizeOf(NCM)
ValeurRetournee = SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, 0, @NCM, 0)
hFonteConsole = CreateFontIndirect_(@NCM\lfCaptionFont)
If hFonteConsole <> 0
HdcCourant = GetDC_(WindowID(NumeroFenetre))
DcSauve = SaveDC_(HdcCourant)
AncObjet = SelectObject_(HdcCourant, hFonteConsole)
ValeurRetournee = GetWindowRect_(WindowID(NumeroFenetre), @RectFenetre)
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, @TitreFenetre, Len(TitreFenetre), @TailleTs)
Espace_a_remplir = RectFenetre\right - RectFenetre\left - 4 * NCM\iCaptionWidth - TailleTs\cx
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, " ", 1, @TailleTs)
NbrEspaceDemandes = (Espace_a_remplir / TailleTs\cx)/2
If NbrEspaceDemandes > 0
TitreFenetre = Space(NbrEspaceDemandes) + TitreFenetre
EndIf
EndIf
ValeurRetournee = SetWindowText_(WindowID(NumeroFenetre), TitreFenetre)
ValeurRetournee = RestoreDC_(HdcCourant, DcSauve) ; mettre en ordre
ValeurRetournee = DeleteObject_(hFonteConsole)
ReleaseDC_(WindowID(NumeroFenetre), HdcCourant)
EndProcedure
Initialise_Couleur()
OpenWindow(#Fenetre_principale, 0, 0, GetSystemMetrics_(#SM_CXSCREEN)-20, GetSystemMetrics_(#SM_CYSCREEN)-40, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
CentrerTitreFenetre(Titre, 0)
Dessine_palette()
If CreateImageMenu(#Menu, WindowID(#Fenetre_principale))
MenuTitle("Fichier")
MenuItem(#menu_Nouveau, "Nouveau", ImageID(#ico_New))
MenuItem(#menu_Ouvrir, "Ouvrir", ImageID(#ico_Open))
MenuItem(#menu_Sauvegarde, "Sauvegarder", ImageID(#ico_Save))
MenuBar()
MenuItem(#menu_Imprimer, "Imprimer", ImageID(#ico_Print))
MenuItem(#menu_Police, "Sélectionner police", ImageID(#ico_Font))
MenuBar()
MenuItem(#menu_Quitter, "Quitter le programme")
MenuTitle("Edition")
AddMenuEdition()
MenuTitle("Zoom")
AddMenuZoom()
EndIf
If CreatePopupImageMenu(#Menu_PopUp, WindowID(#Fenetre_principale))
AddMenuEdition()
MenuBar()
AddMenuZoom()
EndIf
If CreateToolBar(#Barre_D_Outils, WindowID(#Fenetre_principale))
ToolBarImageButton(#menu_Nouveau, ImageID(#ico_New))
ToolBarToolTip(#Barre_D_Outils, #menu_Nouveau, "Nouveau fichier")
ToolBarImageButton(#menu_Ouvrir, ImageID(#ico_Open))
ToolBarToolTip(#Barre_D_Outils, #menu_Ouvrir, "Ouvrir fichier")
ToolBarImageButton(#menu_Sauvegarde, ImageID(#ico_Save))
ToolBarToolTip(#Barre_D_Outils, #menu_Sauvegarde, "Sauvegarder fichier")
ToolBarSeparator()
ToolBarImageButton(#menu_Imprimer, ImageID(#ico_Print))
ToolBarToolTip(#Barre_D_Outils, #menu_Imprimer, "Imprimer")
ToolBarImageButton(#menu_Police, ImageID(#ico_Font))
ToolBarToolTip(#Barre_D_Outils, #menu_Police, "Sélectionner police")
ToolBarImageButton(#menu_Rechercher, ImageID(#ico_Search))
ToolBarToolTip(#Barre_D_Outils, #menu_Rechercher, "Chercher ...")
ToolBarSeparator()
ToolBarImageButton(#menu_Couper, ImageID(#ico_Cut))
ToolBarToolTip(#Barre_D_Outils, #menu_Couper, "Couper")
ToolBarImageButton(#menu_Copier, ImageID(#ico_Copy))
ToolBarToolTip(#Barre_D_Outils, #menu_Copier, "Copier")
ToolBarImageButton(#menu_Coller, ImageID(#ico_Paste))
ToolBarToolTip(#Barre_D_Outils, #menu_Coller, "Coller")
ToolBarSeparator()
ToolBarImageButton(#menu_SelectionnerTout, ImageID(#ico_SelectAll))
ToolBarToolTip(#Barre_D_Outils, #menu_SelectionnerTout, "Sélectionner tout")
ToolBarSeparator()
ToolBarImageButton(#menu_Defaire, ImageID(#ico_Undo))
ToolBarToolTip(#Barre_D_Outils, #menu_Defaire, "Défaire")
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, #True)
ToolBarImageButton(#menu_Refaire, ImageID(#ico_Redo))
ToolBarToolTip(#Barre_D_Outils, #menu_Refaire, "Refaire")
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
ToolBarSeparator()
ToolBarImageButton(#menu_Gras, ImageID(#ico_Bold), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Gras, "Gras")
ToolBarImageButton(#menu_Italique, ImageID(#ico_Italic), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Italique, "Italique")
ToolBarImageButton(#menu_Souligne, ImageID(#ico_Underline), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Souligne, "Souligné")
ToolBarImageButton(#menu_Barre, ImageID(#ico_Strikeout), #PB_ToolBar_Toggle)
ToolBarToolTip(#Barre_D_Outils, #menu_Barre, "Barré")
ToolBarSeparator()
ToolBarImageButton(#menu_Gauche, ImageID(#ico_Left))
ToolBarToolTip(#Barre_D_Outils, #menu_Gauche, "Aligner à gauche")
ToolBarImageButton(#menu_Centrer, ImageID(#ico_Center))
ToolBarToolTip(#Barre_D_Outils, #menu_Centrer, "Centrer")
ToolBarImageButton(#menu_Droite, ImageID(#ico_Right))
ToolBarToolTip(#Barre_D_Outils, #menu_Gauche, "Aligner à droite")
ToolBarSeparator()
ToolBarImageButton(#menu_Tabulation, ImageID(#ico_Indent))
ToolBarToolTip(#Barre_D_Outils, #menu_Tabulation, "Augmenter le retrait")
ToolBarImageButton(#menu_Retrait, ImageID(#ico_Outdent))
ToolBarToolTip(#Barre_D_Outils, #menu_Retrait, "Diminuer le retrait")
ToolBarSeparator()
ToolBarImageButton(#menu_Puces, ImageID(#ico_List))
ToolBarToolTip(#Barre_D_Outils, #menu_Puces, "Liste")
EndIf
If CreateStatusBar(#Barre_Statut, WindowID(#Fenetre_principale))
AddStatusBarField(80)
AddStatusBarField(80)
AddStatusBarField(200)
AddStatusBarField(80)
AddStatusBarField(140)
AddStatusBarField(#PB_Ignore)
SetStatusbarText()
EndIf
Editeur = New_RichEdit(0, 80,GetSystemMetrics_(#SM_CXSCREEN)-15, GetSystemMetrics_(#SM_CYSCREEN)-165); nous pouvons ignorer la taille, s'adapte à la taille de l'événement!
Editeur\SetLeftMargin(5)
Editeur\SetRightMargin(5)
Editeur\SetInterface()
Repeat ;- Boucle d'évènements
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
;Case #PB_Event_SizeWindow
; Editeur\Resize(0, ToolBarHeight(#Barre_D_Outils), WindowWidth(#Fenetre_principale), WindowHeight(#Fenetre_principale) - ToolBarHeight(#Barre_D_Outils) - StatusBarHeight(#Barre_Statut) - MenuHeight())
Case #WM_LBUTTONUP
If GetActiveGadget() = Editeur\GetID()
SetStatusbarText()
UpdateToolbar()
EndIf
Case #WM_MOUSEMOVE
mx = WindowMouseX(#Fenetre_principale) - GadgetX(Editeur\GetID())
my = WindowMouseY(#Fenetre_principale) - GadgetY(Editeur\GetID())
StatusBarText(#Barre_Statut, 2, " Mot: " + Editeur\GetWordUnderMouse(mx,my))
;Case #WM_RBUTTONDOWN
; If GetActiveGadget() = Editeur\GetID()
; DisplayPopupMenu(#Menu_PopUp, WindowID(#Fenetre_principale))
; EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case Editeur\GetID()
If EventType() = #PB_EventType_Change; Ce n'est pas un gadget éditeur prise en charge normale
SetStatusbarText()
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
UpdateToolbar()
EndIf
Case #im_coul_texte ;- Couleur texte
id_palette = #im_coul_texte
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextColor(Couleur)
Dessine_palette()
EndSelect
Case #im_coul_fond ;- Couleur fond
id_palette = #im_coul_fond
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextBackColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetTextBackColor(Couleur)
Dessine_palette()
EndSelect
Case #im_coul_page ;- Couleur page
id_palette = #im_coul_page
num_palette=id_palette-#im_coul_texte
num_coul=(WindowMouseX(#Fenetre_principale)-GadgetX(id_palette))/(GadgetWidth(id_palette)/10)
Select EventType()
Case #PB_EventType_LeftClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur=Couleur_Base(num_coul)
Else
Couleur=Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetCtrlBackColor(Couleur)
Case #PB_EventType_RightClick
If WindowMouseY(#Fenetre_principale)-GadgetY(id_palette)<GadgetHeight(id_palette)/2
Couleur_Base(num_coul)=ColorRequester()
Couleur = Couleur_Base(num_coul)
Else
Couleur_perso(num_palette,num_coul)=ColorRequester()
Couleur = Couleur_perso(num_palette,num_coul)
EndIf
Editeur\SetCtrlBackColor(Couleur)
Dessine_palette()
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #menu_Nouveau
Editeur\Clear()
SetStatusbarText()
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
Case #menu_Ouvrir
Fichier = OpenFileRequester("Sélectionner fichier RTF", "", "RichText (*.rtf)|*.rtf", 0)
If Fichier
Editeur\LoadRTF(Fichier)
SetStatusbarText()
CentrerTitreFenetre(Fichier, 0)
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
EndIf
Case #menu_Sauvegarde
Fichier = SaveFileRequester("Sauvegarder sous", "", "RichText (*.rtf)|*.rtf", 0)
If Fichier
Editeur\SaveRTF(Fichier)
DisableToolBarButton(#Barre_D_Outils, #menu_Defaire, Editeur\CanUndo() ! 1)
DisableToolBarButton(#Barre_D_Outils, #menu_Refaire, #True)
EndIf
Case #menu_Quitter
CloseWindow(#Fenetre_principale)
End
Case #menu_Imprimer
Editeur\Print("PurePad", #True); Impression avec Dialogue
Case #menu_Police
Resultat = FontRequester(Editeur\GetFont(), Editeur\GetFontSize(), #PB_FontRequester_Effects)
If Resultat
Editeur\SetFont(SelectedFontName())
Editeur\SetFontSize(SelectedFontSize())
Editeur\SetFontStyle(SelectedFontStyle())
Editeur\SetTextColor(SelectedFontColor())
SetToolBarButtonState(#Barre_D_Outils, #menu_Gras, SelectedFontStyle() & #PB_Font_Bold)
SetToolBarButtonState(#Barre_D_Outils, #menu_Italique, SelectedFontStyle() & #PB_Font_Italic)
SetToolBarButtonState(#Barre_D_Outils, #menu_Souligne, SelectedFontStyle() & #PB_Font_Underline)
SetToolBarButtonState(#Barre_D_Outils, #menu_Barre, SelectedFontStyle() & #PB_Font_StrikeOut)
EndIf
Case #menu_Rechercher
Fichier = InputRequester("Recherche PurePad", "Insérer le texte à chercher!", "")
If Fichier
If Editeur\FindText(Fichier)
MessageBeep_(#MB_OK)
Else
MessageBeep_(#MB_ICONERROR)
EndIf
EndIf
Case #menu_Couper
Editeur\Cut()
Case #menu_Copier
Editeur\Copy()
Case #menu_Coller
Editeur\Paste()
Case #menu_Defaire
Editeur\Undo()
DisableToolBarButton(0, #menu_Refaire, #False)
Case #menu_Refaire
Editeur\Redo()
Case #menu_SelectionnerTout
Editeur\SelectAll()
Case #menu_Puces
Editeur\SetBulleted()
Case #menu_Gras, #menu_Italique, #menu_Souligne, #menu_Barre
Resultat = 0
If GetToolBarButtonState(#Barre_D_Outils, #menu_Gras)
Resultat | #PB_Font_Bold
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Italique)
Resultat | #PB_Font_Italic
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Souligne)
Resultat | #PB_Font_Underline
EndIf
If GetToolBarButtonState(#Barre_D_Outils, #menu_Barre)
Resultat | #PB_Font_StrikeOut
EndIf
Editeur\SetFontStyle(Resultat)
Case #menu_Gauche
Editeur\SetAlignment()
Case #menu_Centrer
Editeur\SetAlignment(#PB_Text_Center)
Case #menu_Droite
Editeur\SetAlignment(#PB_Text_Right)
Case #menu_Tabulation
Editeur\Indent()
Case #menu_Retrait
Editeur\Outdent()
Case #menu_Zoom_10
Editeur\SetZoom(10)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_25
Editeur\SetZoom(25)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_50
Editeur\SetZoom(50)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_75
Editeur\SetZoom(75)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_100
Editeur\SetZoom(100)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_125
Editeur\SetZoom(125)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_150
Editeur\SetZoom(150)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_200
Editeur\SetZoom(200)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Zoom_400
Editeur\SetZoom(400)
StatusBarText(#Barre_Statut, 3, " Zoom: " + Str(Editeur\GetZoom()) +"%")
Case #menu_Interligne_1
Editeur\SetLineSpacing(1.0)
Case #menu_Interligne_1_5
Editeur\SetLineSpacing(1.5)
Case #menu_Interligne_2_0
Editeur\SetLineSpacing(2.0)
EndSelect
EndSelect
ForEver
End
DataSection
ico_new: IncludeBinary "Icones\New.ico"
ico_open: IncludeBinary "Icones\Open.ico"
ico_save: IncludeBinary "Icones\Save.ico"
ico_print: IncludeBinary "Icones\Printer.ico"
ico_font: IncludeBinary "Icones\FontDialog.ico"
ico_search: IncludeBinary "Icones\Find.ico"
ico_cut: IncludeBinary "Icones\Cut.ico"
ico_copy: IncludeBinary "Icones\Copy.ico"
ico_paste: IncludeBinary "Icones\Paste.ico"
ico_undo: IncludeBinary "Icones\Undo.ico"
ico_redo: IncludeBinary "Icones\Redo.ico"
ico_bold_de: IncludeBinary "Icones\Bold_DE.ico"
ico_bold: IncludeBinary "Icones\Bold.ico"
ico_italic_de: IncludeBinary "Icones\Italic_DE.ico"
ico_italic: IncludeBinary "Icones\Italic.ico"
ico_underline: IncludeBinary "Icones\Underline.ico"
ico_strikeout: IncludeBinary "Icones\Strikeout.ico"
ico_left: IncludeBinary "Icones\Left.ico"
ico_center: IncludeBinary "Icones\Center.ico"
ico_right: IncludeBinary "Icones\Right.ico"
ico_selectall: IncludeBinary "Icones\SelectAll.ico"
ico_indent: IncludeBinary "Icones\Indent.ico"
ico_outdent: IncludeBinary "Icones\Outdent.ico"
ico_list: IncludeBinary "Icones\List.ico"
EndDataSection
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: le format RTF
Code et exemples à l'adresse suivante: http://dl.free.fr/i9QTCMxFe
j'espère que ça va te faire plaisir, ainsi qu'à tous les autres qui seront intéressés !
j'espère que ça va te faire plaisir, ainsi qu'à tous les autres qui seront intéressés !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
-
- Messages : 1501
- Inscription : dim. 18/avr./2004 15:04
- Localisation : sud de la france
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: le format RTF
Merci du partage de ce travail impréssionant 

Re: le format RTF
Qui peut le plus, peut le moins, donc il y aura du tri à faire !
Et ne sommes-nous pas sur un forum où on peut tout partager ?
En tous cas, c'est ce que je souhaite et conseille vivement !
C'est dans ce sens que je pense qu'on devrait avoir intérêt à ce que les autres soient plus riches, car on serait encore plus riche d'amis !
Et ne sommes-nous pas sur un forum où on peut tout partager ?
En tous cas, c'est ce que je souhaite et conseille vivement !
C'est dans ce sens que je pense qu'on devrait avoir intérêt à ce que les autres soient plus riches, car on serait encore plus riche d'amis !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: le format RTF
Vivement une bonne engueulade bien franchouille parce là on commence à se faire chier. :pMicoute a écrit :C'est dans ce sens que je pense qu'on devrait avoir intérêt à ce que les autres soient plus riches, car on serait encore plus riche d'amis !
http://www.youtube.com/watch?v=zoDi3qwFtms
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: le format RTF
on dit aussi
le savoir est la seule chose qui augmente quand on la partage
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: le format RTF
A propos de Comtois
, Ce lien http://purebasic.developpez.com A voir pour les nouveaux ainsi que les anciens qui se cantonnent à rester sur ce forum :p
Les sources référencés par comtois : http://purebasic.developpez.com/sources/
Concernant du code sur le format RTF. Un éditeur ainsi que d'autres exemples consacrés au format RTF à télécharger sur ce lien : http://purebasic.developpez.com/sources/?page=RichEdit (Téléchargement en bas de la page)

Les sources référencés par comtois : http://purebasic.developpez.com/sources/
Concernant du code sur le format RTF. Un éditeur ainsi que d'autres exemples consacrés au format RTF à télécharger sur ce lien : http://purebasic.developpez.com/sources/?page=RichEdit (Téléchargement en bas de la page)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: le format RTF
Yep ! Merci à Micoute et à Comtois 

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: le format RTF
falsam a écrit :Vivement une bonne engueulade bien franchouille parce là on commence à se faire chier. :pMicoute a écrit :C'est dans ce sens que je pense qu'on devrait avoir intérêt à ce que les autres soient plus riches, car on serait encore plus riche d'amis !




J'adore ces acteurs !!
Blier rien que le voir...trop du bonheur "On tourne en rond.."
http://www.youtube.com/watch?v=b_PB7612 ... t&index=38
Re: le format RTF
salut
J4ai testé les exemples richedit et j'ai ajouté quelques bricoles, histoire d'avoir un wordpad un peu amélioré ^^.
ça marche super bien avec la reconnaissance vocale.
Par contre, je n'ai pas réussi à ajouter une marge en haut et en bas au gadget editor, savez-vous comment on fait ?
je cherche l'équivalent de ça, mais en haut et en bas :
Pour infos, la procédure dans le zip donné plus haut ressemble à ça (pour la marge droite) :
J'ai trouvé le code suivant,mais il ne marche pas avec l'include du zip (richedit.pbi) :
Si vous avez une solution, n'hésitez pas 
Merci
J4ai testé les exemples richedit et j'ai ajouté quelques bricoles, histoire d'avoir un wordpad un peu amélioré ^^.
ça marche super bien avec la reconnaissance vocale.
Par contre, je n'ai pas réussi à ajouter une marge en haut et en bas au gadget editor, savez-vous comment on fait ?
je cherche l'équivalent de ça, mais en haut et en bas :
Code : Tout sélectionner
SendMessage_(GadgetID(1), #EM_SETMARGINS, #EC_LEFTMARGIN, 20)
Code : Tout sélectionner
Procedure RichEdit_SetRightMargin(*this.RichEditClassTemplate, pixel.w, PageW, PageH, LeftM, TopM, RightM, BottomM)
SendMessage_(*this\hWnd, #EM_SETMARGINS, #EC_RIGHTMARGIN, $FFFF * pixel)
EndProcedure
J'ai trouvé le code suivant,mais il ne marche pas avec l'include du zip (richedit.pbi) :
Code : Tout sélectionner
r.RECT
r\left = LeftM
r\top = TopM
r\right = PageW - RightM
r\bottom = PageH - BottomM
width = r\right - r\left
height = r\bottom - r\top
SendMessage_(*this\hWnd, #EM_SETRECTNP, 0, r)

Merci
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: le format RTF
Salut Blendman , perso j'aurais passé l'adresse de r en paramètre :
qu'est ce que ca donne ?
qu'est ce que ca donne ?
Code : Tout sélectionner
r.RECT
r\left = LeftM
r\top = TopM
r\right = PageW - RightM
r\bottom = PageH - BottomM
width = r\right - r\left
height = r\bottom - r\top
SendMessage_(*this\hWnd, #EM_SETRECTNP, 0, @r)