You've already forked lazarus-ccr
richmemo: * relocated base types declaration to richmemo.pas unit. (ws units now depends on richmemo.pas. breaks gtk and carbon compilation)
* updated win32 ws for the dependency * added richole types to win32 git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3746 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -24,19 +24,38 @@ unit RichMemo;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Graphics, StdCtrls,
|
||||
WSRichMemo;
|
||||
Classes, SysUtils, Graphics, StdCtrls;
|
||||
|
||||
type
|
||||
TFontParams = record
|
||||
Name : String;
|
||||
Size : Integer;
|
||||
Color : TColor;
|
||||
Style : TFontStyles;
|
||||
end;
|
||||
|
||||
TFontParams = WSRichMemo.TIntFontParams;
|
||||
TParaAlignment = (paLeft, paRight, paCenter, paJustify);
|
||||
TParaMetric = WSRichMemo.TIntParaMetric;
|
||||
TParaNumStyle = WSRichMemo.TParaNumStyle;
|
||||
TParaNumbering = WSRichMemo.TIntParaNumbering;
|
||||
TParaMetric = record
|
||||
FirstLine : Double; // in points
|
||||
TailIndent : Double; // in points
|
||||
HeadIndent : Double; // in points
|
||||
SpaceBefore : Double; // in points
|
||||
SpaceAfter : Double; // in points
|
||||
LineSpacing : Double; // multi
|
||||
end;
|
||||
TParaNumStyle = (pnNone, pnBullet, pnNumber, pnLowLetter
|
||||
, pnLowRoman, pnUpLetter, pnUpRoman, pnCustomChar);
|
||||
|
||||
TParaNumbering = record
|
||||
Numbering : TParaNumStyle;
|
||||
NumCustom : WideChar;
|
||||
NumIndent : Double;
|
||||
end;
|
||||
|
||||
TTextModifyMask = set of (tmm_Color, tmm_Name, tmm_Size, tmm_Styles);
|
||||
|
||||
TRichMemoObject = class(TObject);
|
||||
|
||||
{ TCustomRichMemo }
|
||||
|
||||
TCustomRichMemo = class(TCustomMemo)
|
||||
@ -135,19 +154,28 @@ type
|
||||
property WordWrap;
|
||||
end;
|
||||
|
||||
procedure InitFontParams(var p: TFontParams);
|
||||
function GetFontParams(styles: TFontStyles): TFontParams; overload;
|
||||
function GetFontParams(color: TColor; styles: TFontStyles): TFontParams; overload;
|
||||
function GetFontParams(const Name: String; color: TColor; styles: TFontStyles): TFontParams; overload;
|
||||
function GetFontParams(const Name: String; Size: Integer; color: TColor; styles: TFontStyles): TFontParams; overload;
|
||||
|
||||
procedure InitParaMatric(var m: TParaMetric);
|
||||
procedure InitParaNumbering(var n: TParaNumbering);
|
||||
|
||||
var
|
||||
RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil;
|
||||
RTFSaveStream : function (AMemo: TCustomRichMemo; Dest: TStream): Boolean = nil;
|
||||
|
||||
implementation
|
||||
|
||||
const
|
||||
ParaAlignCode : array [TParaAlignment] of Integer = (AL_LEFT, AL_RIGHT, AL_CENTER, AL_JUSTIFY);
|
||||
uses
|
||||
WSRichMemo;
|
||||
|
||||
procedure InitFontParams(var p: TFontParams);
|
||||
begin
|
||||
FillChar(p, SizeOf(p), 0);
|
||||
end;
|
||||
|
||||
function GetFontParams(styles: TFontStyles): TFontParams; overload;
|
||||
begin
|
||||
@ -166,12 +194,23 @@ end;
|
||||
|
||||
function GetFontParams(const Name: String; Size: Integer; color: TColor; styles: TFontStyles): TFontParams; overload;
|
||||
begin
|
||||
InitFontParams(Result);
|
||||
Result.Name := Name;
|
||||
Result.Size := Size;
|
||||
Result.Color := color;
|
||||
Result.Style := styles;
|
||||
end;
|
||||
|
||||
procedure InitParaMatric(var m: TParaMetric);
|
||||
begin
|
||||
FillChar(m, sizeof(m), 0);
|
||||
end;
|
||||
|
||||
procedure InitParaNumbering(var n: TParaNumbering);
|
||||
begin
|
||||
FillChar(n, sizeof(n), 0);
|
||||
end;
|
||||
|
||||
{ TCustomRichMemo }
|
||||
|
||||
procedure TCustomRichMemo.SetHideSelection(AValue: Boolean);
|
||||
@ -247,24 +286,14 @@ var
|
||||
ac: Integer;
|
||||
begin
|
||||
Result := HandleAllocated and
|
||||
TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, ac);
|
||||
if Result then begin
|
||||
case ac of
|
||||
AL_LEFT: AAlign:=paLeft;
|
||||
AL_RIGHT: AAlign:=paRight;
|
||||
AL_CENTER: AAlign:=paCenter;
|
||||
AL_JUSTIFY: AAlign:=paJustify
|
||||
else
|
||||
AAlign:=paLeft;
|
||||
end;
|
||||
end;
|
||||
TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, AAlign);
|
||||
end;
|
||||
|
||||
procedure TCustomRichMemo.SetParaAlignment(TextStart, TextLen: Integer;
|
||||
AAlign: TParaAlignment);
|
||||
begin
|
||||
if HandleAllocated then
|
||||
TWSCustomRichMemoClass(WidgetSetClass).SetParaAlignment(Self, TextStart, TextLen, ParaAlignCode[AAlign]);
|
||||
TWSCustomRichMemoClass(WidgetSetClass).SetParaAlignment(Self, TextStart, TextLen, AAlign);
|
||||
end;
|
||||
|
||||
function TCustomRichMemo.GetParaMetric(TextStart: Integer;
|
||||
@ -378,7 +407,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCustomRichMemo.LoadRichText(Source: TStream): Boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
|
@ -34,7 +34,7 @@ uses
|
||||
// Win32WidgetSet
|
||||
Win32WSControls, Win32Int,
|
||||
// RichMemo headers
|
||||
WSRichMemo, Win32RichMemoProc;
|
||||
RichMemo, WSRichMemo, Win32RichMemoProc;
|
||||
|
||||
type
|
||||
|
||||
@ -62,9 +62,9 @@ type
|
||||
class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override;
|
||||
|
||||
class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var AAlign: Integer): Boolean; override;
|
||||
var AAlign: TParaAlignment): Boolean; override;
|
||||
class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const AAlign: Integer); override;
|
||||
const AAlign: TIntParaAlignment); override;
|
||||
|
||||
class function GetParaMetric(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var AMetrics: TIntParaMetric): Boolean; override;
|
||||
@ -346,7 +346,7 @@ begin
|
||||
end;
|
||||
|
||||
class function TWin32WSCustomRichMemo.GetParaAlignment(
|
||||
const AWinControl: TWinControl; TextStart: Integer; var AAlign: Integer
|
||||
const AWinControl: TWinControl; TextStart: Integer; var AAlign: TParaAlignment
|
||||
): Boolean;
|
||||
var
|
||||
para : PARAFORMAT2;
|
||||
@ -355,28 +355,27 @@ begin
|
||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
||||
case para.wAlignment of
|
||||
PFA_CENTER: AAlign:=AL_CENTER;
|
||||
PFA_RIGHT: AAlign:=AL_RIGHT;
|
||||
PFA_JUSTIFY: AAlign:=AL_JUSTIFY;
|
||||
PFA_CENTER: AAlign:=paCenter;
|
||||
PFA_RIGHT: AAlign:=paRight;
|
||||
PFA_JUSTIFY: AAlign:=paJustify;
|
||||
else
|
||||
AAlign:=AL_LEFT;
|
||||
AAlign:=paLeft;
|
||||
end;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
class procedure TWin32WSCustomRichMemo.SetParaAlignment(
|
||||
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: Integer);
|
||||
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: TIntParaAlignment);
|
||||
var
|
||||
para : PARAFORMAT2;
|
||||
const
|
||||
WinPara : array [AL_LEFT..AL_JUSTIFY] of word = (PFA_LEFT, PFA_RIGHT, PFA_CENTER, PFA_JUSTIFY);
|
||||
WinPara : array [TIntParaAlignment] of word = (PFA_LEFT, PFA_RIGHT, PFA_CENTER, PFA_JUSTIFY);
|
||||
begin
|
||||
if not Assigned(RichEditManager) or not Assigned(AWinControl)
|
||||
or (AAlign<AL_LEFT) or (AAlign>AL_JUSTIFY) then Exit;
|
||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||
FillChar(para, sizeof(para), 0);
|
||||
para.cbSize:=sizeof(para);
|
||||
para.dwMask:=PFM_ALIGNMENT;
|
||||
para.wAlignment:=WinPara[byte(AAlign)];
|
||||
para.wAlignment:=WinPara[AAlign];
|
||||
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
|
||||
end;
|
||||
|
||||
|
@ -33,7 +33,76 @@ uses
|
||||
// RichMemoUnits
|
||||
WSRichMemo,
|
||||
// Win32 widgetset units
|
||||
win32proc;
|
||||
win32proc
|
||||
,ActiveX, ComObj;
|
||||
|
||||
const
|
||||
IID_IRichEditOle: TGUID = '{00020D00-0000-0000-C000-000000000046}';
|
||||
IID_IRichEditOleCallback: TGUID = '{00020D03-0000-0000-C000-000000000046}';
|
||||
|
||||
type
|
||||
TREOBJECT = packed record
|
||||
cbStruct : DWORD;
|
||||
cp : LONG;
|
||||
clsid : CLSID;
|
||||
poleobj : IOLEOBJECT;
|
||||
pstg : ISTORAGE;
|
||||
polesite : IOLECLIENTSITE;
|
||||
sizel : SIZEL;
|
||||
dvaspect : DWORD;
|
||||
dwFlags : DWORD;
|
||||
dwUser : DWORD;
|
||||
end;
|
||||
|
||||
type
|
||||
IRichEditOle = interface(IUnknown)
|
||||
['{00020D00-0000-0000-C000-000000000046}']
|
||||
// *** IRichEditOle methods ***
|
||||
function GetClientSite(out clientSite: IOleClientSite): HRESULT; stdcall;
|
||||
function GetObjectCount: LongInt; stdcall;
|
||||
function GetLinkCount: LongInt; stdcall;
|
||||
function GetObject(iob: LongInt; out ReObject: TReObject;
|
||||
dwFlags: DWORD): HRESULT; stdcall;
|
||||
function InsertObject(var ReObject: TReObject): HRESULT; stdcall;
|
||||
function ConvertObject(iob: LongInt; const clsidNew: TCLSID;
|
||||
lpStrUserTypeNew: LPCSTR): HRESULT; stdcall;
|
||||
function ActivateAs(const clsid, clsidAs: TCLSID): HRESULT; stdcall;
|
||||
function SetHostNames(lpstrContainerApp: LPCSTR;
|
||||
lpstrContainerObj: LPCSTR): HRESULT; stdcall;
|
||||
function SetLinkAvailable(iob: LongInt; fAvailable: BOOL): HRESULT; stdcall;
|
||||
function SetDvaspect(iob: LongInt; dvaspect: DWORD): HRESULT; stdcall;
|
||||
function HandsOffStorage(iob: LongInt): HRESULT; stdcall;
|
||||
function SaveCompleted(iob: LongInt; const stg: IStorage): HRESULT; stdcall;
|
||||
function InPlaceDeactivate: HRESULT; stdcall;
|
||||
function ContextSensitiveHelp(fEnterMode: BOOL): HRESULT; stdcall;
|
||||
function GetClipboardData(const chrg: TCharRange; reco: DWORD;
|
||||
out dataobj: IDataObject): HRESULT; stdcall;
|
||||
function ImportDataObject(const dataobj: IDataObject; cf: TClipFormat;
|
||||
hMetaPict: HGLOBAL): HRESULT; stdcall;
|
||||
end;
|
||||
|
||||
IRichEditOleCallback = interface(IUnknown)
|
||||
['{00020D03-0000-0000-C000-000000000046}']
|
||||
// *** IRichEditOleCallback methods ***
|
||||
function GetNewStorage(out stg: IStorage): HRESULT; stdcall;
|
||||
function GetInPlaceContext(out Frame: IOleInPlaceFrame;
|
||||
out Doc: IOleInPlaceUIWindow;
|
||||
lpFrameInfo: POleInPlaceFrameInfo): HRESULT; stdcall;
|
||||
function ShowContainerUI(fShow: BOOL): HRESULT; stdcall;
|
||||
function QueryInsertObject(const clsid: TCLSID; const stg: IStorage;
|
||||
cp: LongInt): HRESULT; stdcall;
|
||||
function DeleteObject(const oleobj: IOleObject): HRESULT; stdcall;
|
||||
function QueryAcceptData(const dataobj: IDataObject;
|
||||
var cfFormat: TClipFormat; reco: DWORD; fReally: BOOL;
|
||||
hMetaPict: HGLOBAL): HRESULT; stdcall;
|
||||
function ContextSensitiveHelp(fEnterMode: BOOL): HRESULT; stdcall;
|
||||
function GetClipboardData(const chrg: TCharRange; reco: DWORD;
|
||||
out dataobj: IDataObject): HRESULT; stdcall;
|
||||
function GetDragDropEffect(fDrag: BOOL; grfKeyState: DWORD;
|
||||
var dwEffect: DWORD): HRESULT; stdcall;
|
||||
function GetContextMenu(seltype: Word; oleobj: IOleObject;
|
||||
const chrg: TCharRange; var menu: HMENU): HRESULT; stdcall;
|
||||
end;
|
||||
|
||||
type
|
||||
{ TRichEditManager }
|
||||
|
@ -25,44 +25,16 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
|
||||
Graphics, Controls, StdCtrls,
|
||||
|
||||
WSStdCtrls;
|
||||
WSStdCtrls, RichMemo;
|
||||
|
||||
type
|
||||
|
||||
TIntFontParams = record
|
||||
Name : String;
|
||||
Size : Integer;
|
||||
Color : TColor;
|
||||
Style : TFontStyles;
|
||||
end;
|
||||
|
||||
const
|
||||
AL_LEFT = 1;
|
||||
AL_RIGHT = 2;
|
||||
AL_CENTER = 3;
|
||||
AL_JUSTIFY = 4;
|
||||
TIntParaAlignment = RichMemo.TParaAlignment;
|
||||
TIntFontParams = RichMemo.TFontParams;
|
||||
|
||||
type
|
||||
TIntParaMetric = record
|
||||
FirstLine : Double; // in points
|
||||
TailIndent : Double; // in points
|
||||
HeadIndent : Double; // in points
|
||||
SpaceBefore : Double; // in points
|
||||
SpaceAfter : Double; // in points
|
||||
LineSpacing : Double; // todo: ?
|
||||
end;
|
||||
|
||||
TParaNumStyle = (pnNone, pnBullet, pnNumber, pnLowLetter
|
||||
, pnLowRoman, pnUpLetter, pnUpRoman, pnCustomChar);
|
||||
|
||||
TIntParaNumbering = record
|
||||
Numbering : TParaNumStyle;
|
||||
NumCustom : WideChar;
|
||||
NumIndent : Double;
|
||||
end;
|
||||
TIntParaMetric = RichMemo.TParaMetric;
|
||||
TIntParaNumbering = RichMemo.TParaNumbering;
|
||||
|
||||
TTabAlignment = (taLeft, taCenter, taRight, taDecimal, taWordBar);
|
||||
|
||||
@ -76,7 +48,6 @@ type
|
||||
Tabs : array of TTabInfo;
|
||||
end;
|
||||
|
||||
|
||||
{ TWSCustomRichMemo }
|
||||
|
||||
TWSCustomRichMemo = class(TWSCustomMemo)
|
||||
@ -94,9 +65,9 @@ type
|
||||
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const Params: TIntFontParams); virtual;
|
||||
class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var AAlign: Integer): Boolean; virtual;
|
||||
var AAlign: TIntParaAlignment): Boolean; virtual;
|
||||
class procedure SetParaAlignment(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const AAlign: Integer); virtual;
|
||||
const AAlign: TIntParaAlignment); virtual;
|
||||
class function GetParaMetric(const AWinControl: TWinControl; TextStart: Integer;
|
||||
var AMetric: TIntParaMetric): Boolean; virtual;
|
||||
class procedure SetParaMetric(const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
@ -155,14 +126,15 @@ begin
|
||||
end;
|
||||
|
||||
class function TWSCustomRichMemo.GetParaAlignment(
|
||||
const AWinControl: TWinControl; TextStart: Integer; var AAlign: Integer
|
||||
): Boolean;
|
||||
const AWinControl: TWinControl; TextStart: Integer;
|
||||
var AAlign: TIntParaAlignment): Boolean;
|
||||
begin
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
class procedure TWSCustomRichMemo.SetParaAlignment(
|
||||
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: Integer);
|
||||
const AWinControl: TWinControl; TextStart, TextLen: Integer;
|
||||
const AAlign: TIntParaAlignment);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
Reference in New Issue
Block a user