Un "hint" dans un DbGrid

Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
- - Dernière réponse : Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
- 14 févr. 2011 à 15:03
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
Afficher la suite 

5 réponses

Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
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
Commenter la réponse de WhiteHippo
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
0
Merci
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
Commenter la réponse de Lunasoft
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
Salut,

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

_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
0
Merci
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
Commenter la réponse de Lunasoft
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
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
Commenter la réponse de Caribensila