Solved

Dynamically setting col width in string grid

Posted on 2004-03-23
9
473 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
  • 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
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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 125 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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Using idhttp to login to instagram 2 106
Printing problem 2 102
Dynamically Created Query 3 62
CheckListBox usage 3 71
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

856 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