Page 1 sur 1
Concept pour LibEditorPlus : AutoCompletion
Publié : dim. 03/avr./2005 22:32
par Progi1984
Voilà, je souhaiteraisa ajouter cette fonctionnalité à ma librairie LibEditorPlus mais je ne vois pas comment faire donc si quelques uns avait l'idée de m'aider par des idées, des bouts de codes, des axes à suivre, cela m'aiderait ! Merci !
PS : A toutes les améliorations que l'on m'a demandé, elles seront terminées bientot ! Enfin j'espère !
Re: Concept pour LibEditorPlus : AutoCompletion
Publié : lun. 04/avr./2005 17:24
par Oliv
Progi1984 a écrit :Voilà, je souhaiteraisa ajouter cette fonctionnalité à ma librairie LibEditorPlus mais je ne vois pas comment faire donc si quelques uns avait l'idée de m'aider par des idées, des bouts de codes, des axes à suivre, cela m'aiderait ! Merci !
PS : A toutes les améliorations que l'on m'a demandé, elles seront terminées bientot ! Enfin j'espère !
Les sources de JaPBe
Publié : lun. 04/avr./2005 18:34
par Progi1984
JaPBe est basé sur la DLL de Scintilla que j'essaie de reproduire car je n'arrive pas du tout à l'utiliser !
Publié : lun. 04/avr./2005 19:31
par Oliv
Progi1984 a écrit :JaPBe est basé sur la DLL de Scintilla que j'essaie de reproduire car je n'arrive pas du tout à l'utiliser !
arf ok dsl

