小编mgh*_*hie的帖子

将Interface的方法作为参数传递

是否可以将接口的方法作为参数传递?

我正在尝试这样的事情:

interface

type
  TMoveProc = procedure of object;
  // also tested with TMoveProc = procedure;
  // procedure of interface is not working ;)

  ISomeInterface = interface
    procedure Pred;
    procedure Next;
  end;

  TSomeObject = class(TObject)
  public
    procedure Move(MoveProc: TMoveProc);
  end;

implementation

procedure TSomeObject.Move(MoveProc: TMoveProc);
begin
  while True do
  begin
    // Some common code that works for both procedures
    MoveProc;
    // More code...
  end;
end;

procedure Usage;
var
  o: TSomeObject;
  i: ISomeInterface;
begin
  o := TSomeObject.Create;
  i := GetSomeInterface;
  o.Move(i.Next);
  // …
Run Code Online (Sandbox Code Playgroud)

delphi oop interface callback

11
推荐指数
2
解决办法
3901
查看次数

如何在Delphi中通过引用传递数组?

我已经读过关于通过引用传递等等

procedure test(var x:integer);
begin
  x:=x+5;
end;
Run Code Online (Sandbox Code Playgroud)

所以上面的代码通过引用更新5.我假设我是通过引用更新数组我可以声明var X:blah数组 ...有一些绑定错误,只是想知道我是否应该使用数据类型指向数据的指针或指针永远是int ...只是所以我知道我是如何通过引用或我的代码中的其他东西进行传递的问题.

delphi parameters types reference

11
推荐指数
2
解决办法
3万
查看次数

在Mac OS X上测试IE6

我希望能够在Mac OS X上完全测试我的网页的兼容性.我已经安装了Parallels桌面.它工作正常,但它使用了大量资源......

所以我希望能够测试OS X中的所有内容.实际上我正在为Mac寻找Explorer 6.

有什么建议吗?

internet-explorer

10
推荐指数
2
解决办法
1万
查看次数

为什么ReadDirectoryChangesW会忽略事件?

我使用ReadDirectoryChangesW来监视指定的目录,并在检测到更改时更新索引结构.我使用以下代码(粗略)

var
  InfoPointer : PFileNotifyInformation;
  NextOffset : DWORD;
...
while (not Terminated) do begin
  if ReadDirectoryChangesW (FDirHandle, FBuffer, FBufferLength, True,
                            FFilter, @BytesRead, @FOverlap, nil) then
    begin
    WaitResult := WaitForMultipleObjects (2, @FEventArray, False, INFINITE);
    if (WaitResult = waitFileChange) then
      begin 
      InfoPointer := FBuffer;
      repeat
        NextOffset := InfoPointer.NextEntryOffset;
        ...
        PByte (InfoPointer) := PByte (InfoPointer) + NextOffset;
      until NextOffset = 0;
      end;
    end;
end;  
Run Code Online (Sandbox Code Playgroud)

过滤器是

FFilter :=  FILE_NOTIFY_CHANGE_FILE_NAME or
            FILE_NOTIFY_CHANGE_DIR_NAME or
            FILE_NOTIFY_CHANGE_SIZE or
            FILE_NOTIFY_CHANGE_LAST_WRITE;
Run Code Online (Sandbox Code Playgroud)

和目录句柄是这样获得的:

FDirHandle := CreateFile (PChar (FDirectoryWatch.WatchedDirectory),
                          FILE_LIST_DIRECTORY or GENERIC_READ, …
Run Code Online (Sandbox Code Playgroud)

windows filesystems delphi readdirectorychangesw delphi-2009

10
推荐指数
2
解决办法
8357
查看次数

当值仅使用默认名称时,如何在Inno Setup中获取注册表值?

我正在尝试使用Inno Setup的Pascal脚本从Windows注册表(在本例中为Google Sketchup)获取应用程序的安装目录,以便我可以在那里安装插件.

注册表项没有名称,它在Regedit中只有"(默认)".

我试过这个:

RegQueryStringValue( HKLM, 'SOFTWARE\Google\Google Sketchup 6', '(Default)', pluginLoc );
Run Code Online (Sandbox Code Playgroud)

但它没有返回值.有什么建议?

windows registry pascal inno-setup

10
推荐指数
1
解决办法
2万
查看次数

设置文件名是否可以从可执行文件版本号派生?

是否可以让Inno Setup读取主可执行文件的文件版本,并将创建的设置的名称设置为"myapp_setup_1_0_3708_19805.exe"?

inno-setup

10
推荐指数
2
解决办法
7359
查看次数

CollabNet SVN Server还是VisualSVN?

我想在Windows 2003系统上设置SVN服务器.

目前我不确定是否应该安装CollabNet-SVNVisualSVN.我已经读过,CollabNet-SVN只提供了一个用于管理的命令行客户端,并且设置起来有点乏味.VisualSVN附带一个基于GUI的管理客户端,易于使用.

因此我有一些问题:

CollabNet SVN Server是否有免费的管理工具(带有GUI)?

是否有简短易学的教程来使用CollabNet SVN?

Visual SVN也安装了Apache!对于CollabNet SVN,这不是必需的.如果Windows Server上还有活动的IIS,是否存在问题?

使用带有apache安装的CollabNet SVN会更好吗?在我的情况下,没有必要访问Web!

Visual SVN(标准版)和CollabNet SVN的功能是否相同?

svn

10
推荐指数
2
解决办法
1万
查看次数

名称的推荐数据库列大小是多少?

在数据库设计方面,对于某些字段的推荐列大小,有些是第一个,中间名和姓吗?另外,中间名称是安全的标准一个字符,还是允许中间名首字母的额外空格?

具体来说,我正在寻找尺寸,这将是我不必担心国际使用的东西.我看过一些中间首字母是两个字符,所以我怀疑单个字符是个好主意,但我很想知道那里是否有任何指导方针.

database-design internationalization

9
推荐指数
2
解决办法
5466
查看次数

Delphi 6 - 运行时读取控制台应用程序的输出

如何在运行时读取控制台应用程序输出.我启动控制台应用程序,并希望读取控制台应用程序打印输出.

delphi console

9
推荐指数
1
解决办法
6320
查看次数

Delphi拖动可以"升级"到对接吗?

我有一个TPageControl页面都是使用附加的各种形式ManualDock().用户应该能够通过拖动来重新排列选项卡,这已经有效.然而,也应该可以移除停靠的表格.

现在我有以下代码:

procedure TMainForm.PageControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbLeft) and (Shift * [ssShift, ssCtrl] = [])
    and PageControl.DockSite
  then begin
    PageControl.BeginDrag(False, 32);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果按住键ShiftCtrl键,则将启动对接操作,否则可以通过拖动来重新排列选项卡.

使用键作为修饰符是很尴尬的.当鼠标光标位于页面控件的选项卡区域之外时,有没有办法取消活动拖动操作,并开始对接子窗体?这是Delphi 2009.

delphi drag-and-drop docking

9
推荐指数
1
解决办法
1971
查看次数