lcl: implement TEdit.Alignment (patch of Zeljan with small mine modifications)

git-svn-id: trunk@18139 -
This commit is contained in:
paul 2009-01-05 18:22:41 +00:00
parent e72f2b3cf9
commit aa6305c562
10 changed files with 105 additions and 52 deletions

View File

@ -34,6 +34,7 @@ begin
TWSCustomEditClass(WidgetSetClass).SetMaxLength(Self, FMaxLength);
TWSCustomEditClass(WidgetSetClass).SetPasswordChar(Self, FPasswordChar);
TWSCustomEditClass(WidgetSetClass).SetReadOnly(Self, FReadOnly);
TWSCustomEditClass(WidgetSetClass).SetAlignment(Self, FAlignment);
end;
{------------------------------------------------------------------------------
@ -503,5 +504,15 @@ begin
Result := TWSCustomEditClass(WidgetSetClass).GetCaretPos(Self);
end;
procedure TCustomEdit.SetAlignment(const AValue: TAlignment);
begin
if FAlignment = AValue then
exit;
FAlignment := AValue;
if HandleAllocated then
TWSCustomEditClass(WidgetSetClass).SetAlignment(Self, FAlignment);
end;
// included by stdctrls.pp

View File

@ -75,15 +75,6 @@ begin
FHorzScrollBar:=AValue;
end;
procedure TCustomMemo.SetAlignment(const AValue: TAlignment);
begin
if FAlignment = AValue then
exit;
FAlignment := AValue;
if HandleAllocated then
TWSCustomMemoClass(WidgetSetClass).SetAlignment(Self, AValue);
end;
{------------------------------------------------------------------------------
Setter for CaretPos
------------------------------------------------------------------------------}

View File

@ -145,7 +145,7 @@ type
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); override;
class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override;
class procedure SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); override;
end;
@ -909,12 +909,12 @@ end;
Sets the alignment of memo in Carbon interface
------------------------------------------------------------------------------}
class procedure TCarbonWSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
class procedure TCarbonWSCustomMemo.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
begin
if not CheckHandle(ACustomMemo, Self, 'SetAlignment') then Exit;
if not CheckHandle(ACustomEdit, Self, 'SetAlignment') then Exit;
TCarbonMemo(ACustomMemo.Handle).SetAlignment(AAlignment);
TCarbonMemo(ACustomEdit.Handle).SetAlignment(AAlignment);
end;
{------------------------------------------------------------------------------

View File

@ -147,13 +147,13 @@ begin
Result := TGtk2MemoStrings.Create(TextView, ACustomMemo);
end;
class procedure TGtk2WSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
class procedure TGtk2WSCustomMemo.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
var
TextView: PGtkTextView;
begin
TextView := PGtkTextView(GetWidgetInfo(Pointer(ACustomMemo.Handle), False)^.CoreWidget);
gtk_text_view_set_justification(TextView, aGtkJustification[ACustomMemo.Alignment]);
TextView := PGtkTextView(GetWidgetInfo(Pointer(ACustomEdit.Handle), False)^.CoreWidget);
gtk_text_view_set_justification(TextView, aGtkJustification[AAlignment]);
end;

View File

@ -177,6 +177,7 @@ type
class procedure SetPasswordChar(const ACustomEdit: TCustomEdit; NewChar: char); override;
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
end;
{ TGtk2WSCustomMemo }
@ -191,7 +192,7 @@ type
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override;
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
class procedure SetColor(const AWinControl: TWinControl); override;
class procedure SetFont(const AWinControl: TWinControl;const AFont : TFont); override;
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
@ -938,6 +939,21 @@ begin
Entry^.current_pos + NewLength);
end;
class procedure TGtk2WSCustomEdit.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
var
Entry: PGtkEntry;
Alignment: GFloat;
begin
Entry := PGtkEntry(ACustomEdit.Handle);
case AAlignment of
taLeftJustify: Alignment := 0;
taRightJustify: Alignment := 1;
taCenter: Alignment := 0.5;
end;
gtk_entry_set_alignment(Entry, Alignment);
end;
class procedure TGtk2WSCustomComboBox.ReCreateCombo(
const ACustomComboBox: TCustomComboBox; const AWithEntry: Boolean;
const AWidgetInfo: PWidgetInfo);

