You've already forked lazarus-ccr
richmemo: always update the selection to make the "SelStart" at the minimal character position, when detecting styles
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5049 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -165,6 +165,8 @@ var
|
|||||||
// or set it to whatever function desired
|
// or set it to whatever function desired
|
||||||
NCPaint : TNCPaintProc = nil;
|
NCPaint : TNCPaintProc = nil;
|
||||||
|
|
||||||
|
function GetSelRTF(amemo: TCustomRichMemo): string;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -567,30 +569,22 @@ class function TWin32WSCustomRichMemo.GetTextAttributes(const AWinControl: TWinC
|
|||||||
var
|
var
|
||||||
OrigStart : Integer;
|
OrigStart : Integer;
|
||||||
OrigLen : Integer;
|
OrigLen : Integer;
|
||||||
NeedLock : Boolean;
|
|
||||||
eventmask : LongWord;
|
eventmask : LongWord;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then begin
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then begin
|
||||||
Result := false;
|
Result := false;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
InitFontParams(Params);
|
||||||
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
|
|
||||||
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
|
|
||||||
NeedLock := (OrigStart <> TextStart);
|
|
||||||
if NeedLock then begin
|
|
||||||
LockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle);
|
LockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle);
|
||||||
RichEditManager.SetSelection(AWinControl.Handle, TextStart, 1);
|
RichEditManager.SetSelection(AWinControl.Handle, TextStart, 1);
|
||||||
Result := RichEditManager.GetSelectedTextStyle(AWinControl.Handle, Params );
|
Result := RichEditManager.GetSelectedTextStyle(AWinControl.Handle, Params );
|
||||||
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
UnlockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle, false);
|
UnlockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle, false);
|
||||||
end else begin
|
|
||||||
LockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle);
|
|
||||||
Result := RichEditManager.GetSelectedTextStyle(AWinControl.Handle, Params);
|
|
||||||
UnlockRedraw(TCustomRichMemo(AWinControl), AWinControl.Handle, false);
|
|
||||||
end;
|
|
||||||
|
|
||||||
RichEditManager.SetEventMask(AWinControl.Handle,eventmask);
|
RichEditManager.SetEventMask(AWinControl.Handle,eventmask);
|
||||||
end;
|
end;
|
||||||
@ -718,7 +712,6 @@ class function TWin32WSCustomRichMemo.GetTextUIParams(const AWinControl: TWinCon
|
|||||||
var
|
var
|
||||||
OrigStart : Integer;
|
OrigStart : Integer;
|
||||||
OrigLen : Integer;
|
OrigLen : Integer;
|
||||||
NeedLock : Boolean;
|
|
||||||
eventmask : Integer;
|
eventmask : Integer;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then begin
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then begin
|
||||||
@ -729,15 +722,11 @@ begin
|
|||||||
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
|
|
||||||
NeedLock := (OrigStart <> TextStart);
|
|
||||||
if NeedLock then begin
|
|
||||||
LockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
|
LockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
|
||||||
RichEditManager.SetSelection(AWinControl.Handle, TextStart, 1);
|
RichEditManager.SetSelection(AWinControl.Handle, TextStart, 1);
|
||||||
RichEditManager.GetTextUIStyle(AWinControl.Handle, ui);
|
RichEditManager.GetTextUIStyle(AWinControl.Handle, ui);
|
||||||
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
UnlockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
|
UnlockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
|
||||||
end else
|
|
||||||
RichEditManager.GetTextUIStyle(AWinControl.Handle, ui);
|
|
||||||
|
|
||||||
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
Result:=true;
|
Result:=true;
|
||||||
@ -1356,6 +1345,54 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
TStreamText = record
|
||||||
|
buf : AnsiString;
|
||||||
|
end;
|
||||||
|
PStreamText = ^TStreamText;
|
||||||
|
|
||||||
|
function Read(dwCookie:PDWORD; pbBuff:LPBYTE; cb:LONG; var pcb:LONG):DWORD; stdcall;
|
||||||
|
var
|
||||||
|
p : PStreamText;
|
||||||
|
b : string;
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
b:=PStreamText(dwCookie)^.buf;
|
||||||
|
i:=length(b);
|
||||||
|
SetLength(b, length(b)+cb);
|
||||||
|
Move(pbBuff^, b[i+1], cb);
|
||||||
|
pcb:=cb;
|
||||||
|
PStreamText(dwCookie)^.buf:=b;
|
||||||
|
Result:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
_editstream = record
|
||||||
|
dwCookie : PTRUINT;
|
||||||
|
dwError : DWORD;
|
||||||
|
pfnCallback : EDITSTREAMCALLBACK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetSelRTF(amemo: TCustomRichMemo): string;
|
||||||
|
var
|
||||||
|
str : _EDITSTREAM;
|
||||||
|
tt : TStreamText;
|
||||||
|
begin
|
||||||
|
if not Assigned(amemo) or (not amemo.HandleAllocated) then begin
|
||||||
|
Result:='';
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FillChar(str, sizeof(str),0);
|
||||||
|
str.dwCookie:=PtrUInt(@tt);
|
||||||
|
str.pfnCallback:=@Read;
|
||||||
|
|
||||||
|
SendMessage( amemo.Handle, EM_STREAMOUT, SF_RTFNOOBJS or SFF_PLAINRTF or SFF_SELECTION, LParam(@str));
|
||||||
|
Result:=tt.buf;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
NCPaint := @ThemedNCPaint;
|
NCPaint := @ThemedNCPaint;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user