AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Autovervollständigung im StringGrid

Ein Thema von roga · begonnen am 22. Sep 2008 · letzter Beitrag vom 23. Sep 2008
Antwort Antwort
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#1

Autovervollständigung im StringGrid

  Alt 22. Sep 2008, 23:06
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:
...

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;

...
Ich bin über jeden Tipp dankbar! RoGa

Das Aufsetzen von Editfeldern oder Comboboxen wollte ich möglichst vermeiden.
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#2

Re: Autovervollständigung im StringGrid

  Alt 23. Sep 2008, 17:30
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
Ronald
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz