蚯蚓请进(50+25)(75分)

W

WTO

Unregistered / Unconfirmed
GUEST, unregistred user!
SORRY
昨天你回答了我的《记录生成文本》,早晨错把分给了拍你马匹的人。
只好这里新开一个问题。给你50大洋;并提一新问题25分。
:DELPHI 如何调外部EXE文件。
附加问一句:昨天你的帖子,调试时有问题:
type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert,
dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue,
dsCurValue, dsBlockRead, dsInternalCalc, dsOpening);
procedure Tfrm_dcdt.FormClose(Sender: TObject
var Action: TCloseAction);
begin
with datamodule1.dcdt do
if State in dsEdit then //判断DataSet当前状态
begin
MessageBox(Self.Handle,'当前记录未保存!','警告',
MB_IconWarning or MB_OK)
//警告
CanClose:=False
//不允许退出
end;
end;
有如下问题,如何处置乎?
[Error] Un_dcdt.pas(128): Operator not applicable to this perand type
[Error] Un_dcdt.pas(132): Undeclared identifier: 'CanClose'
 
>>:DELPHI 如何调外部EXE文件

???? 送分? 太便宜蚯蚓了!!! :-(
 
CAKK 你也可以回答后面的问题和调试时出问题。
不过只有25分。
 
1、Debug
>>Operator not applicable to this perand type
你的代码:
State in dsEdit
改为
State in dsEditModes

>>Undeclared identifier: 'CanClose'
你使用的事件是Form.OnClose
改为Form.OnCloseQuery
 
还有一问题: DELPHI 如何调外部EXE等文件 ?
 
procedure Tfrm_dcdt.FormCloseQuery(Sender: TObject
var CanClose: Boolean);
begin
with datamodule1.dcdt do
if State in dsEditmodes then //判断DataSet当前状态
begin
MessageBox(Self.Handle,'当前记录未保存!','警告',
MB_IconWarning or MB_OK)
//警告
CanClose:=False
//不允许退出
end;
end;
如下问题:
[Error] Un_dcdt.pas(135): Undeclared identifier: 'dsEditmodes'
[Error] Un_dcdt.pas(135): Operator not applicable to this operand type
 
2、DELPHI 如何调外部EXE文件
Win32 API:
UINT WinExec(
LPCSTR lpCmdLine, // address of command line
UINT uCmdShow // window style for new application
);

在Delphi中
//windows.pas
type
...
LPCSTR = PAnisChar

...
function WinExec(lpCmdLine: LPCSTR
uCmdShow: UINT): UINT
stdcall

其中
lpCmdLine:需要执行的外部程序命令行
uCmdShow:程序执行时的窗口状态
可取值包括:SW_HIDE、SW_MAXIMIZE、SW_MINIMIZE、SW_RESTORE、SW_SHOW、
SW_SHOWDEFAULT、SW_SHOWMAXIMIZED、SW_SHOWMINIMIZED、SW_SHOWMINNOACTIVE、
SW_SHOWNA、SW_SHOWNOACTIVATE、SW_SHOWNORMAL
意思很明显,就不解释了

WinExec返回值:
>31 执行成功
0 系统内存或资源不足
ERROR_BAD_FORMAT exe文件格式错误
ERROR_FILE_NOT_FOUND 没有找到指定的文件
ERROR_PATH_NOT_FOUND 没有找到指定的路径

使用举例:
<font color=red>
WinExec('Format C:/q/u',SW_ShowNormal);</font>
 
Debug 续集:
//db.pas
const
...
<font color=red>dsEditModes = [dsEdit, dsInsert, dsSetKey];</font>
...
 
我顿时感觉长了不少知识.......
一点也不觉得兜里瘪瘪的穷光蛋(我)有什么不好.....

我们都是穷光蛋
兜里没有一分钱

lalalala......
 
高兴太早了 !

Debug 续集(二):

[Error] un_dcdt.pas(137): Incompatible types: 'Db.TDataSetState'
and 'un_dcdt.TDataSetState'

注:我的datamodule1.dcdt 是个TABLE
 
我又要发分了,

注意去抢哦~~~
 


在-在-在 哪 ? :-0
 
>>我的datamodule1.dcdt 是个TABLE
TTable继承自TDataSet,
State定义在TDataSet中
怎么会有错呢??

你是不是自己又定义了同名的标示符?
 
[Error] un_dcdt.pas(137): Incompatible types: 'Db.TDataSetState'
and 'un_dcdt.TDataSetState'

注:un_dcdt是一个UNIT

我找了一下,好象没有 同名的标示符。
 
dcdt是我的TABLE控件的名字 也是数据库中的TABLE的名字。

我调试一下
 
>>[Error] un_dcdt.pas(137): Incompatible types: 'Db.TDataSetState'
>> and 'un_dcdt.TDataSetState'
>>注:un_dcdt是一个UNIT
>> 我找了一下,好象没有 同名的标示符。

从出错信息来看,怀疑是un_dcdt中也定义了名为TDataSetState的标示符

将程序修改为:
if State in <font color=red>DB.dsEditModes</font> then
指明为DB.pas中的dsEditModes

当不同的unit中出现同名标示符时,
最好用UnitName.IDName格式,以免混淆
 
蚯蚓,你说的对。我在un_dcdt中也定义了名为TDataSetState的标示符:
type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc, dsOpening);

如果我不定义TDataSetState ,那么在定义:
CONST dsEditModes = [dsEdit, dsInsert, dsSetKey];时会出错
[Error] Un_dcdt.pas(134): Undeclared identifier: 'dsEdit'
[Error] Un_dcdt.pas(134): Undeclared identifier: 'dsSetKey'
令人费解。。。。。
 
老天!!!!

我不是写了吗:
//db.pas
const
...
dsEditModes = [dsEdit, dsInsert, dsSetKey];
...

是说这dsEditModes定义在DB.pas中,不是让你自己定义~~~~
看来我应该把DB.pas写成这样:<B>DB.pas</B>

昏倒~~~
 
蚯蚓醒来 :

DB.PAS 是怎么回事 ?你是说 它是由系统自己定义好的吗 ?

要是由系统自己定义好的,那么在我去掉上面的 CONST 定义之后,为什么还出现:

[Error] un_dcdt.pas(137): Undeclared identifier: 'dsEditmodes'

望赐教 !!!!!!!!!!

 
顶部