Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [erledigt] Via Tastatur im Grid zu Datensatz springen (https://www.delphipraxis.net/169109-%5Berledigt%5D-via-tastatur-im-grid-zu-datensatz-springen.html)

Jumpy 29. Jun 2012 10:34

Datenbank: Oracle • Version: 10g • Zugriff über: ADO+ODBC

[erledigt] Via Tastatur im Grid zu Datensatz springen
 
Hallo,

ich hab ein DBGrid: Editing=false, RowSelect=true

Hat das DBGrid nun den Fokus, so möchte ich, wenn über die Tastatur etwas eingegeben wird, zu einem passenden Datensatz springen. Die Kollegen kennen das von einer Fremdsoftware und hätten das jetzt auch gern.

Gesucht werden soll dazu in der ersten Spalte (Name). Wird nun "P" eingegeben, so soll zum ersten Datensatz mit P gesprungen werden, werden schnell hintereinander mehrere Zeichen eingegeben, z.B. "Pet" wird dementsprechend zum ersten Datensatz mit "Pet", falls vorhanden gesprungen, ist PET... nich da dann PE... und wenn auch nicht da P...

Ich vermute ich muss ein OnKey benutzen und irgendwie auch einen Timer, um zwichen einer Taste und mehreren Tasten schnell hintereinander zu unterscheiden.

Nur wie genau, sollte ich das ab besten machen?
Und was mach ich dann wenn klar ist, dass ich z.B. nach 'Pet...' suchen muss? Locate braucht doch glaub ich ein komplettes Schlüsselfeld?



Edit: Wieso muss man 30 Sekunden warten, um einen neuen Beitrag zu erstellen, wenn der erste abgeleht wurde, weil man vergessen hat die Version einzutragen :?:

Jumpy 29. Jun 2012 11:03

AW: Via Tastatur im Grid zu Datensatz springen
 
Das schreiben hier hat scheinbar meine Gedanken geordnet. So funktionierts bisher:

Es braucht einen TTimer, nenne den KeyTimer.

Delphi-Quellcode:
//Globale private Variablen im Form:
KeyLock:Boolean;
KeyBuffer:String;

//Im OnCreate des Forms diese vorbelegen:
KeyLock:=false;
KeyBuffer:='';
KeyTimer.Enabled:=false;
KeyTimer.Interval:=250;

//Key-Press des Grids
procedure TMain.GridKeyPress(Sender: TObject; var Key: Char);
begin
  if not KeyLock then
    begin
    KeyTimer.Enabled:=false;
    KeyBuffer:=KeyBuffer+Key;
    KeyTimer.Enabled:=true;
    end;
end;

//Timer-Event:
procedure TMain.KeyTimerTimer(Sender: TObject);
begin
  KeyLock:=true;
  KeyTimer.Enabled:=false;
  while (KeyBuffer<>'') and not Quelle.Locate('Name',KeyBuffer,[loCaseInsensitive,loPartialKey]) do
    KeyBuffer:=Copy(KeyBuffer,1,Length(KeyBuffer)-1);
  KeyBuffer:='';
  KeyLock:=false;
end;
Wer Verbesserungsvorschläge hat oder andere Ideen, wie das gehen könnte, gerne her damit.

p80286 29. Jun 2012 11:10

AW: Via Tastatur im Grid zu Datensatz springen
 
Wie wäre es wenn Du Dich in der TComboBox bedienst?
ersetz .Text durch einen String und Du hast eine Basisfunktionalität, wobei der Fokus und die Keys natürlich in der richtigen Komponente landen müssen.

vergiss es !

Gruß
K-H

Hat der rote Kasten Urlaub?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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