小编ros*_*mcm的帖子

Getting a snapshot from a webcam with Delphi

I need to get a regular snapshot from a webcam in Delphi. Speed is not a problem (once a second is fine). I have tried demo code from based on stuff from http://delphi.pjh2.de but I can't get it to work. It compiles and runs OK but the callback function never fires.

I don't have a real webcam but am running instead a simulator. The simulator works (I can see the video using Skype) but not with the test app. I …

delphi webcam vfw video-capture callback

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

Delphi - 何时调用DragAcceptFiles

我有

procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle, True ) ; 
end ;
Run Code Online (Sandbox Code Playgroud)

但表单不接受拖动文件 - 没有删除游标,没有触发WM_DROPFILES消息.

我在FormShow事件中有以下构造(出于不同的原因 - 在创建表单后,我只想执行一次代码,并且FormShow在初始化期间多次触发):

procedure TMainForm.FormShow(Sender: TObject);

begin
if (not FRunOnce) then  // as FormShow can be called twice - if Form.Position assigned to
    begin
    DragAcceptFiles (Handle, True ) ; 
    FRunOnce := True ;
    end ;
end ;
Run Code Online (Sandbox Code Playgroud)

在显示的位置DragAcceptFiles(Handle,True)仍然不起作用.如果我将它移动到例程的顶部(因此它执行两次),它确实有效:

procedure TMainForm.FormShow(Sender: TObject);

begin
DragAcceptFiles (Handle, True ) ; 
if (not FRunOnce) then  // as FormShow can be called twice - if Form.Position assigned to
    begin
    FRunOnce …
Run Code Online (Sandbox Code Playgroud)

forms delphi drag-and-drop oncreate

5
推荐指数
1
解决办法
1843
查看次数

使用Delphi读取文件时实现超时

我有一个用Delphi 2006编写的应用程序,它定期从位于网络其他位置的磁盘文件(100Mb以太网)读取.偶尔通过网络读取需要很长时间(如20秒)并且应用程序冻结,因为读取是从主线程中的空闲处理程序完成的.

好的,我可以将读取操作放入它自己的线程中,但我想知道的是,是否可以为文件操作指定超时,以便您可以放弃并去做其他事情,或报告事实上,读取时间早于20秒后出现了问题.

function ReadWithTimeout (var Buffer     ;
                              N       : integer ; 
                              Timeout : integer) : boolean ;

begin
Result := false
try
    SetReadTimeout (Timeout) ;          //  <==========================???
    FileStream.Read (Buffer, N) ;
    Result := true ;
except 
    ... 
    end ;
end ;
Run Code Online (Sandbox Code Playgroud)

delphi file-io timeout delphi-2006

5
推荐指数
1
解决办法
1422
查看次数

确定批处理文件中是否存在闪存驱动器而没有错误消息

我有构造的批处理文件:

if exist F:\ copy /y Application.exe F:\
Run Code Online (Sandbox Code Playgroud)

