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

Lazarus Pascal Discussion :

OnDrawcell et insertion texte [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Par défaut OnDrawcell et insertion texte
    Bonjour,

    Je viens vers vous pour résoudre un petit soucis avec mon projet sous Lazarus.

    Cela fait un bout de temps que je n'ai plus développé et j'ai tout oublié ou presque.

    Voilà, je réalise un petit soft qui a pour but de gérer les absences du personnel d'une entreprise.

    Dans mon projet, j'ai un objet TStringGrid qui représente le calendrier annuel. Je souhaite faire apparaitre dans la première et dernière ligne, le nom des mois, et dans la première et dernière colonne, le numéro des jours.

    A l'aide de OnDrawCell, je réalise mes bordures de cellules et mes fonds en couleur sans problème.

    Mais quand je lui insère le text de la cellule à l'aide de Cells[Acool, Arow] = IntToStr(Arow) (pour les lignes), il plante au débogage...

    Voici comment j'ai construit ma procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TForm1.MonCalDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
    begin
        With Sender As TStringGrid Do With Canvas Do
        Begin
          clear;
          // Colonne de Gauche
          if (acol = 0) and (arow>0) and (arow < moncal.rowCount-1)   then 
          begin
               Canvas.Brush.Color := clMoneyGreen;
               Canvas.FillRect(arect);
               Pen.Color:=clgreen;
               Canvas.MoveTo(aRect.Right, aRect.Top);
               Canvas.LineTo(aRect.left, aRect.Top);
               Canvas.LineTo(aRect.left, aRect.Bottom);
               Canvas.LineTo(aRect.Right, aRect.Bottom);
               Cells[Acol,Arow] := Inttostr(Arow) ;
          end;
           // Colonne de Droite
          if (acol = Moncal.ColCount-1) and (arow >0) and (arow < Moncal.rowCount-1)   then 
          begin
               Canvas.Brush.Color := clMoneyGreen;
               Canvas.FillRect(arect);
               Pen.Color:=clgreen;
               Canvas.MoveTo(aRect.Right, aRect.Top);
               Canvas.LineTo(aRect.left, aRect.Top);
               Canvas.LineTo(aRect.left, aRect.Bottom);
               Canvas.LineTo(aRect.Right, aRect.Bottom);
               Cells[Acol,Arow] := Inttostr(Arow) ;
          end;
          DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, aRect, DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
        End;
    end;

    Merci de bien vouloir m'aider... je suis un peu perdu

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut,

    J'ai trouvé dans le forum voisin quelque chose qui pourrait t'intéresser :
    Attention: ne modifie pas le contenu des cellules dans OnDrawCell parce cela risque de faire une jolie boucle infinie.
    Et quand tu postes du code, utilises le bouton # (l'avant-dernier de l'éditeur du forum) pour le mettre en forme après sélection, ça sera + cool pour ceux qui vont le lire.


    [EDIT] Tiens, essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure Tform1.moncalDrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
      procedure FillCells(c,r: integer);
      begin
        With Sender As TStringGrid Do With Canvas Do
        Begin
          Brush.Color := clMoneyGreen;
          FillRect(arect);
          Pen.Color:=clgreen;
          MoveTo(aRect.Right, aRect.Top);
          LineTo(aRect.left,  aRect.Top);
          LineTo(aRect.left,  aRect.Bottom);
          LineTo(aRect.Right, aRect.Bottom);
          DrawText(Handle, PChar(Cells[ACol,ARow]), -1, aRect, DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE );
        end;
      end;
    begin
      if ((arow > 0) and (arow < moncal.rowCount-1)) then
      begin
        // Colonne de Gauche - Colonne de Droite
        if (acol = 0) or (acol = Moncal.ColCount-1) then
          FillCells(ACol, ARow);
      end;
    end;
     
    procedure Tform1.FormCreate(Sender: TObject);
    var
      i: integer;
    begin
      for i := 1 to moncal.RowCount-2 do moncal.Cells[0, i] := IntToStr(i);
      for i := 1 to moncal.RowCount-2 do moncal.Cells[moncal.ColCount-1, i] := IntToStr(i);
    end;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Par défaut
    Merci,

    Ca marche nickel...

    Effectivement, il fallait entrer le texte via OnCreate..

    Mais je crois que je ne suis pas au bout de mes peines... c'est dur de s'y remettre...

    Bonne journée et encore merci.

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

Discussions similaires

  1. Insertion texte dans textarea avec IE
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/08/2007, 10h56
  2. [MySQL] Problème insertion texte invisible
    Par caroen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/05/2007, 11h39
  3. Création fichier PDF : problème insertion texte HTML
    Par isazazou dans le forum Documents
    Réponses: 2
    Dernier message: 21/11/2006, 15h13
  4. [JDBC] Insertion texte
    Par sebb84 dans le forum JDBC
    Réponses: 4
    Dernier message: 20/08/2004, 11h17
  5. [TP]Insertion texte dans un autre programme
    Par FLB dans le forum Turbo Pascal
    Réponses: 53
    Dernier message: 14/06/2003, 20h11

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