### Bookstore

 Computer Math and Games in Pascal (preview) Lazarus Handbook

### Author Topic: mcGrid: Alignement of cells  (Read 273 times)

#### Jvan

• Full Member
• Posts: 108
##### mcGrid: Alignement of cells
« on: August 04, 2020, 02:26:10 am »
I want to center the content of the cells, so I used this code:

Code: Pascal  [Select][+][-]
1.
2. procedure TfrmMain.DrawCellTextHandler(Sender: TObject; ACol, ARow: Integer;
3.   ARect: TRect; AState: TGridDrawState; AText: String; var Handled: Boolean);
4. var
5.   ts: TTextStyle;
6.   x, y: Integer;
7.   bmp: TBitmap;
8. begin
9.   Handled := True;
10.   if (ACol in [1..2]) and (ARow = 0) then
11.   begin
12.     // Centered text
13.     ts := grdAstCont.Canvas.TextStyle;
14.     ts.Alignment := taCenter;
15.     ts.Layout := tlCenter;
16.     x := (ARect.Left + ARect.Right) div 2;
17.     y := (ARect.Top + ARect.Bottom) div 2;
18.     grdAstCont.Canvas.TextRect(ARect, x, y, AText, ts);
19.   end else if (ACol in [3..4]) and (ARow = 0) then begin
20.     // Centered text
21.     ts := grdAstCont.Canvas.TextStyle;
22.     ts.Alignment := taCenter;
23.     ts.Layout := tlCenter;
24.     x := (ARect.Left + ARect.Right) div 2;
25.     y := (ARect.Top + ARect.Bottom) div 2;
26.     grdAstCont.Canvas.TextRect(ARect, x, y, AText, ts);
27.   end;
28.   Handled := False;
29. end;
30.

But the result is the image.

#### wp

• Hero Member
• Posts: 7519
##### Re: mcGrid: Alignement of cells
« Reply #1 on: August 04, 2020, 11:07:35 am »
I think the last "Handled" is wrong. This parameter tells the grid whether it should continue painting the specified cell. Since you provided an OnDrawCellText handler for the merged cells "Handled" should be true for these, but for the other cells "Handled" should be false. Therefore, there must be an "else" before the "Handled := false.

Code: Pascal  [Select][+][-]
1. procedure TfrmMain.DrawCellTextHandler(Sender: TObject; ACol, ARow: Integer;
2.   ARect: TRect; AState: TGridDrawState; AText: String; var Handled: Boolean);
3. var
4.   ts: TTextStyle;
5.   x, y: Integer;
6.   bmp: TBitmap;
7. begin
8.   Handled := True;
9.   if (ACol in [1..2]) and (ARow = 0) then
10.   begin
11.     // Centered text
12.     // ...
13.   end else if (ACol in [3..4]) and (ARow = 0) then begin
14.     // Centered text
15.     // ...
16.   end
18.     Handled := False;
19. end;

See also attached demo which is simpler than the example in the Lazarus folder.
Mainly Lazarus trunk / fpc 3.2.0 / all 32-bit on Win-10, but many more...

#### Jvan

• Full Member
• Posts: 108
##### Re: mcGrid: Alignement of cells
« Reply #2 on: August 04, 2020, 04:10:57 pm »
It works. Thanks.