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:
skalogryz
2014-11-19 03:58:06 +00:00
parent 30fa3200d0
commit 7cceba702f
4 changed files with 145 additions and 77 deletions

View File

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

View File

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

View File

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

View File

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