是否可以使用Alpha Blend或对TForm上的VCL控件实现类似的效果?
例如,考虑以下屏幕截图,其中除了其他控件之外,还有两个TPanel放置在TForm上.两个面板都可以拖动(请参阅 如何在运行时移动和调整控件大小).
现在,是否可以在拖动时使这些面板呈现半透明状态,以便您可以看到下面的内容?(如图像处理产生的第二张图片所示)


我写了一个Win32应用程序(在Delphi-7中使用TThread类是32位)来创建100个线程.恢复时的每个线程将连续(在循环中)递增与线程对象相关联的64位计数器(因此不会锁定或共享数据).
如果让系统运行10到15秒并在此之后停止,则应该在每个线程中看到大致相同的计数.但我观察到的是,81个线程在4亿个循环下运行,其余循环超过9.5亿次.与最快的2111万相比,最慢的线程只有2.3亿.
根据MSDN,抢占式多任务处于线程级别(而不是进程级别),因此我的每个线程都应该以循环方式获得其时间片.我在这里错过了什么,为什么会出现这种差异?
编辑1:机器配置:启用超线程的Intel i7 Quad Core 3.4GHz(一次启动8个活动线程).运行Windows-7 64位专业版(测试应用程序是32位)
Edit2(线程代码):测试应用程序是在打开优化的情况下构建的,没有任何调试信息.在IDE外部运行测试应用程序.
type
TMyThread = class(TThread)
protected
FCount: Int64;
public
constructor Create;
procedure Execute; override;
property Count: Int64 read FCount;
end;
{ TMyThread }
constructor TMyThread.Create;
begin
inherited Create(True);
FCount := 0;
end;
procedure TMyThread.Execute;
begin
inherited;
while not Terminated do
begin
Inc(FCount);
end;
end;
Run Code Online (Sandbox Code Playgroud) 在工作中,我使用Delphi 6&7 Enterprise已有好几年了.几年前,我买了Turbo Delphi Professional的个人副本.因此我有资格获得Delphi 2010 Professional升级.但是我没有资格获得Delphi 2010 Enterprise升级.
是否值得购买Delphi 2010 Professional Upgrade或者我应该寻找Delphi 7 Enterprise?
我试图购买Delphi的目的包括编写用于学习目的的多层数据库应用程序.
任何建议将不胜感激.
TIA!
如何在不使用 Indy 组件的情况下在 Delphi 10.1 中 ping 一个 IP 地址(或按服务器名称)?TIdICMPClient 使用提升的权限工作,但我想以普通用户的身份进行。
我有一个所有者绘制TListBox(lbVirtualOwnerDraw),其内容得到动态更新(一秒钟内可以有多达10个更新).一次最多可以在列表框中放置300个项目.每个项目可能有大约5行文本和与之关联的图像.每当刷新一个项目时,我都必须刷新(或使其无效)TListBox,以便VCL框架调用ListBoxDrawItem.但由于所有冗余重新涂漆,这会对整体性能产生不利影响.所以我的问题是:
有没有办法只使画布的一小部分无效,其中包含一个项目或其中一个部分的图纸?(例如,包含一行文本或位图的矩形).
我们如何在Draw Item中处理这样一个选择性的无效矩形?如果可以将整数作为Refresh或invalidate的一部分传递,我可以在DrawItem中使用它来确定要刷新的内容.
有没有办法找到一个项目在TListBox上是否可见(按索引)?
提前致谢!
我在阻塞模式下使用TClientSocket/TServerSocket创建TCP客户端/服务器.概念验证服务器已经构建并使用telnet测试基本功能(接收数据).在客户端上,将有两个线程用于写入,另一个用于读取.现在,为了测试"发送(或写入)线程",我使用以下代码.但是stream.WaitForData(30000)总是超时.Delphi帮助说" 在通过套接字连接读取或写入信息之前调用WaitForData ".所以我想知道TWinSockStream是如何知道我正在调用WaitForData进行写入而不是为了阅读?
procedure TClientThread.Execute;
var
stream: TWinSocketStream;
buffer: string;
begin
stream := TWinSocketStream.Create(FClientSocket.Socket, 60000);
try
while (not Terminated) and (FClientSocket.Active) do
begin
try
//FSendDataEvent is a trigger used for testing purpose
if FSendDataEvent.WaitFor(1000) = wrSignaled then
begin
FSendDataEvent.ResetEvent;
if stream.WaitForData(30000) then
begin
buffer := 'Hello from client';
stream.Write(buffer, Length(buffer) + 1 );
end;
end;
//Other useful code
except
on E:Exception do
begin
DebugOutput('TClientThread.Execute: ' + E.Message);
end;
end;
end;
finally
stream.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
即使删除了WaitForData(),文本也不会按原样传输到服务器.但直接调用时,以下代码工作正常 - 没有WaitForData().
FClientSocket.Socket.SendText('Hi from client'); …Run Code Online (Sandbox Code Playgroud) 是否可以将Delphi流(TStream后代)传递给用c/c ++编写的DLL?DLL将用Microsoft c/c ++编写.如果那是不可能的,那么如果我们使用C++ Builder来创建DLL呢?或者,是否有可以在Microsoft C/C++和Delphi之间共享的Stream(FIFO)类?
谢谢!
我正在尝试使用Delphi 2007中使用shellExecute启动的一些Pdf阅读器打印多个PDF文件.
这种方法的可靠性可能不是很好,因为实际打印可能由于几个原因而失败.我想知道我的程序是否有办法知道文件是否或何时实际发送到打印后台处理程序?
我试图在Delphi中的两个Windows应用程序之间进行通信.发件人使用WM_COPYDATA通过SendMessage发送命令.那部分工作正常.接收方是否可以在同一个呼叫中回复一些结果字符串?对我来说失败了,跟随现在正在发生的事情.
发件人使用WM_COPYDATA使用阻塞调用SendMessge向Receiver发送命令.
Receiver处理命令并使用一些结果字符串修改COPYDATASTRUCT,这些结果字符串必须发送回发送方并退出事件处理程序
Receiver的"SendMessage"函数返回但COPYDATASTRUCT的内容仍未更改.
显然,Windows的消息传递机制不是在两个应用程序之间共享COPYDATASTRUCT内存.相反,它正在复制.
DSpack具有示例代码,用于播放与DirectShow兼容的视频设备并同时捕获视频帧.TVideoWindow附加到FilterGraph以显示视频(Firgure-1).如果您删除TVideoWindow,则操作系统(Windows)将自动调出ActiveMovie并在单独的窗口中显示视频(图2).
有没有办法使用DSPack捕获视频帧而不使用任何GUI组件而不显示视频?
DSPack论坛提到了NullRenderer过滤器,但没有关于如何使用它的文档或示例.看起来我们可以实现这一点,如果我们直接在GraphEdit中用Null Render手动替换Video Renderer(图3).
我们如何通过在代码中进行所有操作来实现图3中所示的结果?DSPack没有解释如何创建Null渲染器.
Figure-1: The graph of the default example code
Run Code Online (Sandbox Code Playgroud)

Figure-2: Shows what happens if I remove the TVideoWindow
Run Code Online (Sandbox Code Playgroud)

Figure-3: Shows what happens if I replace Video Renderer with a
Null Renderer and manually connect them in the GraphEdit.
Run Code Online (Sandbox Code Playgroud)

这就是我最终做的事情(到目前为止)
请拨打以下ReassignSampleGrabberOutput之前filterGraph.Play;
procedure TForm1.ReassignSampleGrabberOutput;
var
nullRenderer : IBaseFilter;
nullRendererPins: IEnumPins;
nullRendererPin : IPin;
graph: IGraphBuilder;
begin
nullRenderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;
FilterGraph1.QueryInterface(IID_IGraphBuilder, graph);
graph.AddFilter(nullRenderer, 'Null Renderer');
nullRenderer.EnumPins(nullRendererPins);
nullRendererPins.Reset;
if nullRendererPins.Next(1, nullRendererPin, nil) = S_OK …Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-7 ×2
c++ ×1
delphi-2010 ×1
directshow ×1
dspack ×1
icmp ×1
multitasking ×1
ownerdrawn ×1
ping ×1
stream ×1
winapi ×1
wm-copydata ×1