Comment obtenir dans un drawgrid des cellules de taille variable selon la ligne
ledoc93
Messages postés12Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention10 février 2006
-
8 févr. 2006 à 16:02
ledoc93
Messages postés12Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention10 février 2006
-
10 févr. 2006 à 11:21
J'ai besoin de developper un petit outil pour représenter la distribution des médicaments...je songe a mettre une image dans chaque période de prise médicamenteuse, symbolisant une gélule, une injection....
Comment obtenir des cellules de taille différente selon la ligne, dans un drawgrid.?? pour que ca ait a peu pres cette allure ?
08/02/06,
09/02/06,
0/02/06,
----
Matin,
Soir,
Matin,
Soir,
Matin,
Soir
Quelqu'un a t'il la solution?
Merci. Ca m'aiderait beaucoup pour mon développement...je sèche
Merci de vos conseils
function MergedCells(AStringGrid:TStringGrid;CurrentCol,CurrentRow,Col1,Row1,Col2,Row2:Integer;CurrentState: TGridDrawState):Boolean;
var i,j:Integer;
x1,y1,x2,y2:Integer;
ARect:TRect;
begin
//Initialisations diverses
ARect:=Bounds(0,0,0,0);
x1:=Col1;
y1:=Row1;
x2:=Col2;
y2:=Row2;
result:=False;
//On vérifie aue la zone fusionnée est valide
if x1<0 then x1:=0;
if x2>AStringGrid.ColCount-1 then x2:=AStringGrid.ColCount-1;
if y1<0 then y1:=0;
if y2>AStringGrid.RowCount-1 then x2:=AStringGrid.RowCount-1;
if (x1>x2) or (y1>y2) then
begin
result:=False;
Exit;
end;
//Si la cellule courante est la dernière de la zone de fusion, on dessine dans la fusion le texte de la cellule en haut à gauche
if ((CurrentCol=Col2) and (CurrentRow=Row2))
then begin
ARect.Left:=AStringGrid.CellRect(Col1,Row1).Left;
ARect.Top:=AStringGrid.CellRect(Col1,Row1).Top;
ARect.Right:=AStringGrid.CellRect(Col2,Row2).Right;
ARect.bottom:=AStringGrid.CellRect(Col2,Row2).Bottom;
AStringGrid.Canvas.TextRect(ARect, ARect.Left+2, ARect.Top+2, AStringGrid.Cells[Col1,Row1]);
result:=True;
end;
//Si la cellule courante est dans la zone de fusion, on dit qu'on la dessiné (même si ce n'est pas vrai :) )
if ((CurrentCol>=Col1) and (CurrentRow>=Row1) and (CurrentCol<=Col2) and (CurrentRow<=Row2))
then result:=True;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
//On dessine la ou les cellules
//d'abord on teste et on s'occupe des fusions de cellule
if not MergedCells(StringGrid1,ACol,ARow,1,1,2,1,State)then // 08/02/06
if not MergedCells(StringGrid1,ACol,ARow,1,3,2,3,State)then // Vide
//puis si on a pas une cellule fusionnée on la dessine normalement
StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol,ARow]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Stringgrid1.Cells[1,1]:='08/02/06';
Stringgrid1.Cells[1,2]:='Matin';
Stringgrid1.Cells[2,2]:='Soir';
end;
ledoc93
Messages postés12Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention10 février 2006 9 févr. 2006 à 18:54
Salt Yannba,
Je test ca des ce soir des que j'ai un break aux urgences. Suis de garde ce soir
Merci pour tout..
Je te tiens au courant...
Si tu veux on correspond en email..moi c [mailto:ledoc93@msn.com ledoc93@msn.com]
Ledoc
ledoc93
Messages postés12Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention10 février 2006 9 févr. 2006 à 20:13
Salut,
C'est un bon debut...
G testé...ca marche pour la 1ere cellule. Mais comment faire pour reproduire la fusion de 5 cellules en 5 cellules??
Ca fusionne toute la ligne..ou sinon g une cellule separatrice
Et comment centrer le texte dans les cellules fusionnees??
yannba
Messages postés133Date d'inscriptionmercredi 4 janvier 2006StatutMembreDernière intervention 7 septembre 2010 9 févr. 2006 à 22:31
1 - C'est un bon debut...
Tout vient à point à qui sait attendre
2 - G testé...ca marche pour la 1ere cellule. Mais comment faire pour reproduire la fusion de 5 cellules en 5 cellules??
Moi pas comprendre ou du moins modifie :
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
//On dessine la ou les cellules
//d'abord on teste et on s'occupe des fusions de cellule
if not MergedCells(StringGrid1,ACol,ARow,1,1,5,1,State)then // 08/02/06
//puis si on a pas une cellule fusionnée on la dessine normalement
StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol,ARow]);
end;
ledoc93
Messages postés12Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention10 février 2006 10 févr. 2006 à 11:21
Salut Yannba
En effet ca marche bien pour la 1ere serie de 5 cellules (hormis le pb de centrage)...C'est apres que ca coince...
J'ai essayé ta procedure en introduisant une variable i de maniere a faire une fusion toutes les 5 cellules..ca coince...
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var i : integer;
begin
//On dessine la ou les cellules
//d'abord on teste et on s'occupe des fusions de cellule
i:=5 ;
while i<stringgrid1.ColCount do
begin
if not MergedCells(StringGrid1,ACol,ARow,1,1,i,1,State)then // 08/02/06
//puis si on a pas une cellule fusionnée on la dessine normalement
StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol,ARow]);
i:=i+5;
end;
end;
le but est de reproduire le schema toutes les 5 cellules