Majuscule seulement pour initiale dans ComboBox

Résolu
Utilisateur anonyme - 1 juil. 2005 à 13:37
 Utilisateur anonyme - 4 juil. 2005 à 08:58
Bonjour,
J'ai un ComboBox, et quand j'écris dedans ça me met au fur et à mesure sur l'item correspondant, et donc quand j'ai le bon item inscrit, je fais tab pour passer à un autre ComboBox. Mais le problème est que quand j'écris, la majuscule qui était en majuscule dans mon item devient minuscule car j'ai écris dans mon ComboBox en minuscule. Est-ce qu'il y a une astuce pour mettre la 1ere lettre de saisie de mon ComboBox en majuscule ou alors il faut que je fasse le test dans le OnKeyDown?
Merci d'avance

10 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
2 juil. 2005 à 21:04
Eh mais il y a du vrai dans ce que tu dis !!! ;-)

Ca fait "un partout".



Non, en effet, je n'avais pas testé ce bout là: ça me semblait tellement évident que cela allait marcher ...



En résumé, deux solutions sont envisageables à ce problème :



- La première, la tienne jlen100, (du post d'avant) qui effectue une
mise en majuscule après que l'utilisateur ait TOUT saisi dans le
combobox.

Inconvénient: une variable temporaire et le délai entre le moment où
l'utilisateur entre sa première lettre et le moment où elle sera mise
en majsucule.



- La deuxème, la mienne (celle de mon tout premier post) qui effectue
une mise en majuscules DES QUE l'utilisateur entre sa PREMIERE lettre.

Inconvénient: ?? (mais comme c'est mon code, je suis mal place pour en dire du mal, faites-le moi savoir si qqch cloche)



LaNat88, tu fais ton choix et tu valide (de préférence) nos deux réponses puisqu'elles fonctionnent toutes deux.



@ +++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
1 juil. 2005 à 14:14
Tu peux mettre con TCombobox en Style = csDropDownList ou bien mettre ce code dans l'évenement OnKeyPress de ton ComboBox:



procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

if ComboBox1.Text = '' then

Key:= UpCase(Key);

end;

<hr size ="2" width="100%">Voila



@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 juil. 2005 à 14:15
salut,

je pense que le plus simple est de forcer la majuscule au moment ou tu quites ton combobox en utiisant dans onexit

if ComboBox1.Items<>'' then ComboBox1.Items[1] := UpperCase(ComboBox1.Items[1])
0
Utilisateur anonyme
1 juil. 2005 à 15:01
Merci tout d'abord à tous les 2 de vous soucier de mon problème mais j'ai l'impression que le code de florent va mettre en majuscules tout mon item alors que je ne veux que la 1ere lettre. Dans ce cas je verrai plus un truc du style comme jlen100, mais moi je bosserais plutot sur le Text et non sur l'item, dans ce cas comment récupérer la 1ere lettre du Text? par un copy? du genre :
tmp := combobox.text;
tmp2 := copy(tmp,1,1);
tmp3 := copy(tmp,2,le reste);
combobox.text:=upper(tmp2)+tmp3
Non? Dites moi si je me goure, je débute en delphi!!
Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
1 juil. 2005 à 15:10
Bon alors je viens de tenter le truc, ca a l'air de fonctionner :
procedure TFenetreSaisieInterlocuteur.ListeExit(Sender: TObject);
var
tmp,tmp2,tmp3 : string;
begin
tmp := Liste.Text;
tmp2 := copy(tmp,1,1);
tmp3 := copy(tmp,2,Length(Liste.Text)-1);
Liste.Text := UpperCase(tmp2)+tmp3;
end;
Bon c'est un peu 'magouille' mais bon ca fonctionne...
Merci encore à vous 2!
Nathalie
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
1 juil. 2005 à 17:46
Euh, LaNat88, as-tu vraiment testé mon code ??

Car figure toi qu'il fonctionne parfaitement (il ne met que la 1ère
lettre) : le code teste si la saisie est vide, donc si l'utilisateur
est en train de taper le 1er carac, et si c'est le cas, il le met en
majuscule.



L'avantage de ma technique par rapport à la tienne est que la mise en
majuscule de la 1ere lettre se fait dès qu'elle est tapée et non pas à
la fin.



JLen100 > As tu testé ton code ?? A priori non.

- Delphi signale une erreur au niveau du IF. Normal, tu compare
un objet à une chaîne et tu lui attribue une valeur chaine: j'imagine
que tu voulais mettre Text à la place de Items-

- UpperCase(ComboBox1.Items[1] comme tu l'as écrit, revoie tout
le premier item en majuscule. Ce n'est pas du toun ce que LaNat88
recherchait.



Résultat: LaNat88, regarde les codes que l'on te propose. A quoi cela
sert de poser une question si on n'écoute pas la réponse ? Ma premiere
réponse correspond parfaitement à tes attentes.



@ ++

Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
1 juil. 2005 à 17:48
LaNat88, ton code magouillé fonctionnne c'est l'essentiel mais tu peux aussi mettre:



Liste.Text[1]:=UpCase(Liste.Text[1]);



Comment faire compliqué quand on peut faire simple ??

Mais je te le rapelle une dernière fois, mon premier message (celui
juste en dessous de ta question) est préférable à ton code, et à celui
que je te présente à la ligne du dessus.



@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 juil. 2005 à 19:11
salut, florent

c'est vrai je n'avais pas tester mon code.

mais je pense que que tu n'as non plus tester le tien

en effet:

Liste.Text[1]:= UpCase(Liste.Text[1]);

n'est pas compilable (erreur de compliation la partie gauche n'est pas
affectable) ensuite si tu sort avec un text vide tu auras une erreur
d'execution.

il faut passer par une variable intermediaire et tester si elle est
valide avant d'utiliser la fonction UpCase() (chaine non vide)

procedure TForm1.listeExit(Sender: TObject);

var buffer:string;

begin

buffer: =Liste.Text;

if buffer<>'' then buffer[1]:=UpCase(buffer[1]);

liste.Text:=buffer;

end;
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 juil. 2005 à 22:57
Un partout c'est beaucoup dire. C'est toujours sur les trucs les plus évidents qu'on se plante.

l'inconvénient de ta méthode bien que mineure c'est de
mobililiser un peu plus de ressources processeurs (un appel de
procedure et un test à chaque cartactére) . c'est un vieux reste de
TurboPascal tournant sur un 8086 à 8Mhz : il valait mieux faire
attention à son code.



Ma méthode (mais c'est moi qui le dit je ne suis donc
pas impartial) c'est ce qu'on appelle la différenciation retardée :
effectuer le traitement qu'en c'est nécessaire



La variable temporaire est une variable locale qui est libéerée des la
sortie de la procedure son influence est faible sur l'occupatiuon
mémoire (sauf à rentrer un roman fleuve dans Text) cela ne dépasse pas
1 pointeur en pile + la chaine .



quand au choix entre les 2 methodes tout dépend de ce qu'on fait apès:

@+

jlen100



L'expérience est la somme des erreurs corrigées
0
Utilisateur anonyme
4 juil. 2005 à 08:58
Bonjour à vous deux,
Bon je tiens à m'excuser d'avoir douté de vos solutions, et Florent je suis désolée si je t'ai froissée (bonne fête au passage...).
Je vous remercie de m'avoir proposé deux solutions à mon problème, et je vous promets à l'avenir de tester les solutions avant de les commenter.
A bientôt,
Nathalie
0
Rejoignez-nous