2009-09-18 5 views
1

J'ai un TdxDBGrid qui affiche certaines informations extraites d'une requête de base de données. Une des colonnes est une colonne Mémo, (TdxDbGridMemoColumn,) qui est nécessaire parce que les données dans le champ, il est lié à sortir de la base de données en tant que type TEXT, pas CHAR ou VARCHAR.Comment faire une colonne de mémo sur une grille DX afficher des mots partiels?

Problème: la colonne Mémo aime afficher des mots entiers et, si elle ne peut pas afficher un mot entier, elle n'en affiche aucune partie. Les colonnes de la grille normale montrent tout ce qu'elles peuvent jusqu'à la bordure droite et coupent l'affichage, mais la colonne mémo ne le fait pas, ce qui risque de dérouter les utilisateurs finaux. Est-il possible d'obtenir la colonne mémo pour afficher des mots partiels?

Répondre

1

Vous pouvez dessiner le propriétaire de la colonne. Ensuite, vous pouvez faire apparaître le texte comme vous le souhaitez. Appelez DrawText et utilisez le drapeau dt_End_Ellipsis pour dessiner une ellipse à la fin du texte long, ou laissez simplement le texte long être coupé dans la zone de dessin.

1

en cas OnGetText de la colonne , vous pouvez modifier le texte affiché pour tenir compte de la taille disponible:

// the TTextFormats flags are defined in Graphics, add it to your uses clause 
procedure TMyForm.gridMyColGetText(Sender: TObject; ANode: TdxTreeListNode; 
    var AText: string); 
var 
    R: TRect; 
begin 
    // Calculate actual displayable text (with ellipsis) depending on cell size 
    R := (Sender as TdxDBGridColumn).TreeList.CellRect(ANode, (Sender as TdxDBGridColumn).ColIndex); // get the cell rectangle 
    Windows.InflateRect(R, -2, 0); // shrink a bit for grid lines 
    grid.Canvas.TextRect(R, AText, [tfModifyString, tfEndEllipsis]); // shorten the text ... 
end; 
Questions connexes