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 interface
uses uses
Classes, SysUtils, Graphics, StdCtrls, Classes, SysUtils, Graphics, StdCtrls;
WSRichMemo;
type type
TFontParams = record
Name : String;
Size : Integer;
Color : TColor;
Style : TFontStyles;
end;
TFontParams = WSRichMemo.TIntFontParams;
TParaAlignment = (paLeft, paRight, paCenter, paJustify); TParaAlignment = (paLeft, paRight, paCenter, paJustify);
TParaMetric = WSRichMemo.TIntParaMetric; TParaMetric = record
TParaNumStyle = WSRichMemo.TParaNumStyle; FirstLine : Double; // in points
TParaNumbering = WSRichMemo.TIntParaNumbering; 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); TTextModifyMask = set of (tmm_Color, tmm_Name, tmm_Size, tmm_Styles);
TRichMemoObject = class(TObject);
{ TCustomRichMemo } { TCustomRichMemo }
TCustomRichMemo = class(TCustomMemo) TCustomRichMemo = class(TCustomMemo)
@ -134,20 +153,29 @@ type
property WantTabs; property WantTabs;
property WordWrap; property WordWrap;
end; end;
procedure InitFontParams(var p: TFontParams);
function GetFontParams(styles: TFontStyles): TFontParams; overload; function GetFontParams(styles: TFontStyles): TFontParams; overload;
function GetFontParams(color: TColor; 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; color: TColor; styles: TFontStyles): TFontParams; overload;
function GetFontParams(const Name: String; Size: Integer; 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 var
RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil; RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil;
RTFSaveStream : function (AMemo: TCustomRichMemo; Dest: TStream): Boolean = nil; RTFSaveStream : function (AMemo: TCustomRichMemo; Dest: TStream): Boolean = nil;
implementation implementation
const uses
ParaAlignCode : array [TParaAlignment] of Integer = (AL_LEFT, AL_RIGHT, AL_CENTER, AL_JUSTIFY); WSRichMemo;
procedure InitFontParams(var p: TFontParams);
begin
FillChar(p, SizeOf(p), 0);
end;
function GetFontParams(styles: TFontStyles): TFontParams; overload; function GetFontParams(styles: TFontStyles): TFontParams; overload;
begin begin
@ -166,12 +194,23 @@ end;
function GetFontParams(const Name: String; Size: Integer; color: TColor; styles: TFontStyles): TFontParams; overload; function GetFontParams(const Name: String; Size: Integer; color: TColor; styles: TFontStyles): TFontParams; overload;
begin begin
InitFontParams(Result);
Result.Name := Name; Result.Name := Name;
Result.Size := Size; Result.Size := Size;
Result.Color := color; Result.Color := color;
Result.Style := styles; Result.Style := styles;
end; 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 } { TCustomRichMemo }
procedure TCustomRichMemo.SetHideSelection(AValue: Boolean); procedure TCustomRichMemo.SetHideSelection(AValue: Boolean);
@ -247,24 +286,14 @@ var
ac: Integer; ac: Integer;
begin begin
Result := HandleAllocated and Result := HandleAllocated and
TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, ac); TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, AAlign);
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;
end; end;
procedure TCustomRichMemo.SetParaAlignment(TextStart, TextLen: Integer; procedure TCustomRichMemo.SetParaAlignment(TextStart, TextLen: Integer;
AAlign: TParaAlignment); AAlign: TParaAlignment);
begin begin
if HandleAllocated then if HandleAllocated then
TWSCustomRichMemoClass(WidgetSetClass).SetParaAlignment(Self, TextStart, TextLen, ParaAlignCode[AAlign]); TWSCustomRichMemoClass(WidgetSetClass).SetParaAlignment(Self, TextStart, TextLen, AAlign);
end; end;
function TCustomRichMemo.GetParaMetric(TextStart: Integer; function TCustomRichMemo.GetParaMetric(TextStart: Integer;
@ -378,7 +407,6 @@ begin
end; end;
end; end;
function TCustomRichMemo.LoadRichText(Source: TStream): Boolean; function TCustomRichMemo.LoadRichText(Source: TStream): Boolean;
begin begin
Result:=false; Result:=false;

View File

@ -34,7 +34,7 @@ uses
// Win32WidgetSet // Win32WidgetSet
Win32WSControls, Win32Int, Win32WSControls, Win32Int,
// RichMemo headers // RichMemo headers
WSRichMemo, Win32RichMemoProc; RichMemo, WSRichMemo, Win32RichMemoProc;
type type
@ -62,9 +62,9 @@ type
class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override; class function SaveRichText(const AWinControl: TWinControl; Dst: TStream): Boolean; override;
class function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer; 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; 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; class function GetParaMetric(const AWinControl: TWinControl; TextStart: Integer;
var AMetrics: TIntParaMetric): Boolean; override; var AMetrics: TIntParaMetric): Boolean; override;
@ -346,7 +346,7 @@ begin
end; end;
class function TWin32WSCustomRichMemo.GetParaAlignment( class function TWin32WSCustomRichMemo.GetParaAlignment(
const AWinControl: TWinControl; TextStart: Integer; var AAlign: Integer const AWinControl: TWinControl; TextStart: Integer; var AAlign: TParaAlignment
): Boolean; ): Boolean;
var var
para : PARAFORMAT2; para : PARAFORMAT2;
@ -355,28 +355,27 @@ begin
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit; if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para); RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
case para.wAlignment of case para.wAlignment of
PFA_CENTER: AAlign:=AL_CENTER; PFA_CENTER: AAlign:=paCenter;
PFA_RIGHT: AAlign:=AL_RIGHT; PFA_RIGHT: AAlign:=paRight;
PFA_JUSTIFY: AAlign:=AL_JUSTIFY; PFA_JUSTIFY: AAlign:=paJustify;
else else
AAlign:=AL_LEFT; AAlign:=paLeft;
end; end;
Result:=true; Result:=true;
end; end;
class procedure TWin32WSCustomRichMemo.SetParaAlignment( class procedure TWin32WSCustomRichMemo.SetParaAlignment(
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: Integer); const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: TIntParaAlignment);
var var
para : PARAFORMAT2; para : PARAFORMAT2;
const 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 begin
if not Assigned(RichEditManager) or not Assigned(AWinControl) if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
or (AAlign<AL_LEFT) or (AAlign>AL_JUSTIFY) then Exit;
FillChar(para, sizeof(para), 0); FillChar(para, sizeof(para), 0);
para.cbSize:=sizeof(para); para.cbSize:=sizeof(para);
para.dwMask:=PFM_ALIGNMENT; para.dwMask:=PFM_ALIGNMENT;
para.wAlignment:=WinPara[byte(AAlign)]; para.wAlignment:=WinPara[AAlign];
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para); RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
end; end;

