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 2 von 3     12 3      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 02:11
Zitat von CG2003:
Ich habe derzeit eine Anwendung mit hunderten von TEdits, und würde gerne den o.g. Code für alle TEdit setzen.
Wieviele Forms betrifft das denn ? Du kannst das OnKeyDown auch pro Form definieren ! Desweiteren kann man das von Form zu Form weitervererben -> ObjektAblage, also -> OOP. Es werden ja wohl nicht Hunderte Edits auf einer einzigen Form liegen ? ComponentCount nützt auch nur was bei kleinen Sachen, also Edit1..Edit10. Bei mehr Edits spielt die Nomenklatur eine große Rolle und wird dir wohl die Edits um die Ohren hauen. Versuche mal Edit1 und edKontoNr mit ComponentCount auf die Reihe zu kriegen. Und das wohl noch Form-übergreifend.
Gruß
Hansa
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 05:14
Moin,

mit einem TApplicationEvents-Objekt und dessen OnMessage-Property sollte das möglich sein. Hinter einer solchen Property steht nämlich so etwas wie ein lokaler Hook, dh.: Du kannst in dem entsprechenden OnMessage-Eventhandler dann so ziemlich alle Messages abfangen, die vom System an die Controls deiner Application abgeschickt wurden. Also auch alle WM_Char-Messages an alle TEdits deiner Anwendung:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var ATWinControl : TWinControl;
begin
  if Msg.message = WM_Char then
    if Msg.wParam = vk_Return then begin
      ATWinControl := FindControl(Msg.hwnd);
      if (ATWinControl <> Nil)
      and (ATWinControl is TEdit) then Handled := true;
    end;
end;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#13

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 07:15
Zitat von Hansa:
Zitat von CG2003:
Ich habe derzeit eine Anwendung mit hunderten von TEdits, und würde gerne den o.g. Code für alle TEdit setzen.
Wieviele Forms betrifft das denn ? Du kannst das OnKeyDown auch pro Form definieren ! Desweiteren kann man das von Form zu Form weitervererben -> ObjektAblage, also -> OOP. Es werden ja wohl nicht Hunderte Edits auf einer einzigen Form liegen ? ComponentCount nützt auch nur was bei kleinen Sachen, also Edit1..Edit10. Bei mehr Edits spielt die Nomenklatur eine große Rolle und wird dir wohl die Edits um die Ohren hauen. Versuche mal Edit1 und edKontoNr mit ComponentCount auf die Reihe zu kriegen. Und das wohl noch Form-übergreifend.
Es is doch egal, wie die Edits heissen. Ich kann doch mit ComponentCount drüber iterieren und dann mit Components[n] is TEdit abfragen ob es ein Edit ist, und dann das Event zuweisen...
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 07:22
Hai ihr,

warum denn nicht den einfachsten Weg nehmen und sich ein eigene Komponente von TEdit ableiten und in dieser dann die gewünschte Funktionalität einbauen?

EDIT:
Das ganze könnte dann zum Beispiel so aussehen:
Delphi-Quellcode:
unit ShEdit;

interface

uses
  Classes, StdCtrls, Controls, Messages, Windows;

type
  TShEdit = class(TEdit)
  protected
    FEnterAsTab: Boolean;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property EnterAsTab: Boolean Read FEnterAsTab Write FEnterAsTab default True;
  end;

procedure Register;

implementation

constructor TShEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FEnterAsTab := True;
end;

destructor TShEdit.Destroy;
begin
  inherited Destroy;
end;

procedure TShEdit.KeyDown(var Key: Word; Shift: TShiftState);
var
  mgsTemp : TMsg;
begin
  if (Key = VK_RETURN) then
  begin
    if (FEnterAsTab) then
    begin
      Parent.Perform(WM_NEXTDLGCTL, 0, 0);
    end;
    PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
  end;
  inherited KeyDown(Key, Shift);
end;

procedure Register;
begin
  RegisterComponents('Sharky', [TShEdit]);
end;

end.
Einfach die Unit in ein Package laden, compilieren, installieren und verwenden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#15

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 17:35
Er hat doch schon hunderte von Edits in seinem projekt. Dann müsste er all diese Edits durch sein neues Edit austauschen...
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#16

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 18:13
Das könnte er z.B. durch Search/Replace in den entsprechenden .dfm-Dateien machen. (Vorher Sicherungskopien machen...)

Gruß, teebee
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#17

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 19:05
du kannst ja eine Klasse schreiben, die die Methode enthält, die du mit ComponentCount zuweist, und einen Verweis auf die alte Methode. Dann machst du ein dynamisches Array dieser Klasse und durchläufst alle edits des forms mit componentcount, und immer, wenn du einen Edit findest, erzeugst du ein neues Element des Arrays und setzt die alte Methode. Die führst du in der neuen Prozedur aus.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 19:13
Mit dieser Idee kommst du exakt 10 Posts zu spät . Aber du willst wirklich für eine variable Länge dynamische Arrays einsetzen?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
CG2003

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

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 19:38
Zitat von phXql:
Er hat doch schon hunderte von Edits in seinem projekt. Dann müsste er all diese Edits durch sein neues Edit austauschen...
Eben... Also gibt es keine (einfache) Möglichkeit dies zu realisieren, oder?
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
 
#20

Re: Beepen bei OnKeyDown global unterdrücken

  Alt 16. Feb 2006, 19:46
Zitat von CG2003:
Zitat von phXql:
Er hat doch schon hunderte von Edits in seinem projekt. Dann müsste er all diese Edits durch sein neues Edit austauschen...
Eben... Also gibt es keine (einfache) Möglichkeit dies zu realisieren, oder?
TStringLists Code besteht aus 11 Zeilen, das sollte doch einfach genug sein.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 00:27 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