Concept pour LibEditorPlus : AutoCompletion

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Concept pour LibEditorPlus : AutoCompletion

Message 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 !
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Re: Concept pour LibEditorPlus : AutoCompletion

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

JaPBe est basé sur la DLL de Scintilla que j'essaie de reproduire car je n'arrive pas du tout à l'utiliser !
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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 :oops:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pas grave mais j'attends vos idées...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 !

:D
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 !
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Mais quelqu'un aurait il des informations sur l'objet : OAutoCP.IPBAutoComplete=@OPBAutoComplete ?
Répondre