View File

@ -546,6 +546,7 @@ type
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
function getAlignment: QtAlignment;
function getCursorPosition: Integer;
function getMaxLength: Integer;
function getSelectedText: WideString;
@ -556,6 +557,7 @@ type
function isUndoAvailable: Boolean;
function hasSelectedText: Boolean;
procedure selectAll;
procedure setAlignment(const AAlignment: QtAlignment);
procedure setColor(const Value: PQColor); override;
procedure setTextColor(const Value: PQColor); override;
procedure setCursorPosition(const AValue: Integer);
@ -587,6 +589,7 @@ type
public
FList: TStrings;
procedure append(AStr: WideString);
function getAlignment: QtAlignment;
function getMaxLength: Integer;
function getText: WideString; override;
function getTextStatic: Boolean; override;
@ -5026,6 +5029,11 @@ begin
Result := QLineEdit_create();
end;
function TQtLineEdit.getAlignment: QtAlignment;
begin
Result := QLineEdit_alignment(QLineEditH(Widget));
end;
function TQtLineEdit.getCursorPosition: Integer;
begin
Result := QLineEdit_cursorPosition(QLineEditH(Widget));
@ -5087,6 +5095,11 @@ begin
QLineEdit_selectAll(QLineEditH(Widget));
end;
procedure TQtLineEdit.setAlignment(const AAlignment: QtAlignment);
begin
QLineEdit_setAlignment(QLineEditH(Widget), AAlignment);
end;
procedure TQtLineEdit.AttachEvents;
var
Method: TMethod;
@ -5249,6 +5262,11 @@ begin
QTextEdit_append(QTextEditH(Widget), @AStr);
end;
function TQtTextEdit.getAlignment: QtAlignment;
begin
Result := QTextEdit_alignment(QTextEditH(Widget));
end;
function TQtTextEdit.getMaxLength: Integer;
begin
{$note implement}

View File

