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

Classe: wxTextCtrl().

Un TextCtrl est une page blanche (ou de couleur) sur laquelle l'on peut écrire un texte sur une seule ou plusieurs lignes et qui peut être édité.

En plus compliqué, il s'agit de ce que l'on appelle: un éditeur de texte.

Beaucoup de méthodes de wxTextCtrl sont héritées de la classe wxTextEntry qui est une classe de base commune pour wxTextCtrl et autres contrôles qui utilisent un champ de saisie de texte sur une seule ligne.

wxTextEntry n'est pas implémenté par wxLua 2.8.10

La classe wxTextAttr, représente les attributs de caractère, de paragraphe et de style pour une portion de texte dans un wxTextCtrl ou un wxRichTextCtrl. ( classe non implémentée par wxLua ).

Liste des styles utilisés.
  • wxTE_PROCESS_ENTER
    Le contrôle va générer l'évènement wxEVT_COMMAND_TEXT_ENTER (sinon la touche ENTER est soit traitée en interne par le contrôle ou utilisée pour la navigation entre les contrôles de dialogue).
  • wxTE_PROCESS_TAB
    Le contrôle recevera les évènements wxEVT_CHAR TAB.
    Normalement, TAB est utilisée à l'intérieur d'une boîte de dialogue pour le passage au contrôle suivant. Pour les contrôles créés avec ce style, vous pourrez toujours utiliser Ctrl-ENTER pour passer au contrôle suivant à partir du clavier.
  • wxTE_MULTILINE
    Permet l'affichage sur plusieurs lignes. Si ce style n'est pas spécifié, les caractères de saut de ligne ne pourront pas être utilisés.
  • wxTE_PASSWORD
    Le texte sera repris sous forme d'astérisques.
  • wxTE_READONLY
    Le texte ne sera pas modifiable par l'utilisateur.
  • wxTE_RICH
    Utilisé sous Win32, cela permet d'avoir plus de 64 Ko de texte dans le contrôle, même sous Win9x. Ce style est ignoré sous d'autres plateformes.
  • wxTE_RICH2
    Utilise la version 2.0 ou 3.0 de Rich Text sous Win32. Ce style est ignoré sous d'autres plateformes
  • wxTE_AUTO_URL
    Met en surbrillance l'URL et génére les évènements wxTextUrlEvents lors du passage de la souris. Ce style prend en charge uniquement wxTE_RICH sous Win32 et multi-ligne sous wxGTK2.
  • wxTE_NOHIDESEL
    Par défaut, Windows n'affiche pas la sélection quand il n'a pas le focus - utiliser ce style pour le forcer à agir. (ne fait rien sous les autres plateformes).
  • wxTE_LEFT
    Aligne le texte à gauche (par défaut).
  • wxTE_CENTRE
    Centre le texte.
  • wxTE_RIGHT
    Aligne le texte à droite.
  • wxTE_DONTWRAP
    Idem que wxHSCROLL. Créer une barre de défilement horizontale, de sorte que le texte ne sera pas emballé. (don't wrap)
  • wxTE_BESTWRAP
    Adapte les lignes à la largeur de la fenêtre (par défaut).
  • wxTE_AUTO_SCROLL
    Création automatique des barres de défilement.
  • wxTE_NO_VSCROLL
    Empêche la création d'une barre de défilement verticale. (uniquement pour les contrôles multilignes)
  • wxTE_CAPITALIZE
    Sur PocketPC et Smartphone, provoque la première lettre à être capitalisés.
Liste des évènements émis par cette classe.

Les commandes suivantes sont traitées par les gestionnaires d'événements dans le wxTextCtrl:
wxID_CUT, wxID_COPY, wxID_PASTE, wxID_UNDO, wxID_REDO.

  • wxEVT_COMMAND_TEXT_UPDATED
    (id, wx.wxEVT_COMMAND_TEXT_UPDATED, function)
    Evènement généré lorsque le texte change.
  • wxEVT_COMMAND_TEXT_ENTER
    (id, wx.wxEVT_COMMAND_TEXT_ENTER, function)
    Evènement généré lorsque la touche ENTER est pressée. Le style wxTE_PROCESS_ENTER doit avoir été sélectionné, pour que cet événement puisse être généré.
  • wxEVT_COMMAND_TEXT_URL
    (id, wx.wxEVT_COMMAND_TEXT_URL, function)
    Evénement géneré au passage de la souris sur une URL. ( uniquement pour wxMSW et wxGTK2).
  • wxEVT_COMMAND_TEXT_MAXLEN
    (id, wx.wxEVT_COMMAND_TEXT_MAXLEN, function)
    Cet événement est généré lorsque l'utilisateur essaie d'entrer plus de texte que la limite fixée par le méthode :SetMaxLength()
Le constructeur.
	textCtrl = wx.wxTextCtrl (
		wxWindow         *parent = no-NULL,
		wxWindowID        id     = -1,
		const wxString   &label  = "texte",
		const wxPoint    &point  = wx.wxDefaultPosition,
		const wxSize     &size   = wx.wxDefaultSize,
		long              style  = wx.wxTE_XXX,
		const wxString   &name   = wx.wxRemplacerNameStr		 
		)

parent est la fenêtre qui détient le wxTextCtrl.

id est l'identifiant du wxTextCtrl.

label est le texte à afficher.

point est la position du wxTextCtrl.

size est la dimension du wxTextCtrl.

style est le style du wxTextCtrl.

name est utilisé pour associer un nom au wxTextCtrl.

Les méthodes.

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

AppendText("texte")Ajoute "texte" dans le TextCtrl.
CanCopy()Retourne true si la sélection peut être copiée dans le presse-papiers.
CanCut()Retourne true si la sélection peut être coupée dans le presse-papiers.
CanPaste()Retourne true si le contenu du presse-papiers peut être collé dans un text control.
CanRedo()Retourne true si la dernière opération peut être refaite.
CanUndo()Retourne true si la dernière opération peut être annulée.
ChangeValue("texte")Modifie le texte d'origine à partir de la position 0.
Clear()Efface le texte. Equivalent à SetValue("").Cette fonction génère un évènement wxEVT_COMMAND_TEXT_UPDATED.
Copy()Copie le texte sélectionné dans le presse-papiers.
Cut()Copie le texte sélectionné dans le presse-papiers et supprime la sélection.
DiscardEdits()Remet le flag interne modifié comme si les changements en cours avaient été sauvegardés.
EmulateKeyPress(event)Insère le caractère qui aurait été inséré si l'événement clé donnée s'était produit dans le TextCtrl. (wxKeyEvent &event)
GetDefaultStyle()Retourne le style actuellement utilisé pour le nouveau texte.
GetInsertionPoint()Retourne la position. (début et fin)
GetLastPosition()Retourne l'index à base zéro de la dernière position dans le TextCtrl, qui est égal au nombre de caractères.
GetLineLength(N°ligne)Obtient la longueur de la ligne spécifiée, non compris tous les caractères de fin de ligne.
GetLineText(N°ligne)Retourne le contenu d'une ligne spécifiée, non compris tous les caractères de fin de ligne.
GetNumberOfLines()Retourne le nombre de lignes dans le tampon du TextCtrl.
GetRange(from, to)Retourne la chaîne de caractères à partir de la position from jusqu'à to.
GetSelection()Obtient le nb de caractères de la sélection courante.
GetStringSelection()Obtient le texte actuellement sélectionné dans le TextCtrl.
GetStyle(position, style )Retourne le style de cette position. (wxTextAttr &style)
GetValue()Retourne le contenu de la commande.
IsEditable()Retourne true si le contenu peut être édité par l'utilisateur.
IsModified()Retourne true si le texte a été modifié par l'utilisateur.
IsMultiLine()Retourne true si le type est multilignes et false autrement.
IsSingleLine()Retourne true si le type est simplelignes et false autrement.
LoadFile("filename")Charge et affiche le fichier nommé, si il existe.
MarkDirty()Mark text as modified (dirty)
Paste()Colle le texte du presse-papiers...
PositionToXY(pos)Convertit position donnée (pos) en colonne à base zéro, et numéro de ligne.
Redo()Remet en place la dernière opération.
Remove(from, to)Supprime le texte à partir de from jusqu'à to(mais non compris) le caractère à la dernière position.
Replace(from, to, "newTexte")Remplace le texte d'origine par le 'newTexte' de from à to.
SaveFile("filename")Enregistre le contenu de la commande dans un fichier texte. (filename = Le nom du fichier dans lequel enregistrer le texte)
SetDefaultStyle(newStyle)Modifie le style par défaut pour le nouveau texte qui va être ajouté par la commande WriteText() ou AppendText(). (wxTextAttr &newStyle)
SetEditable(true)Rend l'élément texte modifiable ou en lecture seule, et annuler le flag wxTE_READONLY.
SetInsertionPoint(pos)Définit le point d'insertion à la position donnée. (pos)
SetInsertionPointEnd()Définit le point d'insertion à la fin du TextCtrl.
SetMaxLength(value)Définit le nombre maximal de caractères que l'utilisateur peut entrer dans le TextCtrl.
SetSelection(from, to)Sélectionne le texte à partir de from jusqu'à to(mais non compris) le caractère de la dernière position.
SetStyle(start, end, newStyle)Change l'ancien style par newStyle de 'start' à 'end'.
SetValue("texte")Définit le nouveau texte.
ShowPosition(pos)Rend la ligne à la position (pos) visible.
Undo()Annule la dernière opération.
WriteText("newTexte")Ecrit le newTexte à la position d'insertion.
XYToPosition(x, y)Convertit les valeur x et y en valeur point.

Un petit exemple.
require("wx") -- inutile si on utilise wxluafreeze.exe
	
local frame 	= nil
local textCtrl 	= nil
local ID_FONT 		= 1
local ID_COULEUR 	= 2

-- Fonction changement de couleur de fond.
function OnCouleur(event)
	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()
			textCtrl:SetBackgroundColour(nlleCouleur)
			textCtrl:Refresh()
		end
end

-----------------------------------------------------------------
-- Fonction changement de Font.
function OnFont(event)
	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

-----------------------------------------------------------------
-- Création de la fonction principale du programme: main()
function main()
frame = wx.wxFrame(wx.NULL, -1, "wxLua: TextCtrl", 
                   wx.wxDefaultPosition, wx.wxSize(450, 300),
				   wx.wxDEFAULT_FRAME_STYLE)
frame:Centre(wx.wxBOTH) -- Affichage au centre de l'écran.

local fileMenu = wx.wxMenu()
    fileMenu:Append(wx.wxID_EXIT, "S&ortie", 
	                "Quitte le programme")

local styleMenu = wx.wxMenu()
	styleMenu:Append(ID_FONT, "Font", "Police de caractère")
	styleMenu:Append(ID_COULEUR, "Couleur", "Couleur du fond")

local helpMenu = wx.wxMenu()
    helpMenu:Append(wx.wxID_ABOUT, "&A propos", 
	            "A propos des versions de wxLua et wxWidgets.")

local menuBar = wx.wxMenuBar()
    menuBar:Append(fileMenu, "&Fichier")
	menuBar:Append(styleMenu, "S&tyle")
    menuBar:Append(helpMenu, "&Aide")
    frame:SetMenuBar(menuBar)

frame:CreateStatusBar(1)
frame:SetStatusText("Welcome to wxLua.")

-- Connecte l'évènement Exit du menu.
frame:Connect(wx.wxID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,
        function (event) frame:Close(true) end )

-- Connecte l'évènement About du menu.
frame:Connect(wx.wxID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED,
        function (event) wx.wxMessageBox("Ce programme est" 
		.."construit avec l'éditeur de texte \n 'SciTE Version" 
		.."1.75' ainsi que \n" .. wxlua.wxLUA_VERSION_STRING.. 
		"et " ..wx.wxVERSION_STRING, "A propos de...", wx.wxOK 
		+ wx.wxICON_INFORMATION, frame)
        end )

-- Connecte l'évènement fermeture de la fenêtre.
frame:Connect(wx.wxEVT_CLOSE_WINDOW,
    function (event) frame:Destroy(); event:Skip() end)

-- Connecte l'évènement Font.
frame:Connect(ID_FONT, wx.wxEVT_COMMAND_MENU_SELECTED, 
              function(event) OnFont() end)

-- Connecte l'évènement Couleur.
frame:Connect(ID_COULEUR,  wx.wxEVT_COMMAND_MENU_SELECTED, 
              function(event) OnCouleur() end)

-- Création d'un textCtrl.
local texte = "Cliquez sur 'Style' pour changer la Font et 
sa couleur, ainsi que la couleur du fond."
textCtrl = wx.wxTextCtrl(frame, wx.wxID_ANY, texte,
                        wx.wxDefaultPosition, wx.wxDefaultSize,
                        wx.wxTE_MULTILINE + wx.wxTE_NO_VSCROLL)


frame:Show(true) -- Affichage de la frame
end

-- Démarrage de l'application.
main()
wx.wxGetApp():MainLoop()

					

Ce qui donne comme résultat.

image01

logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 5 novembre 2012.
Valid XHTML 1.0 Transitional

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