const的问题(100分)

  • 主题发起人 主题发起人 wangfu
  • 开始时间 开始时间
W

wangfu

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TTsql.edtStructureNameClick(Sender: TObject);
const
SkipNext: Boolean = True;
begin
if SkipNext then
begin
(Sender as TEdit).SelectAll;
SkipNext := not SkipNext;
end
else
SkipNext := not SkipNext;
end;

看看有错吗?我的编译器不能通过,这个是下载的源代码中的一部分
而已昨天也看到也看到一本书上有类似的写法,告诉我为什么?谢谢。
 
SkipNext := not SkipNext //error
常量值不能改变。
 
to wangfu:

SkipNext := not SkipNext ,应该错在这一句。
skipnext既是const ,就不能赋值改变它。
这个错误应该是比较明显的。
 
要改变值,用变量var
 
我就是觉得不对亚,可是偏偏一天之内看见2个地方都这样用
一个是叫做《Delphi 6应用开发指南》作者是这样写得
另外就是一个朋友得源代码中也这样写得,按理说这个朋友的软件都可以用,
为什么偏偏这一句出错呢?

我都怀疑了,所以问问大家
 
应该不是Const的问题。
(Sender as TEdit).SelectAll 中的Sender 既然是TEdit,就应该在TEdit
控件中添加事件,不知道你的edtStructureNameClick是不是TEdit的事件?
 
procedure TTsql.edtStructureNameClick(Sender: TObject);
const
SkipNext: Boolean = True;
begin
if SkipNext then
begin
SkipNext := not SkipNext;
end
else
SkipNext := not SkipNext;
end;

楼上的,你可以完全不考虑那句,删掉就是咯
 
贴那段出来 Delphi 6应用开发指南》

……………………………………………………………………………………
在实现部分实际上包含了一个声明,指出了对前述过程的实现。
function SendMessage
external user32 name 'SendMessageA';
external 子句表明了包含该过程的库的名字。子句external user32 意味着所用的库是user32.dll。如果在
Windows.pas 中查找user32,可以发现user32 被定义为常数‘user32.dll’。由于Delphi 已经声明了该过程,
如果您要使用,只需将Windows 单元加入到uses 子句中并调用该过程。试一试下面的例子。
1.创建新的工程(将创建空白的窗体)。
2.从组件面板的Standard 属性页双击TEdit 控件和TButton 控件。这样,在Form1 上将出现这些控件。
3. 在Object Inspector 中选定Button1 的Caption 特性。键入Toggle Selection 作为Button1 的标题。
4.在窗体上,双击Button1 以生成Button1 的OnClick 处理程序。向事件处理程序添加如下代码:
1. procedure TForm1.Button1Click(Sender: TObject);
第2 章学好面向对象的Pascal 42
2. const
3. StartPosition : Integer = 0;
4. EndPosition : Integer = -1;
5. begin
6. Edit1.SetFocus;
7. StartPosition := Not StartPosition;
8. EndPosition := Not EndPosition;
9. SendMessage(Edit1.Handle, EM_SETSEL, StartPosition,EndPosition);
10. end;
第1 行和第10 行代码是由Delphi 添加的。第3 行和第4 行定义了类型化常数。它们的行为特性与C++
的静态变量相似,在对该过程的调用之间其值保持不变。Edit1.SetFocus 将焦点设置到编辑控件,因为按钮
在单击时获得了当前焦点。第6 行和第7 行将StartPosition 和EndPosition 在0 和-1 之间切换。第9 行调
用了在Windows.pas 单元中声明的Windows API 函数SendMessage。前面提到过TWinControl 的每个后继
都含有一个Windows 句柄,它可以作为SendMessage 的第一个参数。EM_SETSEL 是预定义的Windows
消息。如果StartPosition 为-1 而EndPosition 为0,则文字被取消选定。如果值反过来,则文字被选定。
仅Windows.pas 单元中,就有大约30000 行的声明代码。Windows API 非常巨大,并且正越来越大。
必须使用参考资料,才能找到可用的东西。在实现新的过程之前,请花费一些时间在API 中查找。如果
Delphi 中没有,那它可能在其他地方的API 中。
 
这个错误只有在D6中存在。在单元前加上一句:
{$J+}
就可以了。D6中对于类型常量默认的设置是{$J-}
 
谢谢 djdsz
果然如此。
 
多人接受答案了。
 
后退
顶部