Autor Beitrag
curvafix
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 12.12.09 11:22 
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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Sa 12.12.09 11:29 
Du musst dem Button den Focus entziehen. Z. B. in dem du den Focus einen anderen Objekt gibst:
ausblenden Delphi-Quelltext
1:
  Edit1.SetFocus;					
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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

_________________
We are, we were and will not be.
curvafix Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 12.12.09 11:38 
Jawoll klappt beides super. Danke für die schnelle Hilfe!!!
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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..

ausblenden Delphi-Quelltext
1:
if getasynckeystate(VK_Enter) <> 0 then beep; // taste gedrückt					


War mir halt so eingefallen....

CU
Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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*

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 15.12.09 22:03 
wie wärs mit

TabStop beim Button auf FALSE setzen? (kp, obs klappt)
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 15.12.09 22:17 
Aber wenn man ihn einmal mit der Maus getroffen hat, hat er dann trotzdem den Focus.
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 487
Erhaltene Danke: 1

Win 7 64bit
Delphi 7 Second Sedition V7.2
BeitragVerfasst: 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

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 17.12.09 08:29 
user profile iconcatweasel hat folgendes geschrieben Zum zitierten Posting springen:
... einen Gerätetreiber abschiessen/deaktivieren....? *neugier*

Hooken.

_________________
Na denn, dann. Bis dann, denn.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.