21. april 2010 - 22:20 Der er 4 kommentarer og
1 løsning

Trap af TAB-koden ....

Hej,

Jeg har hårdt brug for at kunne fange TAB-og CR-koden ved input fra en DBEdit og en "almindelig" Edit.

I DBedit (og Edit) bruger jeg Edit1KeyPress - funktionen .

( Edit1KeyPress(Sender: TObject; var Key: Char); )

Edit1KeyPress giver mig variablen KEY, som jeg kan teste på:

IF (Key = #13) then
  BEGIN
      ShowMessage('Tillykke du fangede CR ');
  END;

Dette funker som en Drøm..

Gør jeg det samme med TAB (som er defineret som ASCII 09H (0X09)

IF (Key = #9) then
  ShowMessage('Tillykke du fangede TAB ');
  // gør noget andet ..

eller

IF (Key = #09) then
  ShowMessage('Tillykke du fangede TAB ');
  // gør noget andet

sker der intet.  Prøver jeg med VK_TAB får jeg fejl.

Samme problem ved onKeyDown og onKeyUp.


Prøver med If Ord(key) = 9  ingen virkning.

if (ord(key) = 13) virker perfekt.

Er der en systemopsætning jeg skal skifte ?

Eller er det bare sådan at Delphi-7 ikke kan trappe TAB-koden ?

Hilsen

Kristian
Avatar billede kroning Nybegynder
21. april 2010 - 23:22 #1
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    procedure TabKey( Var msg: TCMDialogKey ); message CM_DIALOGKEY;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TabKey(var msg: TCMDialogKey);
begin
  if msg.Charcode <> VK_TAB then
  inherited;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Key = VK_TAB then
        ShowMessage('Tillykke du fangede TAB ');
end;

end.
26. april 2010 - 14:01 #2
Hej,
Tak for koden.

Hvis du spør mig om det virker må jeg sige både ja og nej.

laver jeg et ny form med kun EEN EDIT virker det som en drøm. Men i min applikation med 22 DBedit's, 3 DBcombo's og 1 Edit virker det ikke, heller ikke hvis jeg reducerer det til hhv. 1 Dbedit og (senere) en "alm" edit.

(rekompilerer naturligvis efter ændringer... !)

KRISTIAN
Avatar billede kroning Nybegynder
26. april 2010 - 19:26 #3
Det virker fint her hvis der ændres lidt i koden.
Put if Key=VK_TAB... ind i formens OnKeyDown i stedet for, husk at sætte formens KeyPreview=true

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    DBEdit15: TDBEdit;
    DBEdit16: TDBEdit;
    DBEdit17: TDBEdit;
    DBEdit18: TDBEdit;
    DBEdit19: TDBEdit;
    DBEdit20: TDBEdit;
    DBComboBox1: TDBComboBox;
    DBComboBox2: TDBComboBox;
    DBComboBox3: TDBComboBox;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    procedure TabKey( Var msg: TCMDialogKey ); message CM_DIALOGKEY;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TabKey(var msg: TCMDialogKey);
begin
  if msg.Charcode <> VK_TAB then
  inherited;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Key = VK_TAB then
        ShowMessage('Tillykke du fangede TAB ');
end;

end.
Avatar billede kroning Nybegynder
26. april 2010 - 19:29 #4
Og husk at tildele formens OnKeyDown event en værdi i Object Inspector
18. september 2010 - 12:07 #5
Lukker linket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester