mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 04:18:48 +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
|
||||
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);
|
||||
lTextBottomSpacing := GetMeasures(TCDEDIT_BOTTOM_TEXT_SPACING);
|
||||
lTextTopSpacing := GetMeasures(TCDEDIT_TOP_TEXT_SPACING);
|
||||
|
@ -1496,6 +1496,7 @@ begin
|
||||
// Impose limits in the caret too
|
||||
FEditState.CaretPos.X := Min(FEditState.CaretPos.X, UTF8Length(lLineText));
|
||||
FEditState.CaretPos.Y := Min(FEditState.CaretPos.Y, FEditState.Lines.Count-1);
|
||||
FEditState.CaretPos.Y := Max(FEditState.CaretPos.Y, 0);
|
||||
end;
|
||||
|
||||
// Result.X -> returns a zero-based position of the caret
|
||||
@ -1516,6 +1517,7 @@ begin
|
||||
if Result.Y < 0 then
|
||||
begin
|
||||
Result.X := 1;
|
||||
Result.Y := 0;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
@ -1903,12 +1905,22 @@ end;
|
||||
|
||||
function TCDEdit.GetCurrentLine: string;
|
||||
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;
|
||||
|
||||
procedure TCDEdit.SetCurrentLine(AStr: string);
|
||||
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;
|
||||
|
||||
{ TCDCheckBox }
|
||||
|
@ -297,8 +297,8 @@ end;
|
||||
|
||||
function RegisterCustomMemo: Boolean; alias : 'WSRegisterCustomMemo';
|
||||
begin
|
||||
// RegisterWSComponent(TCustomMemo, TWinCEWSCustomMemo);
|
||||
Result := False;
|
||||
RegisterWSComponent(TCustomMemo, TCDWSCustomMemo);
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function RegisterButtonControl: Boolean; alias : 'WSRegisterButtonControl';
|
||||
|
@ -212,16 +212,23 @@ type
|
||||
{ TCDWSCustomMemo }
|
||||
|
||||
TCDWSCustomMemo = class(TWSCustomMemo)
|
||||
public
|
||||
class procedure InjectCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
|
||||
published
|
||||
{ class function CreateHandle(const AWinControl: TWinControl;
|
||||
// TWSWinControl
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): HWND; override;
|
||||
class procedure DestroyHandle(const AWinControl: TWinControl); override;
|
||||
|
||||
class procedure AppendText(const ACustomMemo: TCustomMemo; const AText: string); 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 SetWantReturns(const ACustomMemo: TCustomMemo; const NewWantReturns: boolean); override;
|
||||
class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override;
|
||||
class procedure SetWordWrap(const ACustomMemo: TCustomMemo; const NewWordWrap: boolean); override;}
|
||||
class procedure ShowHide(const AWinControl: TWinControl); override;
|
||||
end;
|
||||
|
||||
{ TCDWSEdit }
|
||||
@ -338,6 +345,62 @@ type
|
||||
|
||||
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 }
|
||||
|
||||
class procedure TCDWSScrollBar.InjectCDControl(const AWinControl: TWinControl;
|
||||
@ -1263,7 +1326,7 @@ begin
|
||||
Result := False;
|
||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||
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);
|
||||
Result := True;
|
||||
end;
|
||||
@ -1275,7 +1338,7 @@ var
|
||||
begin
|
||||
lCDWinControl := TCDWinControl(AWinControl.Handle);
|
||||
if lCDWinControl.CDControl = nil then Exit;
|
||||
TCDIntfEdit(lCDWinControl.CDControl).Text := AText;
|
||||
TCDIntfEdit(lCDWinControl.CDControl).Lines.Text := AText;
|
||||
end;
|
||||
|
||||
class procedure TCDWSCustomEdit.ShowHide(const AWinControl: TWinControl);
|
||||
|
Loading…
Reference in New Issue
Block a user