![]() |
Eingabefelder zur Laufzeit onKeyPress zuweisen
Morgen,
Ich hab ein kleines Problem, allerdings komm ich grad auf keine Lösung. Ich arbeite gerade ein einem Projekt das doch schon so an die 20 Forms enthält. Unter diesen Forms befinden sich viele Suchmasken, also ein ganzer Dialog voller Input Felder und eine Suche kann gestartet werden in dem ich auf einen Suchenknopf drücke. Jetzt hatte ich mir aber gedacht das ich das doch komfortabler machen könnte indem ich es dem Benutzer ermögliche durch einen Druck der Enter-Taste in jedem der Eingabefelder die Suche auszulösen. Allerdings bin ich zu faul dazu für jeden TEdit oder TLabeledEdit ein eigenes onKeyPress zu schreiben das einfach nur prüft ob die gedrückte Taste "Enter" ist und dann die Suche-Funktion startet. :mrgreen: Also hab ich mir gedacht ich schreib eine kleine Funktion die mir alle Inputs auf der Form zusammen sucht und ihnen die entsprechende Funktion zuweist (prüfe auf Enter und dann Suche starten).
Delphi-Quellcode:
Jetzt erhalte ich allerdings immer die Nachricht (vom Compiler) das onKeyUp ein undefinierter Bezeichner ist.
// Weist allen input Feldern auf der Sendernform (Dialog) ihre dazugehörige Suchenfunktion zu
procedure assignOnEnterSearch (Sender : TForm); var iCompCount : integer; tmpComp : TComponent; begin // Gehe alle Komponenten durch For iCompCount := Sender.ComponentCount-1 downTo 0 do begin tmpComp := Sender.Components[iCompCount]; // Prüfe ob die Komponente ein Inputfeld ist if (tmpComp is TEdit) or (tmpComp is TLabeledEdit) then begin TCustomEdit(tmpComp).onKeyUp := {spätere Funktion}; end; end; end; Erster Gedanke: "Klar, da fehlt nur noch die entsprechende Unit beim Uses." Also gleich mal nachgeschaut woher TCustomEdit seine Ereignisse erbt, von TWinControl. Und das stammt aus der Unit Controls und das steht inzwischen in meinem Uses, aber immer noch die gleiche Compilermeldung. :gruebel:
Delphi-Quellcode:
Muss ich das anderst deklarieren oder hab ich sonst was übersehen?
uses SysUtils, Dialogs, StrUtils, DBTables, Variants, Math, records,
Forms, StdCtrls, ExtCtrls, Classes, Controls; Bin auch offen wenn irgendjemand ne Idee hat um das ganze Problem eleganter zu lösen... |
Re: Eingabefelder zur Laufzeit onKeyPress zuweisen
Delphi-Quellcode:
sollte gehen...
// Weist allen input Feldern auf der Sendernform (Dialog) ihre dazugehörige Suchenfunktion zu
procedure assignOnEnterSearch (Sender : TForm); var iCompCount : integer; tmpComp : TComponent; begin // Gehe alle Komponenten durch For iCompCount := Sender.ComponentCount-1 downTo 0 do begin tmpComp := Sender.Components[iCompCount]; // Prüfe ob die Komponente ein Inputfeld ist if (tmpComp is TLabeledEdit) then TLabeledEdit(tmpComp).OnKeyUp := XXX else if (tmpComp is TEdit) then TEdit(tmpComp ).OnKeyUp := XXX; end; end; Gruß |
Re: Eingabefelder zur Laufzeit onKeyPress zuweisen
Setz einfach mal beim Suchen-Button die Eigenschaft Default (siehe OI) auf True, dann reagiert diese Taste auf's Enter.
PS: wenn man dort statt dessen Cancel auf True setzt, dann wird auf ESC reagiert. |
Re: Eingabefelder zur Laufzeit onKeyPress zuweisen
Is ja geil!
Geht Beides. :mrgreen: @Leuselator: Ich hab halt in TCustomEdit gecastet weil ich damit eigentlich beide Klassen auf einmal erwischen sollte. Hätte nicht gedacht das es daran liegt, danke. @himitsu: Ist kürzer, wird genommen. :wink: :dp: Klasse wie schnell das selbst am frühen Morgen klappt. |
Nachtrag
Meines hat eventuell nur einen kleinen Nachteil ... 's funktioniert nicht immer und überall :?
Wenn der Cursor z.B. in einem Memo ist - also in einem Objekt, was selber die Entertaste verwendet, dann hat das Objektselber den Vorrang und der Button bekommt vom Enter nichts mit. Allerdings ist das, mit der anderen Methode, auch nicht besser, denn wenn man das Enter als Erstes zum Button leitet, dann bekommt man ja keine Zeilenumbrüche mehr (über's Enter) in's Memo (oder so) rein 8) |
Re: Eingabefelder zur Laufzeit onKeyPress zuweisen
@himitsu: Stellt in meinem Fall kein Problem dar, auf allen Forms wo ich's verwenden will gibt's keine andere Komponente die selbst die Enter-Taste verwendet oder das sonst irgendwie auf Enter reagieren sollte. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz