Salut LoicH
Pour avoir les TEdit qui affiche de gros points a la place des caracteres il faut faire comme ceci
Pour afficher le message au passage du curseur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Edit1->Font->Name = "wingdings"; Edit1->PasswordChar = 'l';
pour convertir automatiquement le texte en minuscle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Edit1->Hint = "mon texte"; Edit1->ShowHint = true;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Edit1->CharCase = ecLowerCase; // ecNormal, ecLowerCase, ecUpperCase
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Hello,
l'exemple de l'application fournie est une application .Net
dans le cas de C++ Builder ou delphi tu dois créer une form
contenant les différents éléments de ton exemple
cdlt
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
Pour tester si c'est une minuscule peut etre comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TForm1::Edit1Change(TObject *Sender) { String a = Edit1->Text; int b = a.Length(); String c = a.SubString(b,1); if(c <= "a" && c <= "Z") { ShowMessage("Majuscule"); } }
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Sous Vista\Seven, le PasswordChar en * affiche automatiquement des ronds verts
Il faut juste veiller que la font est Tahoma et non MS sans Serif (comme sous C++Builder 6 et 2K)
PasswordChar en * devrait activer ce type de contrôle normalement
J'ai testé, sous BCB2007 + XPManifest sur XP SP3, cela affiche une info bulle
il faut laisser CharCase à ecNormal
Si tu modifie CharCase cela n'affichera plus le message et appliquera la conversion (pratique à bannir car cela réduit la variabilité du mot de passe)
Comme dans le sujet Comment utiliser le caractère ● comme Passwordchar?
isupper existe soit dans ctype.h
IsUpper dans SysUtils des versions Unicode de C++Builder
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void __fastcall TForm1::Edit1Change(TObject *Sender) { int l = Edit1->Text.Length(); if (l > 0) if (IsUpper(Edit1->Text[l])) ShowMessage("Majuscule"); }
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Pour afficher le message la ou tu veux, en reprenant le code de ShaiLeTroll
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void __fastcall TForm1::Edit1Change(TObject *Sender) { int l = Edit1->Text.Length(); if (l > 0) if (isupper(Edit1->Text[l])) { THintWindow* myhint; myhint = new THintWindow(Edit1); myhint->Color = clInfoBk; myhint->ActivateHint(TRect(Form1->Left + Edit1->Left + 20, Form1->Left + Edit1->Top + 15, Form1->Left + Edit1->Left + 235, Form1->Left + Edit1->Top + 40),"Vous devez ecrire en minuscule"); Sleep(1000); myhint->ReleaseHandle(); } }
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Hello Blondelle
Attention au MemoryLeak
la mémoire allouée a hint window n'est jamais désallouée
l'utilisation de auto_ptr ou unique_ptr permet l'allocalion mémoire sans se soucier de libérer les objets
cdlt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #include <memory> std::unique_ptr<THintWindow> myhint(new THintWindow()); // ou std::auto_ptr<THintWindow> myhint(new THintWindow());
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
merci a tous pour l’intérêt que vous portez à ce sujet.
Alors j'ai bien réussi à masquer les caractères et à tester minuscules et majuscules.
Par contre il y a juste l'affichage de la fenêtre qui indique qu'on a activé le Verrouillage numérique. Mais si j'ai bien compris DjmSoftware, il faut que je crée une form juste pour cela :
Hello
oui tu dois créer une form similaire à l’exemple que tu a fournit
les exemples fournis et tout particulièrement celui de Blondelle affiche une HintBox lorsque le la touche CapsLock est activée accouplée a une EditBox
cdlt
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
C'est AUTOMATIQUE !
C'est Windows qui le fourni automatiquement si on n'utilise pas le message EM_SETPASSWORDCHAR à l'Edit mais que l'on utilise le style ES_PASSWORD !
Le Hint s'affiche dès que l'on clique dans le TEdit !
Il n'y a AUCUN code à faire si l'on a le support des Thèmes activé !
Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3object EditForPassword: TEdit PasswordChar = '*' end
BCB6, Pas de Thème (XPMan n'apparait qu'en D7), XP SP3 -> Etoile + Pas de Hint
BCB2007, Thème Activé dans les Options de Projet, XP SP3 -> Etoile + Hint (Haut de l'Image)
BCBXE2, Thème Activé dans les Options de Projet, XP SP3 -> Rond + Hint (Base de l'image)
Sous Vista\Seven la fenêtre doit ressembler à celle de ton image !
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
LoicH
Peut tu donner la version de BCB que tu utilise, la solution que l'on te donnera sera mieux adaptee
DjmSoftware
ceci me provoque des erreurs, je n'ai pas cherche plus
j'ai ajoute ceci a mon code#include <memory>
std::unique_ptr<THintWindow> myhint(new THintWindow());
// ou
std::auto_ptr<THintWindow> myhint(new THintWindow());
Le hint s'affiche uniquement en cas de majuscules
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int l = Edit1->Text.Length(); if (l > 0) if (isupper(Edit1->Text[l])) { THintWindow* myhint; myhint = new THintWindow(Edit1); myhint->Color = clInfoBk; myhint->ActivateHint(TRect(Form1->Left + Edit1->Left + 20, Form1->Left + Edit1->Top + 15, Form1->Left + Edit1->Left + 235, Form1->Left + Edit1->Top + 40),"Vous devez ecrire en minuscule"); Sleep(1000); myhint->ReleaseHandle(); delete myhint; // <-----Ajout }
J'ai trouve ceci sur le Net pour afficher un Balloon, mais une fois active je n'ai pas reussi a le desactiver
le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void __fastcall TForm1::Edit1Change(TObject *Sender) { int l = Edit1->Text.Length(); if (l > 0) if (isupper(Edit1->Text[l])) { HWND hToolTip = CreateWindow( TOOLTIPS_CLASS, NULL, TTS_BALLOON, 0, 0, 0, 0, Handle, NULL, HInstance, NULL ); if ( hToolTip != NULL ) { TOOLINFO tool_info = {0}; tool_info.cbSize = sizeof(tool_info); tool_info.uFlags = TTF_SUBCLASS | TTF_TRANSPARENT; tool_info.hwnd = Edit1->Handle; tool_info.lpszText = "texte a afficher"; CopyRect( &tool_info.rect, &(Edit1->ClientRect) ); SNDMSG( hToolTip, TTM_ADDTOOL, 0, reinterpret_cast<LPARAM>(&tool_info) ); } } }
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Hello Blondelle
il semblerait que la STL qu tu utilise n'est plus au goût du jour
Si tu utilise C++ Builder6
auto_ptr est déclaré dans le fichier include _auto_ptr.h
quand à unique_ptr il n'existe simplement pas
tu devrais songer à migrer :
cdlt
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
DjmSoftware
il a fallu que j'ecrive comme ceci l'include " #include <stl/_auto_ptr.h> ", je joinds le code corrige
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <memory> #include <stl/_auto_ptr.h> int l = Edit1->Text.Length(); if (l > 0) if (isupper(Edit1->Text[l])) { std::auto_ptr<THintWindow> myhint(new THintWindow(Edit1)); myhint->Color = clInfoBk; myhint->ActivateHint(TRect(Form1->Left + Edit1->Left + 20, Form1->Left + Edit1->Top + 15, Form1->Left + Edit1->Left + 235, Form1->Left + Edit1->Top + 40),"Vous devez ecrire en minuscule"); Sleep(1000); myhint->ReleaseHandle(); }j'y ai songe mais j'esite l'investissement est quand meme assez lourdtu devrais songer à migrer
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Je suis aussi sous BCB6 et windows7, tu ne devrais pas avoir de probleme avec les codes postes
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Voici pour afficher un Balloon semblable a ton exemple
Sur la Form un TEdit
le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HWND hwndToolTips; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // le lien // <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250(v=vs.85).aspx" target="_blank">http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx</a> } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { // gestion affichage Balloon hwndToolTips = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_BALLOON, 0, 0, 0, 0, Handle, NULL, HInstance, NULL); if (hwndToolTips != NULL) { TOOLINFO ti; ti.cbSize = sizeof(ti); ti.uFlags = TTF_SUBCLASS | TTF_TRANSPARENT | TTF_CENTERTIP; ti.hinst = NULL; ti.rect = Edit1->ClientRect; ti.hwnd = Edit1->Handle; ti.lpszText = "texte qui s'affiche"; CopyRect( &ti.rect, &(Edit1->ClientRect)); SendMessage(hwndToolTips, TTM_ADDTOOL, 0, (LPARAM) &ti); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { POINT cursor; int l = Edit1->Text.Length(); if (l > 0) if (isupper(Edit1->Text[l])) { // on active l'affichage SendMessage(hwndToolTips, TTM_ACTIVATE, true, 0); // on acquier la position du curseur GetCursorPos(&cursor); // on simule un deplacement SetCursorPos(cursor.x + 1, cursor.y); } if(islower(Edit1->Text[l])) { // on desactive l'affichage SendMessage(hwndToolTips, TTM_ACTIVATE, false, 0); } } //---------------------------------------------------------------------------
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Merci beaucoup. Je vais essayer ta solution.
Désolé de la durée de ma réponse mais je suis en déplacement professionnel.
Mais je vais essayer cela et vous tiendrais au courant. J'aurais durement trouvé cela tout seul
Hello
C++ Builder 6 ne disposait pas d'accès directe aux thèmes de windows
XP et Supérieur
il te suffit de rajouter dans ton projet le fichier winxp.res contenu dans le zip attaché pour avoir cette accés aux thèmes windows
avec ce fichier .Res plus besoin de programmer simplement rèfère toi au post précédent de ShaireLeTroll
cdltC'est AUTOMATIQUE !
C'est Windows qui le fourni automatiquement si on n'utilise pas le message EM_SETPASSWORDCHAR à l'Edit mais que l'on utilise le style ES_PASSWORD !
Le Hint s'affiche dès que l'on clique dans le TEdit !
Il n'y a AUCUN code à faire si l'on a le support des Thèmes activé !
Code dfm :Sélectionner tout - Visualiser dans une fenêtre à part123 object EditForPassword: TEdit
PasswordChar = '*'
end
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
Salut DjmSoftware
Si je ne me trompe pas ce Tuto sur le site correspond a l'utilisation de ton fichier
le lien
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Hello Blondelle,
j'utilisais cette astuce trouvée sur le Net lors que j'utilisais encore C++ Builder 6 cad en 2005
cdlt
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager