用到CheckBox的按钮居右处理,发现竟然没有文字居右的选项。从面向对象的角度来说,咱要重载掉CreateParams重新创建一个新类,可是这个功能基本上很少用到啊,那么就只能用Windows Api 函数直接修改啦。上代码:
function SetWinControlTextAlignment(const AControl: TWinControl; const Alignment: TAlignment = taLeftJustify): Boolean; var AStyle: Integer; begin Result := False; if not Assigned(AControl) then Exit; AStyle := GetWindowLong(AControl.Handle, GWL_STYLE); case Alignment of taLeftJustify: AStyle := AStyle or BS_LEFT; taRightJustify: AStyle := AStyle or BS_RIGHT; taCenter: AStyle := AStyle or BS_CENTER; end; SetWindowLong(AControl.Handle, GWL_STYLE, AStyle); AControl.Invalidate; Result := True; end; function SetWinControlTextLayout(const AControl: TWinControl; const TextLayout: TTextLayout = tlTop): Boolean; var AStyle: Integer; begin Result := False; if not Assigned(AControl) then Exit; AStyle := GetWindowLong(AControl.Handle, GWL_STYLE); case TextLayout of tlTop: AStyle := AStyle or BS_TOP; tlCenter: AStyle := AStyle or BS_CENTER; tlBottom: AStyle := AStyle or BS_BOTTOM; end; SetWindowLong(AControl.Handle, GWL_STYLE, AStyle); AControl.Invalidate; Result := True; end;
注意:这两个函数只对Button类有效(Button,CheckBox,RadioButton),别的应该无效的。另外,没有什么严格测试,自己将就着用用吧。