lcl: patch from Zaher Dirkey to fix TLabel and TStaticText alignment with respect the BiDi mode (issue #0014915)

git-svn-id: trunk@22312 -
This commit is contained in:
paul 2009-10-28 09:49:18 +00:00
parent 7ffc66550f
commit a350849e6b
3 changed files with 26 additions and 1 deletions

View File

@ -2365,6 +2365,8 @@ procedure AdjustBorderSpace(var RemainingClientRect, CurBorderSpace: TRect;
function IsColorDefault(AControl: TControl): Boolean;
function BidiFlipAlignment(Alignment: TAlignment; Flip: Boolean = True): TAlignment;
function DbgS(a: TAnchorKind): string; overload;
function DbgS(Anchors: TAnchors): string; overload;
function DbgS(a: TAlign): string; overload;
@ -2468,6 +2470,17 @@ begin
end;
end;
function BidiFlipAlignment(Alignment: TAlignment; Flip: Boolean): TAlignment;
const
BidiAlignment: array[Boolean, TAlignment] of TAlignment =
(
( taLeftJustify, taRightJustify, taCenter ),
( taRightJustify, taLeftJustify, taCenter )
);
begin
Result := BidiAlignment[Flip, Alignment];
end;
function DbgS(a: TAnchorKind): string;
begin
Result:=AnchorNames[a];

View File

@ -460,7 +460,7 @@ begin
FillChar(TR,SizeOf(TR),0);
with TR do
begin
Alignment := Self.Alignment;
Alignment := BidiFlipAlignment(Self.Alignment, UseRightToLeftAlignment);
WordBreak := wordWrap;
SingleLine:= not WordWrap and not HasMultiLine;
Clipping := True;

View File

@ -215,6 +215,9 @@ type
class procedure GetPreferredSize(const AWinControl: TWinControl;
var PreferredWidth, PreferredHeight: integer;
WithThemeSpace: Boolean); override;
class procedure SetBiDiMode(const AWinControl: TWinControl;
UseRightToLeftAlign, UseRightToLeftReading,
UseRightToLeftScrollBar: Boolean); override;
class procedure SetAlignment(const ACustomStaticText: TCustomStaticText; const NewAlignment: TAlignment); override;
class procedure SetStaticBorderStyle(const ACustomStaticText: TCustomStaticText; const NewBorderStyle: TStaticBorderStyle); override;
class procedure SetText(const AWinControl: TWinControl; const AText: String); override;
@ -1410,6 +1413,15 @@ begin
end;
end;
class procedure TWin32WSCustomStaticText.SetBiDiMode(
const AWinControl: TWinControl; UseRightToLeftAlign, UseRightToLeftReading,
UseRightToLeftScrollBar: Boolean);
begin
if not WSCheckHandleAllocated(AWinControl, 'SetBiDiMode') then
exit;
RecreateWnd(AWinControl);//to adjust the update the Alignment
end;
class procedure TWin32WSCustomStaticText.SetAlignment(const ACustomStaticText: TCustomStaticText; const NewAlignment: TAlignment);
begin
if not WSCheckHandleAllocated(ACustomStaticText, 'SetAlignment') then