
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3765 8e941d3f-bd1b-0410-a28a-d453659cc2b4
113 lines
3.0 KiB
ObjectPascal
113 lines
3.0 KiB
ObjectPascal
unit QtRichMemo;
|
|
|
|
interface
|
|
//
|
|
// Following class methods are need for the implementation
|
|
// QTextCharFormatH
|
|
// QTextBlockFormatH
|
|
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.
|