Majuscule seulement pour initiale dans ComboBox [Résolu]

Utilisateur anonyme - 1 juil. 2005 à 13:37 - Dernière réponse :  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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 2 juil. 2005 à 21:04
3
Merci
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

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de florenth
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 1 juil. 2005 à 14:14
0
Merci
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
Commenter la réponse de florenth
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 1 juil. 2005 à 14:15
0
Merci
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])
Commenter la réponse de jlen100
Utilisateur anonyme - 1 juil. 2005 à 15:01
0
Merci
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!
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 1 juil. 2005 à 15:10
0
Merci
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
Commenter la réponse de Utilisateur anonyme
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 1 juil. 2005 à 17:46
0
Merci
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
Commenter la réponse de florenth
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 1 juil. 2005 à 17:48
0
Merci
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
Commenter la réponse de florenth
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 1 juil. 2005 à 19:11
0
Merci
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;
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 2 juil. 2005 à 22:57
0
Merci
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
Commenter la réponse de jlen100
Utilisateur anonyme - 4 juil. 2005 à 08:58
0
Merci
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
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.