小编Jen*_*off的帖子

如何在TListView列上显示排序箭头?

Windows资源管理器有一个箭头,指示列表视图(在报表视图样式中)的哪个列按哪个方向排序(ASC与DESC).

是否可以TListView在Delphi中显示这样的排序指示箭头?

delphi listview delphi-xe3

6
推荐指数
1
解决办法
3097
查看次数

为什么我会收到"太多局部常量"错误?

Delphi 2009抱怨E2283错误:[DCC错误] outputcode.pas(466):E2283局部常量太多.使用较短的程序

Delphi 2007编译得很好.我找不到丰富的局部常数,它是一个短(500行)单位.你看到我能解决的任何丰富的常量或文字吗?

procedure TOutputCodeForm.FormCreate(Sender: TObject);
var
   poParser : TStringStream;
begin

   if ( IsWindowsVista() )  then
   begin
      SetVistaFonts( self );
   end;

   poParser := TStringStream.Create( gstrSQLParser );

   SQLParser := TSyntaxMemoParser.Create( self );
   SQLParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
   SQLParser.UseRegistry := True;
   SQLParser.CompileFromStream( poParser );

   FreeAndNil( poParser );
   poParser := TStringStream.Create( gstrCPPParser );



   cppParser := TSyntaxMemoParser.Create( self );
   cppParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
   cppParser.UseRegistry := True;
   cppParser.CompileFromStream( poParser );

   FreeAndNil( poParser );
   poParser := TStringStream.Create( gstrPasParser );

   pasParser := TSyntaxMemoParser.Create( self …
Run Code Online (Sandbox Code Playgroud)

delphi advantage-database-server delphi-2009

5
推荐指数
1
解决办法
3664
查看次数

Windows快捷方式是否支持很长的参数长度?

我正在尝试创建一个包含长参数字符串(> MAX_PATH)的快捷方式(在桌面上).

MSDN文档中明确指出,对Unicode字符串的字符串可以超过MAX_PATH.

生成的快捷方式在MAX_PATH字符(即Path+ Arguments)后完全切断.

我的实现是否有问题,或者这是一些Windows限制?

procedure CreateShortcut(APath: WideString;
  AWorkingDirectory: WideString; AArguments: WideString; ADescription: WideString;
  ALinkFileName: WideString);
var
   IObject : IUnknown;
   ISLink  : IShellLinkW;
   IPFile  : IPersistFile;
begin
   IObject := CreateComObject(CLSID_ShellLink);
   ISLink := IObject as IShellLinkW;
   ISLink.SetPath(            PWideChar(APath));
   ISLink.SetWorkingDirectory(PWideChar(AWorkingDirectory));
   ISLink.SetArguments(       PWideChar(AArguments));
   ISLink.SetDescription(     PWideChar(ADescription));
   IPFile := IObject as IPersistFile;
   IPFile.Save(PWideChar(ALinkFileName), False);
end;
Run Code Online (Sandbox Code Playgroud)

PS:操作系统是Windows XP(及以上版本).

windows delphi shortcut maxlength delphi-2007

5
推荐指数
2
解决办法
7933
查看次数

将int变量格式化为mm:ss

谁能帮助我如何在delphi中将int变量格式化为一分钟:秒?

示例:myVar:= 19;

我的标签标题应显示00:19

任何想法的人?谢谢

delphi time string-formatting

5
推荐指数
2
解决办法
9847
查看次数

我应该使用类或方法来包装动态远程过程调用吗?

情况

我想使RPC接口更容易使用.这是一个自定义界面,因此没有现成的包装器.

我必须围绕通常有许多参数的函数编写几个包装器.

可能的解决方案

解决方案1 ​​ - 为每个函数使用一个类:

TDoSomethingFunction = class
public
  property Arg1: Integer;
  property Arg2: string;
  property Arg3: Boolean;
  procedure Run;
end;
Run Code Online (Sandbox Code Playgroud)

调用者必须创建一个对象来调用该函数:

var
  DoSomething: TDoSomethingFunction;
begin
  DoSomething := TDoSomethingFunction.Create;
  try
    DoSomething.Arg1 := 0;
    ...
    DoSomething.Run;
  finally
  free;
end;
Run Code Online (Sandbox Code Playgroud)

方法2 - 为每个函数使用包装器方法:

procedure TRPCInterface.DoSomething(AArg1: Integer; AArg2: string; AArg3: Boolean);
Run Code Online (Sandbox Code Playgroud)

来电者可以简单地称之为:

TRPCInterface.DoSomething(0, ...);
Run Code Online (Sandbox Code Playgroud)

亲和反对

方法1 - 每个函数的类

反对

  • 需要更多代码.
  • 必须创建一个占用内存的对象.

  • 阅读代码更容易,您不必查看声明以查看参数是什么.

方法2 - 包装方法

反对

  • 您只能通过查看代码来判断使用哪些参数.

  • 编写的代码要少得多.
  • 包装器更薄(不需要创建任何对象).

我应该使用哪种方法?

delphi oop rpc wrapper

5
推荐指数
1
解决办法
267
查看次数

为参数化查询的参数赋值时的赋值错误

我正在使用Delphi XE2和AnyDac组件以及Advantage Database 10.在我的代码中,我使用的参数化查询如下:

q.SQL.Text := 'SELECT * FROM Table1 ' +
  'LEFT JOIN Table2 ON (Table1.ID = Table1 .ID_Table2) ' +
  'WHERE ' +
  ':0 BETWEEN Table1.StartAm AND Table1.EndeAm ' +
  'AND Table2 = :1';
q.Params[0].Value := AStartDateTime;
q.Params[1].Value := AIDRessourcenGruppe;
q.Open;
Run Code Online (Sandbox Code Playgroud)

这最终会出现异常:

Exception der Klasse EADSNativeException mit der Meldung'[AnyDAC] [Phys] [ADS] Error 7200:AQE Error:State = 22018;
NativeError = 2112; [iAnywhere Solutions] [Advantage SQL Engine]分配错误'aufgetreten.

当然AStartDateTime是一个有效的delphi TDateTime值,AIDRessourcenGruppe是一个整数值.

有趣的是,这两个变体有效:

q.SQL.Text := 'SELECT * FROM Table1 ' +
  'LEFT JOIN Table2 …
Run Code Online (Sandbox Code Playgroud)

delphi parameters advantage-database-server delphi-xe2 anydac

5
推荐指数
1
解决办法
1079
查看次数

为什么抑制符号可以用于Delphi中的控制字符,这是一个好主意吗?

我刚刚用一种奇怪的语法遇到了关于SO的答案:

如何在Delphi中的字符串中包含换行符?

MyString := 'Hello,' + ^M + ^J + 'world!';

我已经使用Delphi几年了,但我不知道你可以使用抑扬符号来控制字符.

这只是早期德尔福或Turbo Pascal时代遗留下来的吗?

它现在应该用吗?

PS:我不是在询问关于换行符的建议,有sLineBreak和原始问题中讨论的其他方法.

delphi syntax history

5
推荐指数
2
解决办法
623
查看次数

工作表范围内定义名称的表名是什么?

我正在尝试使用ODBC使用SQL查询工作表范围中的已定义名称.

我已经知道这有效:

SELECT * FROM [worksheet1$]       -- Query a whole worksheet
SELECT * FROM [worksheet1$A1:C10] -- Query A1:C10 of a worksheet
SELECT * FROM myname              -- Query a workbook scoped defined name 
Run Code Online (Sandbox Code Playgroud)

请注意,这myname是工作簿范围,而不是工作表作用域.

我原以为像Excel公式中的东西也适用于ODBC表名:

SELECT * FROM worksheet1!myname   -- Query a worksheet scoped defined name
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,我尝试了一些语法变体.

这是可能的,如果是,那么使用什么语法?

注意Delphi开发者:该A1:C10语法会导致麻烦TADOQuery,你必须设置ParamCheckFalse为了这个工作.

更新:

我正在使用随附的Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)版本.12.00.6606.1000Microsoft Office 2007

