keydown事件编译通不过(50分)

  • 主题发起人 主题发起人 老莫
  • 开始时间 开始时间

老莫

Unregistered / Unconfirmed
GUEST, unregistred user!
我让一个FORM响应onkeydown事件,但是在编译时
procedure TForm2.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
showmessage('111');
end;
却通不过,消息如下:
[Error] screen.pas(214): '.' expected but ';' found
[Error] screen.pas(215): ';', ')' or '=' expected but identifier 'Shift' found
[Error] screen.pas(215): Declaration of 'FormKeyDown' differs from previous declaration
[Fatal Error] Worddpr.dpr(7): Could not compile used unit 'screen.pas'
 
你的程序,在Form2.FormKeyDown前的某个过程或函数多了个End
 
先把这段程序删掉,再编译看错误是出在这段程序内部还是外部。
根据上面的提示,应该是这段程序前面缺少End或End后没加分号。
 
Hexi的手脚真快。
分给他
 
:)end.
=结束
 
我保证没有Hexi说的情况发生,如果去掉这段code一切正常。
 
我肯定,你的这段代码,准确无误,因为我试了。
1.难道你在type段中的此过程声明是手工加上去的,依错误代码而言,有可能错了。
2.此段代码是不是你从程序中copy过来的,检查一下此段或type form2中的声明有没有在key后丢掉;之类的。
3.注意一下‘;有没有用全角
4.你出掉此段代码是不是会有一个warning。
5.你再把你的这段代码copy过去试一下。
6.去掉showmessage('111');看看。
7.去掉此段代码和type中的声明,如通过,重新来过来过应该可以。

 
1、过程结构是系统自动加的。type中的声明也是系统自己加的
2、去掉showmessage,该过程在编译时就自动取消了。当然没问题。如果注释了,
则问题依旧。
3、我用同样的方法在另一个form中一切正常。
 
214,215分别是哪两行?
 
cAKK:
214:procedure TForm2.FormKeyDown(Sender: TObject;
var Key: Word;
215:Shift: TShiftState);
 
hahaha....haha..haha.ha
我把他的这段代码copy过去代替我原来的代码,果然不能通过,而且报的错跟他的一模一样,但我马上就调通了,你道如何,我的form名叫form1,hahaha,把
TForm2.FormKeyDown中的‘2’改为‘1’就行了。同志,你的form叫什么?真叫form2?
 
我保证没有Hexi说的情况发生,如果去掉这段code一切正常
去掉showmessage,该过程在编译时就自动取消了。当然没问题。如果注释了, 则问题依旧。
?????? 没有代码 则这个过程被优化掉了。更没写代码没什莫不同。如果注释了。
则有了代码。错误就出来了。
procedure TForm2.FormKeyDown(Sender: TObject;
var Key:word;shift:Tshiftstate;) 把这句话写成一行试试。
阿蒙。也问一句一行代码如何写成两行。需要什莫样的连字符
FormKeyDown ): Declaration of 'FormKeyDown' differs from previous declaration 与先前声明的不同。是 form2 的事件吗?或者你的参数都对应上了
吗?
 
更没写代码没什莫不同 改为 跟没写代码没什莫不同
 
劳模: 如果你确定你没有拼写错误,那么看上去你的代码没问题.
还是把完整的代码贴出来吧?
 
我也想看看,别逗大家啊
 
我把整段代码贴出来了,繁劳大家看看.
/////////////////////////
unit screen;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,inifiles;
type
TForm2 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Image7: TImage;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Timer1: TTimer;
Memo2: TMemo;
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
speed1,timedelay1:integer;
speed2,timedelay2:integer;
speed3,timedelay3:integer;
speed4,timedelay4:integer;
speed5,timedelay5:integer;
speed6,timedelay6:integer;
speed7,timedelay7:integer;
speed8,timedelay8:integer;
file1,file2,file3,file4,file5,file6:string;
settingfont:Tfont;
procedure seting();
implementation
uses word, settingcode;

{$R *.DFM}
procedure seting();
begin
with form2do
begin
shape1.Visible:=false;
shape2.Visible:=false;
shape3.Visible:=false;
shape4.Visible:=false;
shape5.Visible:=false;
shape6.Visible:=false;
end;

