![]() |
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 :?: |
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:
Wer Verbesserungsvorschläge hat oder andere Ideen, wie das gehen könnte, gerne her damit.
//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; |
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 23:40 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