Delphi dxComponentPrinter1出现奇怪问题
这可能会被张贴在“信不信由你”问题下,但是…一旦我将dxComponentPrinter1(devexpress)放在表单上,我的功能就停止工作了:Delphi dxComponentPrinter1出现奇怪问题,delphi,devexpress,Delphi,Devexpress,这可能会被张贴在“信不信由你”问题下,但是…一旦我将dxComponentPrinter1(devexpress)放在表单上,我的功能就停止工作了: Function GetUserFromWindows: string; Var UserName : string; UserNameLen : Dword; Begin UserNameLen := 100; SetLength(userName, UserNameLen) ; If GetUserName(PCh
Function GetUserFromWindows: string;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 100;
SetLength(userName, UserNameLen) ;
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else
Result := 'Unknown';
end;
当我移除它(dxComponentPrinter1)时,它工作正常。当dxComponentPrinter1位于表单上时,我得到的错误如下:
[dcc32错误]单元3.pas(101):E2034实际参数过多[dcc32]
错误]Unit3.pas(101):E2012表达式类型必须为布尔型
Delphi XE6在红线下划线:
GetUserName(PChar(UserName),UserNameLen)
如果我删除该函数,那么一切都可以编译。没有错误。
以前有人遇到过这种情况吗 将组件添加到表单时,会将devExpress单元添加到uses子句中。此单元定义了一个名为
GetUserName
的函数,您的代码现在可以看到该函数,而不是在Windows
单元中声明的要使用的函数
您可以通过完全限定对GetUserName
的调用来处理这个问题。或者
Windows.GetUserName
或
取决于使用时对Windows
单元的命名方式
就我个人而言,我希望看到这个GetUserFromWindows
函数是在一个低级单元而不是GUI单元中声明的
如果您想创建一个读取用户名并可以处理任意长度名称的函数,那么您可以选择这个可能过度设计的版本:
function UserName: string;
var
Len: DWORD;
begin
Len := 0;
Win32Check(not GetUserName(nil, Len) and (GetLastError=ERROR_INSUFFICIENT_BUFFER));
SetLength(Result, Len-1);
Win32Check(GetUserName(PChar(Result), Len));
end;
请注意,我在这里没有完全限定,因为我假设您将此函数移动到不使用dexExpress UI组件的其他单元中。将组件添加到表单时,会将一个devExpress单元添加到uses子句中。此单元定义了一个名为
GetUserName
的函数,您的代码现在可以看到该函数,而不是在Windows
单元中声明的要使用的函数
您可以通过完全限定对GetUserName
的调用来处理这个问题。或者
Windows.GetUserName
或
取决于使用时对Windows
单元的命名方式
就我个人而言,我希望看到这个GetUserFromWindows
函数是在一个低级单元而不是GUI单元中声明的
如果您想创建一个读取用户名并可以处理任意长度名称的函数,那么您可以选择这个可能过度设计的版本:
function UserName: string;
var
Len: DWORD;
begin
Len := 0;
Win32Check(not GetUserName(nil, Len) and (GetLastError=ERROR_INSUFFICIENT_BUFFER));
SetLength(Result, Len-1);
Win32Check(GetUserName(PChar(Result), Len));
end;
请注意,我在这里没有完全限定,因为我假设您将把这个函数移动到一个不使用dexExpress UI组件的不同单元中。我想我已经解释过,如果Winapi.Windows.GetUserName(PChar(UserName),UserNameLen)那么…似乎可以工作了…谢谢!虽然一开始看起来很奇怪,但这实际上是一个很好的问题。在一百万年内,我不会想到打印机组件也会使用“GetUserName”。大卫,你是个和蔼可亲的人!:)我不会那么说。一旦你遇到过与使用相关的作用域问题,你永远不会忘记。我想我已经解释过,如果Winapi.Windows.GetUserName(PChar(UserName),UserNameLen),那么…似乎可以工作了…谢谢!虽然一开始看起来很奇怪,但这实际上是一个很好的问题。在一百万年内,我不会想到打印机组件也会使用“GetUserName”。大卫,你是个和蔼可亲的人!:)我不会那么说。一旦您曾经遇到过与使用相关的范围问题,您永远不会忘记。