2016-04-04 11 views
0

Mit Delphi XE8, Firemonkey Mehrgeräteform.Firemonkey Ton beim Drücken der Eingabetaste auf OSX

In einem Standard-TEdit eingerichtet für eine Passworteingabe, kann ich nicht den Standard-Alarmton stoppen, wenn der Benutzer die Eingabetaste drückt (unter OSX), Windows funktioniert gut.

Ich habe folgendes in die Ereignisse KeyDown und KeyUp versucht Einstellung:

procedure TfrmMain.txtPasswordPromptKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); 
begin 
    if (Key = vkReturn) and (btnPasswordPromptGo.Tag = 0) then begin 
    Key := vkNone; 
    KeyChar := #0; 
    btnPasswordPromptGoClick(sender); 
    end; 
end; 

procedure TfrmMain.txtPasswordPromptKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); 
begin 
    if (Key = vkReturn) and (btnPasswordPromptGo.Tag = 0) then begin 
    Key := vkNone; 
    KeyChar := #0; 
    end; 
end; 

Der Klang noch auf OSX spielt. Weiß jemand, wie man das stoppt?

+0

In einer VCL-Anwendung würden Sie nicht von diesem Code schreiben müssen. Sie würden einfach die Eigenschaft 'Default' auf der Schaltfläche OK auf true setzen. Funktioniert FMX nicht so? –

+0

Wow, in all den Jahren, in denen ich die Eigenschaften "Abbrechen" und "Standard" verwendet habe, habe ich nie bemerkt, dass der Standard-Signalton auch aus einem Textfeld entfernt wird! Danke, das funktioniert. Es stellte sich heraus, dass ich das übersehen habe, weil ich einen TCornerButton verwendet habe, der nicht die Default-Eigenschaft hat, aber ich konnte es in nur eine TButton ändern. – MikeD

Antwort

0

Verwenden vknone für Ihren Key-Wert nicht, sondern nur Ihr Ergebnis auf 0 gesetzt, dass der Signalton verhindern sollte.

procedure TfrmMain.txtPasswordPromptKeyDown(Sender: TObject; 
    var Key: Word; var KeyChar: Char; Shift: TShiftState); 
begin 
    if (Key = vkReturn) and (btnPasswordPromptGo.Tag = 0) then begin 
    Key := 0; 
    end; 
end; 

Wie Rob erwähnt, können Sie Ihre Default-Eigenschaft für die Schaltfläche, die ausgeführt werden soll, wenn die Rückgabe auftritt, auf true festlegen. Wenn Sie dies tun, sollten Sie den Code nicht benötigen, die den Wagenrücklauf isst.

+0

Ja, das ist, was ich ursprünglich versucht. Es funktioniert unter Windows und modalen Formularen auf dem Mac, aber nicht auf dem Hauptformular. Die Standardeigenschaft funktioniert jedoch. – MikeD

Verwandte Themen