Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Button soll nicht mit ENTER betätigt werden können???
curvafix - Sa 12.12.09 11:22
Titel: Button soll nicht mit ENTER betätigt werden können???
Hallo zusammmen,
ich bin seit diesem Schuljahr im Informatik-Kurs und glaube auch sagen zu können, dass ich trotzdem schon relativ gut zurecht komme. Zuhause wollte ich jetzt ein Programm schreiben, bei dem man so oft wie möglich einen zufällig durch die Gegend hüpfenden Button drücken muss. Das habe ich bereits alles hinbekommen, allerdings hat das Programm einen kleinen Fehler, den ich nicht zu beheben weiß:
Wenn ich den Button einmal gedrückt habe, scheint er irgendwie markiert zu sein und ich kann ich durch Drücken der ENTER-Taste beliebig oft betätigen, was ja nicht der Sinn dieses kleinen Spielchens ist.
Kann mir jemand sagen, wie ich es schaffe, dass man den Button nach dem ersten Klick nicht mit der ENTER-Taste betätigen kann???
Vielen Dank schonmal im Vorraus
MfG curvafix
Andreas L. - Sa 12.12.09 11:29
Du musst dem Button den Focus entziehen. Z. B. in dem du den Focus einen anderen Objekt gibst:
Gausi - Sa 12.12.09 11:33
Hallo und :welcome: in der Entwickler-Ecke
Muss denn unbedingt ein Button durch die Gegend hüpfen? Eine einfache Möglichkeit, das Problem komplett zu umgehen wäre nämlich, anstelle eines Buttons eine andere Komponente zu nehmen, die nicht den Focus erhalten kann, und somit nicht per Enter angeklickt werden kann. Ein TShape oder ein TPanel wäre zum Beispiel so was. :D
curvafix - Sa 12.12.09 11:38
Jawoll klappt beides super. Danke für die schnelle Hilfe!!!
catweasel - Mo 14.12.09 23:19
Hi,
okokok... Eine Möglichkeit hab ich auch noch:
Per
getasynckeystate Funktion im OnKeyDown des forulars checken ob Enter gedrückt ist..
Delphi-Quelltext
1:
| if getasynckeystate(VK_Enter) <> 0 then beep; |
War mir halt so eingefallen....
CU
Catweasel
Boldar - Mo 14.12.09 23:30
Joa... man kann auch nen Tastatur-Hook schreiben und da enter abfangen...
Mit Kanonen auf Spatzen...
Die beste Lösung ist wohl wirklich, einfach ein TImage, TShape oder TPanel zu nehmen.
catweasel - Mo 14.12.09 23:47
Tastatur-Hook..... Genial... Befördern, denn Mann!!!!
Gibts noch ne Möglichkeit?
Acuh wenn das Thema schon gelöst ist:
Ich erklär das mal zum neuen Minispiel: Wieviele Möglichkeiten gibt es diese Aufgabe zu bewältigen?
Catweael
*derheutegutdraufist*
Boldar - Di 15.12.09 19:54
Die ereignis-Behandlungs-routine hooken und abfangen, wenn es durch enter (getasynckkeystate) ausgelöst wurde.
Oder die Funktionen zum Setzen des Focus abfangen.
Oder den tastatur-Treiber abschiessen.
Oder das ohne Form machen, sondern den Button als Image auf den Desktop malen (Wer nen Icon trifft, bekommt Minuspunkte)
Oder die Tastatur zeitweise deaktivieren.
Oder die Enter-Taste der Tastatur mit Nägeln spicken.
Oder Jeden erschiessen, der ne tastatur hat.
Oder...
Lannes - Di 15.12.09 20:39
Hallo,
hab auch noch ein paar
1. Das Auslösen des OnClick-Events des Buttons der den Focus hat ist Windows-Standard, und auch gut so. In dem Fall wird der Key direkt an den Button geschickt, er wird auch bei KeyPreview = True nicht erkannt. Wenn man das verhindern will muss man sich vorher einklinken(Stichwort CM_DIALOGKEY)
2. Ein durchsichtiges Panel über alles legen, mit PtInRect prüfen ob unter dem Panel an der Stelle der Button gerade ist, und dann ....
3. was vernünftiges progammieren :roll:
FinnO - Di 15.12.09 22:03
wie wärs mit
TabStop beim Button auf FALSE setzen? (kp, obs klappt)
Boldar - Di 15.12.09 22:17
Aber wenn man ihn einmal mit der Maus getroffen hat, hat er dann trotzdem den Focus.
catweasel - Do 17.12.09 01:46
Hmmm Mal so ad hoc:
Hab das jetzt nicht ausprobiert, aber würde es auch was helfen in deer Windows.pas (so irgendwo bei Zeile 18000) die Konstante für die Enter Taste zu verändern?
Und ausserdem frage ich mich:
Zitat: |
Oder den tastatur-Treiber abschiessen.
Oder die Tastatur zeitweise deaktivieren. |
Wie bewerkstelligt man das so mit Delphi-Bordmitteln... einen Gerätetreiber abschiessen/deaktivieren....? *neugier*
Catweasel
alzaimar - Do 17.12.09 08:29
catweasel hat folgendes geschrieben : |
... einen Gerätetreiber abschiessen/deaktivieren....? *neugier* |
Hooken.
Narses - Do 17.12.09 13:17
Moin!
Bevor hier noch Vorschläge zur dauerhaften Deaktivierung der Hardware per Kettensäge kommen ;) mache ich mal zu. Wenn es noch was (sinnvolles) zur eigentlichen Frage zu sagen gibt, bitte per VA ans Team wenden.
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!