wxLua et wxWidgets:
Mode d'emploi.
 wxWidgets
Lua
Flèche gauche accueil wxWidgets lua notes Flèche droite
Description détaillée.

Classe: wxFontDialog().

Cette boîte de dialogue présente un sélecteur de polices de caractère à l'utilisateur, et retourne les informations de la police et de la couleur sélectionnée.

Le sélecteur de police de MS Windows
Sous Windows, le sélecteur de police natif est utilisé. Il se présente sous la forme d'une boite de dialogue avec des contrôles pour le nom de la police, la taille, le style, le poids, le soulignement, le "barré" et la couleur d'écriture du texte. Un exemple de la police sélectionnée est affiché dans une zone blanche de la boite de dialogue. Notez que lors de la traduction d'une police MS Windows vers une police wxWidgets, l'attribut barré' est ignoré et une famille de police (telle que Swiss ou Modern) est déduite de l'actuel nom de police (tel que Arial ou Courier).

Le sélecteur de police générique
Sous les plateformes non-MS Windows, le sélecteur de police est plus simple. Il contient des contrôles pour le nom de la famille de police, la taille, le style, le poids, le soulignement et la couleur du texte, et un exemple est affiché en dessous sur un fond blanc. Le sélecteur de police générique est également disponible sous MS Windows, il a pour nom wxGenericFontDialog.

Le constructeur: Explication.
fontDialog = wx.wxFontDialog(
  wxWindow *parent    = frame, 
  wxFontData *data    = wx.wxFontData()
  )

parent est la fenêtre qui détient la boite de dialogue.

data Initialise fontColour à black, showHelp à false, allowSymbols à true, enableEffects à true, minSize à 0 et maxSize à 0.

Les méthodes.

Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.

GetFontData()Retourne les data (données) associées à la font 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.
GetChosenFont()Obtient la police choisie par l'utilisateur lorsqu'il a appuyé sur OK.

Un exemple de code.

Le schéma est sensiblement identique à celui de wxColourDialog à la différence que pour une " font " l'on peut choisir le nom de la police, la taille, le style, le poids, le soulignement, le "barré" et la couleur d'écriture du texte.

require("wx") -- inutile si on utilise wxluafreeze.exe

-- Création d'une frame et de son panel.
  local frame = wx.wxFrame(wx.NULL, -1, "wxCouleurDialog")
  local panel = wx.wxPanel(frame, -1)

-- On centre l'objet frame au centre de l'écran.
  frame:Centre()

-- Création d'un staticText dans sa boîte.
  local staticBox 	 = wx.wxStaticBox(panel, -1, "")
  local staticBoxSizer = wx.wxStaticBoxSizer(staticBox, 
                                             wx.wxVERTICAL)
  local staticText 	 = wx.wxStaticText(panel, -1,"Cliquez sur 
  le bouton 'font', pour sélectionner une nouvelle police de 
  caractère...")

-- Addition de staticTexte dans son staticBoxSizer.
staticBoxSizer:Add(staticText, 1, wx.wxGROW + wx.wxALL, 5)

-- Création d'un wxTextCtrl.
local textCtrl = wx.wxTextCtrl(	panel, -1, "",
					wx.wxDefaultPosition, wx.wxDefaultSize,
					wx.wxTE_RICH + wx.wxTE_MULTILINE)

-- On créer un bouton pour appeler la wxFontDialog.
local bouton = wx.wxButton(panel, -1, "font")

-- Construction du Sizer principal.
local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)

-- On range tout dans le Sizer principal.
mainSizer:Add(staticBoxSizer, 0 , wx.wxALL, 10)
mainSizer:Add(textCtrl, 3 , wx.wxGROW + wx.wxALL, 10)
mainSizer:Add(bouton, 0, wx.wxALIGN_CENTER + wx.wxBOTTOM, 10)

-- On affecte le Sizer principal au Panel
panel:SetSizer(mainSizer)

--  On fixe une taille minimale de la frame au démarrage.
mainSizer:SetSizeHints(frame)
mainSizer:Fit(frame)
--------------------------------------------------------------------
-- Si on "clic sur le bouton "font", on affiche 
-- la boîte de dialogue.
bouton:Connect(wx.wxEVT_LEFT_DOWN, function()
	local fontData = wx.wxFontData()
	local fontDialog = wx.wxFontDialog(frame, fontData)
	-- Si on "clic" sur le bouton "OK" de la boîte de dialogue.
		if (fontDialog:ShowModal() == wx.wxID_OK) then
			local data = fontDialog:GetFontData()
			local nlleFont = data:GetChosenFont()
			local nlleCouleurFont = data:GetColour()
			textCtrl:SetFont(nlleFont)
			textCtrl:SetForegroundColour(nlleCouleurFont)
		end
	end)
