Testez ce code et allez en dessous :
Code : Tout sélectionner
Procedure AC_Callback(hWnd, Msg, wParam, lParam)
OriginProc.l= GetProp_(hWnd, "OriginProc")
Select Msg
Case #WM_CHAR
; position général du curseur
SendMessage_(hwnd,#EM_GETSEL,@posx,@posy)
; Maintenant on récupère l'index de la ligne
index_line = SendMessage_(hWnd,#EM_LINEFROMCHAR,-1,0)
; Position du curseur sur la ligne
index_char = posx - SendMessage_(hWnd,#EM_LINEINDEX,SendMessage_(hWnd,#EM_LINEFROMCHAR,posy,0),0)
; on récupère le texte de la ligne
tampon.s=Space(65000)
PokeW(@tampon,64999)
SendMessage_(hWnd,#EM_GETLINE,index_line,@tampon)
If Len(tampon) > 0
pos1=FindString(tampon," ",index_char+1)
If pos1 <>index_char+1
If pos1
tampon=PeekS(@tampon,pos1-1)
EndIf
*pointeur=@tampon+Len(tampon)-1
While *pointeur>=@tampon
If PeekS(*pointeur,1)=" "
Break
EndIf
*pointeur=*pointeur-1
Wend
Longueur = @tampon+Len(tampon)-*pointeur-1
mot.s = PeekS(*pointeur+1,Longueur)
If Len(mot) >= 3
SendMessage_(hWnd,#EM_EXGETSEL,0,@CHARRANGE.CHARRANGE)
SendMessage_(hWnd,#EM_POSFROMCHAR,@point.point,CHARRANGE\CPmin)
ClientToScreen_(hWnd,@point.point)
Debug mot
; +5 : doit etre la taille de la bordure de la fenetre
; -15 : doit etre la taille de la barre de titre
; Debug GetSystemMetrics_(#SM_CXBORDER)
ListViewGadget(10,point\x-WindowX(0)+GetSystemMetrics_(#SM_CXBORDER),point\y-WindowY(0)-GetSystemMetrics_(#SM_CYSMSIZE)-GetSystemMetrics_(#SM_CYBORDER),50,50)
For i=0 To 10
AddGadgetItem(10,i,Str(i))
Next
EndIf
EndIf
Debug "------"
EndIf
EndSelect
ProcedureReturn CallWindowProc_(OriginProc,hWnd,Msg,wParam,lParam)
EndProcedure
Procedure AC_Start(Gadget)
OriginProc = SetWindowLong_(GadgetID(Gadget), #GWL_WNDPROC, @AC_Callback())
SetProp_(GadgetID(Gadget), "OriginProc", OriginProc)
EndProcedure
If OpenWindow(0, 100, 200, 400, 400, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
EditorGadget(1,10,10,200,200)
EndIf
AC_Start(1)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
ElseIf EventID=#PB_Event_Gadget
GadgetID = EventGadget()
If GadgetID = 1
EndIf
EndIf
Until Quit = 1
EndIf
End
mais :
- comment la garder au dessus tout en écrivant sur l'editorgadget ?
- comment la placer correctement ?
- comment recevoir dans le AC_CallBack les évènements pour la listview ? (créer un autre callback en subclassing ?)
Merci d'avance pour votre aide...