mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 22:40:56 +02:00
fix for TCarbonMemo selection. Returns incorrect values if not focused
git-svn-id: trunk@20775 -
This commit is contained in:
parent
10869b8cdf
commit
1669ec7c1f
@ -55,10 +55,10 @@ type
|
|||||||
public
|
public
|
||||||
function GetPreferredSize: TPoint; override;
|
function GetPreferredSize: TPoint; override;
|
||||||
|
|
||||||
function GetSelStart(var ASelStart: Integer): Boolean;
|
function GetSelStart(var ASelStart: Integer): Boolean; virtual;
|
||||||
function GetSelLength(var ASelLength: Integer): Boolean;
|
function GetSelLength(var ASelLength: Integer): Boolean; virtual;
|
||||||
function SetSelStart(ASelStart: Integer): Boolean;
|
function SetSelStart(ASelStart: Integer): Boolean; virtual;
|
||||||
function SetSelLength(ASelLength: Integer): Boolean;
|
function SetSelLength(ASelLength: Integer): Boolean; virtual;
|
||||||
|
|
||||||
function GetText(var S: String): Boolean; override;
|
function GetText(var S: String): Boolean; override;
|
||||||
function SetText(const S: String): Boolean; override;
|
function SetText(const S: String): Boolean; override;
|
||||||
@ -174,6 +174,8 @@ type
|
|||||||
procedure DestroyWidget; override;
|
procedure DestroyWidget; override;
|
||||||
procedure GetLineOffset(AIndex: Integer; out AStart, AEnd: TXNOffset);
|
procedure GetLineOffset(AIndex: Integer; out AStart, AEnd: TXNOffset);
|
||||||
function GetCreationOptions: TXNFrameOptions; virtual;
|
function GetCreationOptions: TXNFrameOptions; virtual;
|
||||||
|
function GetTXNSelection(var iStart, iEnd: Integer): Boolean;
|
||||||
|
function SetTXNSelection(iStart, iEnd: Integer): Boolean;
|
||||||
public
|
public
|
||||||
procedure TextDidChange; override;
|
procedure TextDidChange; override;
|
||||||
function GetTextObject: TXNObject;
|
function GetTextObject: TXNObject;
|
||||||
@ -182,6 +184,11 @@ type
|
|||||||
|
|
||||||
function SetTXNControl(Tag: TXNControlTag; const Data: TXNControlData): Boolean;
|
function SetTXNControl(Tag: TXNControlTag; const Data: TXNControlData): Boolean;
|
||||||
public
|
public
|
||||||
|
function GetSelStart(var ASelStart: Integer): Boolean; override;
|
||||||
|
function GetSelLength(var ASelLength: Integer): Boolean; override;
|
||||||
|
function SetSelStart(ASelStart: Integer): Boolean; override;
|
||||||
|
function SetSelLength(ASelLength: Integer): Boolean; override;
|
||||||
|
|
||||||
procedure SetAlignment(AAlignment: TAlignment);
|
procedure SetAlignment(AAlignment: TAlignment);
|
||||||
procedure SetColor(const AColor: TColor); override;
|
procedure SetColor(const AColor: TColor); override;
|
||||||
procedure SetFont(const AFont: TFont); override;
|
procedure SetFont(const AFont: TFont); override;
|
||||||
@ -1536,6 +1543,69 @@ begin
|
|||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.GetTXNSelection(var iStart, iEnd: Integer): Boolean;
|
||||||
|
var
|
||||||
|
ist, ien : TXNOffset;
|
||||||
|
begin
|
||||||
|
TXNGetSelection(HITextViewGetTXNObject(ControlRef(Widget)), ist, ien);
|
||||||
|
iStart := Integer(ist);
|
||||||
|
iEnd := Integer(ien);
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.SetTXNSelection(iStart, iEnd: Integer): Boolean;
|
||||||
|
begin
|
||||||
|
Result := not OSError( TXNSetSelection( HITextViewGetTXNObject(Widget), iStart, iEnd),
|
||||||
|
Self, 'SetSelSTart', 'SetTXNSelection', '');
|
||||||
|
if Result then Invalidate(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.GetSelStart(var ASelStart: Integer): Boolean;
|
||||||
|
var
|
||||||
|
iEnd : Integer;
|
||||||
|
begin
|
||||||
|
Result := GetTXNSelection(ASelStart, iEnd);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.GetSelLength(var ASelLength: Integer): Boolean;
|
||||||
|
var
|
||||||
|
iStart : integer;
|
||||||
|
begin
|
||||||
|
Result := GetTXNSelection(iStart, ASelLength);
|
||||||
|
dec(ASelLength, iStart);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.SetSelStart(ASelStart: Integer): Boolean;
|
||||||
|
var
|
||||||
|
iStart : integer;
|
||||||
|
iEnd : integer;
|
||||||
|
begin
|
||||||
|
Result := GetTXNSelection(iStart, iEnd);
|
||||||
|
if not Result then
|
||||||
|
begin
|
||||||
|
iStart := 0;
|
||||||
|
iEnd := iStart;
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
Result := SetTXNSelection(ASelStart, ASelStart+iEnd-iStart);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCarbonMemo.SetSelLength(ASelLength: Integer): Boolean;
|
||||||
|
var
|
||||||
|
iStart : integer;
|
||||||
|
iEnd : integer;
|
||||||
|
begin
|
||||||
|
Result := GetTXNSelection(iStart, iEnd);
|
||||||
|
if not Result then
|
||||||
|
begin
|
||||||
|
iStart := 0;
|
||||||
|
Result := true;
|
||||||
|
end;
|
||||||
|
if ASelLength < 0 then iEnd := kTXNEndOffset
|
||||||
|
else iEnd := iStart + ASelLength;
|
||||||
|
Result := SetTXNSelection(iStart, iEnd);
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
Method: TCarbonMemo.SetAlignment
|
Method: TCarbonMemo.SetAlignment
|
||||||
Params: AAlignment - New alignment
|
Params: AAlignment - New alignment
|
||||||
|
Loading…
Reference in New Issue
Block a user