ein Bitmap eines RadioButton erhalten?
Diese Funktion liefert ein Bitmap eines RadioButton.
Parameter:
Checked = RadioButton ausgewählt
Hot = RadioButton aktiv (funktioniert nur unter XP und bewirkt z.B. unter Luna einen hellroten Rand)
BgColor = Hintergrundfarbe des RadioButton
Wichtig:
Die Bitmap sollte nach Ausführung der Funktion wieder freigegeben werden!
XP-Styles werden erst ab Delphi7 unterstützt.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
| {$IFDEF VER150} uses Themes; {$ENDIF}
function GetRadioButtonBitmap(Checked, Hot: boolean; BgColor: TColor): TBitmap; const CtrlState: array[Boolean] of Integer = (DFCS_BUTTONRADIO, DFCS_BUTTONRADIO or DFCS_CHECKED); var CBRect: TRect; {$IFDEF VER150} Details: TThemedElementDetails; {$ENDIF} BgOld: TColor; ChkBmp: TBitmap; ThemeOK: boolean; x, x2, y: integer; begin Result := nil; try Result := TBitmap.Create; ChkBmp := TBitmap.Create; ThemeOK := False; with Result do begin Width := 16; Height := 16; with Canvas do begin Brush.Color := BgColor; FillRect(ClipRect); ChkBmp.Assign(Result); CBRect := ClipRect; CBRect.Top := 1; CBRect.Left := 1; {$IFDEF VER150} if ThemeServices.ThemesAvailable then begin if Checked = True then begin if Hot = True then Details := ThemeServices.GetElementDetails(tbRadioButtonCheckedHot) else Details := ThemeServices.GetElementDetails(tbRadioButtonCheckedNormal); end else begin if Hot = True then Details := ThemeServices.GetElementDetails(tbRadioButtonUncheckedHot) else Details := ThemeServices.GetElementDetails(tbRadioButtonUncheckedNormal); end; ThemeServices.DrawElement(Handle, Details, CBRect); for x := 15 downto 0 do for y := 15 downto 0 do if ChkBmp.Canvas.Pixels[x, y] <> Pixels[x, y] then begin ThemeOK := True; break; end; end; {$ENDIF} if ThemeOK = False then begin CBRect.Left := ClipRect.Left + 2; CBRect.Right := ClipRect.Right - 1; CBRect.Top := ClipRect.Top + 2; CBRect.Bottom := ClipRect.Bottom - 1; DrawFrameControl(Handle, CBRect, DFC_BUTTON, CtrlState[Checked]); end; end; end; finally end; end; |