小编Rod*_*ddy的帖子

Delphi XE3中Streams的基础读/写方法是什么?

我为旧版RADStudio提供了一些派生类,只需重新实现Read,Write,Seek方法以及Size和Position属性.

我希望将这些移植到XE3,但我看到现在(例如)有三个重载Read- 原始的一个,加上两个以TBytes作为参数.

德尔福

function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; overload; virtual;
function Read(var Buffer: TBytes; Count: Longint): Longint; overload;
Run Code Online (Sandbox Code Playgroud)

C++

virtual int __fastcall Read(void *Buffer, int Count)/* overload */;
virtual int __fastcall Read(System::DynamicArray<System::Byte> Buffer, int Offset, int Count)/* overload */;
int __fastcall Read(System::DynamicArray<System::Byte> &Buffer, int Count)/* overload */;
Run Code Online (Sandbox Code Playgroud)

我需要实现这三个,还是只需一个?如果只有一个,哪一个......?

通常情况下,我可以从VCL源代码中找到它,但我目前只有试用版(无源代码).

delphi tstream delphi-xe3

4
推荐指数
2
解决办法
369
查看次数

Delphi菜单合并问题

我正在尝试将两个主菜单合并在一起,但是在使用子项获得正确结果时遇到了问题.我在我的MenuItems上使用GroupIndex属性来控制合并/插入.

Menu1(带有groupindices)是这样的

  • 文件= 10
    • 开放= 11
    • 关闭= 12
  • 编辑= 20
    • 切= 21
    • 糊= 22
  • 帮助= 90
    • 关于= 91

Menu2是这样的

  • 编辑= 20
    • 清除= 23
  • 窗口小部件30 =
    • WIDGET1 = 31
    • WIDGET2 = 32

而我正在做

  Menu1.Merge(Menu2);
Run Code Online (Sandbox Code Playgroud)

我希望组合菜单在Edit菜单中有一个新的顶级菜单"Widgets"和一个新的"Clear"命令."小部件"工作正常,但编辑菜单丢失了剪切和粘贴,这不是我想要的.

如何停止剪切和粘贴命令消失?

delphi vcl menu

3
推荐指数
1
解决办法
1937
查看次数

为什么 Delphi TTreeNodes 从根本上与 TCustomTreeView 相关?

我试图在内存中构建几棵“树”,然后将其中一棵分配给用户可以与之交互的 TTreeView 控件。但是,如果不传递指向现有 TTreeView 的指针,我就无法构造任何 TTreeNodes 对象。传入 NIL 会导致 AV。

两个问题:- TTreeNodes 和 TTreeViews 之间这种“硬”链接的原因是什么,以及解决该问题的最佳方法是什么?

我可以看到的一些选项是:

  • 维护我自己的树结构,无需 ttreenodes 并根据需要动态构建 TTreeNodes。
  • 拥有多个不可见的 TTreeView 对象,这些对象仅用于使 TTreeNodes 工作。

..但我还没有权衡这些的利弊。

delphi tree c++builder ttreenodes

3
推荐指数
1
解决办法
1276
查看次数

将WM_COMMAND发送到TMenuItem

在我的Delphi表单的OnShow方法中,我确定在打开表单后必须自动打开一个对话框 - 我应该可以通过模拟menuitem上的点击来完成此操作.

但是,调用menuitem.Click会在主窗体打开之前显示对话框 - 这不是我想要的.

我希望这应该做我想要的,但我找不到要通过"wparam"将点击发送到我的menuitem的参数.

PostMessage(handle, WM_COMMAND, wparam, 0)
Run Code Online (Sandbox Code Playgroud)

MSDN文档WM_COMMAND谈IDM_*标识符,但如何出现在德尔福?

delphi winapi postmessage tmenuitem

3
推荐指数
1
解决办法
2843
查看次数

C++和DirectShow

我刚刚开始使用DirectShow编程,DirectShow API的'C'特性使我的皮肤爬行.无尽的返回代码而不是异常,addref/release遍布各处,函数获取指针指针...

是否有任何'C++友好'的DirectShow编程包装器隐藏下面的所有COM丑陋.

c++ com winapi directshow

3
推荐指数
1
解决办法
1569
查看次数

C++模板可以很好地与VCL类一起使用吗?

我正在尝试使用C++模板'mixins'来创建一些具有共享附加功能的新VCL组件.例...

template <class T> class Mixin : public T
{
private:
  typedef T inherited;

// ...additional methods

public:
  Mixin(TComponent *owner) : inherited(owner)
  {
  // .. do stuff here
  };
};
Run Code Online (Sandbox Code Playgroud)

像这样使用:

class MyLabel : public Mixin<TLabel>
{
  ....
}

class MyEdit : public Mixin<TEdit>
{
  ....
}
Run Code Online (Sandbox Code Playgroud)

现在,一切编译都很好,mixin的东西似乎工作 - 直到我尝试使用TStream-> WriteComponent将组件保存到流中,其中继承的属性(例如TLabel.Width/Height/etc.)不会被写入.即使使用如上所示的'null'mixin也是如此.

直接从TForm,TEdit等派生类时,我的代码工作正常 - 并且该类已正确地注册到流系统.

delphi templates vcl c++builder

3
推荐指数
1
解决办法
611
查看次数

在涉及.PAS单元时减少C++ Builder构建时间

我有一个C++ Builder项目,它还涉及一些Delphi Pascal文件.我注意到修改PAS文件的实现部分导致重新构建的文件比需要的多得多.

即使接口未更改,只要修改.pas文件,就会创建一个新的.hpp文件.反过来,这会导致许多.cpp文件需要重新编译.

是否有可以避免这种情况的解决方法或技巧?

delphi c++builder

3
推荐指数
1
解决办法
145
查看次数

如何设置Lua块的chunkname?

我目前正在使用C API调用luaL_loadstring()来加载一个块,但是这个调用没有一种命名块的方法.

是否有一种方法可以在加载后命名一个块?

或者,我看到该lua_load()函数采用chunkname参数,但我没有找到如何使用它的任何示例:如何luaL_loadstring()lua_load()?替换调用?

lua chunks

3
推荐指数
1
解决办法
664
查看次数

如何将 TFileStream 与 FILE_SHARE_DELETE 一起使用?

这个QC报告说Delphi不支持文件共享模式FILE_SHARE_DELETE

http://qc.embarcadero.com/wc/qcmain.aspx?d=45628

我需要将这种模式与 TFileStreams 一起使用 - 谁能想到一种不涉及修改库代码或从库中复制大量内容的简单解决方法?

delphi winapi tfilestream

3
推荐指数
1
解决办法
228
查看次数

Delphi中的自我分配

在C++中,赋值运算符中有一个常见的习惯用法,你必须避免将对象复制到自身所引起的问题.

http://www.parashift.com/c++-faq/self-assignment-why.html

但是,在Delphi VCL中(至少在D2010中),这似乎并没有得到很好的处理.

作为一个例子,下面的函数将清除TStringList传递给它!

procedure foo(var strings:TStringList)
begin 
  strings.Assign(strings);
end;
Run Code Online (Sandbox Code Playgroud)

对于更高版本的Delphi,这仍然是一个问题 - 还是有一种常见的方法来处理这个问题?

delphi vcl

3
推荐指数
1
解决办法
355
查看次数