LCL: Respect ReadOnly property in TDBLookupComboBox and TDBLookupListBox. Issue #32408, patch from Michal Gawrycki.

git-svn-id: trunk@55911 -
This commit is contained in:
juha 2017-09-24 09:27:53 +00:00
parent 18d11b50a2
commit 8e708aabea
3 changed files with 31 additions and 4 deletions

View File

@ -802,6 +802,7 @@ Type
procedure InitializeWnd; override;
procedure DestroyWnd; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override;
procedure Loaded; override;
procedure UpdateData(Sender: TObject); override;
procedure DataChange(Sender: TObject); override;

View File

@ -66,8 +66,22 @@ end;
procedure TDBLookupComboBox.Select;
begin
FDataLink.Modified;
inherited Select;
FDataLink.OnDataChange := nil;
try
if FDataLink.Edit then
begin
FDataLink.UpdateData;
inherited Select;
end
else
begin
// if cannot modify, let it reset
FDatalink.Reset;
DataChange(Self);
end;
finally
FDataLink.OnDataChange := @DataChange;
end;
end;
procedure TDBLookupComboBox.KeyDown(var Key: Word; Shift: TShiftState);
@ -81,6 +95,13 @@ begin
inherited KeyDown(Key, Shift);
end;
procedure TDBLookupComboBox.UTF8KeyPress(var UTF8Key: TUTF8Char);
begin
if not FDataLink.CanModify then
UTF8Key := '';
inherited UTF8KeyPress(UTF8Key);
end;
procedure TDBLookupComboBox.Loaded;
begin
inherited Loaded;

View File

@ -55,8 +55,13 @@ procedure TDBLookupListBox.DoSelectionChange(User: Boolean);
begin
if User then
begin
FDataLink.Modified;
FDataLink.UpdateRecord;
if FDataLink.CanModify then
begin
FDataLink.Modified;
FDataLink.UpdateRecord;
end
else
DataChange(Self);
end;
inherited DoSelectionChange(User);
end;