View File

@ -33,8 +33,77 @@ uses
// RichMemoUnits // RichMemoUnits
WSRichMemo, WSRichMemo,
// Win32 widgetset units // 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 type
{ TRichEditManager } { TRichEditManager }

View File

@ -25,44 +25,16 @@ interface
uses uses
Classes, SysUtils, Classes, SysUtils,
Graphics, Controls, StdCtrls, Graphics, Controls, StdCtrls,
WSStdCtrls, RichMemo;
WSStdCtrls;
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;
type type
TIntParaMetric = record TIntParaAlignment = RichMemo.TParaAlignment;
FirstLine : Double; // in points TIntFontParams = RichMemo.TFontParams;
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 type
, pnLowRoman, pnUpLetter, pnUpRoman, pnCustomChar); TIntParaMetric = RichMemo.TParaMetric;
TIntParaNumbering = RichMemo.TParaNumbering;
TIntParaNumbering = record
Numbering : TParaNumStyle;
NumCustom : WideChar;
NumIndent : Double;
end;
TTabAlignment = (taLeft, taCenter, taRight, taDecimal, taWordBar); TTabAlignment = (taLeft, taCenter, taRight, taDecimal, taWordBar);
@ -76,7 +48,6 @@ type
Tabs : array of TTabInfo; Tabs : array of TTabInfo;
end; end;
{ TWSCustomRichMemo } { TWSCustomRichMemo }
TWSCustomRichMemo = class(TWSCustomMemo) TWSCustomRichMemo = class(TWSCustomMemo)
@ -94,9 +65,9 @@ type
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 function GetParaAlignment(const AWinControl: TWinControl; TextStart: Integer; 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; 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; class function GetParaMetric(const AWinControl: TWinControl; TextStart: Integer;
var AMetric: TIntParaMetric): Boolean; virtual; var AMetric: TIntParaMetric): Boolean; virtual;
class procedure SetParaMetric(const AWinControl: TWinControl; TextStart, TextLen: Integer; class procedure SetParaMetric(const AWinControl: TWinControl; TextStart, TextLen: Integer;
@ -155,14 +126,15 @@ begin
end; end;
class function TWSCustomRichMemo.GetParaAlignment( class function TWSCustomRichMemo.GetParaAlignment(
const AWinControl: TWinControl; TextStart: Integer; var AAlign: Integer const AWinControl: TWinControl; TextStart: Integer;
): Boolean; var AAlign: TIntParaAlignment): Boolean;
begin begin
Result := false; Result := false;
end; end;
class procedure TWSCustomRichMemo.SetParaAlignment( class procedure TWSCustomRichMemo.SetParaAlignment(
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: Integer); const AWinControl: TWinControl; TextStart, TextLen: Integer;
const AAlign: TIntParaAlignment);
begin begin
end; end;