ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/ibcontrols/IBLookupComboEditBox.pas
(Generate patch)

Comparing ibx/trunk/ibcontrols/IBLookupComboEditBox.pas (file contents):
Revision 209 by tony, Wed Mar 14 12:48:51 2018 UTC vs.
Revision 225 by tony, Tue Apr 3 09:09:05 2018 UTC

# Line 31 | Line 31 | interface
31  
32   uses
33    Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DbCtrls,
34 <  ExtCtrls, IBSQLParser, DB, StdCtrls, IBCustomDataSet, LCLVersion;
34 >  ExtCtrls, IBSQLParser, DB, StdCtrls, IBCustomDataSet;
35  
36   type
37  
# Line 77 | Line 77 | type
77  
78    TIBLookupComboEditBox = class(TDBLookupComboBox)
79    private
80    FCanAutoInsert: TCanAutoInsert;
80      { Private declarations }
81      FDataLink: TIBLookupComboDataLink;
82      FIBLookupControlLink: TIBLookupControlLink;
# Line 148 | Line 147 | type
147  
148   implementation
149  
150 < uses IBQuery, LCLType, Variants, LCLProc, LazUTF8;
150 > uses LCLType, Variants, LCLProc, LazUTF8;
151  
152   { TIBLookupControlLink }
153  
# Line 196 | Line 195 | end;
195   { TIBLookupComboEditBox }
196  
197   procedure TIBLookupComboEditBox.HandleTimer(Sender: TObject);
199 var ActiveState: boolean;
198   begin
199    FTimer.Interval := 0;
200    FFiltered := Text <> '';
# Line 347 | Line 345 | begin
345               sCompleteText := ListSource.DataSet.FieldByName(ListField).AsString;
346               if (sCompleteText <> FCurText) then
347               begin
348 +               KeyValue := ListSource.DataSet.FieldByName(KeyField).AsVariant;
349                 sResultText := sCompleteText;
350                 if ((cbactEndOfLineComplete in AutoCompleteText) and
351                           (cbactRetainPrefixCase in AutoCompleteText)) then
# Line 356 | Line 355 | begin
355                 end;
356                 Text := sResultText;
357                 SelStart := iSelStart;
358 <               SelLength := UTF8Length(Text);
358 >               SelLength := UTF8Length(Text) - iSelStart;
359               end;
361             KeyValue := ListSource.DataSet.FieldByName(KeyField).AsVariant;
360             end
361             else
362             begin
# Line 514 | Line 512 | begin
512      SelectAll;
513    end
514    else
515 +  if AutoComplete and (Style <> csDropDownList) then
516    begin
517 <    FTimer.Interval := 0;
518 <    if (IsEditableTextKey(Key) or (Key = VK_BACK))
519 <       and AutoComplete and (Style <> csDropDownList) and
520 <       (not (cbactEndOfLineComplete in AutoCompleteText) or (SelStart = UTF8Length(Text))) then
517 >    if (Key = VK_BACK) or (Key = VK_DELETE) then
518 >    begin
519 >      if SelStart = 0 then
520 >      begin
521 >        SelStart := UTF8Length(Text);
522 >        SelLength := 0;
523 >      end;
524 >      FTimer.Interval := 0;
525 >    end
526 >    else
527 >    if IsEditableTextKey(Key) and
528 >     (not(cbactEndOfLineComplete in AutoCompleteText) or (SelStart = UTF8Length(Text))) then
529 >    begin
530 >      FTimer.Interval := 0;
531        FTimer.Interval := FKeyPressInterval;
532 +    end;
533    end;
534   end;
535  
# Line 539 | Line 549 | end;
549  
550   procedure TIBLookupComboEditBox.SetItemIndex(const Val: integer);
551   begin
552 +  if Val > 0 then
553 +    FCurText := '';
554    inherited SetItemIndex(Val);
555    FLastKeyValue := KeyValue;
556   end;
# Line 564 | Line 576 | end;
576   procedure TIBLookupComboEditBox.UpdateData(Sender: TObject);
577   begin
578    inherited UpdateData(Sender);
579 +  if FCurText <> '' then
580 +    Text := FCurText + Text;
581    FModified := false;
582   end;
583  
# Line 599 | Line 613 | begin
613      FForceAutoComplete := false;
614    end;
615    CheckAndInsert;
616 +  FCurText := '';
617    if FModified then
618      Change; {ensure Update}
619    inherited EditingDone;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines