Entwickler-Ecke
Sonstiges (Delphi) - Tasten sperren (Tastendruck verhindern) bzw. deaktivieren
Wolfgang - Di 17.01.06 10:13
Titel: Tasten sperren (Tastendruck verhindern) bzw. deaktivieren
Hi!
Ich würde gerne in einem Programm die Pfeiltasten deaktivieren oder einfach nur verhindern, dass sie auf einen Druck reagieren.
Könntet ihr mir vielleict weiterhelfen?
thx im Vorhinein.
PS: Warum werden mir bei diesem Quellcode manchmal Scrollbalken anezeigt, obwohl ich die Höhe und Breite extra um die Höhe und Breite des Buttons reduziert habe?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); label anfang; begin
anfang:
randomize; button1.Top:=random(form1.Height-button1.Height); button1.left:=random(form1.width-button1.width); if button1.top=button2.Top then goto anfang; if button1.Left=button2.Left then goto anfang;
end; |
jasocul - Di 17.01.06 10:41
zum Beispiel so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key in [chr(vk_left),chr(vk_right)] then begin Key := #0; end; end; |
Und dein Source mit Label und Goto :mahn: . Sowas macht man doch nicht mit Delphi :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin randomize; repeat button1.Top:=random(form1.Height-button1.Height); button1.left:=random(form1.width-button1.width); until (button1.top <> button2.Top) and (button1.Left <> button2.Left) end; |
Wolfgang - Di 17.01.06 11:31
Danke für deine Hilfe.
Ah und sorry wegen dem Label :oops: werds gleich ändern!
jasocul - Di 17.01.06 12:23
Wolfgang hat folgendes geschrieben: |
Ah und sorry wegen dem Label :oops: werds gleich ändern! |
War nicht so gemeint. Wir alten Kerle reagieren da einfach nur empfindlich. Wenn es nicht erforderlich ist, sollte man Goto u.ä. vermeiden. Ist aber eher eine Frage des Programmierstils.
Wolfgang - Mi 18.01.06 09:33
Hi jacoul!
Ich habe das mit dem Keypress ausprobiert. Jedoch fonktioniert es nicht.
Hab ich da was falsch gemacht oder ist es der falsche Lösungsweg für mein Progamm?
Delphi-Quelltext
1: 2: 3: 4:
| if Key in [chr(vk_left),chr(vk_right),chr(vk_up),chr(vk_down)] then begin Key := #0; end; |
Ich will ein kleines Programm schreiben, bei dem in einem Label die Frage steht "Wollen Sie eine Gehaltserhöhung?". Außerdem gibt es 2 Buttons "Ja" und "Nein". Der "Ja"-Button springt weg, sobald man mit der Maus darüber fährt. Der Tabstop wurde deaktiviert, nur mit den Pfeiltasten erreiche ich den Button noch.
Meine stupide und unschöne Lösung: Timer, der alle 1/1000 Sekunden die Activecontrol auf den "Nein"-Button" setzt.
Wie geht das besser?
jasocul - Mi 18.01.06 09:47
Hast du geprüft, ob das KeyPreview der Form auf True?
Ich habe das gerade mal mit Checkboxen ausprobiert. KeyPress und KeyDown werden gar nicht ausgelöst und KeyUp ist einfach zu spät. Warum das so ist, kann ich mir grob vorstellen, aber das hilft hier jetzt nicht weiter.
Probier doch mal, ob dir das OnExit-Ereignis weiter hilft. Oder hat noch jemand eine bessere Idee?
Wolfgang - Mi 18.01.06 10:40
Hi!
Ich hab mein Programm im Dateianhang als zip file.
Wenn du dir das ansiehst, kannst du mir auch vielleicht auch gleich sagen, warum ich teilweise bei der Form die scrollbalken bekomme, obwohl ich Button1.top zufällich von Form1.Height-Button1.Height und Button1.Left zufällig von Form1.Width-Button1.Width errechne.
thx Wolfgang
jasocul - Mi 18.01.06 10:50
Hast eigentlich alles richtig gemacht. Allerdings wird das Ereignis nie aufgerufen. Die Gründe liegen irgendwo in Windows versteckt.
Folgende Lösung führt auch zum Ziel:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Enter(Sender: TObject); begin Button2.SetFocus; end; |
Zu deinem Problem mit den Scroll-Balken:
Du musst bei der Positionierung deines Buttons noch die Größe der Fläche der Form beachten und die Größe des Buttons selbst. Sonst landet der Button außerhalb des sichtbaren Bereichs.
Wolfgang - Mi 18.01.06 10:57
Danke
Ich dachte, dass ich die Größe der Form und die Größe des Buttons bereits mit
Delphi-Quelltext
1: 2:
| button1.Top:=random(form1.Height-button1.Height); button1.left:=random(form1.width-button1.width); |
beachtet habe.
Moderiert von
Gausi: Beitragsformatierung überarbeitet.
jasocul - Mi 18.01.06 11:39
Die Form ist aber größer als die nutzbare Fläche. Du musst noch den Form-Balken (oben) und die Ränder berücksichtigen.
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!