--------------------------------------------------------------------

-- Démarrage de l'application.
frame:Show(true)
wx.wxGetApp():MainLoop()				
				

Ce qui donne comme résultat.

image01

image02
Comment sauvegarder une nouvelle Font et sa Couleur.

Vous allez trouver dans le code suivant, un appel à: io.open().
Il s'agit de fonctions de base Lua.
Voir à ce sujet, le chapitre consacré à ce langage.

La procédure pour sauvegarder la nouvelle couleur d'une Font, est exactement la même que celle utilisée pour sauvegarder la nouvelle couleur d'une wxColourDialog...

Après avoir choisi une nouvelle couleur par: nlleFontCouleur = data:GetColour(), il suffit de faire ressortir les 3 couleurs fondamentales RVB, puis de les sauvegarder dans un fichier texte.

Pour la Font, le procédé est différent, car il existe deux méthodes spécialisées pour sauvegarder et restituer une Font.

La sauvegarde se fait par: nlleFont:GetNativeFontInfoDesc()

Et sa restitution par:
fontOrigine:SetNativeFontInfo(nom_de_la_Font_sauvegardée)

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/ On sauvegarde les nouvelles informations.

-- Si on clic sur le bouton "police", on affiche la boîte 
-- de dialogue.
bouton:Connect(wx.wxEVT_LEFT_DOWN, function()
  local fontData=wx.wxFontData()
  local fontDialog = wx.wxFontDialog(textCtrl, fontData)
	--fontDialog:ShowModal()
	if (fontDialog:ShowModal() == wx.wxID_OK) then
		local data = fontDialog:GetFontData()
		font = data:GetChosenFont()
		fontCouleur = data:GetColour()
	end
	textCtrl:SetFont(font)
	textCtrl:SetForegroundColour(fontCouleur)
	textCtrl:AppendText("que je viens de modifier.")

	-- Sauvegarde de la nlleFont et de sa couleur.
	nlleFont = font:GetNativeFontInfoDesc()
	rouge = fontCouleur:Red()
	vert  = fontCouleur:Green()
	bleu  = fontCouleur:Blue()
	nlleFontCouleur = string.format("%3d,%3d,%3d", 
						rouge, vert, bleu)

	-- On sauvegarde la nouvelle font et sa couleur dans
	--	un fichier.
	file = io.open("sauvegarde_font.txt", "w")
	file:write((nlleFont.."\n"))
	file:write((nlleFontCouleur))
	file:close()
end)
				

2/ On les restitue à la ré-ouverture du programme.

-- On ouvre le fichier de sauvegarde.
  file = io.open("sauvegarde_font.txt", "r")
  nlleFont 		  = file:read()
  nlleFontCouleur = file:read()
  file:close()

-- Sélection de la font.
  font = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, 
    wx.wxFONTSTYLE_NORMAL, wx.wxFONTWEIGHT_NORMAL, 
    false, "Comic sans MS")
  if (nlleFont == nil) then
	  textCtrl:SetFont(font)
	  textCtrl:AppendText("Ceci est le texte écrit avec
                      	  la Font d'origine... ")
  else
	  -- Utilisation de la font sauvegardée.
	  font:SetNativeFontInfo(nlleFont)
	  textCtrl:SetFont(font)
	  if (nlleFontCouleur ~= nil) then
		  rouge = tonumber(string.sub(nlleFontCouleur,1,3))
		  vert  = tonumber(string.sub(nlleFontCouleur,5,7))
		  bleu  = tonumber(string.sub(nlleFontCouleur,9,11))
		  textCtrl:SetForegroundColour(wx.wxColour(rouge, 
		                               vert, bleu))
	  end
	  textCtrl:AppendText("Ceci est le texte écrit avec 
	                       la nouvelle Font.")
  end			
				
logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 25 septembre 2012.
Valid XHTML 1.0 Transitional

wxFontDialog
Revenir en Haut
Connexion à la base de données impossible