Classe: wxColourDialog().
Cette boite de dialogue présente un sélecteur de couleur à l'utilisateur, et retourne les informations sur la couleur sélectionnée.
Le sélecteur de couleur de MS Windows:
Sous Windows, le sélecteur de couleur natif est utilisé. Il
se présente sous la forme d'une boite de diaogue avec trois zones principales : en haut à gauche, une palette de 48 couleurs les plus utilisées est affichée. En dessous, il y a une palette de 16 'couleurs presonnalisées' qui peuvent être définies par l'application si désiré. En plus, l'utilisateur peut ouvrir la boite de dialogue pour afficher un panel à droite contenant des contrôles pour sélectionner une couleur précise, et l'ajouter à la palette des couleurs personnalisées.
Le sélecteur de couleur générique:
Sous les plateformes non-MS Windows, le sélecteur de couleur est une simulation de la plupart des fonctionnalités du sélecteur MS Windows. Deux palettes de 48 couleurs standards et 16 couleurs personnalisées sont présentées, avec une zone à droite contenant trois curseurs permettant à l'utilisateur de sélectionner une couleur personnalisée à partir de ses composantes rouge, verte et bleue. Cette couleur peut être ajoutée à la palette des couleurs personnalisées, et remplacera soit la couleur sélectionnée, soit la première dans la palette si aucune n'est sélectionnée. Les curseurs de couleur RGB ne sont pas optionnels dans le sélecteur de couleur générique. Le sélecteur générique de couleur est également disponible sous MS Windows; il a pour nom wxGenericColourDialog.
colourDialog = wx.wxColourDialog( wxWindow *parent = frame, wxColourData *data = wx.wxColourData() )
parent est la fenêtre qui détient la boite de dialogue.
data Initialise les couleurs personnalisées à wxNullColour, les données mise en couleur au noir, et le choix complet de la valeur à true.
Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.
GetColourData() | Retourne les data (données) associées à la couleur sélectionnée. |
ShowModal() | Permet de sélectionner les boutons wx.wxID_OK, et wx.wxID_CANCEL. |
GetColour() | Obtient la couleur courante associée aux data (données) mentionnées ci-dessus. |
require("wx") -- inutile si on utilise wxluafreeze.exe -- Création d'une frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "wxColourDialog") local panel = wx.wxPanel(frame, -1) -- Création d'un deuxième panel qui changera de couleur. local panel2 = wx.wxPanel(panel, -1) -- Centre l'objet dialog au centre de l'écran. frame:Centre() -- wx.wxHORIZONTAL, wx.wxVERTICAL, wx.wxBOTH ou rien -- Conctruction du Sizer principal. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- On met le panel2 dans le mainSizer. mainSizer:Add(panel2, 1 , wx.wxGROW + wx.wxALL, 10) -- On créer un bouton pour appeler la wxColourDialog. local bouton = wx.wxButton(panel, -1, "couleur") -- On met le bouton dans le mainSizer. mainSizer:Add(bouton, 0, wx.wxALIGN_CENTER + wx.wxBOTTOM, 10) -- On affecte le Sizer principal au Panel panel:SetSizer(mainSizer) -- Si on "clic sur le bouton "couleur", on affiche la boîte -- de dialogue. bouton:Connect(wx.wxEVT_LEFT_DOWN, function() local colourData = wx.wxColourData() local colourDialog = wx.wxColourDialog(frame, colourData) -- Si on "clic" sur le bouton "OK" de la boîte de dialogue. if (colourDialog:ShowModal() == wx.wxID_OK) then local data = colourDialog:GetColourData() local nlleCouleur = data:GetColour() panel2:SetBackgroundColour(nlleCouleur) panel2:Refresh() end end) -- Démarrage de l'application. frame:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat.
Vous allez trouver dans le code suivant, un appel à: string.sub(), tonumber(), io.open().
Il s'agit de fonctions de base Lua. Voir à ce sujet, le chapitre consacré à ce langage.
Après avoir choisi une nouvelle couleur par: nlleCouleur = data:GetColour(), il suffit de faire ressortir les 3 couleurs fondamentales RVB, puis de les sauvegarder dans un fichier texte.
require("wx") -- inutile si on utilise wxluafreeze.exe --Création des variables locales, pour les trois couleurs RVB. local rouge = 0 local vert = 0 local bleu = 0 local nlleCouleur -- Création de la frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "Nom de la frame") local panel = wx.wxPanel(frame, -1) frame:Centre(wx.wxBOTH) -- Affichage au centre de l'écran.
1/ Enregistrement des couleurs.
-- Si on "clic sur le bouton "couleur", on affiche la boîte -- de dialogue. bouton:Connect(wx.wxEVT_LEFT_DOWN, function() local colourData = wx.wxColourData() local colourDialog = wx.wxColourDialog(panel, colourData) -- Si on "clic" sur le bouton "OK" de la boîte de dialogue. if (colourDialog:ShowModal() == wx.wxID_OK) then local data = colourDialog:GetColourData() nlleCouleur = data:GetColour() panel:SetBackgroundColour(nlleCouleur) panel:Refresh() -- On range chaque nlle couleur dans sa variable. rouge = nlleCouleur:Red() vert = nlleCouleur:Green() bleu = nlleCouleur:Blue() nlleCouleur = string.format("%3d,%3d,%3d", rouge, vert, bleu) end -- On sauvegarde les nouvelles couleurs. file = io.open("sauvegarde_couleur.txt", "w") file:write(nlleCouleur) file:close() end)
2/ Restitution des couleurs à la ré-ouverture du programme.
-- On ouvre le fichier de sauvegarde. file = io.open("sauvegarde_couleur.txt", "r") nlleCouleur = file:read() file:close() -- On affiche la couleur sauvegardée, si elle existe. if (nlleCouleur ~= nil) then rouge = tonumber(string.sub(nlleCouleur,1,3)) vert = tonumber(string.sub(nlleCouleur,5,7)) bleu = tonumber(string.sub(nlleCouleur,9,11)) panel:SetBackgroundColour(wx.wxColour(rouge, vert, bleu)) end