Ich habe so programmiert:
Code: Alles auswählen
procedure TfrmMain.lstAufzKurvDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
Var clOld: TColor;
i, iNum: Integer;
OldBrushStyle: TBrushStyle;
OldTextStyle: TTextStyle;
NewTextStyle: TTextStyle;
BRect: TRect;
b: Boolean;
OldStyle: TFontStyles;
// wg: TWidgetSet;
const
IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED) ;
ColorSet: Array[0..17] of TColor = (clBlue, clGreen, clRed, clGray, clFuchsia, clTeal, clPurple,
clNavy, clLime, clMaroon, clAqua, clYellow,
clBlack, clOlive, clSilver,
clLtGray,clDkGray,clWhite);
begin
b := odSelected In State;
With TCheckListBox(Control) Do
Begin
clOld := Canvas.Font.Color;
OldBrushStyle := Canvas.Brush.Style;
OldTextStyle := Canvas.TextStyle;
OldStyle := Canvas.Font.Style;
Canvas.Brush.Color := Brush.Color;
Canvas.FillRect(ARect);
Canvas.Brush.Style := bsClear;
BRect.Left := ARect.Left + 1;
BRect.Top := ARect.Top + 1;
BRect.Bottom := ARect.Bottom+ 2;
BRect.Right := ARect.Left + (ARect.Bottom - ARect.Top) - 2;
// wg := TWidgetSet.Create;
DrawFrameControl(Canvas.Handle, BRect, DFC_BUTTON, IsChecked[Checked[Index]]);
// wg.Free;
If b Then
Canvas.Font.Style := [fsBold];
If Checked[Index] Then
Begin
iNum := 0;
For i := 0 To Index - 1 Do
If Checked[i] Then
Begin
Inc(iNum);
If iNum > High(ColorSet) Then
iNum := 0;
end;
Canvas.Font.Color := ColorSet[iNum];
end Else Canvas.Font.Color := Font.Color;
NewTextStyle := OldTextStyle;
NewTextStyle.Layout := tlCenter;
Canvas.TextStyle := NewTextStyle;
ARect.Left := BRect.Right;
Canvas.TextRect(ARect, ARect.Left+2, ARect.Top, Items[Index]);
Canvas.Font.Color := clOld;
Canvas.Brush.Style := OldBrushStyle;
Canvas.TextStyle := OldTextStyle;
Canvas.Font.Style := OldStyle;
End;
end;
Es ist wirklich verdammt schwierig das zu finden.
Nun habe ich das Problem, dass die Checkbox nicht mit der Windows Theme gezeichnet wird. Ich habe versucht das mit TWidgetSet, aber zeichnet dennoch nicht richtig.
Am liebsten wäre mir eine Checkbox-Zeichnen Funktion, die auch unter Linux funktioniert. Ich bin mir nicht sicher ob diese Funktion unabhängig vom Betriebssystem ist.
Es wäre toll, wenn mir jemand einen Tipp geben könnte. Vielen Dank im Voraus.
Grüße Markus