[Résolu] [Basic] Contrôle de texte en majuscule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

[Résolu] [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

Bonjour à tous,
Après presque deux heures de recherche forum et internet (si,si), je n'ai pas trouvé réponse. :marto:
J'ai une boite de dialogue qui comprend un contrôle de texte (textField). Je voudrai qu'au cours de la frappe, les caractères frappés soient uniquement en majuscules.
Je n'ai pas trouvé dans les propriétés du contrôle un choix qui permettrai de changer la casse. Ni même avec un contrôle formaté.
Donc j'aimerai insérer dan mon code un écouteur (listener) afin que les caractères soit immédiatement mis en majuscules lors de la frappe.
En attendant j'ai trouvé comment faire mais uniquement à la perte de focus de mon contrôle de texte.
frmEssai.GetControl("txtEssai").Text = Ucase(frmEssai.GetControl("txtEssai").Text)
Je joins mon petit fichier exemple.
Merci d'avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 17 nov. 2012 08:26, modifié 2 fois.
Raison : [Résolu] et sa coche doivent être insérés au début du titre du premier message
Libre Office Version: 7.0.4 (x64)
SE Windows 10
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1516
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Basic] Contrôle de texte en majuscule

Message par DLE »

Bonjour,

Il est possible de se passer d'un listener, grace à l'utilisation d'un champ masqué.

Bonne soirée.
MacOS Tahoe 26.5 (iMac-M4) : AOO 4.1.16 , LibreOffice 25.8.7.3, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallels Desktop = Windows 11 & MacOS : AOO, Libre Office.
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

