Evenement OnExit

Résolu
mulho Messages postés 12 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 22 septembre 2006 - 6 mars 2006 à 01:02
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

8 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 01:31
Bon attend je vais faire quelques petit teste et je reviens

@+
Cirec
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 01:07
Salut,
as-tu mis le KeyPreview à True dans la fenêtre qui contient le TEdit ?

@+
Cirec
0
mulho Messages postés 12 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 22 septembre 2006
6 mars 2006 à 01:15
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 01:19
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
0

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

Posez votre question
mulho Messages postés 12 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 22 septembre 2006
6 mars 2006 à 01:29
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 02:17
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 13:55
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
0
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
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 !
0
Rejoignez-nous