Tdbgrid et caractères spéciaux

Contenu du snippet

Le but est d'insérer un caractères spécial au champ d'un ensemble de données affiché dans un contrôle de type TDbGrid.
Comme nous ne connaissons pas le champ sélectionné par l'utilisateur, dans cet exemple, nous supposons que n'importe quel champ de type String ou similaire fera l'affaire. Si lon avait voulu réserver cette action à un champ précis, il suffit de le comparer au champ de la colonne actuellement sélectionnée :
if TField(SelectedField) = Table1Nom then ...

Comme on veut utiliser une combinaison de touches qui ne produit pas de caractère, comment transformer cette combinaison de touche en une touche représentant un caractère ASCII visible ?
Eh bien, tout simplement en s'envoyant un message du type WM_CHAR !
Pour ceux qui ne connaissent pas la méthode Perform, je les incite à regarder plus bas.

Source / Exemple :


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;

Conclusion :


Extrait de l'aide en ligne de Delphi : "Appelez Perform pour court-circuiter la file d'attente des messages Windows et envoyer directement un message à la procédure de fenêtre du contrôle."

Valable dans toutes versions de Delphi.

Faites en bon usage.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.