IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

TStringGrid: fontes quelconques


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut TStringGrid: fontes quelconques
    Bonjour,

    je suis désolé de rouvrir une xième nouvelle discussion sur le sujet mais après plusieurs heures de recherche je n'ai rien trouvé qui ferait mon bonheur.

    En fait je cherche à savoir comment modifier la fonte de plusieurs cellules qui dépendront du reste du code du programme.

    Je ne parviens pas à le faire dans OnDrawCell.

    Prenons un exemple simple:

    Pour chaque ligne je change de fonte.
    J'ai créé un tableau (Array) qui reprend toutes les fontes.
    Mais comment injecter chaque fonte dans chaque ligne du TStringGrid?

    Merci à vous.

    BB

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,

    Il va te falloir jouer dans OnDrawCell, et définir pour les cellules qui t'intéressent, Canvas.Font.Name puis Canvas.FillRect et enfin Canvas.Textout.

    Le web doit fourmiller d'exemples, mais tu peux aussi t'inspirer de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If (ACol = 3) and (ARow = 2) then
    begin
        Rect2 := Rect;
        Rect2.Left   := Rect2.Left+3;
        Rect2.Top    := Rect2.Top+2;
        Rect2.Right  := Rect2.Right-20;
        Rect2.Bottom := Rect2.Bottom-2;
        StringGrid1.Canvas.Font.Name := 'Tahoma';
        StringGrid1.Canvas.Brush.Color := $00FFCF9F;
        StringGrid1.Canvas.Brush.Style := bsSolid;
        StringGrid1.Canvas.FillRect(Rect2);
        StringGrid1.canvas.textout(Rect2.Left+10, rect2.Top, '80%');
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci Jipété,

    c'est justement ce que je voulais éviter.
    Au départ je ne sais pas où je vais écrire les caractères avec fontes différentes.
    Donc on dirait qu'on ne peut rien créer en dehors d'OnDrawCell.

    Merci encore.

    BB

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Cela ne pose pas de problèmes de gérer l'affichage dans le OnDrawCell, si tu as besoin de données externes pour choisir la fonte pense à la propriété Objects[], tu peux associer un TObject (appelons le TBBouilleObjectForGrid) à chaque cellule, ce TBBouilleObjectForGrid peut contenir tous les informations utiles

    Au remplissage il faut que mette en place cette dépendance entre Grid et le "reste du code du programme", une fois les données utiles dans les Objects[], tu pourras faire ton affichage !

    En général, je préfère créer un objet Controler (genre TBBouilleObjectForGridControler) qui gère TStringGrid et ses Objects[], surtout si les données évolues et qu'il faut donc les rafraichir la collection de TBBouilleObjectForGrid

    D'ailleurs, il n'est pas obligatoire de recopie toutes les données mais plutôt stocker des Identifiants dans ce TBBouilleObjectForGrid, ce dernier ayant les méthodes adéquates pour lire les données (dans une DB) en fonction des Identifiants pour fournir la Fonte, Couleur ... ainsi si les donnes évolues, un simple Invalidate forcera le dessin donc la relecture des données par les TBBouilleObjectForGrid
    Après, voir au niveau performance, une gestion de cache pour éviter une relecture systématique, un booléen dans le TBBouilleObjectForGrid indique si il faut relire les données pour rafraichir le cache (cela va de paire avec le Invalidate évidemment)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci une fois de plus ShaiLeTroll,

    j'ai comprends le principe, je sens que je vais encore ramer mais au moins je sais dans quelle direction.

    Merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment changer la Font d'une cellule d'un TStringGrid ?
    Par pepito62 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/04/2009, 14h43
  2. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  3. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  4. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo