PureBasic

Forums PureBasic
Nous sommes le Ven 15/Nov/2019 1:39

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page Précédente  1, 2
Auteur Message
 Sujet du message: Re: ComboBoxGadget() éditable.
MessagePosté: Sam 26/Mai/2018 18:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6857
Localisation: IDF (Yvelines)
Fig a écrit:
Je souhaite que ça ne donne pas lieu à un conflit.
Je n'ai pas vu de conflit. Un chahut peut être ? ^-^
Quand à être raisonnable je déteste.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ComboBoxGadget() éditable.
MessagePosté: Sam 26/Mai/2018 22:39 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
Fig a écrit:
Merci à toutes les personnes qui ont répondu, y compris en messages privés.
Merci aussi à toi d'avoir partagé l'idée : c'est très astucieux. Après un léger correctif, ça méritera même d'être en feature request par exemple avec une option #PB_ComboBox_ItemEditable.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [RESOLU] ComboBoxGadget() éditable.
MessagePosté: Mar 29/Mai/2018 13:19 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
Version corrigée.
Code:
;********************************************************************************************************************************************************************************************
#ComboKeyEnter = 'GK13' ; Valeur pseudo-aléatoire

Structure COMBO
        Window.I
        Gadget.I
        Item.I
        kMenu.I
        kMenuItem.I
        ReturnKey.I
EndStructure

Declare ComboReturnKey()
Declare ComboCallBack()

Procedure ComboCreate(Window, Gadget, kMenuItemDefault = 64000)
        Define *A.COMBO = AllocateMemory(SizeOf(COMBO) )
        With *A
                \Window = Window
                \Gadget = Gadget
                \kMenuItem = kMenuItemDefault
                BindEvent(#PB_Event_Gadget, @ComboCallBack(), \Window, \Gadget)       
                \kMenu = CreateMenu(#PB_Any, WindowID(\Window) )
                BindMenuEvent(\kMenu, \kMenuItem, @ComboReturnKey() )       
        EndWith
        ProcedureReturn *A
EndProcedure

Procedure ComboDelete(Gadget)
        Define *A.COMBO = GetGadgetData(Gadget)
        With *A
                UnbindEvent(#PB_Event_Gadget, @ComboCallBack(), \Window, Gadget)
                UnbindMenuEvent(\kMenu, \kMenuItem, @ComboReturnKey() )       
                FreeMemory(*A)
        EndWith
EndProcedure

Procedure ComboReturnKey()
        PostEvent(#PB_Event_Gadget, GetActiveWindow(), GetActiveGadget(), #PB_EventType_FirstCustomValue, 'GK13')
EndProcedure

Procedure ComboCallBack()
        Define Gadget = EventGadget()
        Define *A.COMBO = GetGadgetData(Gadget)
        Define gState = GetGadgetState(Gadget)
        If *A
                With *A
                        Select EventType()
                                Case #PB_EventType_Focus
                                        AddKeyboardShortcut(\Window, #PB_Shortcut_Return, \kMenuItem)
                                Case #PB_EventType_LostFocus
                                        RemoveKeyboardShortcut(\Window, #PB_Shortcut_Return)
                                        SetGadgetText(Gadget, GetGadgetItemText(Gadget, \Item) )
                                Case #PB_EventType_Change
                                        If gState <> -1
                                                \Item = gState
                                        EndIf
                                Case #PB_EventType_FirstCustomValue
                                        If EventData() = 'GK13'
                                                SetGadgetItemText(Gadget, \Item, GetGadgetText(Gadget) )
                                        EndIf
                        EndSelect
                EndWith
        EndIf
EndProcedure

Procedure ComboGadget(Id, x, y, w, h, kMenuItemDefault = 64000)
        Define Result
        Define Gadget
        Result = ComboBoxGadget(Id, x, y, w, h, #PB_ComboBox_Editable)
        If Id = #PB_Any
                Gadget = Result
        Else
                Gadget = Id
        EndIf
        SetGadgetData(Gadget, ComboCreate(GetActiveWindow(), Gadget, kMenuItemDefault) )   
        ProcedureReturn Result
EndProcedure

Procedure ComboItem(Gadget, Item)
        Define *A.COMBO = GetGadgetData(Gadget)
        If *A
                With *A
                        SetGadgetState(Gadget, Item)
                        \Item = Item
                EndWith
        EndIf
EndProcedure




; Exemple


If OpenWindow(10, 0, 0, 270, 180, "Combo", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        ComboGadget(20, 10, 10, 250, 21)
        AddGadgetItem(20, -1, "Option A")
        AddGadgetItem(20, -1, "Option B")
        AddGadgetItem(20, -1, "Option C")
        ComboItem(20, 1)
        ButtonGadget(21, 10, 42, 250, 21, "Ok")
        Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [RESOLU] ComboBoxGadget() éditable.
MessagePosté: Mer 30/Mai/2018 9:03 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
J'ai fait un topo.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page Précédente  1, 2

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye