小编Mik*_*ski的帖子

编写Delphi延迟的最佳方法是什么?

我正在处理的Delphi应用程序必须延迟一秒或有时两秒钟.我想使用最佳实践来编制此延迟.在阅读关于stackoverflow的Delphi的Sleep()方法的条目时,我发现了这两条注释:

我遵循这句格言:"如果你觉得需要使用Sleep(),那你做错了." - Nick Hodges 12年12月12日1:36

@nick确实.我的等价物是"没有问题,睡眠是解决方案." - David Heffernan 12年12月12日8:04

关于Sleep()的评论

为响应这个建议以避免调用Sleep(),以及我对使用Delphi的TTimer和TEvent类的理解,我编写了以下原型.我的问题是:

  1. 这是编程延迟的正确方法吗?
  2. 如果答案是肯定的,那么为什么这比调用Sleep()更好?

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
  public
    EventManager: TEvent;

  end;

  TDoSomething = class(TThread)

  public
    procedure Execute; override;
    procedure Delay;
  end;

var
  Form1: TForm1;
  Something: TDoSomething;

implementation

{$R *.dfm}

procedure TDoSomething.Execute;
var
  i: integer;

begin
  FreeOnTerminate := true;
  Form1.Timer1.Interval := 2000;       // 2 second interval for a 2 second delay
  Form1.EventManager := TEvent.Create;
  for i := 1 to 10 …
Run Code Online (Sandbox Code Playgroud)

delphi events sleep timer delphi-xe2

14
推荐指数
2
解决办法
3万
查看次数

如何将数字证书添加到SingleImage Install Shield安装程序

我在Visual Studio 2012中使用限制版本的Install Shield创建了一个安装程序.

我有一个数字证书,我想添加到安装程序.

我想使用Install Shield的SingleImage功能创建并向我的客户提供单个安装文件(例如setup.exe).但是,似乎我必须通过Install Shield将数字证书附加到一个msi文件中,该文件嵌入在setup.exe中.

我发现在运行安装程序时,将数字证书放在setup.exe上会导致告知用户发布者是未知的.如果换句话说,那就是没有正确部署数字证书.

我可以访问msi文件以向其添加数字证书吗?如果是这样,怎么样?

ssl installshield digital-certificate

12
推荐指数
1
解决办法
9232
查看次数

你如何检测到TEvent已被设置?

关于TEvent的Delphi XE2文档说明了这一点:

有时,您需要等待线程完成某些操作,而不是等待特定线程完成执行.为此,请使用事件对象.应使用全局范围创建事件对象(System.SyncObjs.TEvent),以便它们可以像所有线程可见的信号一样工作.

当线程完成其他线程所依赖的操作时,它会调用TEvent.SetEvent.SetEvent打开信号,因此任何其他检查的线程都会知道操作已完成.要关闭信号,请使用ResetEvent方法.

例如,考虑一种情况,您必须等待多个线程才能完成执行而不是单个线程.因为您不知道哪个线程最后会完成,所以您不能简单地使用其中一个线程的WaitFor方法.相反,您可以让每个线程在完成时递增一个计数器,并让最后一个线程信号通过设置事件来完成它们.

但是,Delphi文档没有解释另一个线程如何检测到调用了TEvent.Set事件.你能解释一下如何检查TEvent.Set是否被调用?

delphi multithreading

10
推荐指数
1
解决办法
3333
查看次数

将时间添加到TDateTime

我想为TDateTime变量添加秒,以便结果是分钟的顶部.例如,如果是08:30:25,我想将TDateTime变量存储为08:31:00.

我看到它TDateTime有一个Decode函数,我可以使用它.但是,没有一个编码函数可以将更改的时间放回到TDateTime变量中.

delphi

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

Delphi XE2和TurboPower Orpheus

我在Delphi XE2上安装TurboPower Orpheus.我从sourceforge.net获得了Orpheus.Delphi XE2的Orpheus版本有四个Borland Package Libaries(BPL):O408_r160.bpl,O408_d160.bpl,O408br160.bpl和O408bd160.bpl.

SourceForge的文档没有解释这些库之间的差异.

有人可以为我解码文件名,这样我就可以确定将这四个库中的哪一个安装到Delphi XE2中.

谢谢!

delphi turbopower

3
推荐指数
1
解决办法
1273
查看次数

如何在Visual Studio Visual C++ Win32项目中查看主窗体,以便编辑它?

我正在将C++ Builder程序迁移到Visual Studio 2013 C++/Win32/Win32项目.

但是,在创建新项目(C++/Win32/Win32项目)之后,我可能会尝试查看/编辑Visual Studio创建项目时自动创建的主窗体.我知道如何在C#,C++ Builder和Delphi中查看/编辑表单,但我没有看到如何查看表单,以便我可以在VS 2013中为C++ Windows应用程序添加它.

什么是我不明白?什么摇滚是IDE中隐藏的主要形式?

我知道表单在那里,有一个简单的菜单和一个关于框,因为它是在运行新创建的项目/程序时显示的.

表单我指的是新创建的应用程序的主窗口.

c++ visual-studio-2013

3
推荐指数
1
解决办法
8921
查看次数

printf支持MSP430微控制器

我正在使用不同的C编译器升级经过全面测试的德州仪器(TI)MSP430微控制器C程序,从Quadravox,AQ430开发工具改为VisualGDB C编译器.

该程序使用VisualGDB编译零错误和零警告.中断服务程序,定时器,UART控制等等都似乎正在工作.但是,sprintf的某些用途不起作用.例如:

unsigned int duration;
float msec;

msec = (float)duration;

msec = msec / 125.0;

sprintf(glb_response,"break: %3.1f msec",msec);
Run Code Online (Sandbox Code Playgroud)

返回: break: %3.1f msec

这是预期的: break: 12.5 msec

我已经了解了以下内容(来自维基百科):

编译器选项--printf_support = [full | 最小| nofloat]允许您使用较小的,功能受限的printf/sprintf变体,并在构建时进行选择.

有效值为:

full:支持所有格式说明符.这是默认值.

nofloat:不包括对打印浮点值的支持.支持除%f,%g,%G,%e和%E之外的所有格式说明符.

minimal:支持不带宽度或精度标志的整数,字符或字符串值的打印.具体而言,仅支持%%,%d,%o,%c,%s和%x格式说明符

我需要对printf的全力支持.我知道我的产品上的MSP430将支持这一点,因为这个C程序已服务多年.

我的问题是,我无法弄清楚1)VisualGDB是否有办法将printf支持设置为full,2)如果是这样,在哪里设置它.

任何和所有的评论和答案将不胜感激.

c embedded printf msp430

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

Windows 10 应用商店应用程序中徽章徽标的用途是什么?

使用 Visual Studio 2015 制作 Windows 10 应用商店应用程序时,包清单 (Package.appxmanifest) 允许您添加 5 种不同分辨率的徽章徽标。徽章标志有什么用?

windows-store-apps

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