![]() |
Autovervollständigung im StringGrid
Autovervollständigung im StringGrid
Bestimmte Zellen sollen mit einer Autovervollständigung versehen werden. AutoCompleteItems enthält die entsprechenden Wörter. Soll keine Vervollständigung stattfinden, wird die Liste im Hauptprogramm über SelectCell geleert. Beispiel: if (ACol = 2) then AutoCompleteItems.Load... else AutoCompleteItems.Clear; Um an den integrierten Editor heranzukommen und auch Änderungen am StringGrid vorzunehmen, wurde eine entsprechende Komponente entwickelt. Nun mein Problem: Bei der Eingabe im StringGrid erfolgt keine Vervollständigung, erst wenn ich die Zelle erneut mit Enter selektiere klappt's. Hier die wichtigsten Codefetzen aus der Kombo:
Delphi-Quellcode:
Ich bin über jeden Tipp dankbar! RoGa
...
type TRGSInplaceEdit = class(TInplaceEdit) private protected public published end; TRGSStringGrid = class(TStringGrid) private ... FAutoComplete: Boolean; FAutoCompleteItems: TStringList; ... procedure SetAutoCompleteItems(Value: TStringList); procedure EditorAutoComplete; protected function CreateEditor: TInplaceEdit; override; procedure EditorChange(Sender: TObject); procedure EditorKeyPress(Sender: TObject; var Key: Char); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; ... published ... property AutoCompleteItems: TStringList read FAutoCompleteItems write SetAutoCompleteItems; end; ... implementation (*************************************) constructor TRGSStringGrid.Create(AOwner: TComponent); begin inherited; ... FAutoComplete := False; FAutoCompleteItems := TStringList.Create; end; (*************************************) destructor TRGSStringGrid.Destroy; begin FAutoCompleteItems.Free; inherited; end; (*************************************) procedure TRGSStringGrid.SetAutoCompleteItems(Value: TStringList); begin FAutoCompleteItems.Assign(Value); end; (*************************************) procedure TRGSStringGrid.EditorAutoComplete; var i, StartPos: Integer; begin for i := 0 to FAutoCompleteItems.Count -1 do begin with TRGSInplaceEdit(InplaceEditor) do begin if (EditText = '') or (LowerCase(FAutoCompleteItems.Strings[i]) = LowerCase(EditText)) then exit; if StrLComp(PChar(LowerCase(FAutoCompleteItems.Strings[i])), PChar(LowerCase(EditText)), Length(EditText)) = 0 then begin StartPos := Length(EditText); EditText := EditText + Copy(FAutoCompleteItems.Strings[i], StartPos + 1, Length(FAutoCompleteItems.Strings[i])); SelStart := StartPos; SelLength := Length(EditText) - StartPos; exit; end; end; end; end; (*************************************) procedure TRGSStringGrid.EditorChange(Sender: TObject); begin if (FAutoCompleteItems.Count > 0) and FAutoComplete then EditorAutoComplete; end; (*************************************) procedure TRGSStringGrid.EditorKeyPress(Sender: TObject; var Key: Char); begin FAutoComplete := (FAutoCompleteItems.Count > 0) and not (Key in NAC); end; (*************************************) function TRGSStringGrid.CreateEditor: TInplaceEdit; begin Result := TRGSInplaceEdit.Create(Self); UpdateEditor(Result); //------------------------------------ TRGSInplaceEdit(Result).OnChange := EditorChange; TRGSInplaceEdit(Result).OnKeyPress := EditorKeyPress; end; ... Das Aufsetzen von Editfeldern oder Comboboxen wollte ich möglichst vermeiden. |
Re: Autovervollständigung im StringGrid
Habe die Textvervollständigung jetzt über StringGrid.KeyUp gelöst. Ist zwar nicht wie geplant, aber vorerst muss es genügen - es wird nur nach dem ersten Buchstaben ergänzt, also keine richtige Vervollständigung wie man es bzw. von Excel gewohnt ist. Schade...
RoGa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz