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:
sekelsenmat 2012-04-20 14:35:33 +00:00
parent eb613379a2
commit 9b1fbde31c
4 changed files with 85 additions and 9 deletions

View File

@ -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);

View File

@ -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 }

View File

@ -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';

View File

@ -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);