Re: [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

Bonsoir DLE,
Merci pour ta réponse, je n'y avait pas pensé. Mais pour mes besoins il est limité.
1er problème : Dans le masque de saisie on doit mentionné un nombre limité de caractère.
2ème problème : Mon besoin se fait au niveau d'un contrôle de texte multi-lignes. A la base je ne connais pas le nombre de caractères qui seront frappé.
3ème problème: (que je viens de m'apercevoir) c'est qu'il peut avoir quelques chiffres.

Donc la mise en majuscule qui se ferait en sortie de focus comme dans mon exemple pourrait faire l'affaire. Le problème et que si j'écris: (8) table de décharge stratifiée (sans tiroir) alors je me retrouve avec : ( U 8 )TABLE DE DÉCHARGE STRATIFIÉE (SANS TIROIR) c'est à dire avec les accents.
Le gros problème est que dans mon travail pour la gestion du matériel le protocole est la non utilisation de caractères accentués sur les majuscules (car utilisation de filtres ou autres). Nous sommes des dizaines a utiliser le fichier calc qui est sur réseau avec des ordonnateurs différents (windows/Linux). Donc la seule solution serait de placer un écouteur au niveau du contrôle de texte.
Autre solution mais je ne sais pas si c'est possible c'est qu'à l'entrée de focus sur mon contrôle de texte mon clavier pas en mode majuscule. (en espérant qu'en cours de frappe utilisateur ne repasse pas en mode minuscule)....
Encore une autre solution: il faudrait que mon code donné dans le fichier exemple je cite
frmEssai.GetControl("txtEssai").Text = Ucase(frmEssai.GetControl("txtEssai").Text)
qu'il passe le tout en majuscule mais pas accentué. Là aussi je ne sais pas si c'est possible.
Je sais c'est compliqué :marto: Je propose beaucoup de solutions mais pas capable de finaliser :tesfou:
Cordialement
Libre Office Version: 7.0.4 (x64)
SE Windows 10
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Contrôle de texte en majuscule

Message par Alain de La Chaume »

Bonsoir,

Autre proposition mais qui ne tient pas compte de votre dernier message que je viens de voir,
associer cette procédure :

Code : Tout sélectionner

sub txtEssai_entree(optional p1)
dim oBox as object
dim awtSel as new com.sun.star.awt.Selection

	oBox = frmEssai.GetControl("txtEssai")
	oBox.Text = Ucase(oBox.Text)
	awtSel.Min = len(oBox.text)
	awtSel.Max = len(oBox.text)
	oBox.setSelection(awtSel)
end sub
à l'événement "Touche relâchée" du contrôle "txtEssai".
 Ajout : fichier pour essais :
2012-11-14_Mobydick_62.odt
 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1516
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Basic] Contrôle de texte en majuscule

Message par DLE »

Bonsoir Mobydick_62,

Encore une proposition sans "listener", en remplaçant dans le paramètre "Masque de saisie" dans les propriétés du champ masqué les "A" par des "X". Tous les caractères sont acceptés, et les alpha mis en majuscule. Bien sur il ne faut pas utiliser les caractères accentués. Le nombre de "X" n'est pas limité au cadre de saisie, on peut en mettre beaucoup. Je ne connais pas la limite.



A+
MacOS Tahoe 26.5 (iMac-M4) : AOO 4.1.16 , LibreOffice 25.8.7.3, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallels Desktop = Windows 11 & MacOS : AOO, Libre Office.
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

Re: [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

Bjr Bidouille. Désolé j'avais confondu Code et Quote
Merci a DLE et Alain de la Chaume pour leur réponse,
Poursuivant mes recherches j'ai trouvé une autre solution qui est de passer par une fonction qui transforme tous les caractères accentués par des caractères non accentués avant de mettre le tout en majuscule comme ci-dessous. J'avais cette fonction dans du code récupéré il y a longtemps sur internet mais je ne sais plus où. Je l'ai adaptée à mes besoins. Je remercie tout de même cet inconnu qui avait publié ce code.

Code : Tout sélectionner

Global frmEssai As Object
Sub Main
    DialogLibraries.LoadLibrary( "Standard" )
    frmEssai = CreateUnoDialog( DialogLibraries.Standard.Dialog1)
    frmEssai.Execute()
    frmEssai.Dispose()
End Sub

'Change la casse lors de la perte du focus du contrôle de texte
Sub MiseEnMajuscule()
  Dim trad
  trad = Array("a àâä", "e éèêë", "i îï", "o ô", "u ùû", "A ÀÂÄ", "C Ç", "O ÔÖ", "aeæ", "AEÆ", "oeœ", "OEŒ", "ueü")
  frmEssai.GetControl("txtEssai").Text = UCase(SansAccents(frmEssai.GetControl("txtEssai").Text, trad))
End Sub

'______________________________________________________________________________________________________________
'Convertion des caractères accentués
Function SansAccents(texte As String, trad() ) As String
Dim n As Long, x As Long
Dim remplace As String, uneTrad As String
 for n = LBound(trad()) to UBound(trad())
  uneTrad = trad(n)
  remplace = Trim(Left(uneTrad, 2))
  for x = 3 to Len(uneTrad)
   texte = join(split(texte, Mid(uneTrad, x, 1)), remplace)
  next
 next
    SansAccents = texte
End Function  
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 7.0.4 (x64)
SE Windows 10
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Basic] Contrôle de texte en majuscule

Message par bm92 »

Bonjour,
Mobydick_62 a écrit :Poursuivant mes recherches j'ai trouvé une autre solution qui est de passer par une fonction qui transforme tous les caractères accentués par des caractères non accentués avant de mettre le tout en majuscule comme ci-dessous. J'avais cette fonction dans du code récupéré il y a longtemps sur internet mais je ne sais plus où. Je l'ai adaptée à mes besoins. Je remercie tout de même cet inconnu qui avait publié ce code.
L'original est dans la section Suprême de Code de ce forum, sujet [Basic] Lire/écrire un texte encodé, mis à disposition par votre serviteur.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Contrôle de texte en majuscule

Message par Alain de La Chaume »

Bonjour à tous

Le "client" a demandé...
[color=#104090]Mobydick_62[/color] a écrit : Je voudrai qu'au cours de la frappe, les caractères frappés soient uniquement en majuscules
[...] afin que les caractères soit immédiatement mis en majuscules lors de la frappe
... donc, si j'étais le "client", je ne serais pas satisfait ! :D
Car là, selon votre dernier fichier joint, c'est seulement à la perte du focus que la conversion se fait. :?

La solution que j'ai proposée effectue le traitement juste après la frappe de chaque caractère.
Il suffisait d'y adjoindre la fonction de bm92 pour que tout soit parfait.
Mais bon... C'est vous qui voyez. :P

Bien coOordialement, Alain.
 Ajout : Nouveau fichier joint à tester 
2012-11-15_Mobydick_62.odt
Dans cette version la fonction traiteTouche est associée à l'événément "Touche enfoncée" du contrôle txtEssai,
la fonction acCapSansAccent traite un caractère (celui qui vient d'être frappé) pour le retourner en majuscule non accentuée.

Code : Tout sélectionner

REM  *****  BASIC  *****
option explicit

Global frmEssai As Object

Sub Main
    DialogLibraries.LoadLibrary( "Standard" )
    frmEssai = CreateUnoDialog( DialogLibraries.Standard.Dialog1)
    frmEssai.Execute()
    frmEssai.Dispose()
End Sub

'---------------------------------------------------------------------
' Associée à l'événément "Touche enfoncée"
' du contrôle txtEssai
'---------------------------------------------------------------------
function traiteTouche(optional p1)
dim oBox as object
dim awtSel as new com.sun.star.awt.Selection
dim car as string, buf1 as string, buf2 as string
dim codeCar

	car = p1.keyChar
	codeCar = p1.keyCode

	if codeCar = com.sun.star.awt.Key.TAB _
		or codeCar = com.sun.star.awt.Key.BACKSPACE _
		or codeCar = com.sun.star.awt.Key.RETURN then
		traiteTouche = false
		exit function
	end if
	
	traiteTouche = true

	oBox = frmEssai.GetControl("txtEssai")
	buf1 = oBox.text
	
		car = acCapSansAccent(car)	
		mid(buf1, len(buf1), 1) = car
		oBox.text = buf1	
	
	awtSel.Min = len(oBox.text)
	awtSel.Max = len(oBox.text)
	oBox.setSelection(awtSel)

end function

'---------------------------------------------------------------------
function acCapSansAccent(s as string) as string
dim sListe as string, t(), i as integer
dim car as string

	car = lCase(s)
	sListe = "âäà,a,êëéè,e,îï,i,ôö,o,ûüù,u"
	t = split(sListe, ",")
	for i = 0 to uBound(t) -1 step 2
		if instr(t(i), car) then
			car = t(i+1)
			exit for
		end if
	next i
	acCapSansAccent = uCase(car)
end function
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

Re: [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

Bonjour à tous,
Merci bm92 pour la publication du code dont j'avais oublié la source.
Merci Alain, pour ta réflexion.
Alain de La Chaume à écrit:
La solution que j'ai proposée effectue le traitement juste après la frappe de chaque caractère.
Il suffisait d'y adjoindre la fonction de bm92 pour que tout soit parfait.
Effectivement il suffisait d'appliquer cette fonction à l'exemple que tu m'avais transmis. Je n'y avais pas pensé.
Seul ombre au tableau, si en cours de frappe de mon texte dans le contrôle je veux écrire "unité centrale" et que j'ai oublié le "i" Voici ce que j'ai après traitement "UNTE CENTRALE". Si je replace mon curseur après le "N" pour mettre la lettre "i" voici ce que j'ai lors du traitement "UNiTE CENTRALI" Le "i" s'insère au bon endroit mais il reste en minuscule, et la lettre "I" majuscule s'insère à la fin du texte à la place du "E" de portable.
Mais il s'agit probablement d'un ajustement de code que je dois faire. Je vais regarder tout cela de prêt.
En tout cas merci beaucoup pour cette aide. :super:
Je passe en résolu dès que solutionne cette histoire d'insertion de caractère (si cela est possible)
Libre Office Version: 7.0.4 (x64)
SE Windows 10
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Contrôle de texte en majuscule

Message par Alain de La Chaume »

Le "i" s'insère au bon endroit mais il reste en minuscule, et la lettre "I" majuscule s'insère à la fin du texte à la place du "E" de portable.
Je n'ai pas prévu ce cas, inutile pour moi qui ai pris l'habitude de ne jamais me corriger puisque je suis incorrigible. :lol: :lol:
Si j'ai un peu de temps et que personne ne s'y est collé d'ici là...

En attendant, il reste toujours la possibilité de sélectionner à la souris tout le texte ou seulement la fin, supprimer et recommencer, ou encore d'utiliser la touche BackSpace (retour arrière) pour supprimer le caractère précédent autant de fois que nécessaire.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1516
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Basic] Contrôle de texte en majuscule

Message par DLE »

Bonsoir,

Ayant un peu de temps je m'y suis collé. :D
On peut corriger le texte saisi par déplacement avec les touches flèche gauche ou droite.
Le "ç" n'est pas remplacé par un "C", est-ce un problème :?:

A+
MacOS Tahoe 26.5 (iMac-M4) : AOO 4.1.16 , LibreOffice 25.8.7.3, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallels Desktop = Windows 11 & MacOS : AOO, Libre Office.
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Basic] Contrôle de texte en majuscule

Message par alhazred »

Bonsoir,

Alain est peut-être incorrigible, mais bien corrigeable :lol:

Grillé par DLE, je joins quand même ma version, plus simple et commentée... et j'en ai profité pour traiter le cas de ç.
2012-11-15_Mobydick_62 (corrigé).odt
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1516
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Basic] Contrôle de texte en majuscule

Message par DLE »

Bonsoir,
alhazred a écrit :je joins quand même ma version, plus simple et commentée..
+ un certain nombre, j'ai encore des progrès à faire. :D

A+
MacOS Tahoe 26.5 (iMac-M4) : AOO 4.1.16 , LibreOffice 25.8.7.3, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallels Desktop = Windows 11 & MacOS : AOO, Libre Office.
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

[Résolu] [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

Bonjour à tous,
« Petite aide fait grand bien. »
Alors là "chapeau bas" messieurs. :bravo:
C'est exactement ce que désirai. Pour reprendre Alain
donc, si j'étais le "client".....
Et bien le client et HEUREUX.
Dans un monde informatique passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.
André Malraux (un peu modifié). Pardon je voulais dire (UN PEU MODIFIE) avec la fonction "traiteTouche"
Je vous remercie de votre aide précieuse. :super:
Libre Office Version: 7.0.4 (x64)
SE Windows 10
Avatar de l’utilisateur
Sébastien C
Membre hOOnoraire
Membre hOOnoraire
Messages : 157
Inscription : 28 avr. 2008 23:21
Localisation : Meymac (19250)

Re: [Résolu] [Basic] Contrôle de texte en majuscule

Message par Sébastien C »

Bonjour à tous,

Le fait de sortir de la boite de dialogue par la touche « Echap » provoque encore une erreur. De même en sélectionnant la saisie et la supprimant par la touche « Suppr » (suppression à droite du curseur), au demeurant fort mal géré si on n’en supprime pas l’analyse (ça cacate un caractère). Comme à son habitude, le code d’alhazred étant effectivement clarissime, on résout ces deux détails en rajoutant

Code : Tout sélectionner

		or codeCar = com.sun.star.awt.Key.ESCAPE _
		or codeCar = com.sun.star.awt.Key.DELETE _
dans l’énumération des choses à éviter.

Sinon, que c’est beau !
:-)
LibreOffice 3.5.3.2 sous GNU-Linux Mageia 2.
Avatar de l’utilisateur
Mobydick_62
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 07 avr. 2011 12:04
Localisation : Vendée (France)

Re: [Résolu] [Basic] Contrôle de texte en majuscule

Message par Mobydick_62 »

En plus c'était évident...
Alhazred, DLE et Alain : Bin alors c'est pas sérieux... :lol:
Merci Sébastien, j'ai rajouté ces deux lignes dans ce merveilleux code.
Libre Office Version: 7.0.4 (x64)
SE Windows 10
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Résolu] [Basic] Contrôle de texte en majuscule

Message par Alain de La Chaume »

Alain : Bin alors c'est pas sérieux...
hulk2.jpeg
:wink:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)