Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eingabefelder zur Laufzeit onKeyPress zuweisen (https://www.delphipraxis.net/32271-eingabefelder-zur-laufzeit-onkeypress-zuweisen.html)

Delphimagnet 21. Okt 2004 08:19


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:
// 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;
Jetzt erhalte ich allerdings immer die Nachricht (vom Compiler) das onKeyUp ein undefinierter Bezeichner ist.

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:
uses SysUtils, Dialogs, StrUtils, DBTables, Variants, Math, records,
     Forms, StdCtrls, ExtCtrls, Classes, Controls;
Muss ich das anderst deklarieren oder hab ich sonst was übersehen?

Bin auch offen wenn irgendjemand ne Idee hat um das ganze Problem eleganter zu lösen...

Leuselator 21. Okt 2004 08:25

Re: Eingabefelder zur Laufzeit onKeyPress zuweisen
 
Delphi-Quellcode:
// 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;
sollte gehen...
Gruß

himitsu 21. Okt 2004 08:26

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.

Delphimagnet 21. Okt 2004 08:41

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.

himitsu 21. Okt 2004 08:47

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)

Delphimagnet 21. Okt 2004 08:53

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 22:18 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