Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TEdit.onKeyDown=>beep?


saite - Do 21.10.04 18:51
Titel: TEdit.onKeyDown=>beep?
Hi!

Wie kann man abstellen, dass wenn man ein Edit feld hat und man dem dingen nen onKeyDown ereignis zuweist, es ein beep gibt?

grz
saite


jasocul - Do 21.10.04 19:29

zeich mal source


F34r0fTh3D4rk - Do 21.10.04 19:36

Zitat Delphi Helper:

Wenn man im Editfeld auf Enter drückt ertönt - wenn diese Funktion in Windows eingeschaltet ist - ein Beep-Ton. Dieser kann unterdrückt werden.

Schreibe ins OnKeyPress-Ereignis des Editfelds:


Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
    Key:=#0;
end;

#13 ist das ASCII Zeichen für die Entertaste.


aber dann wird glaube ich auch die Entertaste deaktiviert und bei den anderen
beept es dann trotzdem :(


Luzzifus - Do 21.10.04 19:40

F34r0fTh3D4rk hat folgendes geschrieben:
Schreibe ins OnKeyPress-Ereignis des Editfelds:


Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
    Key:=#0;
end;[/delphi]
#13 ist das ASCII Zeichen für die Entertaste.


aber dann wird glaube ich auch die Entertaste deaktiviert und bei den anderen
beept es dann trotzdem :(

nicht unbedingt.

Wenn man das so schreibt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
    // hier Enter-behandlung reinschreiben, 
    // z.b. Edit2.SetFocus;
    ...
    Key:=#0;
end;


Dann sollte man zumindest noch sagen können, was passieren soll wenn Enter gedrückt wird. Wäre auf jedenfall nen Versuch wert. :)


saite - Fr 22.10.04 01:16

cool! danke.

ich werds versuchen, und dann berichten, ob's alles funzt;)

grz
saite

edit:

muss man eigentlich das '#' vor die (z.b.) 13 schreiben? also if Key=#13?
weil bei mir funzt es auch so: if Key=13 then...

was ist der unterschied?


saite - Fr 22.10.04 01:25

hmm... also wenn ich es so mache:

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:
procedure TForm1.txt_key(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if btn_loesen.Enabled=true
    then
      begin
        if Key=13
          then
            begin
              if btn_weiter.Enabled
                then btn_weiter.OnClick(self)
                else
                  begin
                    if Length(en.Text)>0
                      then btn_antworten.OnClick(self)
                      else messagedlg('Sie haben keine Übersetzung eingegeben', mtInformation, [mbOk],0)
                  end;
              Key:=0
            end
      end
end;

...

en := TEdit.Create(Form_abfrage);
  with en do
    begin
      ...
      onKeyDown:=txt_key;
    end;
...

...dann machts immer noch beep...

wenn ichs so mache:

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:
procedure TForm1.txt_key(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if btn_loesen.Enabled=true
    then
      begin
        if Key=#13
          then
            begin
              if btn_weiter.Enabled
                then btn_weiter.OnClick(self)
                else
                  begin
                    if Length(en.Text)>0
                      then btn_antworten.OnClick(self)
                      else messagedlg('Sie haben keine Übersetzung eingegeben', mtInformation, [mbOk],0)
                  end;
              Key:=#0
            end
      end
end;

...

en := TEdit.Create(Form_abfrage);
  with en do
    begin
      ...
      onKeyDown:=txt_key;
    end;
...

...dann bekomme ich die fehlermeldungen:
[Fehler] Unit1.pas(481): Inkompatible Typen
[Fehler] Unit1.pas(492): Inkompatible Typen: 'Word' und 'Char'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

wobei sich die fehler auf die zeilen mit dem Key=#13 und Key:=#0 beziehen!

und nu???


Nagelbrett - Fr 22.10.04 08:03

liegt daran, dass du im onKeyDown event bist. Die anderen sprachen jedoch von onKeyPress, also probier es mal dort :)


saite - Sa 23.10.04 12:09

jo, so funktioniert es.

Danke an alle :wink:

grz
saite