end;
procedure TForm2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
form1.ScrollingCreditsBox1.HaltScroll;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var _port,_stop,_run,_backrun:integer;
begin
_port:=readport();
_stop:=_port and 16;
_run:=_port and 224;
_backrun:=_port and 8;
if (_backrun<>0) and (_stop<>0) then
_close:=false;
if _close=true then
exit;
case _run of
128:begin
seting();
shape1.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file1);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
192:begin
seting();
shape2.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file2);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
0:begin
seting();
shape3.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file3);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
64:begin
seting();
shape4.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file4);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
160:begin
seting();
shape5.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file5);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
224:begin
seting();
shape6.Visible:=true;
if _stop=0 then
begin
form1.memo1.Lines.LoadFromFile(file6);
timer1.Enabled:=false;
form1.ShowModal;
end;
end;
end;
end;

FUNCTION ReadPort:byte;
begin
ASM
MOV DX, 379h;
IN AL, DX;
MOV @result, AL;
end;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
timer1.Enabled:=true;
end;

procedure TForm2.FormCreate(Sender: TObject);
var wordproini: TIniFile;
begin
settingfont:=tfont.Create;
wordproIni := TIniFile.Create('c:/wordpro.ini');
wordproIni.ReadSectionValues('setting', Memo2.Lines);
speed1:=strtoint(Memo2.Lines.Values['speed1']);
speed2:=strtoint(Memo2.Lines.Values['speed2']);
speed3:=strtoint(Memo2.Lines.Values['speed3']);
speed4:=strtoint(Memo2.Lines.Values['speed4']);
speed5:=strtoint(Memo2.Lines.Values['speed5']);
speed6:=strtoint(Memo2.Lines.Values['speed6']);
speed7:=strtoint(Memo2.Lines.Values['speed7']);
speed8:=strtoint(Memo2.Lines.Values['speed8']);
timedelay1:=strtoint(Memo2.Lines.Values['timedelay1']);
timedelay2:=strtoint(Memo2.Lines.Values['timedelay2']);
timedelay3:=strtoint(Memo2.Lines.Values['timedelay3']);
timedelay4:=strtoint(Memo2.Lines.Values['timedelay4']);
timedelay5:=strtoint(Memo2.Lines.Values['timedelay5']);
timedelay6:=strtoint(Memo2.Lines.Values['timedelay6']);
timedelay7:=strtoint(Memo2.Lines.Values['timedelay7']);
timedelay8:=strtoint(Memo2.Lines.Values['timedelay8']);
file1:=Memo2.Lines.Values['file1'];
file2:=Memo2.Lines.Values['file2'];
file3:=Memo2.Lines.Values['file3'];
file4:=Memo2.Lines.Values['file4'];
file5:=Memo2.Lines.Values['file5'];
file6:=Memo2.Lines.Values['file6'];

settingFont.Name:=Memo2.Lines.Values['fontname'];
settingFont.size:=strtoint(Memo2.Lines.Values['fontsize']);
//settingFont.color:=stringtocolor(Memo2.Lines.Values['fontcolor']);
if Memo2.Lines.Values['fontstyle']='fsbold' then
settingFont.style:=[fsbold];
if Memo2.Lines.Values['fontstyle']='fsItalic' then
settingFont.style:=[fsItalic];
if Memo2.Lines.Values['fontstyle']='fsUnderline' then
settingFont.style:=[fsUnderline];
if Memo2.Lines.Values['fontstyle']='fsStrikeOut' then
settingFont.style:=[fsStrikeOut];
wordproIni.Free;
end;

procedure TForm2.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
showmessage('111');
end;

end.
 
看不出,看来我还得继续修练。
 
没法测试,最好把DFM文件也贴出来.
另外:
uses word, settingcode;
没有这两个文件.
 
我测试没什么大错误。
1.在Interface 中我加了:
function ReadPort():Byte;
2.定义了_Close;
3.注释了uses word, settingcode;
然后编译通过。
 
这个问题放了这么久,还找不出答案,只好搁一搁了.
 

Similar threads

I
回复
0
查看
831
import
I
I
回复
0
查看
964
import
I
I
回复
0
查看
2K
import
I
I
回复
0
查看
3K
import
I
后退
顶部