我已经检查过我正在使用的Delphi数据库组件的行为方式与Microsoft Query和Microsoft Access 2007相同.

sql delphi excel odbc

5
推荐指数
1
解决办法
928
查看次数

Delphi XE2 中的重复构造函数警告

我有以下.dpr

program TPWDDBManager;
{

  Delphi DUnit Test Project
  -------------------------
  This project contains the DUnit test framework and the GUI/Console test runners.
  Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
  to use the console test runner.  Otherwise the GUI test runner will be used by
  default.

}

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

uses
  DUnitTestRunner,
  TestuTPWDDBManager in 'TestuTPWDDBManager.pas';

{$R *.RES}

begin
  DUnitTestRunner.RunRegisteredTests;
end.
Run Code Online (Sandbox Code Playgroud)

和以下单位:

unit TestuTPWDDBManager;
{

  Delphi DUnit Test Case
  ----------------------
  This unit contains a skeleton test case …
Run Code Online (Sandbox Code Playgroud)

delphi unit-testing

5
推荐指数
2
解决办法
2282
查看次数

如何从XPath选择中获取IXMLNodeList?

我遇到了一个关于XPath和Delphi TXmlDocument的问题.

虽然答案适用于选择单个xml节点,但我想用它来选择节点列表.

我找到了一个类似的实用函数,它应该完全正确,但它无法正常工作.

显然有马车的功能:

uses
  Xml.Xmldom, Xml.XMLIntf, Xml.XMLDoc;

function SelectNodes(xnRoot: IXmlNode; const nodePath: WideString): IXMLNodeList;
var
  intfSelect : IDomNodeSelect;
  intfAccess : IXmlNodeAccess;
  dnlResult  : IDomNodeList;
  intfDocAccess : IXmlDocumentAccess;
  doc: TXmlDocument;
  i : Integer;
  dn : IDomNode;
begin
  Result := nil;
  if not Assigned(xnRoot)
    or not Supports(xnRoot, IXmlNodeAccess, intfAccess)
    or not Supports(xnRoot.DOMNode, IDomNodeSelect, intfSelect) then
    Exit;

  dnlResult := intfSelect.selectNodes(nodePath);
  if Assigned(dnlResult) then
  begin
    Result := TXmlNodeList.Create(intfAccess.GetNodeObject, '', nil);
    if Supports(xnRoot.OwnerDocument, IXmlDocumentAccess, intfDocAccess) then
      doc := intfDocAccess.DocumentObject …
Run Code Online (Sandbox Code Playgroud)

xml delphi xpath delphi-xe2

5
推荐指数
1
解决办法
1534
查看次数