rkb >> Du kan ikke kommen uden om at skulle tegne det hele selv !!!!! Enten er du tilfreds med det listboxen tegner for dig ellers må du tegne noget nyt .....
Hvis du vil ændere på Højden af de enkelte Items i din listbox gøres det ikke i ListView1DrawItem() som sjensen foreslår men der i mod i ListBox1MeasureItem(). Det kræver dog at du forinden har sat ListBox1.Style := lbOwnerDrawVariable;
Det klassiske eksempel er en llistbox der viser slle instaleret fonte, skrevet med hver deres font :
ene form og en listbox. Formen skal have et onCreate event og din listbox skal have et OnDrawItem event og et OnMeasureItem event. Så skrives som følger :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Style := lbOwnerDrawVariable;
ListBox1.Items.Assign(Screen.Fonts);
end;
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
begin
with ListBox1.Canvas do
begin
Font.Name := Listbox1.Items[Index];
Font.Size := 0; // Brug fornte\'s foretrukkende størelse
Height := TextHeight(\'Wg\') + 2; // Mål højden på dit Item med et højt og et lavt bogstave
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
s : String;
begin
with ListBox1.Canvas do
begin
FillRect(Rect); //mal baggrunden
Font.Name := ListBox1.Items[Index];
Font.Size := 0; // Brug fornte\'s foretrukkende størelse
TextOut(Rect.Left+1, Rect.Top+1, ListBox1.Items[Index]); //tegn teksten
end;
end;
end.
jens b
http://fotx.net/borrisholt