Un "hint" dans un DbGrid

Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011 - 10 févr. 2011 à 18:00
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 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

5 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
10 févr. 2011 à 23:02
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
0
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011
12 févr. 2011 à 18:24
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
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
13 févr. 2011 à 19:04
Salut,

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

_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
0
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011
14 févr. 2011 à 14:28
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
0

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

Posez votre question
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
14 févr. 2011 à 15:03
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
0
Rejoignez-nous