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 F-Taste einem Button als Zugriffstaste zuweisen... Wie? (https://www.delphipraxis.net/29158-f-taste-einem-button-als-zugriffstaste-zuweisen-wie.html)

mschaefer 4. Sep 2004 19:36


F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, moin,

würde gerne einige Buttons auf meinem Formular durch die Funktionstasten F2 bis F12
reagieren lassen. Am liebsten in einer abgeleiteten Buttonkomponente, der diese Taste
zugeweisen werden kann. Mir fehlt da die Idee der herangehensweise....

Grüße // Martin

Hansa 4. Sep 2004 19:37

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Stichwort : OnKeyDown

mschaefer 4. Sep 2004 20:25

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Ok - Zeit heute aufzuhören...

Dank Dir // Martin

mschaefer 5. Sep 2004 06:20

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, moin,

ok jetzt muß ich mein Problem doch nochmal präzisieren:

Ein Button mit der Caption &Abbrechn reagiert auf ALT-A in einem Formular
kann ich die Button-komponente so verändern, das dieser auf z.B.: F12 regiert.

Möchte das möglichst in der Komponente lösen und nicht alles jedesmal im
OnKeyDown-Ereigniss des Formulars tun.

Grüße // Martin

Sharky 5. Sep 2004 06:38

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Hai Martin,

besitzt Delphi 6 schon den Action-Manager (Register: Zusätzlich)? Wenn Ja kannst Du über diesen deine Aktionen verwalten. Dort kannst Du auch nocht zusätzliche ShortCuts angeben.

Nothine 5. Sep 2004 06:59

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
du könntest dir ne klasse von TButton ableiten, die im parent einen hotkey mit deiner gewünschten tastenkombo (oder einzeltaste) erstellt, dann nur noch paar propertys für den zugriff auf selbigen hotkey, das sollte so funzen

mschaefer 5. Sep 2004 07:01

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, noch Frühmoin,

das Ding besitzt den Action - Manager (glaube Actions gibt´s ab D4). Würde die Zugriffstaste am
liebsten in der Komponente hinterlegen, da ich mehrere Programm auf eine Sondertastensteuerung
aufrüsten soll.

Wo ist den eigentlich diese Unterstrich-Zugriffsmethode implementiert? Im Formularobjekt oder
in einer Basisklasse :?: ?

Einfach in die OnKey-Verarbeitungsroutine des Buttons geht natürlich auch nicht, da diese nur
ausgelöst wird, wenn der Button schon den Fokus hat. Es bleibt knifflig.



Grüße // Martin

Nothine 5. Sep 2004 07:04

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
ich verweise noch ma an meine methode, im parent (!) des buttons einen hotkey zu hinterlegen, so muss der button nicht den fokus erhalten und du hast im prinzip das was du brauchst, oder seh ich das falsch?

// und nur damit wir uns richtig verstehen, diesen hotkey vom button selbst verwalten (und erstellen) lassen

mschaefer 5. Sep 2004 08:41

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Hm,da muß aber bekannt sein was der Parent für ein Typ ist, sonst ist das ein leidiges "getypecaste" und das ist innerhalb einer Komponente meist sehr unglücklich"

Das Problem ist, das ein Button oft auf Panels leigt, manchmal auf einem Form oder sonstwo und Typecast möchte ich hier vermeiden. Melde mich heute Nachmittag nochmal. Werde mir mal die VCL-Codes anschauen wie das mit dem Unterstrich geregelt ist....

Grüße // Martin

Nothine 5. Sep 2004 09:42

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
du kannst ja auch einfach den stammbaum der komponente solange hochgehen bis du ne tform oder nil findest, bei tform hotkey reservieren bei nil nix tun... wär jedenfalls nich undenkbar... :|

und wenn ich ma so fragen darf, was spielt das, ob du weißt welchen typ der parent hat, für ne rolle? der parent muss ein wincontrol sein, dass wiederum hat n controlstyle, den man auf das flag csAcceptsControls prüfen kann, sprich kann ich hier n hotkey erzeugen oder muss ich weiter zum nächsten parent...

mschaefer 5. Sep 2004 10:20

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, moin

Hm, doch nochmal an der Kiste gestrandet. Es gibt da ein kleines Problem:

Nehmen wir zwei drei Buttons auf einem Panel. Dann kann ich dem Panel zunächst ein Hitkey zuweisen. Aber dann bleibt der Hotkey des zuletzt erstellten Burtons und die anderen würden entfallen. Oder Du müstest dem Parent in einer abgeleiteten Parentkomponente eine Hotkeyliste spendieren, das scheint mir aber eher etwas weit hergeholt und nicht unbedingt sichere Programmierung. Um nicht in der vcl selbst zu kodieren wären dazu dann noch Ableitungen zumindest von Panel und Form notwendig.....

Einen Systemweiten HotKey einem Button zuzuweisen ist übrigens kein Problem, aber das will damit nun auch nicht erreichen, da sich sonst mehre Programmer "kappeln" würden. Es sollen die Buttons einfach eine Eigenschaft F-Taste bekommen in dem Sie in Ihrem Formular auf diese reagieren.

Bin nich auf vcl-Debugtour....

Grüße // Martin

Hansa 5. Sep 2004 10:30

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Das TForm ist IMHO die einzige "Komponente", die sich OOP-mäßig sehr schwer behandeln läßt. Ich hatte mal versucht, irgendwas davon abzuleiten. No Chance. Weiß der Teufel, was TForm jetzt noch genau ist, auf jeden Fall etwas ganz anderes als ein TButton oder eine normale Komponente.

Das Stichwort heißt nunmehr : "Objektablage/Repository". In meinem Source sieht es so aus, daß jede Form sich mit esc schließen lassen muß. Verschiedene F-Tasten müssen in verschiedenen Form-Gruppen bereit stehen. Die Tastatur muß sich immer gleich verhalten, auch mit ISO???? im Hinterkopf. 8)

