我有很多行来检查edit1.text字段的类型内容,但是我需要使用OnKeyUp事件(由于某些原因),所以如何将此代码“转换”为Key:Word type(正常它的关键:OnKeyPress的Char?)
if not (key in ['0'..'9', #08]) then begin
key:=#0;
答案 0 :(得分:0)
使用Ord(Key)将键盘键的Word值转换为字符值。否则使用VK_值(如果可用)。
在你的片段中,你将char('0'..'9')与值(#08)混合在一起,我不确定你是否需要测试它。如果没有,那么(#08)需要在另一个比较中直接检查Key或Chr(Key)。
最好使用VK_UNKNOWN而不是#0。
这是我在Lazarus编写的一些工作代码中使用的KeyUp事件。 HTH。
procedure TfrmMain.lbCmdLinesKeyUp( Sender : TObject; var Key : Word; Shift : TShiftState );
begin
if ( Key = vk_return ) and ( lbCmdLines.ItemIndex > -1 ) then
begin
if ( Shift = [ ssCtrl ] ) then
begin
if btnLineEdit.Enabled then
btnLineEdit.Click;
end
else
begin
if btnRun.Enabled then
btnRun.Click;
end;
end;
if ( Key = Ord( 'C' ) ) or ( Key = Ord( 'c' ) ) then
begin
if Shift = [ ssCtrl ] then
actCopyClipCmdLine.Execute;
//order, apparently, doesn't matter, both work
//if Shift = [ ssCtrl, ssShift ] then
if Shift = [ ssShift, ssCtrl ] then
mniCopyCLListClipClick( Self );
//if ( ssCtrl in Shift ) and ( ssShift in Shift ) and ( ssAlt in Shift ) then
if Shift = [ ssCtrl, ssShift, ssAlt ] then
actCopyCmdLine.Execute;
end;
end;