@ -135,6 +135,7 @@ type
published
class function CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): HWND; override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
class function GetCanUndo(const ACustomEdit: TCustomEdit): Boolean; override;
class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override;
class procedure SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
@ -155,8 +156,8 @@ type
class function CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): HWND; override;
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); override;
class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); override;
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override;
class procedure SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); override;
class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override;
@ -588,16 +589,15 @@ var
begin
QtTextEdit := TQtTextEdit.Create(AWinControl, AParams);
QtTextEdit.AttachEvents;
QtTextEdit.setAlignment(AlignmentMap[TCustomMemo(AWinControl).Alignment]);
QtTextEdit.setReadOnly(TCustomMemo(AWinControl).ReadOnly);
QtTextEdit.setLineWrapMode(WordWrapMap[TCustomMemo(AWinControl).WordWrap]);
// create our FList helper
QtTextEdit.FList := TQtMemoStrings.Create(QTextEditH(QtTextEdit.Widget), TCustomMemo(AWinControl));
QtTextEdit.setScrollStyle(TCustomMemo(AWinControl).ScrollBars);
QtTextEdit.setTabChangesFocus(not TCustomMemo(AWinControl).WantTabs);
QtTextEdit.setAlignment(AlignmentMap[TCustomMemo(AWinControl).Alignment]);
Result := TLCLIntfHandle(QtTextEdit);
end;
@ -617,15 +617,6 @@ begin
TQtTextEdit(ACustomMemo.Handle).append(AStr);
end;
class procedure TQtWSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
const AAlignment: TAlignment);
begin
if not WSCheckHandleAllocated(ACustomMemo, 'SetAlignment') then
Exit;
TQtTextEdit(ACustomMemo.Handle).setAlignment(AlignmentMap[AAlignment]);
end;
{------------------------------------------------------------------------------
Method: TQtWSCustomMemo.GetStrings
Params: None
@ -646,6 +637,14 @@ begin
Result := TQtTextEdit(ACustomMemo.Handle).FList;
end;
class procedure TQtWSCustomMemo.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
begin
if not WSCheckHandleAllocated(ACustomEdit, 'SetAlignment') then
Exit;
TQtTextEdit(ACustomEdit.Handle).setAlignment(AlignmentMap[AAlignment]);
end;
class procedure TQtWSCustomMemo.SetScrollbars(const ACustomMemo: TCustomMemo;
const NewScrollbars: TScrollStyle);
begin
@ -709,11 +708,20 @@ var
QtLineEdit: TQtLineEdit;
begin
QtLineEdit := TQtLineEdit.Create(AWinControl, AParams);
QtLineEdit.setAlignment(AlignmentMap[TCustomEdit(AWinControl).Alignment]);
QtLineEdit.AttachEvents;
Result := TLCLIntfHandle(QtLineEdit);
end;
class procedure TQtWSCustomEdit.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
begin
if not WSCheckHandleAllocated(ACustomEdit, 'SetAlignment') then
Exit;
TQtLineEdit(ACustomEdit.Handle).setAlignment(AlignmentMap[AAlignment]);
end;
class function TQtWSCustomEdit.GetCanUndo(const ACustomEdit: TCustomEdit): Boolean;
var
Widget: TQtWidget;

View File

@ -157,6 +157,7 @@ type
class function GetMaxLength(const ACustomEdit: TCustomEdit): integer; {override;}
class function GetText(const AWinControl: TWinControl; var AText: string): boolean; override;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
class procedure SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); override;
class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); override;
class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override;
@ -180,7 +181,6 @@ type
class function GetCaretPos(const ACustomEdit: TCustomEdit): TPoint; override;
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); override;
class procedure SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); override;
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override;
class procedure SetText(const AWinControl: TWinControl; const AText: string); override;
@ -288,20 +288,20 @@ procedure EditSetSelLength(WinHandle: HWND; NewLength: integer);
implementation
const
AlignmentMap: array[TAlignment] of DWORD =
AlignmentMap: array[TAlignment] of DWord =
(
{taLeftJustify } ES_LEFT,
{taRightJustify} ES_RIGHT,
{taCenter } ES_CENTER
);
AlignmentToStaticTextFlags: array[TAlignment] of dword =
AlignmentToStaticTextFlags: array[TAlignment] of DWord =
(
SS_LEFT,
SS_RIGHT,
SS_CENTER
);
BorderToStaticTextFlags: array[TStaticBorderStyle] of dword =
BorderToStaticTextFlags: array[TStaticBorderStyle] of DWord =
(
0,
WS_BORDER, // generic border
@ -817,7 +817,7 @@ end;
class procedure TWin32WSCustomComboBox.SetStyle(const ACustomComboBox: TCustomComboBox; NewStyle: TComboBoxStyle);
var
CurrentStyle: dword;
CurrentStyle: DWord;
begin
CurrentStyle := GetWindowLong(ACustomComboBox.Handle, GWL_STYLE);
if (CurrentStyle and ComboBoxStylesMask) =
@ -1022,8 +1022,11 @@ begin
with Params do
begin
if (AWinControl is TCustomEdit) then
begin
if TCustomEdit(AWinControl).BorderStyle=bsSingle then
FlagsEx := FlagsEx or WS_EX_CLIENTEDGE;
Flags := Flags or AlignmentMap[TCustomEdit(AWinControl).Alignment];
end;
pClassName := @EditClsName[0];
WindowTitle := StrCaption;
Flags := Flags or ES_AUTOHSCROLL;
@ -1077,6 +1080,17 @@ begin
AText := GetControlText(AWinControl.Handle);
end;
class procedure TWin32WSCustomEdit.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
var
CurrentStyle: DWord;
begin
CurrentStyle := GetWindowLong(ACustomEdit.Handle, GWL_STYLE);
if (CurrentStyle and 3) = AlignmentMap[AAlignment] then
Exit;
RecreateWnd(ACustomEdit);
end;
class procedure TWin32WSCustomEdit.SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint);
begin
Windows.SendMessageW(ACustomEdit.Handle, EM_SETSEL, NewPos.X, NewPos.X);
@ -1224,13 +1238,6 @@ begin
Result.Y := Windows.SendMessageW(ACustomEdit.Handle, EM_LINEFROMCHAR, BufferX, 0);
end;
class procedure TWin32WSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
const AAlignment: TAlignment);
begin
// SetWidowLong is not working here
RecreateWnd(ACustomMemo);
end;
class procedure TWin32WSCustomMemo.SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint);
var
CharIndex: Longword;

