Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi dxComponentPrinter1出现奇怪问题_Delphi_Devexpress - Fatal编程技术网

Delphi dxComponentPrinter1出现奇怪问题

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

这可能会被张贴在“信不信由你”问题下,但是…一旦我将dxComponentPrinter1(devexpress)放在表单上,我的功能就停止工作了:

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”。大卫,你是个和蔼可亲的人!:)我不会那么说。一旦您曾经遇到过与使用相关的范围问题,您永远不会忘记。