mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-29 22:12:44 +02:00
Starts addding TMemo support to LCL-CustomDrawn and some fixes related to the TCDEdit.MultiLine implementation
git-svn-id: trunk@36931 -
This commit is contained in:
parent
eb613379a2
commit
9b1fbde31c
@ -794,7 +794,8 @@ var
|
|||||||
begin
|
begin
|
||||||
if not AStateEx.CaretIsVisible then Exit;
|
if not AStateEx.CaretIsVisible then Exit;
|
||||||
|
|
||||||
lControlText := AStateEx.Lines.Strings[AStateEx.CaretPos.Y];
|
if AStateEx.Lines.Count = 0 then lControlText := ''
|
||||||
|
else lControlText := AStateEx.Lines.Strings[AStateEx.CaretPos.Y];
|
||||||
lCaptionHeight := GetMeasuresEx(ADest, TCDCONTROL_CAPTION_HEIGHT, AState, AStateEx);
|
lCaptionHeight := GetMeasuresEx(ADest, TCDCONTROL_CAPTION_HEIGHT, AState, AStateEx);
|
||||||
lTextBottomSpacing := GetMeasures(TCDEDIT_BOTTOM_TEXT_SPACING);
|
lTextBottomSpacing := GetMeasures(TCDEDIT_BOTTOM_TEXT_SPACING);
|
||||||
lTextTopSpacing := GetMeasures(TCDEDIT_TOP_TEXT_SPACING);
|
lTextTopSpacing := GetMeasures(TCDEDIT_TOP_TEXT_SPACING);
|
||||||
|
@ -1496,6 +1496,7 @@ begin
|
|||||||
// Impose limits in the caret too
|
// Impose limits in the caret too
|
||||||
FEditState.CaretPos.X := Min(FEditState.CaretPos.X, UTF8Length(lLineText));
|
FEditState.CaretPos.X := Min(FEditState.CaretPos.X, UTF8Length(lLineText));
|
||||||
FEditState.CaretPos.Y := Min(FEditState.CaretPos.Y, FEditState.Lines.Count-1);
|
FEditState.CaretPos.Y := Min(FEditState.CaretPos.Y, FEditState.Lines.Count-1);
|
||||||
|
FEditState.CaretPos.Y := Max(FEditState.CaretPos.Y, 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Result.X -> returns a zero-based position of the caret
|
// Result.X -> returns a zero-based position of the caret
|
||||||
@ -1516,6 +1517,7 @@ begin
|
|||||||
if Result.Y < 0 then
|
if Result.Y < 0 then
|
||||||
begin
|
begin
|
||||||
Result.X := 1;
|
Result.X := 1;
|
||||||
|
Result.Y := 0;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1903,12 +1905,22 @@ end;
|
|||||||
|
|
||||||
function TCDEdit.GetCurrentLine: string;
|
function TCDEdit.GetCurrentLine: string;
|
||||||
begin
|
begin
|
||||||
Result := FLines.Strings[FEditState.CaretPos.Y];
|
if (FEditState.Lines.Count = 0) or (FEditState.CaretPos.Y >= FEditState.Lines.Count) then
|
||||||
|
Result := ''
|
||||||
|
else Result := FLines.Strings[FEditState.CaretPos.Y];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCDEdit.SetCurrentLine(AStr: string);
|
procedure TCDEdit.SetCurrentLine(AStr: string);
|
||||||
begin
|
begin
|
||||||
FLines.Strings[FEditState.CaretPos.Y] := AStr;
|
if (FEditState.Lines.Count = 0) or (FEditState.CaretPos.Y >= FEditState.Lines.Count) then
|
||||||
|
begin
|
||||||
|
FEditState.Lines.Text := AStr;
|
||||||
|
FEditState.VisibleTextStart.X := 1;
|
||||||
|
FEditState.VisibleTextStart.Y := 0;
|
||||||
|
FEditState.CaretPos.X := 0;
|
||||||
|
FEditState.CaretPos.Y := 0;
|
||||||
|
end
|
||||||
|
else FLines.Strings[FEditState.CaretPos.Y] := AStr;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCDCheckBox }
|
{ TCDCheckBox }
|
||||||
|
@ -297,8 +297,8 @@ end;
|
|||||||
|
|
||||||
function RegisterCustomMemo: Boolean; alias : 'WSRegisterCustomMemo';
|
function RegisterCustomMemo: Boolean; alias : 'WSRegisterCustomMemo';
|
||||||
begin
|
begin
|
||||||
// RegisterWSComponent(TCustomMemo, TWinCEWSCustomMemo);
|
RegisterWSComponent(TCustomMemo, TCDWSCustomMemo);
|
||||||
Result := False;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function RegisterButtonControl: Boolean; alias : 'WSRegisterButtonControl';
|
function RegisterButtonControl: Boolean; alias : 'WSRegisterButtonControl';
|
||||||
|
@ -212,16 +212,23 @@ type
|
|||||||
{ TCDWSCustomMemo }
|
{ TCDWSCustomMemo }
|
||||||
|
|
||||||
TCDWSCustomMemo = class(TWSCustomMemo)
|
TCDWSCustomMemo = class(TWSCustomMemo)
|
||||||
|
public
|
||||||
|
class procedure InjectCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
|
||||||
published
|
published
|
||||||
{ class function CreateHandle(const AWinControl: TWinControl;
|
// TWSWinControl
|
||||||
|
class function CreateHandle(const AWinControl: TWinControl;
|
||||||
const AParams: TCreateParams): HWND; override;
|
const AParams: TCreateParams): HWND; override;
|
||||||
|
class procedure DestroyHandle(const AWinControl: TWinControl); override;
|
||||||
|
|
||||||
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); override;
|
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); override;
|
||||||
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
|
class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override;
|
||||||
class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
|
class procedure FreeStrings(var AStrings: TStrings); override;
|
||||||
|
{ class procedure SetAlignment(const ACustomEdit: TCustomEdit; const AAlignment: TAlignment); override;
|
||||||
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override;
|
class procedure SetScrollbars(const ACustomMemo: TCustomMemo; const NewScrollbars: TScrollStyle); override;
|
||||||
class procedure SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); override;
|
class procedure SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); override;
|
||||||
class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override;
|
class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override;
|
||||||
class procedure SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); override;}
|
class procedure SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); override;}
|
||||||
|
class procedure ShowHide(const AWinControl: TWinControl); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCDWSEdit }
|
{ TCDWSEdit }
|
||||||
@ -338,6 +345,62 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
{ TCDWSCustomMemo }
|
||||||
|
|
||||||
|
class procedure TCDWSCustomMemo.InjectCDControl(const AWinControl: TWinControl;
|
||||||
|
var ACDControlField: TCDControl);
|
||||||
|
begin
|
||||||
|
TCDIntfEdit(ACDControlField).LCLControl := TCustomEdit(AWinControl);
|
||||||
|
TCDIntfEdit(ACDControlField).MultiLine := True;
|
||||||
|
ACDControlField.Caption := AWinControl.Caption;
|
||||||
|
ACDControlField.Parent := AWinControl;
|
||||||
|
ACDControlField.Align := alClient;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TCDWSCustomMemo.CreateHandle(const AWinControl: TWinControl;
|
||||||
|
const AParams: TCreateParams): HWND;
|
||||||
|
var
|
||||||
|
lCDWinControl: TCDWinControl;
|
||||||
|
begin
|
||||||
|
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
|
||||||
|
lCDWinControl := TCDWinControl(Result);
|
||||||
|
lCDWinControl.CDControl := TCDIntfEdit.Create(AWinControl);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class procedure TCDWSCustomMemo.DestroyHandle(const AWinControl: TWinControl);
|
||||||
|
var
|
||||||
|
lCDWinControl: TCDWinControl;
|
||||||
|
begin
|
||||||
|
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||||
|
lCDWinControl.CDControl.Free;
|
||||||
|
lCDWinControl.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class procedure TCDWSCustomMemo.AppendText(const ACustomMemo: TCustomMemo;
|
||||||
|
const AText: string);
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TCDWSCustomMemo.GetStrings(const ACustomMemo: TCustomMemo): TStrings;
|
||||||
|
var
|
||||||
|
lCDWinControl: TCDWinControl;
|
||||||
|
begin
|
||||||
|
lCDWinControl := TCDWinControl(ACustomMemo.Handle);
|
||||||
|
if lCDWinControl.CDControl = nil then Exit;
|
||||||
|
Result := TCDIntfEdit(lCDWinControl.CDControl).Lines;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class procedure TCDWSCustomMemo.FreeStrings(var AStrings: TStrings);
|
||||||
|
begin
|
||||||
|
// Don't free it in the WS!
|
||||||
|
end;
|
||||||
|
|
||||||
|
class procedure TCDWSCustomMemo.ShowHide(const AWinControl: TWinControl);
|
||||||
|
begin
|
||||||
|
inherited ShowHide(AWinControl);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TCDWSScrollBar }
|
{ TCDWSScrollBar }
|
||||||
|
|
||||||
class procedure TCDWSScrollBar.InjectCDControl(const AWinControl: TWinControl;
|
class procedure TCDWSScrollBar.InjectCDControl(const AWinControl: TWinControl;
|
||||||
@ -1263,7 +1326,7 @@ begin
|
|||||||
Result := False;
|
Result := False;
|
||||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||||
if lCDWinControl.CDControl = nil then Exit;
|
if lCDWinControl.CDControl = nil then Exit;
|
||||||
AText := TCDIntfEdit(lCDWinControl.CDControl).Text;
|
AText := TCDIntfEdit(lCDWinControl.CDControl).Lines.Text;
|
||||||
//DebugLn('[TCDWSCustomEdit.GetText] AWinControl=' + AWinControl.Name + ' AText='+AText);
|
//DebugLn('[TCDWSCustomEdit.GetText] AWinControl=' + AWinControl.Name + ' AText='+AText);
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
@ -1275,7 +1338,7 @@ var
|
|||||||
begin
|
begin
|
||||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||||
if lCDWinControl.CDControl = nil then Exit;
|
if lCDWinControl.CDControl = nil then Exit;
|
||||||
TCDIntfEdit(lCDWinControl.CDControl).Text := AText;
|
TCDIntfEdit(lCDWinControl.CDControl).Lines.Text := AText;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class procedure TCDWSCustomEdit.ShowHide(const AWinControl: TWinControl);
|
class procedure TCDWSCustomEdit.ShowHide(const AWinControl: TWinControl);
|
||||||
|
Loading…
Reference in New Issue
Block a user