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 KeyUp vor Basisklasse abfangen (https://www.delphipraxis.net/91053-keyup-vor-basisklasse-abfangen.html)

luckystar85 28. Apr 2007 11:34


KeyUp vor Basisklasse abfangen
 
Moinsen,

ich habe viele MDIChild die alle von einer Basisklasse abgeleitet sind. In der Basisklasse wird das FormKeyUp abgefangen und ausgewertet.
Delphi-Quellcode:
If ( Key = VK_ESCAPE ) And ( fEditMode In [emEdit, emAdd] ) Then
  btn_Cancel.Click
Else If ( Key = VK_Return ) And ( fEditMode In [emEdit, emAdd] ) Then
  btn_EditDataset.Click;
Wenn man Enter drückt dann sollen die Daten gleich gespeichert werden und bei Escape soll abgebrochen werden. Das ist auch bei 9 von den 10 MDIChild richtig so. Bei dem 10. habe ich ein RichEdit drauf und dort soll ein Enter halt einen Zeilenumbruch erzeugen und kein speichern der Daten. Ich habe jetzt schon versucht das FormKey in der abgeleiteten Form abzufangen, aber die Basisklasse wird halt zuerst ausgeführt und dann erst die Ableitung. Habe auch versucht in der Basisklasse den Sender auszuwerten, aber der hat da die Form und nicht das Control drinne. Habe auch versucht das WM_KeyUp abzufangen, aber das wird auch zu spät ausgelöst.
Habt ihr eine Idee oder Erfahrungen mit dem Problem?

himitsu 28. Apr 2007 11:42

Re: KeyUp vor Basisklasse abfangen
 
Eine Idee nicht wirklich, aber im Notfalls könntest du es auch so wie einige Andere machen:

Strg+Enter für Zeilenwechsel und das "normale" Enter für's Speichern so lassen.

Der Vorteil wäre dabei auch, daß sich das Enter=Speichern nicht im Vergleich zu den anderen Fenstern (MDIChilds) verändert.

luckystar85 28. Apr 2007 11:47

Re: KeyUp vor Basisklasse abfangen
 
Das wäre eine Idee. Einige andere Programme machen das ja auch so.
Aber es wäre schon interessant ob es dafür eine einfache und saubere Lösung . Vielleicht hat ja jemand einen Vorschlag.

luckystar85 28. Apr 2007 12:11

Re: KeyUp vor Basisklasse abfangen
 
Habe gerade meine eine Form umgestellt, damit Strg+Enter eine neue Zeile erstellt. Das funktoniert soweit sehr gut. Das ganze hat nur einen Nachteil. Jetzt bekomme ich zwei neue Zeilen bei Strg+Enter. Ich müsste also wirklich doch irgendwie das Enter abfangen.

luckystar85 29. Apr 2007 11:42

Re: KeyUp vor Basisklasse abfangen
 
Habe gerade gesehen das, das RichEdit die Eigenschaft WantReturns hat. Sobald die nun auf False setze, bekomm ich immer noch einen Zeilenumbruch. Das mit Strg+Enter funzt wunderbar. Das werde ich so lassen, aber ich würde trotzdem gerne den unerwünschten Zeilenumbruch verhindern, der beim Drücken der Enter-Taste kommt.

Muetze1 29. Apr 2007 12:07

Re: KeyUp vor Basisklasse abfangen
 
Warum müssen die Button.Click's überhaupt direkt aufgerufen werden? Reicht nicht einfach das Setzen der Default bzw. Cancel Eigenschaften bei den entsprechenden Buttons?

luckystar85 29. Apr 2007 12:14

Re: KeyUp vor Basisklasse abfangen
 
Da es verschiedene Modi gibt. Also im Add wird halt ein Click auf btn_AddDataSet ausgeführt und beim Edit wird ein Click auf btn_EditDataSet ausgeführt.
Aber theorthisch müsste es aber möglich sein, den unerwünschten Zeilenumbruch zu verhindern, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 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