AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Beepen bei OnKeyDown global unterdrücken

Ein Thema von CG2003 · begonnen am 15. Feb 2006 · letzter Beitrag vom 17. Feb 2006
Antwort Antwort
Seite 1 von 3  1 23      
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#1

Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:10
Hallo liebe DP-Gemeinde,

ich habe hier in der Code-Library folgenden Code zum unterdrücken des typischen Windows-Beep beim OnKeyDown Event gefunden:

Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  mgsTemp: TMsg;
begin
  if Key = VK_RETURN then
  begin
    PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  end;
end;
Meine Frage wäre nun, wie ich das vielleicht global setzen kann? Ich habe derzeit eine Anwendung mit hunderten von TEdits, und würde gerne den o.g. Code für alle TEdit setzen.

Ist das möglich? Wenn ja: wie genau?

Vielen Dank schonmal für Eure Hilfe.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:15
Du könntest beim Programmstart durch Components der Forms iterieren und jedem Edit den Eventhandler zuweisen, wenn es nicht direkter funktioniert.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:17
Zitat von Khabarakh:
Du könntest beim Programmstart durch Components der Forms iterieren und jedem Edit den Eventhandler zuweisen, wenn es nicht direkter funktioniert.
Entschuldige bitte die "Blöde" Frage, aber was meinst Du damit genau? Also wie funktioniert das?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:23
Moin

das könnte so in der Art aussehen:

Delphi-Quellcode:
    procedure EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  mgsTemp: TMsg;
begin
  if Key = VK_RETURN then
  begin
    PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  end;
end;

// ...

var
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i] is TEdit then
      (Components[i] as TEdit).OnKeyDown := EditKeyDown;
  end;
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:26
Zitat von Matze:
Moin

das könnte so in der Art aussehen:

Delphi-Quellcode:
    procedure EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  mgsTemp: TMsg;
begin
  if Key = VK_RETURN then
  begin
    PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  end;
end;

// ...

var
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i] is TEdit then
      (Components[i] as TEdit).OnKeyDown := EditKeyDown;
  end;
Hallo,

Danke, das sieht gut aus, nur ich denke mal das wird nicht ganz funktionieren, da ich für einige meiner TEdits im OnKeyDown-Event eigene Anweisungen stehen habe und die würden doch dann nicht ausgeführt werden, oder?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:27
Zitat von CG2003:
Danke, das sieht gut aus, nur ich denke mal das wird nicht ganz funktionieren, da ich für einige meiner TEdits im OnKeyDown-Event eigene Anweisungen stehen habe und die würden doch dann nicht ausgeführt werden, oder?
Das weist allen Edits das obig definierte OnKeyDown zu. Die bestehenden werden dann natürlich nicht ausgeführt. Wie man das aber zusammenfasst, also da bin ich gerade überfragt, sorry.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:39
Steig auf .Net um und nimm Delegates.
Scherz
Entweder baust du eine Klasse, die den alten Eventhandler aufnimmt und diesen zusammen mit dem neuen aufruft, oder(ohne Klasse) du leitest die WindowProc der Edits um. Code kann ich heute aus Zeitgründen leider nicht mehr bieten .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 20:43
Zitat von Khabarakh:
Steig auf .Net um und nimm Delegates.
Scherz
Entweder baust du eine Klasse, die den alten Eventhandler aufnimmt und diesen zusammen mit dem neuen aufruft, oder(ohne Klasse) du leitest die WindowProc der Edits um. Code kann ich heute aus Zeitgründen leider nicht mehr bieten .
Hmm, nun versteh' ich nur noch Bahnhof...
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 15. Feb 2006, 21:23
Du musst entweder in den paar edits, die schon ein onkeydown haben, einen eventhandler definieren, der die anderen aufruft, oder ... dazu kommen wir später

Wenn du wirklich die WndProc überschreiben willst, dann schau such mal nach Hier im Forum suchenProgressWndProc (Ich habs schonmal erklärt und immer Copy&pastet)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 00:35
1.)
Zitat von turboPASCAL:
Das Signal soll eigentlich anzeigen, das kein Zeilenumbruch erlaubt ist. (Einzeiliges Edit Feld)

Akustisches Signal bei Edit - Feld ausschalten:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then // #13 = Enter
    Key:=#0; // #0 = nix
end;
http://www.delphipraxis.net/internal...=398085#398085

2.)
Weise jedem Editfeld die selbe OnKeyDown zu. Das geht mit der Shifttaste und der Maus oder über Matze's Code-Beispiel.
Wenn du unterschiedliche Sachen im OnKeyDown-Ereignis abfangen musst, kanst du über die Tags und einer Case-Abfrage darauf reagieren.

// die edits sind zu dieser stunde normal
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 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