From af653f96cb8fb53f8854ca88bcaa02697e47a328 Mon Sep 17 00:00:00 2001 From: juha Date: Sun, 25 Nov 2018 11:27:47 +0000 Subject: [PATCH] LCL: Support autocompletion in TComboBox for single-letter text, too. Issue #34566, patch from Serge Anvarov. git-svn-id: trunk@59651 - --- lcl/include/customcombobox.inc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lcl/include/customcombobox.inc b/lcl/include/customcombobox.inc index bd99995d42..b0070b4dd7 100644 --- a/lcl/include/customcombobox.inc +++ b/lcl/include/customcombobox.inc @@ -545,6 +545,7 @@ procedure TCustomComboBox.KeyUp(var Key: Word; Shift: TShiftState); var iSelStart: Integer; // char position sCompleteText, sPrefixText, sResultText: string; + Utf8TextLen: Integer; begin if DroppingDown then begin @@ -576,23 +577,25 @@ begin iSelStart := SelStart;//Capture original cursor position //DebugLn(['TCustomComboBox.UTF8KeyPress SelStart=',SelStart,' Text=',Text]); //End of line completion - if ((iSelStart < UTF8Length(Text)) and - (cbactEndOfLineComplete in FAutoCompleteText)) then + Utf8TextLen := UTF8Length(Text); + if (iSelStart < Utf8TextLen) and (cbactEndOfLineComplete in FAutoCompleteText) then Exit; sPrefixText := UTF8Copy(Text, 1, iSelStart); sCompleteText := GetCompleteText(Text, iSelStart, - (cbactSearchCaseSensitive in FAutoCompleteText), - (cbactSearchAscending in FAutoCompleteText), Items); + cbactSearchCaseSensitive in FAutoCompleteText, + cbactSearchAscending in FAutoCompleteText, Items); //DebugLn(['TCustomComboBox.UTF8KeyPress sCompleteText=',sCompleteText,' Text=',Text]); - if (sCompleteText <> Text) then + if (sCompleteText <> Text) or (Utf8TextLen = 1) then begin sResultText := sCompleteText; - if ((cbactEndOfLineComplete in FAutoCompleteText) and - (cbactRetainPrefixCase in FAutoCompleteText)) then - begin//Retain Prefix Character cases + if (cbactEndOfLineComplete in FAutoCompleteText) + and (cbactRetainPrefixCase in FAutoCompleteText) then + begin //Retain Prefix Character cases UTF8Delete(sResultText, 1, iSelStart); UTF8Insert(sPrefixText, sResultText, 1); end; + if Utf8TextLen = 1 then + Text := ''; Text := sResultText; SelStart := iSelStart; SelLength := UTF8Length(Text); @@ -602,7 +605,6 @@ begin end; end; - procedure TCustomComboBox.UTF8KeyPress(var UTF8Key: TUTF8Char); begin //First invoke OnUtf8KeyPress, or else CharCase may be reverted again