在编译结束时,将可执行文件复制到USB密钥(如果已插入).它可以正常使用USB密钥但是当我插入USB多卡读卡器时(这看起来像驱动器E:.. H: ,如果没有插入SD卡,当我执行上面的批处理行时,我得到一个"Windows - 无磁盘"阻塞消息.

如果有卡插入,我没有收到消息,(并且文件被复制),如果没有插入读卡器,我没有收到消息,文件没有被复制(显然),但在这两种情况下,批处理文件都不会停止运行.只有插入读卡器但驱动器中没有卡时才会这样.

我可以从批处理文件中安静地检查这些USB驱动器中没有"磁盘"吗?

batch-file file-exists usb-flash-drive

5
推荐指数
1
解决办法
5622
查看次数

如何在调整主窗体大小时找出长时间延迟的来源?

我有一个D2006应用程序,其中包含选项卡上的页面控件和各种网格等.当我调整主窗体的大小时(它会在与某些东西对齐的表格上涟漪并调整大小),我会遇到很长的延迟,比如几秒钟.应用程序冻结,未调用空闲处理程序,并且运行的线程也会暂停.

我尝试在IDE中暂停执行,而这种情况发生在试图破坏执行时,它处于麻烦的代码中,但IDE没有接收消息.

显然,我不希望任何人指出一些错误的代码,但我正在调试可能对我有帮助的方法.我在整个应用程序中都有大量的执行时序代码,并且长时间延迟不会显示在任何数据中.例如,主窗体OnResize处理程序的执行时间是最小的.

forms delphi onresize freeze delphi-2006

5
推荐指数
1
解决办法
332
查看次数

Delphi 2006:将PNG运行时分配给TImage会失去alpha透明度

Delphi 2006的TImage并不完全支持PNG.为了在我的表单上具有alpha透明度的图像,我必须在运行时加载它们.我可以在设计时加载它们但它们不能存活,我认为因为PNG没有保存在DFM文件中.我确信这在最新的Delphi中都是笨拙的,但我现在无法升级.

无论如何,我在运行时加载它们:

Image1.Picture.Assign (PngImageCollection1.Items [0].PNGImage) ;
Run Code Online (Sandbox Code Playgroud)

PNGImageCollection组件包含各种大小的PNG(这些PNG在设计时创建和加载),我将它们分配给FormCreate事件中的相应TImages.

这个工作正常,直到我遇到一个问题,我试图在表单上使用它之后在其他地方重用其中一个图像.我发现分配TPicture的行为已将其设置为由于Assign而导致的空图像.这发生在例程TPicture.ForceType中,AFAICT检查FGraphic的类型,如果它不是所需类型,它将释放FGraphic并创建所请求类型的新实例.

好.所以在经过一番搔痒之后,我发现也许我应该这样做:

Image1.Picture.Bitmap.Assign (PngImageCollection1.Items [0].PNGImage) ; 
Run Code Online (Sandbox Code Playgroud)

这就是诀窍,因为Assign没有破坏图像,但现在图像显示半透明位不透明,即:

分配Image1.Picture.Bitmap.Assign时的TImage

代替:

分配Image1.Picture.Assign时的TImage

如何让此图像正确显示alpha透明位?(和补充问题:是Image1.Picture.Bitmap.Assign正确的方法吗?).

以下是更详细的代码:

在我有问题"重用"TImage的代码中,序列是:
在表单上创建:

LogoImage.Picture.Assign (PngImageCollection1.Items [0].PNGImage) ; 
Run Code Online (Sandbox Code Playgroud)

(PNGIMage是公司徽标,LogoImage1是主要表格).

在打印报告标题上:

procedure PrintLogo (Report : TBaseReport) ;

var
    X1, Y1, LogoHeightMM    : Double ;

begin
with Report do
    begin
    LogoHeightMM  := CalcGraphicHeight (LogoWidthMM, MainForm.LogoImage.Picture.Graphic) ;
    X1            := PageWidth - MarginRight - LogoWidthMM ;
    Y1            := SectionBottom - LogoHeightMM ;
    PrintBitmapRect (X1, Y1, X1 + LogoWidthMM, Y1 + LogoHeightMM, MainForm.LogoImage.Picture.Bitmap) ;
    end ;
end ;
Run Code Online (Sandbox Code Playgroud)

第一次打印徽标的例程被调用时,它会毫无错误地执行,但是在调用PrintBitmapRect之后,LogoImage …

delphi png timage delphi-2006 alpha-transparency

5
推荐指数
1
解决办法
3119
查看次数

如何在网络计算机上找到公共文档文件夹的名称

鉴于我正在通过网络在计算机上执行EXE文件(D2006应用程序),我如何获取该计算机上commondocs文件夹的路径名,因为可能已从UNC快捷方式或映射的驱动器号调用EXE快捷方式,远程机器的平台不一定是已知的(但将是> = WinXP)?

在这种情况下,客户端拥有大量分散的计算机,并且他们无法在所有PC上安装我的应用程序.所以他们所做的就是在网络上的某个地方安装可执行文件,并为每个人提供快捷方式.这似乎已经很适合他们了,那里没有问题.

根据他们的要求,我让应用程序从与可执行文件放在同一文件夹中的INI文件中读取设置.我只能假设他们已经配置了所有用户可以写入该文件夹,以便可以保存INI文件.

但是,我想更改它以便读取INI文件并将其保存到远程计算机上的commondocs文件夹树中的某个位置,这样它们就不需要提供对Program files文件夹的写入权限.

delphi networking unc mapped-drive delphi-2006

5
推荐指数
1
解决办法
487
查看次数

Delphi - 当一个是UNC而另一个是驱动器号指定时比较两个路径名

我有一种情况,用户可以指定两个单独的路径名,我需要检查一个路径名是否在另一个路径名"内部".如果两个路径名都是UNC,或者两者都是基于驱动器号的,那么我可以这样做,但是如果它们是混合的呢?

你可以将"C:\ Program Files"之类的路径"规范化"为"\\ [此计算机名称]\C\Program Files"吗?显然,我不能走另一条路,因为UNC格式的网络文件夹可能没有映射到它的相应驱动器号.

delphi directory-structure path unc delphi-2006

5
推荐指数
1
解决办法
2028
查看次数

delphi 2006 - 是否可以找出资源名称是否存在?

找出资源名称是否存在的最佳方法是什么 - 除了查看是否

LoadFromResourceName (HInstance, 'FOOBAR')
Run Code Online (Sandbox Code Playgroud)

引起异常?

delphi delphi-2006 embedded-resource

5
推荐指数
1
解决办法
686
查看次数

Delphi - 检测我的应用程序是否打开了模态对话框

我有一个 Delphi 2006 应用程序,当检测到错误条件时,它会弹出一个模式警报对话框。由于对错误条件的检查是在空闲处理程序中完成的,如果碰巧显示了另一个模态对话框,则该对话框可能会弹出到另一个模态对话框的顶部。这可能会导致用户感到困惑,即在关闭警报对话框后应用程序主窗体没有获得焦点,因为这是另一个模糊的模式对话框。

我想做的是在应用程序打开任何模态对话框时推迟警报弹出窗口。

我试过 GetLastActivePopup (MyMainWindow.Handle) 但它似乎一直都返回非零值。

forms delphi modal-dialog showmodaldialog

4
推荐指数
1
解决办法
5026
查看次数