小编mgh*_*hie的帖子

在Delphi的TDBGrid中查找当前行

有没有办法找出TDBGrid中哪一行是最新的?

delphi tdbgrid

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

Delphi,MDI vs Tabs用于多文档界面

我正在开发一个多文档应用程序.目前它使用MDI,这对我(作为开发人员)以及我相信的用户来说非常方便.然而,有一个"反对" - 我没有找到快速加载许多子窗口的解决方案(每次创建窗口并最大化以填充父级区域时,有一个'动画'调整大小需要花费大量时间到目前为止,我正在考虑切换回选项卡界面(这需要更多的工作,我需要将一个表单"嵌入"到页面表,因为有许多"种类"的表单可用,一些用于编辑文本文档,一些用于其他对象)...

所以,你有什么看法?我应该使用MDI还是标签界面?

delphi tabs mdi interface

7
推荐指数
3
解决办法
6014
查看次数

如何在Inno Setup中设置退出代码?

我想为我的安装设置退出代码,这样我就知道为什么安装被中止了.我正在使用Inno Setup.

inno-setup exit-code

7
推荐指数
2
解决办法
6538
查看次数

如何正确访问后台线程中创建的查询结果?

我想在后台线程中执行数据库查询.OmniThread库将帮助我完成所有的线程,但到目前为止我还有一件事情我不明白:

每个线程都需要单独的数据库连接.后台线程因此创建数据库连接,创建查询然后执行它.

现在我可以使用后台线程的查询对象访问查询结果.
但是在执行查询之后,我想在线程中访问查询结果.

如果我只是引用后台线程查询对象,这是否会导致问题,因为我正在访问另一个线程中的数据库连接?

据我所知,在这种情况下,主线程不会有它独立的数据库连接,并使用后台线程中的那个并不好.

我的想法在哪里被扭曲,这是做正确的方法?

database delphi multithreading delphi-2009

7
推荐指数
2
解决办法
924
查看次数

Delphi布局管理器/表单构建器开源?

我知道优秀的DevExpress LayoutManager以及Delphi新版本中的半尝试.

但我想知道Open Source布局管理器是否确实存在,可用于替换表单编辑器.

我在Obj-C中为我的iPhone应用程序构建了一个小版本,它可以:

Form.Add(TEXT_EDIT,Options,LEFT)
Run Code Online (Sandbox Code Playgroud)

我们的想法是能够通过代码构建一切,并简化国际化,解决方案的独立性和那些东西......

delphi layout

7
推荐指数
1
解决办法
3205
查看次数

散列OLE变量的推荐实现是什么?

旧版本的Visual Basic中使用的OLE变体,在COM自动化中普遍存在,可以存储许多不同的类型:基本类型,如整数和浮点数,更复杂的类型,如字符串和数组,以及一直到IDispatch实现和指针形式的ByRef变种.

变量也是弱类型的:它们将值转换为另一种类型,而不会发出警告,具体取决于您应用的运算符以及传递给运算符的值的当前类型.例如,比较两个变体,一个包含整数1,另一个包含字符串"1",为了相等将返回True.

因此,假设我正在使用基础数据级别的变体(例如,VARIANT在C++或TVarDataDelphi中 - 即不同可能值的大联合),我应该如何一致地散列变体以使它们遵守正确的规则?

规则:

  • 不均匀散列的变体应该在排序和直接相等中比较为不相等
  • 对于排序和直接相等进行比较相等的变量应该相等

如果我必须使用不同的排序和直接比较规则以使哈希适合,那就没关系.

我正在工作的方式是我将变量规范化为字符串(如果它们适合),并将它们视为字符串,否则我正在使用变量数据,就像它是一个不透明的blob,并散列和比较它原始字节.当然,这有一些局限性:数字1..10排序[1, 10, 2, ... 9]等等.这有点令人讨厌,但它是一致的,而且工作很少.但是,我想知道这个问题是否有一个公认的做法.

c++ delphi com winapi variant

7
推荐指数
1
解决办法
572
查看次数

如何在Delphi中连续运行视频文件?

我正在使用Delphi 5.

我想知道使用'TFilterGraph'完成avi文件播放的时间.我想自动一个接一个地运行多个avi文件.所以我下载了DSPack并使用了'TFilterGraph'和'TVideoWindow'组件.avi文件视频正常显示.我如何知道avi视频或任何视频已完成播放,以便我可以选择下一个avi或任何其他视频文件播放?

procedure TForm1.Button2Click(Sender: TObject);
begin
  videowindow1.FilterGraph:=filtergraph1; //query interfaces to video window
  filtergraph1.Active:=true;
  filtergraph1.RenderFile('I:\Project Part 1\Clips\More Clips\D.avi');
  filtergraph1.Play;
end;
Run Code Online (Sandbox Code Playgroud)

delphi directshow delphi-5 dspack

7
推荐指数
1
解决办法
2993
查看次数

RCW终结器访问冲突

我正在使用COM interop在使用VS2012/.NET 4.5/Win8.1的非托管应用程序中创建托管插件.所有的互操作似乎都没问题,但是当我关闭应用程序时,我得到了一个MDA异常,告诉我在发布完成期间RCW持有的COM对象时发生了AV.

这是调用堆栈:

clr.dll!MdaReportAvOnComRelease::ReportHandledException()  + 0x91 bytes 
clr.dll!**SafeRelease_OnException**()  + 0x55 bytes 
clr.dll!SafeReleasePreemp()  + 0x312d5f bytes   
clr.dll!RCW::ReleaseAllInterfaces()  + 0xf3 bytes   
clr.dll!RCW::ReleaseAllInterfacesCallBack()  + 0x4f bytes   
clr.dll!RCW::Cleanup()  + 0x24 bytes    
clr.dll!RCWCleanupList::ReleaseRCWListRaw()  + 0x16 bytes   
clr.dll!RCWCleanupList::ReleaseRCWListInCorrectCtx()  + 0x9c bytes  
clr.dll!RCWCleanupList::CleanupAllWrappers()  + 0x2cd1b6 bytes  
clr.dll!RCWCache::ReleaseWrappersWorker()  + 0x277 bytes    
clr.dll!AppDomain::ReleaseRCWs()  + 0x120cb2 bytes  
clr.dll!ReleaseRCWsInCaches()  + 0x3f bytes 
clr.dll!InnerCoEEShutDownCOM()  + 0x46 bytes    
clr.dll!WKS::GCHeap::**FinalizerThreadStart**()  + 0x229 bytes  
clr.dll!Thread::intermediateThreadProc()  + 0x76 bytes  
kernel32.dll!BaseThreadInitThunk()  + 0xd bytes 
ntdll.dll!RtlUserThreadStart()  + 0x1d bytes    
Run Code Online (Sandbox Code Playgroud)

我的猜测是应用程序已经销毁了它的COM对象,其中一些引用被传递给托管插件 - 而对RCW的IUnknown :: Release的调用让它变得繁荣.

我可以在输出窗口(VS)中清楚地看到应用程序已经开始卸载其中的一些dll.

'TestHost.exe': Unloaded …
Run Code Online (Sandbox Code Playgroud)

c# com-interop rcw access-violation visual-studio-2012

7
推荐指数
1
解决办法
1461
查看次数

实现实时 1 毫秒精确事件而不受线程调度的影响

问题

我正在使用.Net 4.5创建一个基于 Windows 7 的 C# WPF应用程序,它的一个主要功能是调用某些函数,这些函数与具有一组用户定义的循环时间的自定义硬件接口。例如,用户可能会选择每 10 或 20 毫秒调用两个函数以及每 500 毫秒调用另一个函数。用户可选择的最小循环时间为 1 毫秒。

起初,时间似乎是准确的,并且根据需要每 1 毫秒调用一次函数。但是我们后来注意到大约1-2%的时间是不准确的,有些函数被调用只延迟了 5 毫秒,而其他函数可能会延迟到 100 毫秒。即使循环时间大于 1 毫秒,我们也面临线程休眠的问题,它应该调用外部函数(一个 20 毫秒的函数可能会延迟 50 毫秒调用,因为线程正在休眠并且没有调用该函数)

经过分析,我们得出结论,这些延迟是零星的,没有明显的模式,这些延迟背后的主要原因可能是操作系统调度和线程上下文切换,换句话说,我们的线程并没有像我们需要的那样一直处于唤醒状态.

由于 Windows 7 不是 RTOS,我们需要找出是否可以以某种方式解决此问题。但我们确实知道这个问题在 Windows 上是可以解决的,因为我们使用其他具有类似功能的工具,可以满足最大 0.7 ms 容错的时序约束。

我们的应用程序是多线程的,最多同时运行 30 个线程,其当前 CPU 使用率峰值约为 13%

尝试的解决方案

我们尝试了很多不同的东西,主要是使用秒表计时器测量计时,并且IsHighResolution为 true(使用了其他计时器,但我们没有注意到太大差异):

  1. 创建一个单独的线程并赋予它高优先级
    结果:无效(使用可怕的Thread.Sleep(),没有它并使用连续轮询)

  2. 使用 C# 任务(线程池)
    结果:改进很小

  3. 使用 1ms 周期的多媒体定时器 …

c# windows multithreading rtos windows-kernel

7
推荐指数
1
解决办法
6484
查看次数

每1000行代码需要多少维护开发人员

我们有一个非常庞大的项目,有20-30个模块,但它大部分都已完成.它处于维护阶段(主要是错误修复,很少有新功能).我正在努力想出一些需要维护产品的开发人员.

有没有一种很好的方法来衡量这个数字?

该项目主要是基于WinForm的C#应用​​程序(混合了.net 1.1和2.0)以及大量的vb6应用程序.

maintenance

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