View File

@ -671,6 +671,7 @@ type
TCustomEdit = class(TWinControl)
private
FAlignment: TAlignment;
FAutoSelect: Boolean;
FAutoSelected: Boolean;
FCharCase: TEditCharCase;
@ -701,6 +702,7 @@ type
function GetSelLength: integer; virtual;
function GetSelStart: integer; virtual;
function GetSelText: string; virtual;
procedure SetAlignment(const AValue: TAlignment);
procedure SetCaretPos(const Value: TPoint); virtual;
procedure SetEchoMode(Val: TEchoMode); virtual;
procedure SetReadOnly(Value: Boolean); virtual;
@ -726,6 +728,7 @@ type
procedure PasteFromClipboard; virtual;
procedure Undo; virtual;
public
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
property BorderStyle default bsSingle;
property CanUndo: Boolean read GetCanUndo;
property CaretPos: TPoint read GetCaretPos write SetCaretPos;
@ -767,7 +770,6 @@ type
TCustomMemo = class(TCustomEdit)
private
FAlignment: TAlignment;
FHorzScrollBar: TMemoScrollBar;
FLines: TStrings;
FScrollBars: TScrollStyle;
@ -785,7 +787,6 @@ type
procedure RealSetText(const Value: TCaption); override;
function GetCachedText(var CachedText: TCaption): boolean; override;
function GetCaretPos: TPoint; override;
procedure SetAlignment(const AValue: TAlignment);
procedure SetCaretPos(const Value: TPoint); override;
procedure SetLines(const Value: TStrings);
procedure SetSelText(const Val: string); override;
@ -803,7 +804,6 @@ type
destructor Destroy; override;
procedure Append(const Value: String);
public
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
property Lines: TStrings read FLines write SetLines;
//property Font: TFont read FFont write FFont;
property HorzScrollBar: TMemoScrollBar
@ -825,6 +825,7 @@ type
published
property Action;
property Align;
property Alignment;
property Anchors;
property AutoSize;
property AutoSelect;

View File

@ -144,6 +144,7 @@ type
class function GetSelStart(const ACustomEdit: TCustomEdit): integer; virtual;
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; virtual;
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); virtual;
class procedure SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint); virtual;
class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); virtual;
class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); virtual;
@ -164,7 +165,6 @@ type
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); virtual;
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; virtual;
class procedure FreeStrings(var AStrings: TStrings); virtual;
class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); virtual;
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); virtual;
class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); virtual;
class procedure SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); virtual;
@ -450,6 +450,12 @@ begin
result := 0;
end;
class procedure TWSCustomEdit.SetAlignment(const ACustomEdit: TCustomEdit;
const AAlignment: TAlignment);
begin
end;
class procedure TWSCustomEdit.SetCaretPos(const ACustomEdit: TCustomEdit; const NewPos: TPoint);
begin
@ -505,11 +511,6 @@ begin
AStrings := nil;
end;
class procedure TWSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
const AAlignment: TAlignment);
begin
end;
class procedure TWSCustomMemo.SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle);
begin
end;