Delphi - Use enter as tab
- Date:
- Author: Stefan Cruysberghs
- Deze pagina is enkel in het Engels beschikbaar
In formulieren waar er veel invoer via het toetsenbord gebeurd (bv. database toepassingen) is het gemakkelijk als je via de Enter-toets naar het volgende besturingselement kan springen. In Windows kan dit standaard via de Tab-toets gebeuren, maar gemakkelijker is eigenlijk de Enter-toets. Er mag dan natuurlijk geen default-button zijn want deze reageert altijd op de Enter-toets.
Eerst dien je de property KeyPreview van je form op True te zetten. Hierdoor zal bij het indrukken van een toets eerst de toetsenbord-events van het form afgehandeld worden. In de event KeyPress moet je dan controleren of de Enter-toets is gedrukt en dan naar het volgende besturingselement springen. Dit kan op 2 manieren.
Voorbeeld
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
// of SelectNext(ActiveControl as TWinControl, True, True);
end;
end;
Als je hetzelfde wil toepassen bij een DBGrid dan kan je bovenstaande routine nog wat uitbreiden. In de property SelectedIndex wordt de nummer van de actieve kolom bijgehouden. Deze dien je dan gewoon te verhogen.
Onderstaande procedure kan je aanspreken vanuit elke KeyPress-event van elk formulier.
Voorbeeld
procedure NextControl(CurrentForm : TForm; Key : Char);
begin
// KeyPreview : True
// vb. KeyPressed van Form
// Control(Form1,Key);
with CurrentForm do
begin
// enter
if Key = #13 then
begin
// geen TDBGrid maar wel gewone control
if not (ActiveControl is TDBGrid) then
begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end
else
begin
if (ActiveControl is TDBGrid) then
begin
with TDBGrid(ActiveControl) do
begin
// Actief veld verhogen
if SelectedIndex < (FieldCount -1) then
SelectedIndex := SelectedIndex + 1
else
SelectedIndex := 0;
end;
end;
end;
end;
end;
end;