Voici comment saisir un mot de passe pour l'accès en écriture à une case de StringGrid.
Le principe:
A l'accès en écriture d'une cellule, on ouvre une autre fenêtre demandant le mot de passe. Le code de l'accès en écriture rentrera alors en boucle infinie tant que le mot de passe n'est pas renseigné et bloque ainsi toute écriture dans une case.
La validation du mot de passe débloque la boucle infinie. Si le mot de passe est incorrect, la case reste sélectionné, mais le curseur d'écriture est enlevé.
Code de la Form1:
dans la Form2:
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 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" bool MdpSaisie; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1GetEditText(TObject *Sender, int ACol, int ARow, AnsiString &Value) { Form2->Show(); //attend la fin de la saisie du mot de passe while(!MdpSaisie) Application->ProcessMessages(); MdpSaisie = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { exit(0); } //---------------------------------------------------------------------------
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
60
61
62
63
64
65
66
67 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" extern bool MdpSaisie; TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { Form2->FormStyle = fsStayOnTop; Edit1->Text = NULL; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { Form2->Hide(); if(Edit1->Text != "mdp") //ressort de la sélection de la cellule { Form1->StringGrid1->Enabled = false; Application->ProcessMessages(); Form1->StringGrid1->Enabled = true; } MdpSaisie = true; } //--------------------------------------------------------------------------- void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action = caNone; Button1->OnClick(this); } //--------------------------------------------------------------------------- void __fastcall TForm2::Edit1KeyPress(TObject *Sender, char &Key) { static AnsiString mdp; if(Key == 8) { } if( (Key > '0' || Key <'9') &&(Key > 'a' || Key <'z') &&(Key > 'A' || Key <'Z')) { mdp.Insert(Key,Edit1->SelStart+1); Key = '#'; } else if(Key == 8 ) { mdp.Delete(Edit1->SelStart+1,1); Key = NULL; } Label2->Caption = mdp; } //---------------------------------------------------------------------------
Partager