PDA

Ver la Versión Completa : Guardar valor de TShiftState


Angel.Matilla
14-05-2020, 11:39:48
¿Cómo puedo hacer en un evento OnKeyDown para guardar en una variable el valor TShiftState?

Neftali [Germán.Estévez]
14-05-2020, 17:10:01
Hola Ángel.
No veo el problema. El parámetro en el OnKeyDown es como se ve:



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)




Basta con guardar el valor del parámetro Shift, en una variable de ese tipo.
¿O lo que quieres es guardarlo (por ejemplo) en un campo de la Base de Datos?
En ese caso al ser un conjunto (set) deberás convertirlo a binario, a un string, a un integer,... (pero creo que en cualquier caso debes hacerlo manualmente).

Angel.Matilla
15-05-2020, 10:00:54
Gracias por la respuesta. No, quiero guardarlo en una variable pero las formas en las que he probado me dan todas error al compilar y no se me ocurre como más allá de guardar cada estado en una variable tipo bool:
bool lShift[3];
Word lKey;

void __fastcall TfSocios::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
lShift[0] = Shift.Contains(ssShift);
lShift[1] = Shift.Contains(ssAlt);
lShift[2] = Shift.Contains(ssCtrl);
lKey = Key;
}
Y luego comprobar cada uno de esos valores cuando me haga falta, pero estaba seguro que debe haber otra forma que no soy capaz de encontrar por más que he buscado.

Angel.Matilla
15-05-2020, 10:32:02
Vale. Había probado un montón de formas... salvo la correcta: TShiftState variable; :mad: