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; function GetContStyleLength(TextStart: Integer): Integer;
procedure SetSelText(const SelTextUTF8: string); override; procedure SetSelText(const SelTextUTF8: string); override;
public public
procedure CopyToClipboard; override;
procedure CutToClipboard; override;
procedure PasteFromClipboard; override;
procedure SetTextAttributes(TextStart, TextLen: Integer; const TextParams: TFontParams); virtual; procedure SetTextAttributes(TextStart, TextLen: Integer; const TextParams: TFontParams); virtual;
function GetTextAttributes(TextStart: Integer; var TextParams: TFontParams): Boolean; virtual; function GetTextAttributes(TextStart: Integer; var TextParams: TFontParams): Boolean; virtual;
function GetStyleRange(CharOfs: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual; function GetStyleRange(CharOfs: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual;
@ -248,6 +253,24 @@ begin
end; end;
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); procedure TCustomRichMemo.SetRangeColor(TextStart, TextLength: Integer; FontColor: TColor);
begin begin
SetRangeParams(TextStart, TextLength, [tmm_Color], '', 0, FontColor, [], []); SetRangeParams(TextStart, TextLength, [tmm_Color], '', 0, FontColor, [], []);

View File

@ -46,13 +46,17 @@ type
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: 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 CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override;
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer; class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
var Params: TIntFontParams): Boolean; override; var Params: TIntFontParams): Boolean; override;
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer; class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
const Params: TIntFontParams); override; 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 GetStyleRange(const AWinControl: TWinControl; TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean; override;
class function LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; override; class function LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; override;
class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override; class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override;
@ -121,6 +125,21 @@ begin
InvalidateRect(ACustomEdit.Handle, nil, false); InvalidateRect(ACustomEdit.Handle, nil, false);
end; 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; class function TWin32WSCustomRichMemo.CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): HWND; const AParams: TCreateParams): HWND;
var var
@ -239,10 +258,10 @@ end;
class procedure TWin32WSCustomRichMemo.SetHideSelection( class procedure TWin32WSCustomRichMemo.SetHideSelection(
const AWinControl: TWinControl; AHideSelection: Boolean); const ACustomEdit: TCustomEdit; AHideSelection: Boolean);
begin begin
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit; if not Assigned(RichEditManager) or not Assigned(ACustomEdit) then Exit;
RichEditManager.SetHideSelection(AWinControl.Handle, AHideSelection); RichEditManager.SetHideSelection(ACustomEdit.Handle, AHideSelection);
end; end;
procedure InitScrollInfo(var info: TScrollInfo); procedure InitScrollInfo(var info: TScrollInfo);

View File

@ -65,7 +65,7 @@ implementation
const const
GlobalRichClass : AnsiString = ''; GlobalRichClass : AnsiString = '';
const const
TwipsInFontSize = 20; // see MSDN for CHARFORMAT Structure CFM_SIZE TwipsInFontSize = 20; // see MSDN for CHARFORMAT Structure CFM_SIZE
function GetRichEditClass: AnsiString; function GetRichEditClass: AnsiString;
@ -184,11 +184,11 @@ begin
end; end;
type type
gettextlengthex = packed record richedit_gettextlengthex = packed record
flags : DWORD; flags : DWORD;
codepage : LongWord; codepage : LongWord;
end; end;
Tgettextlengthex = gettextlengthex; Tgettextlengthex = richedit_gettextlengthex;
class function TRichEditManager.GetStyleRange(RichEditWnd: Handle; TextStart: Integer; class function TRichEditManager.GetStyleRange(RichEditWnd: Handle; TextStart: Integer;
var RangeStart, RangeLen: Integer): Boolean; var RangeStart, RangeLen: Integer): Boolean;
@ -206,11 +206,13 @@ const
CFM_SIZE or CFM_COLOR or CFM_FACE; CFM_SIZE or CFM_COLOR or CFM_FACE;
begin begin
Result := false; Result := false;
if RichEditWnd = 0 then Exit; if (RichEditWnd = 0) then Exit;
textlen.flags := GTL_NUMCHARS or GTL_USECRLF or GTL_PRECISE; textlen.flags := GTL_NUMCHARS or GTL_USECRLF or GTL_PRECISE;
textlen.codepage := CP_UNICODE; textlen.codepage := CP_UNICODE;
len := SendMessage(RichEditWnd, EM_GETTEXTLENGTHEX, WPARAM(@textlen), 0); len := SendMessage(RichEditWnd, EM_GETTEXTLENGTHEX, WPARAM(@textlen), 0);
Result := TextStart < len;
if not Result then Exit;
FillChar(fmt, sizeof(fmt), 0); FillChar(fmt, sizeof(fmt), 0);
fmt.cbSize := sizeof(fmt); fmt.cbSize := sizeof(fmt);

View File

@ -26,9 +26,9 @@ interface
uses uses
Classes, SysUtils, Classes, SysUtils,
Graphics, Controls, Graphics, Controls, StdCtrls,
WSStdCtrls; WSStdCtrls;
type type
@ -44,13 +44,20 @@ type
TWSCustomRichMemo = class(TWSCustomMemo) TWSCustomRichMemo = class(TWSCustomMemo)
published 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 GetStyleRange(const AWinControl: TWinControl; TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual;
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer; class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
var Params: TIntFontParams): Boolean; virtual; var Params: TIntFontParams): Boolean; virtual;
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer; class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
const Params: TIntFontParams); virtual; const Params: TIntFontParams); virtual;
class procedure InDelText(const AWinControl: TWinControl; const TextUTF8: String; DstStart, DstLen: Integer); 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 LoadRichText(const AWinControl: TWinControl; Source: TStream): Boolean; virtual;
class function SaveRichText(const AWinControl: TWinControl; Dest: TStream): Boolean; virtual; class function SaveRichText(const AWinControl: TWinControl; Dest: TStream): Boolean; virtual;
end; end;
@ -63,6 +70,21 @@ implementation
{ TWSCustomRichMemo } { 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; class function TWSCustomRichMemo.GetStyleRange(const AWinControl: TWinControl;
TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean; TextStart: Integer; var RangeStart, RangeLen: Integer): Boolean;
begin begin
@ -88,7 +110,7 @@ begin
end; end;
class procedure TWSCustomRichMemo.SetHideSelection(const AWinControl: TWinControl; AHideSelection: Boolean); class procedure TWSCustomRichMemo.SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean);
begin begin
end; end;