我为旧版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源代码中找到它,但我目前只有试用版(无源代码).
我正在尝试将两个主菜单合并在一起,但是在使用子项获得正确结果时遇到了问题.我在我的MenuItems上使用GroupIndex属性来控制合并/插入.
Menu1(带有groupindices)是这样的
Menu2是这样的
而我正在做
Menu1.Merge(Menu2);
Run Code Online (Sandbox Code Playgroud)
我希望组合菜单在Edit菜单中有一个新的顶级菜单"Widgets"和一个新的"Clear"命令."小部件"工作正常,但编辑菜单丢失了剪切和粘贴,这不是我想要的.
如何停止剪切和粘贴命令消失?
我试图在内存中构建几棵“树”,然后将其中一棵分配给用户可以与之交互的 TTreeView 控件。但是,如果不传递指向现有 TTreeView 的指针,我就无法构造任何 TTreeNodes 对象。传入 NIL 会导致 AV。
两个问题:- TTreeNodes 和 TTreeViews 之间这种“硬”链接的原因是什么,以及解决该问题的最佳方法是什么?
我可以看到的一些选项是:
..但我还没有权衡这些的利弊。
在我的Delphi表单的OnShow方法中,我确定在打开表单后必须自动打开一个对话框 - 我应该可以通过模拟menuitem上的点击来完成此操作.
但是,调用menuitem.Click会在主窗体打开之前显示对话框 - 这不是我想要的.
我希望这应该做我想要的,但我找不到要通过"wparam"将点击发送到我的menuitem的参数.
PostMessage(handle, WM_COMMAND, wparam, 0)
Run Code Online (Sandbox Code Playgroud)
在MSDN文档WM_COMMAND谈IDM_*标识符,但如何出现在德尔福?
我刚刚开始使用DirectShow编程,DirectShow API的'C'特性使我的皮肤爬行.无尽的返回代码而不是异常,addref/release遍布各处,函数获取指针指针...
是否有任何'C++友好'的DirectShow编程包装器隐藏下面的所有COM丑陋.
我正在尝试使用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等派生类时,我的代码工作正常 - 并且该类已正确地注册到流系统.
我有一个C++ Builder项目,它还涉及一些Delphi Pascal文件.我注意到修改PAS文件的实现部分导致重新构建的文件比需要的多得多.
即使接口未更改,只要修改.pas文件,就会创建一个新的.hpp文件.反过来,这会导致许多.cpp文件需要重新编译.
是否有可以避免这种情况的解决方法或技巧?
我目前正在使用C API调用luaL_loadstring()来加载一个块,但是这个调用没有一种命名块的方法.
是否有一种方法可以在加载后命名一个块?
或者,我看到该lua_load()函数采用chunkname参数,但我没有找到如何使用它的任何示例:如何luaL_loadstring()用lua_load()?替换调用?
这个QC报告说Delphi不支持文件共享模式FILE_SHARE_DELETE
http://qc.embarcadero.com/wc/qcmain.aspx?d=45628
我需要将这种模式与 TFileStreams 一起使用 - 谁能想到一种不涉及修改库代码或从库中复制大量内容的简单解决方法?
在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 ×8
c++builder ×3
vcl ×3
winapi ×3
c++ ×1
chunks ×1
com ×1
delphi-xe3 ×1
directshow ×1
lua ×1
menu ×1
postmessage ×1
templates ×1
tfilestream ×1
tmenuitem ×1
tree ×1
tstream ×1
ttreenodes ×1