Mike Lischke在VirtualTreeView中有广泛的拖放支持,我使用的是TVirtualStringTree,它有一些拖放事件,但我无法弄清楚如何让它接受shell拖放从Windows资源管理器shell到我的应用程序的一些文件.我想加载文件,当它们被拖动到放置控件上时.
我尝试使用Anders Melander的第三方代码来处理拖放操作,但是因为VirtualTreeView已经将自己注册为放置目标,所以我无法使用它.
编辑:我找到了一个简单的解决方法:在VT.TreeOptions.MiscOptions中关闭toAcceptOLEDrop.如果有人知道如何使用VirtualTreeView而不使用第三方OLE-shell-drag-drop库并使用其广泛的OLE拖放支持来提取从Shell中拖入的文件名列表,那将会很酷.
从Delphi 2010升级后,我在Delphi XE中丢失了大部分的Library Path,
现在即使是一些简单的应用程序也无法编译.
有没有办法恢复库路径中丢失的目录条目?
编辑:我发现了一个令人惊讶的解决方案,只需删除此注册表项:
HKEY_CURRENT_USER\SOFTWARE\Embarcadero公司\ BDS\8.0 \图书馆
并重新启动Delphi,然后将使用正确的默认值再次生成注册表中的密钥,但您将失去任何第三方,至少现在它正在工作!
我希望它对任何有同样问题的人都有用:)
我们有一个连接到Oracle 8i数据库的Delphi 5应用程序.
大多数逻辑在数据库中作为存储过程选址.目前,我们使用Borland数据库引擎(BDE)通过OCI客户端9.2连接到Oracle.
这个应用程序最初是在96年使用Delphi 1编写的,然后在99年升级到Delphi 5.
计划是升级到XE客户端和Oracle 11g.
用其他东西简单地替换BDE并将努力保持在最低限度的选项是什么?
到目前为止,我已经看到:
我不是在考虑DBExpress,因为我不相信它会有我们需要的性能.
重要的是:
我倾向于devart,因为他们确实有一个迁移工具(虽然它只做一个部分工作),他们有一个直接的TCP选项连接到数据库而无需客户端.
我想用INTAIDEINsightService或许AddItem或AddActionList添加到在Delphi的IDE洞察力功能的条目.
根据Delphi OTA wiki, INTAIDEINsightService 允许您注册自己的操作.我能找到的唯一参考就是这里,它提到了API的名称,并且它存在.Delphi中没有任何关于它的帮助.ToolsAPI.pasDelphi XE中的单元在此界面中显示了两个方法,可用于注册操作:
function AddActionList( Actions: TCustomActionList; ... ): Integer;
procedure RemoveActionList(const Index: Integer);
Run Code Online (Sandbox Code Playgroud)
注释说"项目将显示为[描述|]类别| TCustomAction.Caption.不会显示未指定类别的包含操作.".
我无法使用操作找到任何其他文档或示例.一个简单的"hello world"示例,其中一个动作,或者只是一个项目,在描述或类别"helloworld"中注册,然后可以搜索并在您点击F6时显示,这将是完美的,但是动作是首选.
看起来这样的向导必须实现INTAIDEInsightItem才能在IDE洞察中呈现自己,但我不确定这是否是"必需"的hello-world样本.我不确定你是否必须使用动作,或者常规的"项目"添加是否足够.
(我的最终目标是创建一个新的gExperts风格的专家"通过使用IDE洞察力按名称搜索我的库路径中的任何单元"但我会首先将一个项目的名称添加到ide一个项目中.)
谷歌搜索这个ADO错误消息表明它在ASP.NET开发中经常遇到,但我没有发现它在Delphi应用程序中何时出现.我们有一些客户站点遇到短暂的网络问题,这是症状性错误消息.我们可以轻松地在办公室测试中复制它; 只需在delphi TADOConnection对象连接到该服务器实例上的数据库时关闭MS SQL Server服务,就会出现以下异常:
[DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation.
Run Code Online (Sandbox Code Playgroud)
是的,抓住这个例外,你知道(或者你呢?)发生了这个错误.除了这是一个800 KLOC +应用程序,其中有超过10,000个围绕数据库操作的try-except块,其中任何一个都可能因此错误而失败.
TADOConnection有一些错误事件,在这种情况下都没有.但是,一旦发生这种情况,ADO Connection本身就会出现故障,即使重新启动SQL数据库,TADOConnection.Connected仍然是正确的,但它对你说谎.它真的处于故障状态.
那么,我的问题是:
您能否以任何方式检测此故障状态并从中恢复,而不是进入10,000个单独的try-except块并设置一些全局"重新连接ADO全局变量"?
我希望有一种方法可以进入TADOConnection.ConnectionObject(底层的原始OLEDB COM ADO对象)并在我们开始新查询时检测到这种故障情况,这样我们就可以重置ADOConnection并在下次运行时继续一个问题.由于我们的代码组织方式允许我们在"故障之后"检测到这种情况要比我们在10行演示应用程序中执行此操作的方式更容易.
这个另外的SO问题问为什么会发生,这不是我要问的,请不要给我"预防"答案,我已经了解它们,我正在寻找恢复和检测停滞的ADO除了捕获异常之外的连接技术.事实上,这是出错的例子; 在这种故障模式下,ADO是一个schrodingers-cat对象.
我知道MS知识库文章以及互联网上的各种解决方案.一旦错误情况(在我们的情况下通常是短暂的)已经清除,我就会询问有关RECOVERING而不会丢失客户数据的问题.这意味着我们冻结了我们的应用程序,向客户展示了例外情况,当客户点击"重试"或"继续"时,我们会尝试修复并继续.请注意,我们现有的代码会执行一百万次try-except-log-and-continue代码,这将会妨碍我们,因此我希望有人能够回答未处理异常的应用程序处理程序是最好的方法,但遗憾的是我们不能使用它.但我真的希望能够检测到冻结/故障/死ADO连接对象.
这就是我所拥有的:
try
if fQueryEnable and ADOConnection1.Connected then begin
qQueryTest1.Active := false;
qQueryTest1.Active := true;
Inc(FQryCounter);
Label2.Caption := IntToStr(qQueryTest1.RecordCount)+' records';
end;
except
on E:Exception do begin
fQueryEnable := false;
Memo1.Lines.Add(E.ClassName+' '+E.Message);
if E is EOleException and Pos('DBNETLIB',E.Message)>0 then begin
ADOConnectionFaulted := boolean; { Global variable. }
end;
raise;
end;
end;
Run Code Online (Sandbox Code Playgroud)
上述解决方案的问题是我需要在我的应用程序中复制并粘贴大约10,000个位置.
我之前在Delphi XE2时间框架中问过这个问题,然后答案是一个非常丑陋的黑客.
根据官方发布的说明,现在Delphi XE3支持非客户端主题.你如何在Firemonkey FM2中的Delphi XE3中做到这一点?
我认为它必须与风格书有关,但我无法弄明白.表单本身有一个"EnableBorderStyling"属性,我设置为true,我想我必须加载包含一些非客户主题数据的样式,但我找不到包含它的样式.
帮助与此主题无关.
Update2好吧,它没有被破坏,只是因为我没有包含这个样式元素的样式(正如RRUZ所说).
procedure TForm1.FormShow(Sender: TObject);
begin
StyleBook := StyleBook1;
WindowBorder.UpdateStyle;
end;
Run Code Online (Sandbox Code Playgroud)
Update3:样式文件似乎位于两个不同的位置,这令人困惑:
C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Redist\styles\Fmx
C:\Users\Public\Documents\RAD Studio\10.0\Styles
Run Code Online (Sandbox Code Playgroud)
请注意,我在任一点上都没有Luna.Style(firemonkey样式),但使用样式编辑器工具只需5秒.(打开,另存为,并将类型更改为.Style,我有一个!)
UPDATE4:RRUZ的答复工作,但我的系统(Windows 8 RTM)的非客户端的风格不看的权利,他们周围的地区白角on't完全绘制.调整窗口大小使它消失,我很清楚我应该能够强制使用WM_NCREPAINT或其他东西,然后让它消失.
我使用XCode 4.5创建了一个新的命令行工具(创建Mac OS X命令行应用程序的方法),但我现在想要为它添加一个框架.构建阶段中的框架列表为空.
我可以添加.h/.m目标C类头和我编写的实现文件,但我不知道如何将"命令行工具"变成旧的XCode可能有不同的模板; 可以访问Core Foundation框架的命令行应用程序(不是Cocoa应用程序),或者我选择添加到其中的任何其他框架.
此外,XCode 3中曾经有一个" 核心基础工具 "选项,现在在哪里?
(更新:我在Target Dependencies中单击了"+",这看起来很合理,但是它只给我一个空的列表添加.我想在其他地方必须有一些东西你必须改变才能让东西显示在Target Dependencies中如果我可以说,新用户并不完全清楚.因此,这个公共服务信息,问题和答案.嘿Apple,你如何将其改为"链接库或框架",以便框架框架出现在那里.让我们猜测,当我们所知道的唯一一个词是Framework时,我们是在添加一个库还是一个依赖,这让人感到困惑.)
是否可以从Delphi应用程序中调用内核Native API?喜欢nt和zw系统调用.
我正在学习Visual Studio 2012的"数据库项目"系统,使用Visual Studio 2012和Update 1,以及SSDT.
我发现它非常擅长在我的数据库中发现真正的问题,尤其是存储过程中的编程错误,其中有人从数据库表中删除了一个字段但没有通过并验证所有存储过程的执行没有错误.因此,通过Visual Studio 2012中的"build"命令验证.sql脚本非常方便.我不想放弃它.
但我还注意到,只要在存储过程中使用#TEMPTABLE,即使关闭"对常见对象启用扩展Transact-SQL验证",我仍然会在存储过程中获得涉及#temptable.field引用的"构建错误".
数据库项目采取了哪些步骤来确定临时表的模式?由于我的临时表在主模式中不存在,所以当我在创建数据库之后通过"导入数据库"选项将实际生产SQL数据库导入Visual Studio时,它们没有进入我的数据库项目.
我应该创建"#TEMPTABLE.SQL"文件并将它们添加到我的项目中吗?
示例错误:
c:\dev\...\dbo\Stored Procedures\xyz.sql(95,96): Warning: SQL71502: Procedure: [dbo].[proc123] has an unresolved reference to object [#temptable1].[somefield1].
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以包含一个定义了一次使用的临时表的脚本,并将其包含在需要了解这些内容的各个地方,如果要彻底验证T-SQL,那就没问题了,如果转向扩展验证做了我认为它应该做的事情,那么也许没有必要.
论坛帖子暗示这是不可能解决的,我所能做的只是在文件级别有效地关闭此警告,这有点可怕.
关于同一主题的一个问题,但是对于Visual Studio 2010来说,这个技术已经被淘汰出局,微软已经多年了解它并且没有采取任何措施.现在在VS2012.U1 + SSDT_Dec2012中有什么好转的吗?
t-sql database-project visual-studio-2012 sql-server-data-tools
我对将std::string密钥和大struct值放入容器之类所涉及的堆和按值与引用语义有点混淆boost::interprocess::map.
这是我的情况,以及我正在使用的一些typedef:
typedef std::string AreaKeyType;
typedef DATA_AREA_DESC AreaMappedType; // DATA_AREA_DESC is a big struct.
typedef std::pair<const AreaKeyType, AreaMappedType> AreaValueType;
typedef boost::interprocess::allocator<AreaValueType, boost::interprocess::managed_shared_memory::segment_manager> AreaShmemAllocator;
typedef boost::interprocess::map<AreaKeyType, AreaMappedType, std::less<AreaKeyType>, AreaShmemAllocator> AreaMap;
Run Code Online (Sandbox Code Playgroud)
这是我如何插入AreaValueType(这是std :: pair的typedef):
AreaValueType A(areaKey, arearec);
anAreaMap->insert(A);
Run Code Online (Sandbox Code Playgroud)
我相信上面的代码将我在本地(非共享内存)堆栈上的std :: pair复制到共享内存区域.我可以在boost :: interprocess :: map中获取该共享内存区域的句柄,还是仅限于将该记录整回并整个存储?(换句话说,我可以将类似结构的东西存储到boost进程间映射中,然后更新该记录中的单个字节,或者我必须通过替换DATA_AREA_DESC结构中的所有字节来更新整个记录,全新字节).
进一步澄清:
我有一个普通的旧ANSI C DLL导出api,内部使用C++和Boost :: interprocess :: map.该函数应该在地图中创建一个项目,然后返回一个句柄.如何在boost :: interprocess :: map中插入一些东西,然后将一个句柄返回给非C++用户,最好是强制转换为void*或者unsigned long?我所能做的就是通过查找std :: string键值从共享内存中获取内容,并将新记录写入内存.我希望能够保持对共享内存对象的引用.
如果我不能直接这样做,我将如何间接地做到这一点?我想我可以保持一个非共享内存的std ::向量,并分配一个非共享内存的std :: string持有areaKey,这是一个std :: string的值,然后做的投void*项目返回std::string然后使用它从共享内存区域中获取记录.对于一些如此基本的东西来说,这似乎都是非常必要的工作.也许boost :: interprocess …
delphi ×7
delphi-xe ×2
ado ×1
bde ×1
boost ×1
c++ ×1
delphi-7 ×1
delphi-xe3 ×1
firemonkey ×1
frameworks ×1
oracle ×1
sql-server ×1
system-calls ×1
t-sql ×1
toolsapi ×1
visual-c++ ×1
winapi ×1
windows ×1
xcode ×1
xcode4 ×1