Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - einen Button die Eingabe-Taste zu ordnen


fuman - Do 11.09.08 21:18
Titel: einen Button die Eingabe-Taste zu ordnen
Also....
ich habe mir in Delphi ein Programm gebastelt das, das Volumen und die Oberfläche anhand der Kantenlänge (die in Edit1 eingegeben werden muss) erechnen soll, dies passiert bei einem Klick auf einen Button.
gut..alles okay bis hier hin...
nun möchte ich aber das nachdem man in Edit1 die Kantenlänge eingibt nur dürch drücken der Eingabe-Taste der Berechnen Button geklickt wird.
Sodass man quasi nur das programm öffnen muss. Mit Form1.Edit1.SetFocus hab ich den Curser direkt auf Edit1 und muss nur die Zahl eingeben und auf die Eingabetaste drücken (das ist meine frage wie mach ich dass mit der eingabetaste)??

anbei mein quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Panel1: TPanel;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    Label3: TLabel;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  kantenlaenge, oberflaeche, volumen : DOUBLE;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Edit1.Clear;
Form1.Label1.Caption := '';;
Form1.Label2.Caption := '';
kantenlaenge := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//eingabe
kantenlaenge := StrToFloat(Form1.Edit1.Text);
//verarbeitung
oberflaeche := kantenlaenge * kantenlaenge * 6;
volumen := kantenlaenge * kantenlaenge * kantenlaenge;
//ausgabe
Form1.Label1.Caption := FloatToStr(oberflaeche);
Form1.Label2.Caption := FloatToStr(volumen);
if volumen > 3375 then showMessage('Das ist ein sehr großer Würfel');
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
Form1.Edit1.SetFocus;
end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Calculon - Do 11.09.08 21:29

Im Objectinspector findest du für dein Edit Feld das Ereignis OnKeyPress. In dieses Ereignis schreibst du dann:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    begin
      Key := #0;
      Berechne; // ich würde deine Rechenprozedur auslagern evtl. als function (*)
    end;
end;


Gruß
--


fuman - Fr 12.09.08 06:23

vielen dank schonmal aber bei mir kommt immer noch eine Fehlermeldung...
und zwar bei " Berechne; "
[Fehler] Unit1.pas(77): Undefinierter Bezeichner: 'Berechne'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

bitte um hilfe....


<TargeT> - Fr 12.09.08 06:45

user profile iconfuman hat folgendes geschrieben:
vielen dank schonmal aber bei mir kommt immer noch eine Fehlermeldung...
und zwar bei " Berechne; "
[Fehler] Unit1.pas(77): Undefinierter Bezeichner: 'Berechne'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

bitte um hilfe....


"Berechne" steht hier stellvertretend für deine Rechen Procedure.
Ersetz "Berechne" einfach durch den Inhalt von Button1Click.
Oder du ersetzt "Berechne" durch Button1.Click; .


alzaimar - Fr 12.09.08 07:06

Wozu das KeyPress-Gedöns? Es reicht, den Button als 'Default' zu deklarieren.

Delphi-Quelltext
1:
Button.Default := True;                    

Dann bekommt er einen fetten Rahmen und man sieht gleich, das das der Button ist, der auf ENTER/RETURN reagiert.

Dann gibt es noch die Eigenschaft 'Button.Cancel'. Die steuert, ob der Button auf ESC reagieren soll.


Calculon - Fr 12.09.08 08:51

user profile iconalzaimar hat folgendes geschrieben:
Wozu das KeyPress-Gedöns? [..]

Es hat sich bei mir v.a. im Zusammenhang mit Edits immer bewährt...

Gruß
--


freak4fun - Fr 12.09.08 11:35

Du solltest dir vielleicht angewöhnen Functionen/Prozeduren zu schreiben die du mit Hilfe der Controls aufrufst und nicht alles in die Control-Methoden schreiben. ;)


BenBE - Sa 13.09.08 10:10

Zudem reicht für das Zuordnen der Enter-Taste Default := True; vollkommen aus ...


fuman - Di 16.09.08 17:13

Danke!!
hat alles geklappt :)...
ja mit den proceduren sollt ich mal Anfangen.
ich mach am besten mal ein neues Thema auf.