il manque le choix (taille du taquet), par exemple via un menu ou un inputrequester()Mesa a écrit :Il y a quelque chose qui m'échappe car mon code fait exactement cela.En fait, dans Openoffice, on peut régler la taille d'une tabulation. Et dès qu'on appuie sur tab, cela crée une tabulation de la taille désiré. Je voudrai pouvoir faire la même chose ^^.
Ce n'est pas ce que je recherchePar contre, est-ce que editorgadget est capable de gérer un jeu de taquets différents pour chaque paragraphes... ?

Moi, le fait que tous les taquets soient idem pour les paragraphes me va, ce que je voudrais c'est juste pouvoir changer la taille de ce taquet, comme dans open office ^^
J'ai testé ce code, mais ça ne marche pas et en plus, ça bloque le problème (l'editorgadget). Je suppose que ce n'est pas la bonne technique, mais comment changer le taquet utilisé ?
Code : Tout sélectionner
text.settextex
#ST_SELECTION=2
text\flags=#ST_SELECTION
text\codepage=#CP_ACP
Texte.s="{\rtf\tab "
Procedure LOWORD(Value)
ProcedureReturn Value & $FFFF
EndProcedure
Procedure HIWORD(Value)
ProcedureReturn (Value >> 16) & $FFFF
EndProcedure
Procedure MAKELONG(low, high)
ProcedureReturn low | (high<<16)
EndProcedure
Procedure.f initTaquetTab()
Value=GetDialogBaseUnits_()
baseunitX=LOWORD(Value)
baseunitY=HIWORD(Value)
;The horizontal base unit returned by GetDialogBaseUnits is equal to the average
;width, in pixels, of the characters in the system font;
;the vertical base unit is equal To the height, in pixels, of the font.
hdc = GetDC_(GetDesktopWindow_())
If hdc
Ecrdpihz.l = GetDeviceCaps_(hdc, #LOGPIXELSX)
EndIf
; If hdc
; Ecrdpivt.l = GetDeviceCaps_(hdc, #LOGPIXELSY)
; EndIf
ReleaseDC_(GetDesktopWindow_(), hdc)
; 1 horizontal Dialog Template Unit = (DPI écran / 96 * baseunitX)/4
; 1 vertical Dialog Template Unit = (DPI écran / 96 * baseunitY)/8
pixelX.f = (Ecrdpihz/96)*baseunitX/4
; pixelY.f = (Ecrdpihz/96)*baseunitX/8
ProcedureReturn pixelX
EndProcedure
facteur.f=initTaquetTab() ; transforme un nombre de caractère en dialog template units
; Si ModeTabulation = 0 alors taquets de tabulation tous les 32 dialog template units
; Si ModeTabulation = 1 alors taquets de tabulation tous les "taquet1" dialog template units
; Si ModeTabulation > 1 alors x taquets de tabulation chacun à la distance "taquets(x)"
;ModeTabulation = 0
;ModeTabulation = 1
ModeTabulation = 5 ; 5 taquets de tabulation
Dim taquets(5) ; 5 taquets de tabulation en nombre de caractères
taquets(0) = 5*facteur
taquets(1) = 10*facteur
taquets(2) = 15*facteur
taquets(3) = 20*facteur
taquets(4) = 25*facteur
taquet1=17 * facteur ; 1 taquet de tabulation à 5 caractères
If OpenWindow(0,0,0,320,220,"Simulate Tab",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget (0,10,60,300,140)
CreateImage(0,300,20)
StartDrawing(ImageOutput(0))
Box(0,0,300,20,#White)
Line(0,10,300,1,0)
For i=0 To 30
Line(10*i,0,1,20,0)
Next i
StopDrawing()
ImageGadget(1, 10, 40, 300, 20,ImageID(0))
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
;SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets())
; ModeTabulation
; The number of tab stops contained in the Array. If this parameter is zero,
; @taquet1 parameter is ignored And Default tab stops are set at every 32 dialog
; template units. If this parameter is 1, tab stops are set at every n dialog
; template units, where n is the distance pointed To by the @taquet1 parameter.
; If this parameter is greater than 1, @taquets() is a pointer To an Array of tab stops.
;
; @taquet1 ou @taquets()
; A pointer To an Array of unsigned integers specifying the tab stops, in dialog
; template units. If the ModeTabulation parameter is 1, this parameter is a pointer To an
; unsigned integer containing the distance between all tab stops, in dialog template
; units.
AddGadgetItem(0, -1, "Texte$")
CreateMenu(0,WindowID(0))
MenuTitle("tabulation")
MenuItem(0,"tab = 5")
MenuItem(1,"tab = 7")
MenuItem(2,"tab = 10")
MenuItem(3,"tab = 20")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget
Case 0
EndSelect
Case #WM_KEYDOWN
If EventwParam()=9
; Simulation du Tab avec du tag Rich Edit
SendMessage_(GadgetID(0), #EM_SETTEXTEX, text.settextex, @Texte)
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 0
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(1))
Case 1
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(2))
Case 2
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(3))
Case 3
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(4))
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit=1
EndIf