diff --git a/components/richmemo/qt/qtrichmemo.pas b/components/richmemo/qt/qtrichmemo.pas
new file mode 100644
index 000000000..aa519e318
--- /dev/null
+++ b/components/richmemo/qt/qtrichmemo.pas
@@ -0,0 +1,109 @@
+unit QtRichMemo;
+
+interface
+
+uses
+ LCLType, Controls, StdCtrls,
+ qt4, qtwidgets, qtprivate,
+ WSProc,
+ RichMemo, WSRichMemo;
+
+type
+ { TQtWSCustomRichMemo }
+
+ TQtWSCustomRichMemo = class(TWSCustomRichMemo)
+ published
+ class function CreateHandle(const AWinControl: TWinControl;
+ const AParams: TCreateParams): HWND; override;
+ class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer;
+ var AAlign: TIntParaAlignment): Boolean; override;
+ class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer;
+ const AAlign: TIntParaAlignment); override;
+ end;
+
+implementation
+
+const
+ WordWrapMap: array[Boolean] of QTextEditLineWrapMode =
+ (
+ QTextEditNoWrap,
+ QTextEditWidgetWidth
+ );
+
+ AlignmentMap: array[TIntParaAlignment] of QtAlignment =
+ (
+ QtAlignLeft,
+ QtAlignRight,
+ QtAlignHCenter,
+ QtAlignJustify
+ );
+
+{ TQtWSCustomRichMemo }
+
+class function TQtWSCustomRichMemo.CreateHandle(const AWinControl: TWinControl;
+ const AParams: TCreateParams): HWND;
+var
+ QtTextEdit: TQtTextEdit;
+begin
+ QtTextEdit := TQtTextEdit.Create(AWinControl, AParams);
+ QtTextEdit.AcceptRichText := True;
+ QtTextEdit.ClearText;
+ QtTextEdit.setBorder(TCustomMemo(AWinControl).BorderStyle = bsSingle);
+ QtTextEdit.setReadOnly(TCustomMemo(AWinControl).ReadOnly);
+ QtTextEdit.setLineWrapMode(WordWrapMap[TCustomMemo(AWinControl).WordWrap]);
+ // create our FList helper
+ QtTextEdit.FList := TQtMemoStrings.Create(TCustomMemo(AWinControl));
+ QtTextEdit.setScrollStyle(TCustomMemo(AWinControl).ScrollBars);
+ QtTextEdit.setTabChangesFocus(not TCustomMemo(AWinControl).WantTabs);
+
+ QtTextEdit.AttachEvents;
+
+ Result := TLCLIntfHandle(QtTextEdit);
+end;
+
+class procedure TQtWSCustomRichMemo.SetParaAlignment(
+ const AWinControl: TWinControl; TextStart, TextLen: Integer;
+ const AAlign: TIntParaAlignment);
+var
+ w : QTextEditH;
+ te : TQtTextEdit;
+ ss, sl : Integer;
+begin
+ if not WSCheckHandleAllocated(AWinControl, 'SetParaAlignment') then
+ Exit;
+ te:=TQtTextEdit(AWinControl.Handle);
+ w:=QTextEditH(te.Widget);
+
+ ss:=te.getSelectionStart;
+ sl:=te.getSelectionLength;
+
+ te.setSelection(TextStart, TextLen);
+
+ // alignment
+ QTextEdit_setAlignment(w, AlignmentMap[AAlign]);
+
+ te.setSelection(ss, sl);
+end;
+
+class function TQtWSCustomRichMemo.GetParaAlignment(
+ const AWinControl: TWinControl; TextStart: Integer;
+ var AAlign: TIntParaAlignment): Boolean;
+var
+ te : TQtTextEdit;
+ al : QtAlignment;
+begin
+ if not WSCheckHandleAllocated(AWinControl, 'GetParaAlignment') then begin
+ Result:=false;
+ Exit;
+ end;
+ te:=TQtTextEdit(AWinControl.Handle);
+ al:=QTextEdit_alignment(QTextEditH(te.Widget));
+ if QtAlignLeading and al > 0 then AAlign:=paLeft
+ else if QtAlignTrailing and al > 0 then AAlign:=paRight
+ else if QtAlignCenter and al > 0 then AAlign:=paCenter
+ else if QtAlignJustify and al > 0 then AAlign:=paJustify
+ else AAlign:=paLeft;
+ Result:=true;
+end;
+
+end.
diff --git a/components/richmemo/richmemofactory.pas b/components/richmemo/richmemofactory.pas
index 343724527..7ff8918d0 100644
--- a/components/richmemo/richmemofactory.pas
+++ b/components/richmemo/richmemofactory.pas
@@ -9,6 +9,7 @@ interface
{$ifdef LCLCarbon}{$undef NoRichMemo}{$endif}
{$ifdef LCLGtk2}{$undef NoRichMemo}{$endif}
{$ifdef LCLCocoa}{$undef NoRichMemo}{$endif}
+{$ifdef LCLQt}{$undef NoRichMemo}{$endif}
uses
WSLCLClasses,
@@ -26,6 +27,7 @@ uses
,RichMemoRTF, Gtk2RichMemo
{$endif}
{$ifdef LCLCocoa},CocoaRichMemo{$endif}
+ {$ifdef LCLQt},QtRichMemo{$endif}
;
function RegisterCustomRichMemo: Boolean;
@@ -44,6 +46,7 @@ begin
{$endif}
{$endif}
{$ifdef LCLCocoa}RegisterWSComponent(TCustomRichMemo, TCocoaWSCustomRichMemo);{$endif}
+ {$ifdef LCLQt}RegisterWSComponent(TCustomRichMemo, TQtWSCustomRichMemo);{$endif}
{$ifdef NoRichMemo}RegisterWSComponent(TCustomRichMemo, TWSCustomRichMemo);{$endif}
end;
diff --git a/components/richmemo/richmemopackage.lpk b/components/richmemo/richmemopackage.lpk
index 1dde8af4e..23eed58cb 100644
--- a/components/richmemo/richmemopackage.lpk
+++ b/components/richmemo/richmemopackage.lpk
@@ -9,8 +9,8 @@
-
-
+
+
@@ -28,7 +28,7 @@
"/>
-
+
@@ -98,6 +98,10 @@
+
+
+
+