DisplayFormat DBGrid [Résolu]

cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 3 juil. 2009 à 21:56 - Dernière réponse : cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention
- 6 juil. 2009 à 14:00
Bonjour,
Je voudrais Formater 2 Colonnes Float dans un DBGrid, colunns[0] en ####-##-##### et colunns[5] en #.##, mes Champs ne sont pas Persistent, donc pas accés à DisplayFormat dans l'nspecteur d'objet,donc j'ai Tapé :
DBGrid1.Columns[0].FieldName :=
QUERY.FieldValues['CHAMP1'].DisplayFormat('#####-##-#####');
DBGrid1.Columns[5].FieldName :=
QUERY.FieldValues['CHAMP1'].DisplayFormat('#.##');

Mais à chaque fois j'ai "Opération de Variant Incorrecte"

Bonne Prog à tous (tes)

*Nota j'ai testé la solution de Loulibier : http://www.delphifr.com/forum/sujet-FORMATER-CHAMPS-TDBGRID_316176.aspx pas mieux
Afficher la suite 

8 réponses

Répondre au sujet
cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 3 juil. 2009 à 21:58
+3
Utile
Oups désolé pour la mise en page de daube que je viens de poster
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_eli42
beckerich 309 Messages postés jeudi 29 septembre 2005Date d'inscription 17 septembre 2013 Dernière intervention - 3 juil. 2009 à 23:51
+3
Utile
bonsoir,

il faut peut-être essayer le traitement dans l'évènement DBGrid1DrawColumnCell du dbgrid.

procedure TForm4.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DataCol = 0 then
  begin
   
  end;
end;

Luc.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de beckerich
beckerich 309 Messages postés jeudi 29 septembre 2005Date d'inscription 17 septembre 2013 Dernière intervention - 3 juil. 2009 à 23:54
+3
Utile
oups trop vite :

procedure TForm4.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DataCol = 0 then
  begin
    DBGrid1.Canvas.Font.Name := 'Tunga';

  end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de beckerich
beckerich 309 Messages postés jeudi 29 septembre 2005Date d'inscription 17 septembre 2013 Dernière intervention - 4 juil. 2009 à 01:18
+3
Utile
tu dois gérer toi-même les alignements (SetTextAlign(DBGrid.Canvas.Handle, TA_RIGHT))

ou utiliser DrawText...
Courage, tu es sur la bonne voie.
Luc.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de beckerich
cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 4 juil. 2009 à 01:20
+3
Utile
J'ai fait un mix de Beckerich et de Loulibier : http://www.delphifr.com/forum/sujet-FORMATER-CHAMPS-TDBGRID_316176.aspx

Procedure TFiche.DBGListeDrawColumnCell(Sender: TObject; Const Rect: TRect;
DataCol: Integer; Column: TXColumn; State: TGridDrawState);
Begin
If DataCol = 0 Then
Begin
DBGListe.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
FormatFloat('####-##-#####', DM.T_BL.Fieldbyname('NFICHE').AsFloat));
End;
If DataCol = 5 Then
Begin
DBGListe.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
FormatFloat('0.00', DM.T_BL.Fieldbyname('TOTAL').AsFloat));
End;
End;

Ca fonctionne par contre pour ma colonne 5 qui FLOAT j'ai un Alignement a gauche malgre :
DBGLISTE.Columns[5].Alignment := taRightJustify;

Voila ca avance doucement mais surement
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_eli42
cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 6 juil. 2009 à 14:00
+3
Utile
Bon voila pour finir, j'ai exactement ce que je voulais :

Procedure TForm1.DBGListeDrawColumnCell(Sender: TObject; Const Rect: TRect;
DataCol: Integer; Column: TXColumn; State: TGridDrawState);
Var
LargEcrit: Integer;
Begin
Try
If DataCol = 0 Then
Begin
LargEcrit := DBGListe.Canvas.Textwidth(FormatFloat('####-##-#####',
Table.Fieldbyname('NFICHE').AsFloat));
DBGListe.Canvas.TextRect(Rect, Rect.Right - LargEcrit - 2, Rect.Top + 2,
FormatFloat('####-##-#####', Table.Fieldbyname('NFICHE').AsFloat));
End;
If DataCol = 5 Then
Begin
LargEcrit := DBGListe.Canvas.Textwidth(FormatFloat('0.00',
Table.Fieldbyname('TOTAL').AsFloat));
DBGListe.Canvas.TextRect(Rect, Rect.Right - LargEcrit - 2, Rect.Top + 2,
FormatFloat('0.00', Table.Fieldbyname('TOTAL').AsFloat));
End;
Except
exit;
End;
End;

Bonne Prog a tous, et merci a Beckerich et de Loulibier, ded m'avoir mis sur le bon chemin
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_eli42
cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 4 juil. 2009 à 01:16
0
Utile
J'ai fait un mix de Beckerich et de Loulibier : http://www.delphifr.com/forum/sujet-FORMATER-CHAMPS-TDBGRID_316176.aspx

Procedure TFiche.DBGListeDrawColumnCell(Sender: TObject; Const Rect: TRect;
DataCol: Integer; Column: TXColumn; State: TGridDrawState);
Begin
If DataCol = 0 Then
Begin
DBGListe.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
FormatFloat('####-##-#####', DM.T_BL.Fieldbyname('NFICHE').AsFloat));
End;
If DataCol = 5 Then
Begin
DBGListe.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
FormatFloat('0.00', DM.T_BL.Fieldbyname('TOTAL').AsFloat));
End;
End;

Ca fonctionne par contre pour ma colonne 5 qui FLOAT j'ai un Alignement a gauche malgre : DBGLISTE.Columns[5].Alignment := taRightJustify;

Voila ca avance doucement mais surement
Commenter la réponse de cs_eli42
cs_eli42 106 Messages postés mardi 24 décembre 2002Date d'inscription 8 avril 2018 Dernière intervention - 4 juil. 2009 à 01:17
0
Utile
???? c'est quoi cete mise en page ????
Commenter la réponse de cs_eli42

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.