Entwickler-Ecke

Sonstiges (Delphi) - Text im Editfeld mit Entertaste bestätigen


marcelrusi - Mi 11.01.12 18:37
Titel: Text im Editfeld mit Entertaste bestätigen
Hallo Leute,

folgendes Problem :

Habe ein Programm erstellt, dass einen Ton abspielt, wenn im Editfeld '1' steht und einen anderen abspielt, wenn im Feld '10' steht. Leider wird bereits der Ton für '1' abgespielt, wenn ich die '10' eingeben will ( da man ja 1 zuerst eingibt ). Kann man das Programm so schreiben, dass der Ton erst gespielt wird, wenn die Eingabe mit z.b. der Entertaste bestätigt wird ?


HenryHux - Mi 11.01.12 18:46

Du kannst neben dem OnChange Ereignis auch das OnKey Ereignis wählen,
in dem kannst du dann z.B. so auf die Entertaste reagieren:

Delphi-Quelltext
1:
if key = VK_Return then ..                    


lg


marcelrusi - Mi 11.01.12 19:02

Danke schonmal aber kenn mich mit OnKey nicht so aus...


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = VK_Return then
 if Edit1.Text = '1' then
 PlaySound(PChar('1.wav'), hInstance, SND_ASYNC);...


ist jetzt mein Quellcode. Klappt aber nicht :P Bekomme den Fehler 'Inkompatible Typen'. Was muss ich ändern ?


HenryHux - Mi 11.01.12 19:13

Tut mir leid, habe mich nicht genau ausgedrückt.
Du benutzt das KeyPress Event, jedoch brauchst du das KeyDown Event für diese Methode.

lg :)


marcelrusi - Mi 11.01.12 19:25

Okay jetzt klappts schonma, dass der Ton gespielt wird, wenn ich Enter drücke, aber der Ton wird trotzdem noch während des Eingebens gespielt...


marcelrusi - Mi 11.01.12 19:31

Ich muss noch irgendwo else if ( also wenn enter nicht gedrückt wird ) einbringen oder ? aber wo ?


jaenicke - Mi 11.01.12 19:49

user profile iconmarcelrusi hat folgendes geschrieben Zum zitierten Posting springen:
Okay jetzt klappts schonma, dass der Ton gespielt wird, wenn ich Enter drücke, aber der Ton wird trotzdem noch während des Eingebens gespielt...
Wie sieht denn der Code aus?

Irgendetwas musst du machen, auch wenn nicht Enter gedrückt wurde, sonst würde das nicht passieren.


marcelrusi - Mi 11.01.12 19:57


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if key = VK_Return then
  if Edit1.Text = '1' then
   PlaySound(PChar('1.wav'), hInstance, SND_ASYNC);
   ...
   if Edit1.Text = '10' then
    PlaySound(PChar('10.wav'), hInstance, SND_ASYNC);
end;


procedure TForm1.Edit1Change(Sender: TObject);
begin
 if Edit1.Text = '1' then
  PlaySound(PChar('1.wav'), hInstance, SND_ASYNC);
  ...
  if Edit1.Text = '10' then
   PlaySound(PChar('10.wav'), hInstance, SND_ASYNC);
end;

end.


Ist jetz gekürzt hab das mit weitaus mehr Tönen aber die Anzahl tut ja nicht zur Sache...


Lemmy - Mi 11.01.12 20:38

Hi,

ich weiß Du bist ein Anfänger, aber so weit solltest Du doch mitdenken können: WEnn bei der Eingabe (verändern - change) schon was kommt - was ist wohl die Aufgabe von Edit1OnChange?

GRüße


jaenicke - Mi 11.01.12 20:38

Überlege doch einmal was du da tust...

In Edit1KeyDown führst du den Code aus, wenn Enter gedrückt wird. So weit so gut. Aber was ist mit Edit1Change?

Außerdem ist dir hoffentlich klar, dass dein Code nicht das selbe ist wie der:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_Return then
  begin
    if Edit1.Text = '1' then
      PlaySound(PChar('1.wav'), hInstance, SND_ASYNC);
    ...
    if Edit1.Text = '10' then
      PlaySound(PChar('10.wav'), hInstance, SND_ASYNC);
  end;
end;
(Und das ist wohl eher was du meinst....)


marcelrusi - Mi 11.01.12 20:48

Dankeschön !

Ja das 2. begin hatte ich vergessen :P Stimmt Edit1Change war unnötig ^^