Nieuws
Foto's
Artikelen
Componenten
Applicaties
Kleinkunst

Delphi - Enter als tab gebruiken

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;