Avatar of Peter Kiers
Peter Kiers
Flag for Netherlands asked on

How can I change the height of a listview header?

Hi,

How can I change the height of a listview header?
I have searched on the internet, but didn't find anyting
that made sense.

Who can help me?

Peter Kiers
Delphi

Avatar of undefined
Last Comment
Peter Kiers

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Hypo

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
jimyX

I have had similar issue long time ago. What I did is that I created two ListViews, one showing only the header on top of the other that has hidden header (see the attached pic).
In the Columns Editor I set the Minwidth, Maxwidth, and the Width of the columns of the Header ListView to be equivalent to the width of the second ListView columns to prevent the header columns of being re-sized so not to lose the columns' structure.

But if re-sizing the columns is necessary all you have to do is capturing the column resizing event at the Header ListView then re-size the other one to keep the respective columns in the same width.

To capture a column re-size event:
http://www.swissdelphicenter.ch/torry/showcode.php?id=1264

JG
Listview-e.g.bmp
Hypo

btw. I see now that I forgot to include the required uses clause... I think the example I provided requires CommCtrl, ComCtrls apart from the usual standard units. (can't try it right now)
Peter Kiers

ASKER
I am trying HYPO's solution now, and i get a few errors:

  [Pascal Error] Main.pas(89): E2003 Undeclared identifier: '_HD_LAYOUT'
  [Pascal Error] Main.pas(94): E2003 Undeclared identifier: 'ListView_GetHeader'
  [Pascal Error] Main.pas(98): E2010 Incompatible types: 'TRect' and 'Pointer'
  [Pascal Error] Main.pas(101): E2003 Undeclared identifier: 'Header_Layout'

Is there something that I should declare at uses?

P.
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
Hypo

What version of Delphi do you use?
Peter Kiers

ASKER
How can I call for this procedure and I want to change the height of the panels to 19.
Where in the code should I put 19.
Hypo

Yep, with Delphi 6, all I have to add is the CommCtrl unit to the uses clause... try that and it should work.

/Hypo
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
Peter Kiers

ASKER
Borland Developer Studio 2006
Peter Kiers

ASKER
CommCtrl works
Peter Kiers

ASKER
How can I call for this procedure and I want to change the height of the panels to 19.
Where in the code should I put 19.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
Hypo

I made a small example in a button... just setup a list view on your form, then add a button, and try it out...

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetListViewHeaderHeight(ListView1, 19 {HERE IS WHERE YOU PUT YOUR HEIGHT});
end;

I think you should be able to use it in one of the resize events... But I'll have to check if there are any issues with putting it there first...

/Hypo
Peter Kiers

ASKER
Your solution works fine.

Greetings, Peter Kiers