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:
skalogryz
2010-05-01 21:04:43 +00:00
parent f9a882cc87
commit e1762dbfab
4 changed files with 78 additions and 12 deletions

View File

@ -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, [], []);

View File

@ -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);

View File

@ -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);

View File

@ -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;