kostenloser Webspace werbefrei: lima-city


Enter in Delphi unterdrücken

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    norky

    Kostenloser Webspace von norky

    norky hat kostenlosen Webspace.

    Wie kann ich es machen, dass die Tastatur in einem Delphi-Programm nicht benutzt werden kann?! Oder dass zumindest die Leertatse und die Returntaste nicht angenommen werden, oder eine Prozedur beim Drücken der Returntaste startet, denn bisher kriege ich es hin mit OnKeyDown, aber bei der Returntaste wird dann einfach immer nur ein Button gedrückt, der nur mit der Maus gedrückt werden soll/darf...
    Also weiß jemand, wie ich die Return-Taste unterdrücken oder eine eigenständige Prozedur mit ihr auslösen kann?!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Setz' einfach das übergebene Zeichen (ich weiß jetzt nicht, ob das bei OnKeyDown oder bei OnKeyPress ist) auf #0 (wäre ja bei der Return-Taset #13)
    Eine eigenständige Prozedur rufst du auf, indem du einfach bei OnKeyDown überprüfst, ob die Return-Taste gedrückt wurde:
    if Key = #13 then ...
    Wenn du Programm- oder Systemweit die Returntaste abfangen willst, dann kannst du das nur über einen Tastaturhook machen!
  4. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    Die Return-Taste beim Button kann man nicht sperren, auch wenn man in dem Ereignis OnKeyDown/OnKeyPress/OnKeyUp die Variable 'Key' zurücksetzt.

    Für alle anderen Steuerelemente funktioniert das aber schon.
    Hier ein Codebeispiel. Hinweis: In der Form die Eigenschaft KeyPreview auf 'True' stellen.


    procedure TForm1.OnKeyPress(Sender: TObject; var Key: Char);
    begin
    if (Key = Chr(vk_Return)) or (Key = Chr(vk_Space)) then
    begin
    Key := #0;
    MessageDlg('Enter- und Leertaste sind gesperrt', mtInformation, [mbOK], 0);
    end
    else
    begin
    //Erlaubte Taste, nichts tun
    end
    ;
    end;


    Also entweder verwendest du keine Buttons oder du deaktivierst die Tastatur, siehe dazu www.dsdt.info
  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.


    Die Return-Taste beim Button kann man nicht sperren, auch wenn man in dem Ereignis OnKeyDown/OnKeyPress/OnKeyUp die Variable 'Key' zurücksetzt.

    Für alle anderen Steuerelemente funktioniert das aber schon.
    Hier ein Codebeispiel. Hinweis: In der Form die Eigenschaft KeyPreview auf 'True' stellen.


    procedure TForm1.OnKeyPress(Sender: TObject; var Key: Char);
    begin
    if (Key = Chr(vk_Return)) or (Key = Chr(vk_Space)) then
    begin
    Key := #0;
    MessageDlg('Enter- und Leertaste sind gesperrt', mtInformation, [mbOK], 0);
    end
    else
    begin
    //Erlaubte Taste, nichts tun
    end
    ;
    end;


    Also entweder verwendest du keine Buttons oder du deaktivierst die Tastatur, siehe dazu www.dsdt.info



    Wäre dann ein möglicher Workaround, beim KeyDown-Ereignis eine Variable zu setzen, und dafür beim OnButtonClick-Ereignis zu prüfen, ob diese Variable gesetzt ist? Dann sollte man wissen, ob das Ereignis über die Tasatur oder über die Maus ausgelöst wurde?!
  6. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    burgi schrieb:
    Wäre dann ein möglicher Workaround, beim KeyDown-Ereignis eine Variable zu setzen, und dafür beim OnButtonClick-Ereignis zu prüfen, ob diese Variable gesetzt ist? Dann sollte man wissen, ob das Ereignis über die Tasatur oder über die Maus ausgelöst wurde?!


    Ja das würde funktionieren. Allerdings reagieren weder OnKeyDown noch OnKeyPress auf die Taste "Enter" beim Button. Aber es reagiert OnKeyUp.

    Hier der Code:

    var
    Locked: Boolean;

    procedure TForm1.OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin

    if (Key = vk_Return) Or (Key = vK_Space) then
    begin
    MessageDlg('Enter- oder Leertaste wurde gedrückt.', mtInformation, [mbOK], 0);
    Locked := True;
    end
    else
    begin
    MessageDlg('Es wurde "' + Chr(Key) + '" gedrückt.', mtInformation, [mbOK], 0);
    Locked := False;
    end
    ;
    end;

    [...]

  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    @cbhp: tut mir leid, dass ich immer nur "Denkanstöße" geben kann, aber ich bin in der Arbeit, und da is nix mit Delphi! :-)
  8. Autor dieses Themas

    norky

    Kostenloser Webspace von norky

    norky hat kostenlosen Webspace.

    Vielen Dank!!!

    Waren wirklich tolle Ideen und Lösungen, aber ich habs jezz einfacher gelöst, es sollte halt so sein, dass einer der Buttons nur mit der Maus gedrückt werden darf, nich mit Enter oder Leertaste...
    Aber jezz hab ichs so, dass sobald der Button gekllickt wurde, der Fokus auf den nächsten Button geht, d.h. wenn man das mit der Maus amcht, bemerkt mans nicht,w enn man Enter drückt, kommt man auf den falschen button... ;)
  9. l*******r

    Du kannst es ja wohl so machen wie meine Vorposter geschrieben haben, indem du die Taste auf #13 überprüfst, nur musst du dann die Eigenschaft KeyPreview deines Formulars auf true setzen, damit du wirklich JEDEN Tastendruck bekommst.

    Der Abfang mit "if Key=#13 then Key:=#0" kommt dann in das OnKeyPress-Event des Formulars ;)
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!