小编Rob*_*edy的帖子

如果终止挂起的线程是个好主意,我该如何安全地进行?

我的Delphi程序在很大程度上依赖于Outlook自动化.2007-SP2之前的Outlook版本由于编写错误的插件和编写错误的Outlook代码而倾向于卡在内存中.

如果Outlook卡住,调用CreateOleObject('Outlook.Application')或GetActiveObject ...不会返回并保持我的应用程序挂起,直到任务管理器中的Outlook.exe关闭.

我想到了一个解决方案,但我不确定这是否是好的做法.

我在一个单独的线程中使用CreateOleObject启动Outlook,在我的主线程中等待10秒,如果Outlook挂起(CreateOleObject没有返回),则让用户从我的程序中终止Outlook.exe进程.

但是因为我不想强迫用户杀死Outlook.exe进程,作为替代方案,我还需要一种方法来杀死程序中的新线程,该线程现在一直挂起.

  1. 这是好习惯吗?
  2. 如何在不泄漏内存的情况下终止Delphi中的挂起线程?

delphi outlook automation multithreading

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

如何在不让用户首先关注文本框的情况下阅读条形码?

我最近购买了Metrologic条形码扫描仪(USB端口),因为每个人都已经知道它可以作为开箱即用的键盘模拟器.

如何配置扫描仪和我的应用程序,以便我的应用程序可以直接处理条形码数据?也就是说,我不希望用户专注于"文本字段",然后在KeyPress事件触发时处理数据.

c# java windows delphi barcode

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

显式模板实例化如何影响链接器可以找到的内容?

请参阅以下代码,请清除我的疑虑.

  1. 由于ABC是一个模板,为什么当我们在test.cpp中放置ABC类成员函数的定义时它不显示错误?

  2. 如果我在test.h和remve 2中放入test.cpp代码,那么它可以正常工作.为什么?

.

// test.h 
template <typename T> 
class ABC { 
public: 
   void foo( T& ); 
   void bar( T& ); 
}; 
// test.cpp 
template <typename T> 
void ABC<T>::foo( T& ) {} // definition 
template <typename T> 
void ABC<T>::bar( T& ) {} // definition 

template void ABC<char>::foo( char & );  // 1 
template class ABC<char>;                // 2 
// main.cpp 
#include "test.h" 
int main() { 
   ABC<char> a; 
   a.foo();     // valid with 1 or 2 
   a.bar();     // link error if only …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

我可以用Delphi设计网页吗?

我已经用Delphi编程了很长时间,我专注于桌面应用程序.我决定进入网页编程世界.我怎样才能拥有像Delphi这样的界面,但是有一个用于Web编程的脚本环境?有没有任何版本的Delphi我可以制作网页?

IntraWeb创建的应用程序可以作为整个站点上传吗?

delphi

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

如何删除页面控件与其选项卡表之间的边距?

我注意到TPageControl中TTabSheet的Left属性始终为4.因此,TPageControl边框与TTabSheet中的控件之间始终至少有4像素的边距.我想将此边距设置为0(至少对于左边框),但我不能将TTabSheet.Left设置为0; 它总是自动恢复为4像素.

我试图在OnResize for TTabSheet和TTabControl中设置Left属性,但它没有帮助.

如何将此边距减少到0(至少对于左边框)?我正在使用C++ Builder 6.

delphi vcl c++builder c++builder-6

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

在加载之前检查文件是否存在更快,或者在不存在时捕获异常?

我被推荐使用第二个,try-except变体,但我也想知道其他人的想法:下面两个(如果有的话)哪个程序更节省时间?

procedure LoadImage(img: TImage; filename: string);
begin
  if fileexists(filename) then
    img.Picture.Loadfromfile(filename)
  else
    img.Picture.Loadfromfile('default.jpg')
end;
Run Code Online (Sandbox Code Playgroud)

要么

procedure LoadImage(img: TImage; filename: string);
begin
  try
    img.Picture.Loadfromfile(filename)
  except
    img.Picture.Loadfromfile('default.jpg')
  end
end;
Run Code Online (Sandbox Code Playgroud)

delphi performance if-statement try-except

10
推荐指数
2
解决办法
988
查看次数

如何更改启用主题的控件的字体颜色?

是的,这也是这个问题:

如何在启用主题的应用程序上使用Delphi7-> Delphi2007更改TCheckBox(或任何已处理控件)的字体颜色?

在网上和本网站上看了很多,我找到了4种答案:

  1. 和大多数人(甚至来自QC):你不能,它的设计就像微软那样.
  2. 创建一个组件,让您可以按需绘制它.
  3. 购买你想要的昂贵的组件集.
  4. 不要使用主题.

好的,但我仍然不满意.

为用户提供有关他在表单上拥有的财产/数据状态的彩色反馈,对我来说似乎是合法的.

然后我刚刚安装了MSVC#2008 Express版本,而且出乎意料的是,他们可以改变字体的颜色(复选框的属性ForeColor)那么什么?

它似乎并不是"微软那样设计的".那么现在问题又来了:

如何在启用主题的应用程序上使用Delphi 7到Delphi 2007更改TCheckBox(或任何已处理控件)的字体颜色?

delphi themes

9
推荐指数
1
解决办法
9673
查看次数

为什么Perl的"排序"不按数字顺序放置这些哈希键?

#!/usr/bin/perl
use strict;
use warnings;

my %hash;
foreach ( 1 .. 10 ) {
    $hash{$_} = $_;
}
foreach ( sort(keys %hash) ) {
    print $_ . ":  " . "$hash{$_}" . "\n" ;
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码时,结果如下:

1:  1
10:  10
2:  2
3:  3
4:  4
5:  5
6:  6
7:  7
8:  8
9:  9

我希望"10:10"成为最后一个印刷品.我只需要有人解释为什么Perl会在这种情况下给我一个惊喜.

sorting perl

9
推荐指数
1
解决办法
7356
查看次数

首先评估哪个默认参数,为什么?

我有三个功能,funt1(),funt2(),和funt3().

int funt1()
{
    cout<<"funt1 called"<<endl;
    return 10;
}

int funt2()
{
    cout<<"funt2 called"<<endl;
    return 20;
}

void funt3(int x=funt1(), int y=funt2())
{
    cout << x << y << endl;
}
Run Code Online (Sandbox Code Playgroud)

我的main功能:

int main()
{
    funt3();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我funt3()用我的main()方法调用时,为什么funt1()先调用,然后funt2()呢?

c++

9
推荐指数
1
解决办法
427
查看次数

什么是Delphi相当于"+ ="用于向集合中添加元素?

在其他语言(如C++)中,有些运算符可以执行plus-equals或or-equals类型的操作来添加其他样式/标志.Delphi中有相同的东西吗?

现在我有一些代码,如:

label1.Font.Style := label1.Font.Style + [fsBold];
label2.Font.Style := label2.Font.Style + [fsBold];
Run Code Online (Sandbox Code Playgroud)

但是,如果可能的话,我希望能够简化一些简化,而不会在赋值运算符的两边复制标签名称,这可能是:label1.Font.Style += [fsBold];或者label1.Font.Style := self + [fsBold];

可以这样做吗?还是没那么多?

delphi operators set delphi-7

9
推荐指数
3
解决办法
6316
查看次数