Hi !
Soll es ungefähr so aussehen :
Dann versuche doch mal folgendes :
Verwende eine ComboBox und setze den Style auf "csOwnerDrawFixed". In Items der Combobox schreibst Du nun Deine Gruppen und Einträge. Gruppen werden hier mit "_" als ersten Char definiert.
_Gruppe A
Eintrag 1
Eintrag 2
Eintrag 3
_Gruppe B
Eintrag 1
Eintrag 2
Eintrag 3
Dann bearbeitest Du den OnDrawItem-Event :
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
Var S:String;
begin
with (Control as TCombobox) do
begin
if (Length(Items[index])>0) AND (Items[index][1]='_')
then begin
Canvas.Brush.color := clInfoBk;
Canvas.Font.Style := Canvas.Font.Style+[fsBold];
S:=Copy(Items[Index],2,Length(Items[Index]));
end
else begin
Canvas.Brush.color := clWhite;
Canvas.Font.Style := Canvas.Font.Style-[fsBold];
S:=' '+Items[Index];
end;
Canvas.FillRect(Rect);
Canvas.Font.Color := clBlack;
Canvas.TextOut(Rect.Left,Rect.Top,S);
end;
end;
Du kannst hier auch noch Linien malen, Grafiken einbinden etc.
Jetzt musst Du noch verhindern, dass die Gruppen selbst gewählt werden können.
Eine Möglichkeit wäre auf OnSelect zu reagieren :
Delphi-Quellcode:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
while (ComboBox1.Items[ComboBox1.ItemIndex][1]='_') AND (ComboBox1.Items.Count>(ComboBox1.ItemIndex-1))
do ComboBox1.ItemIndex:=ComboBox1.ItemIndex+1;
end;
Diese Vorgehensweise hat jedoch den Nachteil, dass Du bei Steuerung mittels Cursortasten die letzte Gruppe nicht mehr verlassen kannst. - Da müsstest Du Dir evtl. eine bessere Methode ausdenken, z.B. indem Du Dir die Scrollrichtung anhand des Index merkst und dann entscheidest, ob Du auf den ItemIndex ein draufzählst, oder abziehst, wenn Du auf eine Gruppe triffst.
Hoffe das hilft !
Gruß
Guido R.