AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eingabefelder zur Laufzeit onKeyPress zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Eingabefelder zur Laufzeit onKeyPress zuweisen

Ein Thema von Delphimagnet · begonnen am 21. Okt 2004 · letzter Beitrag vom 21. Okt 2004
Antwort Antwort
Delphimagnet

Registriert seit: 16. Sep 2004
16 Beiträge
 
Delphi 7 Enterprise
 
#1

Eingabefelder zur Laufzeit onKeyPress zuweisen

  Alt 21. Okt 2004, 09:19
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.

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.

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...
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: Eingabefelder zur Laufzeit onKeyPress zuweisen

  Alt 21. Okt 2004, 09:25
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ß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

Re: Eingabefelder zur Laufzeit onKeyPress zuweisen

  Alt 21. Okt 2004, 09:26
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Delphimagnet

Registriert seit: 16. Sep 2004
16 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Eingabefelder zur Laufzeit onKeyPress zuweisen

  Alt 21. Okt 2004, 09:41
Is ja geil!

Geht Beides.

@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.


Klasse wie schnell das selbst am frühen Morgen klappt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

Nachtrag

  Alt 21. Okt 2004, 09:47
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Delphimagnet

Registriert seit: 16. Sep 2004
16 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Eingabefelder zur Laufzeit onKeyPress zuweisen

  Alt 21. Okt 2004, 09:53
@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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:54 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