Evenement OnExit [Résolu]

Messages postés
12
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 septembre 2006
- - Dernière réponse : mulho
Messages postés
12
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 septembre 2006
- 6 mars 2006 à 20:09
Bonjour, OnExit c'est super, mais... si j'ai un seul et unique TEdit dans une fenêtre, ce dernier est toujours ignoré!
Mon probleme est le suivant : j'ai un Stringrid et des que l'utilisateur se met en mode édit dans une cellule, je veux afficher une toute petite fenetre avec un TEdit pour qu'il saisisse dedans, puis, des qu'il fait Tabulation ou échap , entree... cette fenetre doit se fermer pour affiche rla valeur saisie dans la cellule.
Mais je n arrive pas à quitter ce champs, et le teste OnKeyDown de la fenetre est également ignoré. Comment forcer la sortie du champ ?
Merci
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
3
Merci
Bon attend je vais faire quelques petit teste et je reviens

@+
Cirec

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
0
Merci
Salut,
as-tu mis le KeyPreview à True dans la fenêtre qui contient le TEdit ?

@+
Cirec
Commenter la réponse de Cirec
Messages postés
12
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 septembre 2006
0
Merci
Non c'est vrai j'y avais pas pensé.. L ecran recoit désormais l evenement mais ignore toujours la tabulation qui reste bloquée sur le champ
Commenter la réponse de mulho
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
0
Merci
Sur le champ du TEdit
si oui comment t'y prends-tu ?
le plus simple c'est de donner le bout de code qui pose problème

@+
Cirec
Commenter la réponse de Cirec
Messages postés
12
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 septembre 2006
0
Merci
Le code est quasi nul pour l'instant, je l'allimenterai dans le OnExit mais pour cela il faut qu'il y passe. La je n'ai fait qu'y mettre un point d'arret ainsi que le KeyDown de la fenetre, et il n y passe pas.
Finalemnet je fais ca car j'ai plusieurs traitement à effectuer sur la valeur saisie et je ne trouve pas le moyen de capter la perte de focus de la cellule courante dans une grille .. Ca serait encore mieux si c'etait possible
Commenter la réponse de mulho
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
0
Merci
Bon amors c'est pas aussi simple qu'il n'y parait mais continue les testes demain car la il se fait un peut tard...
Mais je te tiens au courant dans la journée
bonne nuit

@+
Cirec
Commenter la réponse de Cirec
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
0
Merci
Salut,

Bon alors voici ce que j'ai trouvé il éxiste peut être une autre méthode mais celle-ci fonctionne je l'ai testé:

type
TForm1 = class (TForm)
StringGrid2: TStringGrid;
procedure StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid2Enter(Sender: TObject);
procedure StringGrid2Exit(Sender: TObject);
private
{ Déclarations privées }
Procedure VerifieCell(aCell : TPoint);
public
{ Déclarations publiques }
end;


var
Form1: TForm1;
MemoCell : TPoint = (X: -1; Y: -1); // pour Mémoriser la position de la Cellule et on l'initialise à -1 (Cellule inexistante)
implementation
{$R *.DFM}


procedure TForm1.VerifieCell(aCell: TPoint);
begin
// dans cette procédure tu mets les actions à éffectuer avec les valeurs des Cellules
// Ex. With StringGrid2.Cells[MemoCell.X, MemoCell.Y] do
//Begin

//End;

// ceci est juste là pour vérifier que l'on traite bien la cellule que l'on vient de quitter
ShowMessage(Format('ça Fonctionne ACol := %d , ARow := %d', [MemoCell.X, MemoCell.Y]));
end ;


procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
// à chaque changement de cellule on effectue le traitement avec VerifieCell
VerifieCell(MemoCell);
// et on récupère la nouvelle position
MemoCell.X : = ACol;
MemoCell.Y := ARow;
end ;


procedure TForm1.StringGrid2Enter(Sender: TObject);
begin
// à l'entrée dans StringGrid mais seulement la première fois If (MemoCell.X -1) <gras>and (MemoCell.Y</gras> -1) Then
Begin
MemoCell.X : = 1;
MemoCell.Y := 1;
End;
end;


procedure TForm1.StringGrid2Exit(Sender: TObject);
begin
// il faut aussi contrôler la sortie de StringGrid
If (MemoCell.X <> -1) and (MemoCell.Y <> -1) Then VerifieCell(MemoCell);
end;
end.

@+
Cirec
Commenter la réponse de Cirec
Messages postés
12
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 septembre 2006
0
Merci
Merci, c vrai ca marche et ca me semble aussi la solution la plus judicieuse, il me restera essentiellement qu à ne traiter que le code de sortie de cellule qd elle a été modifiée ou en edit mode pour eviter qu'il le fasse à chaque click.
Merci bcp et bonne soirée !
Commenter la réponse de mulho