Solved

Programmatically drawing the lines in a delphi drawgrid and merge cells

Posted on 2013-06-27
9
1,349 Views
Last Modified: 2013-09-03
0 down vote favorite
	

I want to disable the gridlines in a drawgrid and draw the grid lines myself for every other columns. Row lines are not needed.

I want to merge two cells in the fixed area so that it looks like as it is one column, like in this picture:drawgrid how i want to look like
the attached code i have inserted to ondrawcell event of the dragrid

 procedure Tbookings3_Frm.bgridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  CellIndex: Integer;
    s:string;
  x:integer;
begin
  CellIndex := (ARow * bgrid.ColCount) + ACol;

  if gdFixed in State then
  begin
    bgrid.Canvas.Brush.Color := clskyblue;
  end
  else if (State * [gdSelected, gdHotTrack]) <> [] then
  begin
    bgrid.Canvas.Brush.Color := clHighlight;
  end
  else
  begin
    bgrid.Canvas.Brush.Color := Cells[CellIndex].BkColor;
  end;



  bgrid.Canvas.FillRect(Rect);

  if gdFixed in State then
    Frame3D(bgrid.Canvas, Rect, clHighlight, clBtnShadow, 1);

  if gdFocused in State then
    bgrid.Canvas.DrawFocusRect(Rect);

//---------------

  with (Sender as TDrawGrid).Canvas do
  begin
     // set font
    Font.Color := CLblack;
    FillRect(Rect);

    if ARow = 2 then
    begin
        x := (Rect.Right - Rect.Left - TextWidth(days_h[ACol])) div 2;
        TextOut(Rect.Left + x, Rect.Top + 2, days_h[ACol]);
    end;
  if ARow = 1 then
     begin
       x := (Rect.Right - Rect.Left - TextWidth(sun_mon[ACol])) div 2;
       TextOut(Rect.Left + x, Rect.Top + 2, sun_mon[ACol]);

     end;
  if ARow = 0 then
     begin
        x := (Rect.Right - Rect.Left - TextWidth(mon[ACol])) div 2;
        TextOut(Rect.Left + x, Rect.Top + 2, mon[ACol]);
      end;

  if (Acol = 0) and (ARow > 2) then
     begin
        s:=rooms[Arow];
        x := (Rect.Right - Rect.Left - TextWidth(s)) div 2;
        TextOut(Rect.Left + x, Rect.Top + 2, s);
     end;

//-------------------------------------------------



  end; //end canvas
//----------------
  if gdFocused in State then
    bgrid.Canvas.DrawFocusRect(Rect);
end;

Open in new window

0
Comment
Question by:thooloon
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
9 Comments
 
LVL 21

Expert Comment

by:developmentguru
ID: 39283309
Wow, I have some questions.

Could you tel us a bit more about, exactly, what you are trying to accomplish?  Knowing that my point to an easier solution.

Have you considered that even if you get the cells to merge graphically that some of the other behavior will be... troublesome?  As an example, were you planning on ignoring every other cell so, say, only the even number cells get drawn?  Should the cells be drawn normally just with every other cell line?

Might you want a solution that allows for customization in the future?  Knowing what you are trying to accomplish would help with this question too...

What version of Delphi are you using?
0
 
LVL 1

Author Comment

by:thooloon
ID: 39283466
I am using Delphi XE3. The merged cells are on the fixed rows. Every two column represent 1 day of the calendar. The rows represent room numbers. Basically it's a room bookings. One column represent half day. That's why the grid lines are drawn in every other columns.
0
 
LVL 27

Accepted Solution

by:
Sinisa Vuk earned 500 total points
ID: 39302840
I suggest to use KGrid:
http://www.torry.net/authorsmore.php?id=5878
... it supports cell merging. Install component and run included demo to see how it looks.
0
 
LVL 1

Author Comment

by:thooloon
ID: 39304823
i would like to have some codes instead of a component
0
 
LVL 27

Expert Comment

by:Sinisa Vuk
ID: 39306437
This feature as merging cells must be implemented very "under" - so component is right way. Don't be afraid of components.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is about my first experience with programming Arduino.
In this post we will learn different types of Android Layout and some basics of an Android App.
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question