Wie habe ich das realisiert ? Indem ich eine Form genommen habe, in dieser schon mal alle Grundeinstellungen eingestellt habe (Farbe, FormKeyPress für ESC usw.). Diese ESCform kam dann in die Objektablage. Weitere 5 Forms brauchen zusätzlich F9 und F10. Für diese habe ich von ESCform eine weitere Grundform abgeleitet (Objektablage -> vererben). Diese dann letzendlich für die 5 Forms verwendet.

mschaefer 6. Sep 2004 10:44

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, moin,

tja fast hätte Hansa wohl rechtbehalten und ganz geklärt habe ich es immer noch nicht:

Dank Rainer Reusch von der Toolbox bin ich ninzwischen in der Lage den Buttons Systemweite HotKeys zu zuordnen und hier gehen auch die Funktionstasten F1 bis F12. Der Haken ist allerdings, das diese immmer Systemweit sind und sich nicht auf ein Formular beziehen.

Button-Komponenten mit systemweiten Hotkeys von R.Reusch)

So was mir immernoch fehlt ist die Zuweiseung einer Funtkionstaste mit nur formularlokaler Gültigkeit als Eigenschaft einer abgeleiteten Buttonkomponente.....

Tipps .. Ideen sind herzlich willkommen

Grüße // martin

Hansa 6. Sep 2004 13:38

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Zitat:

Zitat von mschaefer
...Der Haken ist allerdings, das diese immmer Systemweit sind und sich nicht auf ein Formular beziehen.

Und eben der Haken ist bei mir nicht dabei. :lol: Ich sage nur: "vererben mit Hilfe der Objektablage aus Grundforms und basta" :mrgreen: Das ganze hat nämlich noch einen weiteren Vorteil : in der Form-Hierarchie kann man statt der Funktionstasten auch noch nach und nach immer wiederkehrende Sachen mit einbauen. Z.B. Buttons, Statusleisten mit vorher definierten Eigenschaften und sei es nur die Farbe oder die Schriftart.

mschaefer 6. Sep 2004 13:49

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Hallo Hansa,

vor der Mittagspause hätte ich auch schon fast aufgegeben :stupid: jetzt
verfolge ich meine letzte Spur, sehen wir in einer hallben Stunde...
....WM_KeyDown....


Grüße // Martin

mschaefer 6. Sep 2004 14:07

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Moin, moin

Ok, sieht gut aus:

Jetzt komme ich an die WM_KeyDown Message des Forms innerhalb meiner abgeleiteten Buttonkomponenten indem ich mich über die Parents hochhangele (wie Nothineja schon vorgeschlagen hat, ok dann also doch !). Dann noch die Messageprocedure umbiegen und dann sollte es gehen, mal sehen....

Viele Grüße // Martin

Nothine 6. Sep 2004 19:05

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
das hab ich übrigens auch grad erfolgreich getestet, also das umbiegen, ich muss nur noch das hochangeln sauber hinkriegen, als klasse kapseln, und wenn nich jemand schneller war (:stupid:) dann noch posten

Robert_G 6. Sep 2004 21:45

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
@Sharky, wenn es sich nur um die Buttons und nicht noch um Menüs etc. handelt wäre der ActionMan viel zu überdimensioniert. ;)

Eine simple ActionList tut den Job genauso ohne soviele Ressourcen zu schlucken.
Du legst dir einfach eine Action an, verpasst dem OnExecute deinen Code. Außerdem kannst du ihr einen ShortCut verpassen.
Jetzt wählst du beim Button einfach die betreffende Action aus -> färtsch.

btw: IMHO sollte man die gesamt GUI in ActionLists verwalten, dadurch kann man eine Action an vielen Stellen wiederverwenden (MainMenu, ContextMenu, Button, ...) außerdem werden alle zugewiesene Controls auf enabled/disabled gesetzt, wenn man es an der Action ändert.

Nachtrag:
Zitat:

das Ding besitzt den Action - Manager (glaube Actions gibt´s ab D4).
D4 hatte Actions und die ActionList eingeführt, der ActionMan kam erst mit D7, für D6 gab's ein Update.

Nothine 6. Sep 2004 22:43

Re: F-Taste einem Button als Zugriffstaste zuweisen... Wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, die button-komponente, die auf druck der tasten F1 bis F12 reagiert, is feddich. wen's interessiert, der kann sich im anhang das package sowie die unit der komponente ansehen, vielleicht hat ja noch jemand verbesserungsvorschläge oder will mich hauen weil es so programmiert is wie es halt is :mrgreen: also feedback is willkommen

(zur erklärung: es gibt 2 neue published properties im OI, eine heißt "FKey", sollte halbwegs klar sein, auf welche F-Taste man reagieren will halt, und das event "OnHotKey", mit dem man entscheiden kann was der button nu eigentlich machen soll wenn die entsprechende taste gedrückt wurde.)


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