?
Solved

Dynamically setting col width in string grid

Posted on 2004-03-23
9
Medium Priority
?
478 Views
Last Modified: 2010-04-05
I am trying to set the width of the columns in a string grid depending on the width of the data.

I can calculate the maximum number of chraracters used in any column. My questions are:-


1) if I use non proportional fonts how do I convert from font size to pitch in pixels?
2) if I use proportional spaced fonts how do I get the length of the actual text in pixells?

Thanks in anticipation


Alan
0
Comment
Question by:alanjbrown
[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
  • 3
  • 2
  • 2
  • +1
9 Comments
 
LVL 17

Expert Comment

by:mokule
ID: 10656999
Canvas.TextWidth(str1) in both cases
0
 
LVL 1

Expert Comment

by:Kristian
ID: 10657533
You will need to set the font first mokule.

use:

canvas.font.name := 'fontnamehere';
canvas.font.size := 14;
etc
then :
Canvas.TextWidth(str1)

Kristian
0
 
LVL 17

Expert Comment

by:mokule
ID: 10657716
No Kristian, u don't need, but u can
0
Industry Leaders: 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!

 
LVL 11

Expert Comment

by:shaneholmes
ID: 10657981
mokule is right, there is no need to reset the fonts. They should already be set before the call to TextWidth, however, you can change them to something else, if you'd like, just before getting the width.

Shane
0
 
LVL 11

Accepted Solution

by:
shaneholmes earned 500 total points
ID: 10658054
Here is an example using TextWidth.
This example iterates through the grid adjusting the colwidths

Shane

var
  i, j, ColWidth, ThisCelllWidth : integer;
begin
with StringGrid1 do
  begin
    For j := 0 to (ColCount - 1) do begin
      ColWidth := 0;
      For i := 0 to (RowCount -1) do begin
        ThisCellWidth := StringGrid1.Canvas.TextWidth(Cells[j,i])
        If ThisCellWidth > ColWidth then ColWidth := ThisCellWidth;
      end; {for all rows}
      StringGrid1.ColWidths[j] := ColWidth + 2; {or + whatever margin you want}
  end; {for all columns}
end; {with StringGrid1}

Shane
0
 
LVL 1

Expert Comment

by:Kristian
ID: 10658079
just a force of habit,
our grids have different fonts in cells to titles, so i always set the font just as habit really to be sure.
K
0
 
LVL 1

Author Comment

by:alanjbrown
ID: 10658416
Thank you all for the help
0
 
LVL 17

Expert Comment

by:mokule
ID: 10659800
Hi alanjbrown
Could You please answer what was wrong in my answer to You question.
Kind regards
Marek
0
 
LVL 1

Author Comment

by:alanjbrown
ID: 10665443
Hi Marek

There was nothing wrong with your answer, however when I looked at all the answers received, Shane's answer was the most complete. I therefore decided to award him the points.

Regards
Alan
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

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

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…
The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

765 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