Publié : lun. 04/avr./2005 21:01
par Progi1984
Pas grave mais j'attends vos idées...
Publié : lun. 04/avr./2005 22:09
par Backup
c'est pas tres dur !
tu tiens a jour une liste de nom de fonction (par exemple)
puis a chaque frappe de l'utilisateur (a chaque charactere entré)
tu compare le mot en cours d'ecriture avec chacun des mot de la liste (celle qui contien les fonction d'un basic par exemple ! )
par comparaison , j'entend que tu regarde si ce que le gars viens d'entrer (le mot en cour d'ecriture )
correspond au 2 ,3,ou 4 premiere lettre de chaque mot de la liste
si tu as une correspondance , tu affiche ce mot (celui de la liste)
en lieu et place de celui que le gars tappe !
en te referent a l'espace precedent, pour le depart !!
enfin moi je ferai comme ça !

Publié : lun. 04/avr./2005 22:46
par Progi1984
Je vais essayer un truc avec une ComboxGadget, genre à la VisualBasic ou à la Scintilla ! Vé faire un petit test !
Mais n'hésitez pas à poster ! cela sert toujours à tout le monde le brainstorming !
Publié : mar. 05/avr./2005 0:33
par Guimauve
Récupéré sur code archive dans la section other/OOP
Ça fait ce que tu veux faire je pense.
A+
Guimauve
Code : Tout sélectionner
; English forum: http://purebasic.myforums.net/viewtopic.php?t=8048&highlight=
; Author: Justin
; Date: 25. October 2003
;Autocomplete object
;Justin 10/03
; Just to play a little with the new functions. An object that makes an autocomplete
; in an editbox / listbox. It's a working example, note that you have to use setsel()
; if the selected listbox index changes outside the object, i did this to improve the
; speed, rather than checking the selected index for every edit change inside the object.
; Only for windows.
Interface IPBAutoComplete
FindStr(str$)
SetEdit(id)
SetListBox(id)
SetSel(isel)
EndInterface
Structure PBAutoCompleteFunctions
FindStr.l
SetEdit.l
SetListBox.l
SetSel.l
EndStructure
Structure OPBAutoComplete
*VTable.PBAutoCompleteFunctions
hwndedit.l
hwndlistbox.l
idedit.l
idlistbox.l
iselected.l
EndStructure
;finds and select the passed string
Procedure FindStr(*Object.OPBAutoComplete,str$)
hwndlistbox=*Object\hwndlistbox
istr=SendMessage_(hwndlistbox,#LB_FINDSTRING,-1,str$)
If istr<>-1
;skip if item is selected
If *Object\iselected=istr : ProcedureReturn : EndIf
textlen=Len(str$)
newtextlen=SendMessage_(hwndlistbox,#LB_GETTEXTLEN,istr,0)
seltextlen=newtextlen-textlen
;select
SendMessage_(hwndlistbox,#LB_SETCURSEL,istr,0)
;set edit text
SetGadgetText(*Object\idedit,GetGadgetItemText(*Object\idlistbox,istr,-1))
;set selected text
SendMessage_(*Object\hwndedit,#EM_SETSEL,textlen,newtextlen)
;update index
*Object\iselected=istr
EndIf
EndProcedure
;sets the editbox for this object
;id : editbox id
Procedure SetEdit(*Object.OPBAutoComplete,id)
*Object\idedit=id
*Object\hwndedit=GadgetID(id)
EndProcedure
;sets the listbox for this object
;id : listbox id
Procedure SetListBox(*Object.OPBAutoComplete,id)
*Object\idlistbox=id
*Object\hwndlistbox=GadgetID(id)
EndProcedure
;sets the selected listbox index
;iselected : index of selected item
;you are responsable to update this index every time it changes
;-1 = no selection
Procedure SetSel(*Object.OPBAutoComplete,iselected)
*Object\iselected=iselected
EndProcedure
PBAutoCompleteFunctions.PBAutoCompleteFunctions\FindStr=@FindStr()
PBAutoCompleteFunctions.PBAutoCompleteFunctions\SetEdit=@SetEdit()
PBAutoCompleteFunctions.PBAutoCompleteFunctions\SetListBox=@SetListBox()
PBAutoCompleteFunctions.PBAutoCompleteFunctions\SetSel=@SetSel()
OPBAutoComplete.OPBAutoComplete\VTable=PBAutoCompleteFunctions
;-----------------------------------------------------------------
;CODE
;GADGET IDs
#String0=0
#ListView1=1
;WINDOW ID
#Window1=0
;WINDOW
OpenWindow(#Window1,150,70,550,350,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_TitleBar,"Auto Complete")
CreateGadgetList(WindowID(#Window1))
StringGadget(#String0,10,8,310,24,"")
ListViewGadget(#ListView1,11,49,308,262)
AddGadgetItem(#ListView1,-1,"Red")
AddGadgetItem(#ListView1,-1,"Green")
AddGadgetItem(#ListView1,-1,"Blue")
AddGadgetItem(#ListView1,-1,"Yellow")
AddGadgetItem(#ListView1,-1,"Black")
AddGadgetItem(#ListView1,-1,"White")
AddGadgetItem(#ListView1,-1,"Pink")
AddGadgetItem(#ListView1,-1,"Purple")
AddGadgetItem(#ListView1,-1,"Gray")
AddGadgetItem(#ListView1,-1,"Orange")
ActivateGadget(#String0)
;create object
OAutoCP.IPBAutoComplete=@OPBAutoComplete
;init object
OAutoCP\SetEdit(#String0)
OAutoCP\SetListBox(#ListView1)
OAutoCP\SetSel(-1) ;no items selected
;EVENT LOOP
Repeat
EvID=WaitWindowEvent()
Select EvID
Case #PB_Event_Gadget
Select EventGadgetID()
Case #String0
Select EventType()
Case #PB_EventType_Change
str$=GetGadgetText(#String0)
OAutoCP\FindStr(str$)
EndSelect
Case #ListView1 ;important to update selected index in object
isel=GetGadgetState(#ListView1)
;update selected index
OAutoCP\SetSel(isel)
;set selected in edit
str$=GetGadgetItemText(#ListView1,isel,-1)
SetGadgetText(#String0,str$)
EndSelect
EndSelect
Until EvID=#PB_EventCloseWindow
Publié : mar. 05/avr./2005 5:54
par Progi1984
Génial, je vais essayer de mélanger avec une ComboGagdetText quand j'aurais réussi à le faire dans une EditorGadget !
Merci encore ! C'est génial !
Publié : mar. 05/avr./2005 5:56
par Progi1984
Mais quelqu'un aurait il des informations sur l'objet : OAutoCP.IPBAutoComplete=@OPBAutoComplete ?