Solved

Different color in Stringgrid

Posted on 2000-02-19
6
736 Views
Last Modified: 2008-02-20
How do i define a special color/font for each cell in a Stringgrid?
I want the text in a special cell to have a special color. If i click in it I want the text to become red.
0
Comment
Question by:slyna
  • 2
  • 2
  • 2
6 Comments
 
LVL 1

Accepted Solution

by:
fulvio_brasil earned 350 total points
Comment Utility
slyna,

Put this code on event OnDrawCell of the StringGrids that you want to control.

Change the StringGrid's property 'DefaultDrawing' to FALSE.

In this example I changed the color from Grid's Col 2 to Col 4, but you can make the test that you need.


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var gr: TStringGrid;
begin
  // The grid sender
  gr := (Sender as TStringGrid);

  // Make here the tests that you want
  // I modified just the color, but you can modify what you want about Font
  if (ACol>=2) and (ACol=<4)
    then gr.Canvas.Font.Color := clGray
    else gr.Canvas.Font.Color := clBlack;

  if (ARow=gr.Row) AND (ACol=gr.Col)
    then gr.Canvas.Font.Color := clRed;

  // Write the cell's text
  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left,Rect.Top,gr.Cells[ACol,ARow]);
end;

Hope that you enjoy...

Fulvio.
0
 
LVL 8

Expert Comment

by:ZifNab
Comment Utility
Hi slyna,

I would suggest to use a already made component (besides, why to reïnvent the wheel?). Here are some FW ones :

I've used the 3 first. Let me know if you want more info.

(tHyperGrid)
http://www.pablop.demon.co.uk/marley/thypergrid.htm
or
(tSuperGrid)
http://www.pablop.demon.co.uk/marley/tsupergrid.htm

(tAdvGrid)
http://www.tmssoftware.com/advgrid.htm

(tColorGrid)

http://www.csse.monash.edu.au/~vtran/

(tDataGrid)
http://www.ec-software.com/comppage.htm

etc..

Regards, Zif


0
 
LVL 8

Expert Comment

by:ZifNab
Comment Utility
Why I recommend the use of FW component :

Working with different fonts in a grid is not that easy to get a nice look. It will give you some headaches.

Of course if the code Fulvio is more then sufficient, don't hesitate to use it!

Regards, Zif.
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:slyna
Comment Utility
Wonderfull, just tell me how to check if a string is convertable to a float then you will get your points!

something like this:

if isvalidfloat(stringgrid2.cells[2,4]) then
 blaha
else
 blah
0
 

Author Comment

by:slyna
Comment Utility
Mr fulvio_brasil

What the heck, you'll get your points anyway, but please answer the question above.

Thanks!
0
 
LVL 1

Expert Comment

by:fulvio_brasil
Comment Utility
Hi slyna,

This code works very well, but, if you are in DELPHI IDE you will see a lot of debug's breaks about the except. Out of IDE, your app will work very well.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var gr: TStringGrid;
begin
  gr := (Sender as TStringGrid);

  try
    gr.Canvas.Font.Color := clBlack;
    StrToFloat(gr.Cells[ACol,ARow]);
  except
    gr.Canvas.Font.Color := clGray;
  end;

  if (ARow=gr.Row) AND (ACol=gr.Col)
    then gr.Canvas.Font.Color := clRed;

  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left,Rect.Top,gr.Cells[ACol,ARow]);
end;

If you are using Delphi 4 or more, go to menu <tools>, <debuger options>, <language exception> tab and add to ignore 'EConvertError' and, until in IDE you won't have problems.

Fulvio.
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

744 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now