Un "hint" dans un DbGrid

Signaler
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
-
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Salut!

Avant que je pose ma question, je montre les codes que j'ai écrit juste pour vous demander de m'aider comment le resultat de cette opération peut apparaitre dans un "hint". Lors d'une saisie dans une cellule d'un DbGrid.

var test : double;
...
test:= StrToFloatDef(edit1.text,0.0) * StrToFloat(edit2.text, 0.0);
edit_resultat.Text:= floatToStrF(test, fffixed, 15,0);
...
Par exemple, je saisie 300 dans une cellule. Ce nombre fait directement une multiplication avec le chiffre 2 qui est invariable dans un edit2.
Que faire dans ce cas?

Merci d'avance,

Delphi le revolutionnaire, Delphi le Conquérant

5 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012

Bonsoir

Est-ce cela que tu recherches :

type
  TDbGridCheater = class(TDBGrid);

var
  OldX, OldY : Integer;

// Code à placer dans l'évenement "OnMouseMove" de ton DBGrid
procedure TFrame_Viewer.Viewer_DBGridMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  MyDBGrid : TDBGrid    ;
  Coord  : TGridCoord ;
  OldRec : integer    ;
var
  ACol, ARow : Integer;
begin
  MyDBGrid := TDBGrid(Sender);
  with MyDBGrid do
  begin
    // Hint par défaut
    Hint := '' ;

    // On active l'affichage du hint si celui-ci est désactivé
    If ( ShowHint = FALSE ) Then ShowHint := TRUE ;

    // Coordonnées ( Colonne, Ligne ) en fonction de la position du curseur
    Coord := MouseCoord(X, Y);

    if     ( Coord.X >= 0 ) and ( Coord.X < Columns.Count )
       and ( Coord.Y >= 0 )
    then
    begin
      // Sauvegarde de l'enregistrement en cours
      OldRec := TDbGridCheater(MyDBGrid).DataLink.ActiveRecord;

      // Placement sur l'enregistrement sous le curseur
      TDbGridCheater(MyDBGrid).DataLink.ActiveRecord := Coord.Y - 1;

      // Mise en place du hint
      // Ici, on affiche juste le contenu de la cellule sous le curseur
      Hint := Columns[Coord.X].Field.AsString;

      If ( X <> OldX ) and ( Y <> OldY ) Then
      begin
        // Sauvegarde de l'emplacement actuel
        OldX := X ;
        OldY := Y ;
        // Forçage de l'affichage du hint
        Application.CancelHint;
      end;

      // Restauration de l'enregistrement en cours
      TDbGridCheater(MyDBGrid).DataLink.ActiveRecord := OldRec;

    end;
  end;
end;


Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011

Merci pour les codes.
Mais il ne s'agit pas trop de ça.
Je m'explique clairement:
Au moment où je saisi un nombre dans une cellule precise de la colonne "Valeur"... j'aimerai qu'un "hit" dynamique apparaisse en me montrant le resulat de l'opération (ex: 1+1). Comme je l'ai montré dans mon premier message posté ci-haut.
Je crois que ceci peut être faisable probablement dans l'événement OnkeyDown.

Un autre éclaircissement théorique:
sur un "form", j'ai une table ayant une colonne appelée "valeur". Et sur le même "form" un tedit gardant le nombre 2.
Lorsque j'écris 300 par exemple dans une des cellules de la dite colonne, les 300 sont multipliés par 2. Ça fait 600. Mais le résultat devra apparaître dans un "hit" dynamique.

Merci,
Étudiant
Delphi le revolutionnaire, Delphi le Conquérant
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
Salut,

Peut-être ça :
Mise à jour d'un Hint en continu.

_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011

Juste pour une précision: DoShowHint est une function declarée alors?
Je pose cette question, parce qu'à la compilation le programme se plante.

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := DoShowHint;
end;


{Le Hint du Label1 affichera l'heure en continu.}
procedure TForm1.DoShowHint(var HintStr: String ; var CanShow: Boolean;
var HintInfo: THintInfo);
begin
if HintInfo.HintControl = Label1 then begin
HintInfo.ReshowTimeout := 1000; // Périodicité de la màj.
Label1.Hint := TimeToStr( Time ); // Affiche l'heure par exemple.
end;
end;


Étudiant
Delphi le revolutionnaire, Delphi le Conquérant
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure DoShowHint(var HintStr: String ; var CanShow: Boolean; var HintInfo: THintInfo);
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := DoShowHint;
Application.HintPause  := 0;
Label1.ShowHint        := true;
end;

procedure TForm1.DoShowHint(var HintStr: String ; var CanShow: Boolean; var HintInfo: THintInfo);
begin
if HintInfo.HintControl=Label1 then begin
  HintInfo.ReshowTimeout := 1000;        // Périodicité de la màj.
  Label1.Hint            := TimeToStr( Time );
end;
end;

end.



_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr