You've already forked lazarus-ccr
richmemo: moving clipboard operations onto widgetsetlevel
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1210 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -53,7 +53,12 @@ type
|
||||
function GetContStyleLength(TextStart: Integer): Integer;
|
||||
|
||||
procedure SetSelText(const SelTextUTF8: string); override;
|
||||
|
||||
public
|
||||
procedure CopyToClipboard; override;
|
||||
procedure CutToClipboard; override;
|
||||
procedure PasteFromClipboard; override;
|
||||
|
||||
procedure SetTextAttributes(TextStart, TextLen: Integer; const TextParams: TFontParams); virtual;
|
||||
function GetTextAttributes(TextStart: Integer; var TextParams: TFontParams): Boolean; virtual;
|
||||
function GetStyleRange(CharOfs: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual;
|
||||
@ -248,6 +253,24 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomRichMemo.CopyToClipboard;
|
||||
begin
|
||||
if HandleAllocated then
|
||||
TWSCustomRichMemoClass(WidgetSetClass).CopyToClipboard(Self);
|
||||
end;
|
||||
|
||||
procedure TCustomRichMemo.CutToClipboard;
|
||||
begin
|
||||
if HandleAllocated then
|
||||
TWSCustomRichMemoClass(WidgetSetClass).CutToClipboard(Self);
|
||||
end;
|
||||
|
||||
procedure TCustomRichMemo.PasteFromClipboard;
|
||||
begin
|
||||
if HandleAllocated then
|
||||
TWSCustomRichMemoClass(WidgetSetClass).PasteFromClipboard(Self);
|
||||
end;
|
||||
|
||||
procedure TCustomRichMemo.SetRangeColor(TextStart, TextLength: Integer; FontColor: TColor);
|
||||
begin
|
||||
SetRangeParams(TextStart, TextLength, [tmm_Color], '', 0, FontColor, [], []);
|
||||
|
@ -47,12 +47,16 @@ type
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
|
||||
|
||||
class procedure CutToClipboard(const AWinControl: TWinControl); override;
|
||||
class procedure CopyToClipboard(const AWinControl: TWinControl); override;
|
||||
class procedure PasteFromClipboard(const AWinControl: TWinControl); override;
|
||||
|
||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override;
|
||||
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var Params: TIntFontParams): Boolean; override;
|
||||
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const Params: TIntFontParams); override;
|
||||
class procedure SetHideSelection(const AWinControl: TWinControl; AHideSelection: Boolean); override;
|
||||
class procedure SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean); override;
|
||||
class function GetStyleRange(const AWinControl: TWinControl; TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean; override;
|
||||
class function LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; override;
|
||||
class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override;
|
||||
@ -121,6 +125,21 @@ begin
|
||||
InvalidateRect(ACustomEdit.Handle, nil, false);
|
||||
end;
|
||||
|
||||
class procedure TWin32WSCustomRichMemo.CutToClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
SendMessage(AWinControl.Handle, WM_CUT, 0,0);
|
||||
end;
|
||||
|
||||
class procedure TWin32WSCustomRichMemo.CopyToClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
SendMessage(AWinControl.Handle, WM_COPY, 0,0);
|
||||
end;
|
||||
|
||||
class procedure TWin32WSCustomRichMemo.PasteFromClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
SendMessage(AWinControl.Handle, WM_PASTE, 0,0);
|
||||
end;
|
||||
|
||||
class function TWin32WSCustomRichMemo.CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): HWND;
|
||||
var
|
||||
@ -239,10 +258,10 @@ end;
|
||||
|
||||
|
||||
class procedure TWin32WSCustomRichMemo.SetHideSelection(
|
||||
const AWinControl: TWinControl; AHideSelection: Boolean);
|
||||
const ACustomEdit: TCustomEdit; AHideSelection: Boolean);
|
||||
begin
|
||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||
RichEditManager.SetHideSelection(AWinControl.Handle, AHideSelection);
|
||||
if not Assigned(RichEditManager) or not Assigned(ACustomEdit) then Exit;
|
||||
RichEditManager.SetHideSelection(ACustomEdit.Handle, AHideSelection);
|
||||
end;
|
||||
|
||||
procedure InitScrollInfo(var info: TScrollInfo);
|
||||
|
@ -184,11 +184,11 @@ begin
|
||||
end;
|
||||
|
||||
type
|
||||
gettextlengthex = packed record
|
||||
richedit_gettextlengthex = packed record
|
||||
flags : DWORD;
|
||||
codepage : LongWord;
|
||||
end;
|
||||
Tgettextlengthex = gettextlengthex;
|
||||
Tgettextlengthex = richedit_gettextlengthex;
|
||||
|
||||
class function TRichEditManager.GetStyleRange(RichEditWnd: Handle; TextStart: Integer;
|
||||
var RangeStart, RangeLen: Integer): Boolean;
|
||||
@ -206,11 +206,13 @@ const
|
||||
CFM_SIZE or CFM_COLOR or CFM_FACE;
|
||||
begin
|
||||
Result := false;
|
||||
if RichEditWnd = 0 then Exit;
|
||||
if (RichEditWnd = 0) then Exit;
|
||||
|
||||
textlen.flags := GTL_NUMCHARS or GTL_USECRLF or GTL_PRECISE;
|
||||
textlen.codepage := CP_UNICODE;
|
||||
len := SendMessage(RichEditWnd, EM_GETTEXTLENGTHEX, WPARAM(@textlen), 0);
|
||||
Result := TextStart < len;
|
||||
if not Result then Exit;
|
||||
|
||||
FillChar(fmt, sizeof(fmt), 0);
|
||||
fmt.cbSize := sizeof(fmt);
|
||||
|
@ -26,7 +26,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
|
||||
Graphics, Controls,
|
||||
Graphics, Controls, StdCtrls,
|
||||
|
||||
WSStdCtrls;
|
||||
|
||||
@ -44,13 +44,20 @@ type
|
||||
|
||||
TWSCustomRichMemo = class(TWSCustomMemo)
|
||||
published
|
||||
//Note: RichMemo cannot use LCL TCustomEdit copy/paste/cut operations
|
||||
// because there's no support for (system native) RICHTEXT clipboard format
|
||||
// that's why Clipboard operations are moved to widgetset level
|
||||
class procedure CutToClipboard(const AWinControl: TWinControl); virtual;
|
||||
class procedure CopyToClipboard(const AWinControl: TWinControl); virtual;
|
||||
class procedure PasteFromClipboard(const AWinControl: TWinControl); virtual;
|
||||
|
||||
class function GetStyleRange(const AWinControl: TWinControl; TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual;
|
||||
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var Params: TIntFontParams): Boolean; virtual;
|
||||
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const Params: TIntFontParams); virtual;
|
||||
class procedure InDelText(const AWinControl: TWinControl; const TextUTF8: String; DstStart, DstLen: Integer); virtual;
|
||||
class procedure SetHideSelection(const AWinControl: TWinControl; AHideSelection: Boolean); virtual;
|
||||
class procedure SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean); override;
|
||||
class function LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; virtual;
|
||||
class function SaveRichText(const AWinControl: TWinControl; Dest: TStream): Boolean; virtual;
|
||||
end;
|
||||
@ -63,6 +70,21 @@ implementation
|
||||
|
||||
{ TWSCustomRichMemo }
|
||||
|
||||
class procedure TWSCustomRichMemo.CutToClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
class procedure TWSCustomRichMemo.CopyToClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
class procedure TWSCustomRichMemo.PasteFromClipboard(const AWinControl: TWinControl);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
class function TWSCustomRichMemo.GetStyleRange(const AWinControl: TWinControl;
|
||||
TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean;
|
||||
begin
|
||||
@ -88,7 +110,7 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
class procedure TWSCustomRichMemo.SetHideSelection(const AWinControl: TWinControl; AHideSelection: Boolean);
|
||||
class procedure TWSCustomRichMemo.SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
Reference in New Issue
Block a user