Tdbgrid et caractères spéciaux

sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 - 17 nov. 2003 à 14:45
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 17 nov. 2003 à 21:34
Bonjour ,
Je voudrais savoir comment intégrer un caractère spécial dans la case en cours du tdbgrid1 à l'emplacement du curseur quand l'utilisateur fait une certaine combinaison de touches, clique sur un certain bouton, etc...

Je sais faire dans un tedit et un tdbedit (avec selstart, etc ...) mais je n'arrive pas à accéder à la case du tdbgrid en cours (pas sélectionnée mais où est le curseur ...).

En plus je vois qu'il n'y a pas de'évènement
" Onkeypress " ou " onkeydown ", etc pour un tdbgrid !...
J'aimerais bien connaître une api pour inscrire le caractère n° tant à l'endroit du curseur (dans le contrôle en cours) pour une certaine combinaison de touches : ce serait merveilleux pour moi !...

Mais ça doit bien exister sinon comment la fonction senkey de VB fonctionnerait-elle ?...

Merci de me répondre rapidement car mon programme n'attend pas !... ;)

Allez Salut !...
Sisi231

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 nov. 2003 à 20:26
Désolé de te contredire, mais il y a bien un évènement OnKeyDown sur les TDbGrid.
La preuve en image :
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //Shift + F2
  if (Key = VK_F2) and (ssShift in Shift) then
    with DbGrid1.DataSource.DataSet do
    begin
      //Si l'ensemble de données n'est pas
      //en mode édition ou insertion
      if not (State in dsEditModes) then
        Edit;
      //Avec le champ actuellement sélectionné
      with TField(DbGrid1.SelectedField) do
        //vérifier qu'il soit du type alpha
        if DataType in [ftString, ftWideString] then
          //si oui, ajouter les caractères ' +'
          TField(DbGrid1.SelectedField).AsString := TField(DbGrid1.SelectedField).AsString + ' +';
      Post;
    end;
end;


Commentaire : insertion des caractères ' +' au bout du contenu du champ actuellement en surbrillance dans le DbGrid, si et seulment si le champ est de type chaîne.

Par rapport à ta demande, je ne vois pas de moyen d'insérer à la position courante du curseur en mode édition du champ.
Mais on va continuer à chercher !
May Delphi be with you
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 nov. 2003 à 21:34
Non mais, franchement, pour faire simple quand on peut faire compliqué !
La solution est vraiment trop simple :
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //Shift + F2
  if (Key = VK_F2) and (ssShift in Shift) then
    with DbGrid1, DataSource, DataSet do
      if TField(SelectedField).Datatype in [ftString, ftWideString] then
         DbGrid1.Perform(WM_CHAR, Ord('['), 0);
end;


L'ensemble de données bascule automatiquement en mode édition s'il n'y était pas et ajoute le caractère à la fin. Si on est déjà en mode édition, alors le caractère est inséré à la position courante.

Pour info : avec les composants orientés données, il ne faut jamais chercher à modifier le contenu du contrôle visuel.
Comme ils reflètent l'état et le contenu de l'ensemble de données lié, c'est donc ce dernier qu'il faut modifier.
May Delphi be with you
0
Rejoignez-nous