Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit der abfrage der ENTER taste (https://www.delphipraxis.net/132237-problem-mit-der-abfrage-der-enter-taste.html)

Countdown2000 8. Apr 2009 12:12


Problem mit der abfrage der ENTER taste
 
Damit ich durch ENTER die eingabe bestätigen und gleich Speichern kann
habe ich das in mein Program mit folgendem Code eingeben: :coder2:

procedure TForm3.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
if DBEdit1.Text = '' then
begin
DBedit5.Text := 'Nein' ;
Checkbox1.state := cbunchecked;
form1.DBGrid1.Enabled := true;
Form1.Table1.Refresh;
table1.Refresh;
Form1.Enabled := false;
button6.Enabled := false
end;
if DBEdit1.Text <> '' then
begin
table1.Post; // Speichern
form1.DBGrid1.Enabled := true;
Form1.Table1.Refresh;
table1.Refresh;
Form1.Enabled := false;
button6.Enabled := false;
end;
end;
end;

die #13 stand in meinem Delphi buch als ersatz für die ENTER taste ! :warn:

aber es scheint immernoch jede taste zu wählen als ob er die angabe der ENTER taste überspringt !

Wie bekomme ich das jetzt hin das es richtig Funktioniert ? :glaskugel:

p80286 8. Apr 2009 12:27

Re: Problem mit der abfrage der ENTER taste
 
Hallo Countdown2000,

zunächst wäre es ganz schön wenn du deinen Sourcetext etwas formatieren würdest, dann fällt es etwas leichter evtl. Fehler zu finden.

ausserdem finde ich Deinen "Speichercode" nicht.

Gruß
K-H

Countdown2000 8. Apr 2009 12:38

Re: Problem mit der abfrage der ENTER taste
 
So besser ?
ich Speicher durch Table1.Post; !

Delphi-Quellcode:
procedure TForm3.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if key = #13 then
  begin
   if DBEdit1.Text = '' then
    begin
     DBedit5.Text := 'Nein' ;
     Checkbox1.state := cbunchecked;
     form1.DBGrid1.Enabled := true;
     Form1.Table1.Refresh;
     table1.Refresh;
     Form1.Enabled := false;
     button6.Enabled := false
    end;
   if DBEdit1.Text <> '' then
    begin
     table1.Post;                    // Speichern
     form1.DBGrid1.Enabled := true;
     Form1.Table1.Refresh;
     table1.Refresh;
     Form1.Enabled := false;
     button6.Enabled := false;
    end;
  end;
end;

Countdown2000 8. Apr 2009 12:43

Re: Problem mit der abfrage der ENTER taste
 
Wer noch andere sachen an meinem code auszusetzten hat kann sie ruhig posten !

Dies ist Form3 meines Programms wo auch der fehler auftritt


Delphi-Quellcode:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    Button1: TButton;
    Table1: TTable;
    DataSource1: TDataSource;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Image1: TImage;
    Button7: TButton;
    GroupBox1: TGroupBox;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    GroupBox2: TGroupBox;
    CheckBox1: TCheckBox;
    DBEdit1: TDBEdit;
    Label1: TLabel;
    Label5: TLabel;
    DBEdit5: TDBEdit;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBEdit5Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var  arr:array of Integer;
      max, min: Integer;
      av: Double;
  Form3: TForm3;

implementation

uses Unit1, Unit2;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
Form1.show ;                       // zeige das hauptfenster
 Form1.Table1.Refresh;              // aktuellesiere es
  form1.DBgrid1.Enabled := true;
 form1.button1.Enabled := true;
 form1.button2.Enabled := true;
 form1.button3.Enabled := true;
 form1.button4.Enabled := true;
 Form1.WindowState := wsnormal;
 form1.Enabled := true;
 Form3.Close ;
 button6.Enabled := false;

end;

procedure TForm3.CheckBox1Click(Sender: TObject);
begin
if checkbox1.State = cbUnchecked then
 begin
 DBEdit5.Text := 'Nein';
 dbedit1.Enabled := false;
 dbedit1.Color := clscrollbar;
 DBedit1.Clear;
 Button6.Enabled := true;
 end;

if checkbox1.State = cbChecked then
 begin
  DBedit1.Enabled := true;
  DbEdit1.Color := clWindow;
  DBEdit5.Text := 'Ja';
  Button6.Enabled := false;
 end;
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
 table1.First;                     // zum ersten eintrag

 button5.Enabled := true;
 button4.Enabled := true;
 button2.Enabled := false;
 button3.Enabled := false;

 table1.Refresh;
end;

procedure TForm3.Button3Click(Sender: TObject);
begin
 table1.Prior ;                     // zum vorherigen eintrag

 Button4.Enabled := true;
 button5.Enabled := true;

 if table1.Bof then
  begin
   button2.Enabled:= false ;
   button3.Enabled:= false ;
  end;

 table1.Refresh;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
 table1.Next;                      // zum nexten eintrag

 Button2.Enabled := true;
 Button3.Enabled := true;

 if table1.Eof then
  begin
   button5.Enabled := false;
   button4.Enabled := false;
  end;

 table1.Refresh;
end;

procedure TForm3.Button5Click(Sender: TObject);
begin
 table1.Last;                     // zum letzten eintrag

 button2.Enabled := true;
 button3.Enabled := true;
 Button5.Enabled := false;
 Button4.Enabled := false;

 table1.Refresh;
end;

procedure TForm3.Button6Click(Sender: TObject);
begin
 table1.Post;                      // Speichern
 form1.DBGrid1.Enabled := true;
 Form1.Table1.Refresh;
 table1.Refresh;
 Form1.Enabled := false;
 button6.Enabled := false;
end;

procedure TForm3.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
 begin
  if DBEdit1.Text = '' then
   begin
    DBedit5.Text := 'Nein' ;
    Checkbox1.state := cbunchecked;
    form1.DBGrid1.Enabled := true;
    Form1.Table1.Refresh;
    table1.Refresh;
    Form1.Enabled := false;
    button6.Enabled := false
   end;
  if DBEdit1.Text <> '' then
   begin
    table1.Post;                      // Speichern
    form1.DBGrid1.Enabled := true;
    Form1.Table1.Refresh;
    table1.Refresh;
    Form1.Enabled := false;
    button6.Enabled := false;
   end;
 end;
end;

procedure TForm3.Button7Click(Sender: TObject);
begin
Form1.WindowState := wsminimized;
Form3.WindowState := wsminimized
end;


procedure TForm3.FormCreate(Sender: TObject);
begin
  Table1.Refresh;
end;



procedure TForm3.DBEdit5Change(Sender: TObject);
begin
if DBEdit5.Text = 'Nein' then
 Begin
  if checkbox1.State = cbchecked then
   begin
    checkbox1.State := cbunchecked;
   end;
 end;
if DBEdit5.Text = 'Ja' then
 Begin
  if Checkbox1.state = cbunchecked then
   begin
    checkbox1.State := cbchecked;
   end;
 end;
end;

end.

Sherlock 8. Apr 2009 12:45

Re: Problem mit der abfrage der ENTER taste
 
Ich weiss ja nicht genau wie das mit TTables so funktioniert, aber kann es sein, daß man irgendwo noch ein Commit absetzen muss? Oder hast Du ein OnPostCommit, das Du auf True setzen kannst?

Sherlock

p80286 8. Apr 2009 13:12

Re: Problem mit der abfrage der ENTER taste
 
Hallo Countdown2000,

zunächst einmam sehe ich keinen Grund warum das nicht so funktionieren sollte wie Du das beschrieben hast.
über Key=#13 sollte es wirklich so funktionieren wie Du es beschrieben hast.
zunächst könntest Du versuchen mit z.B.

Delphi-Quellcode:
  if Key=#13 then
    showmessage('Taste='+inttohex(ord(key),2);
festzustellen ob Deine Speicherprocedure wirklich bei jedem Tastendruck angesprungen wird.

Ausserdem sollen F7/F8 extrem hilfreich sein um solchen Problemen auf die Spur zu kommen.

Gruß
K-H

Sven M. 8. Apr 2009 13:24

Re: Problem mit der abfrage der ENTER taste
 
Macht es hier einen Unterschied ob man auf #13 oder VK_RETURN abfragt?

Cicaro 8. Apr 2009 14:27

Re: Problem mit der abfrage der ENTER taste
 
Zitat:

Zitat von Countdown2000
aber es scheint immernoch jede taste zu wählen als ob er die angabe der ENTER taste überspringt !

Deine Prüfung der Taste und das hier funktioniert beides einwandfrei:
Delphi-Quellcode:
if (Key = Char(VK_RETURN)) then
    begin
      // ...
    end;
Die Ursache für dein Problem könnte sein, dass du den Text von DBEdit1 nicht löschst. (Falls ich es übersehen hab oder es gar nicht notwendig ist, sorry)

GHorn 8. Apr 2009 14:39

Re: Problem mit der abfrage der ENTER taste
 
Ich würde das nicht im Key-Press machen, sondern im
Key-Up. Dann gibt's kein "Tastenprellen".

Ein
if Ord(Key) = VK_RETURN then

sollte klappen.

Gruß


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