小编WeG*_*ars的帖子

如何以编程方式更改文件关联而不需要提升

如何在用户没有管理员/提升权限时以编程方式更改文件关联(Win XP,Vista,7)?关于如何解决这个问题的任何想法?基本上我想保持我的应用程序像现在一样精简(它不需要提升安装和运行的权限).目前我提供了一个GUI界面,用户可以在其中更改文件关联,但如果用户权限有限,那么它所做的只是显示一条消息,表明它无法执行此操作,并向其解释如何激活"运行此程序"作为管理员"框然后重新启动该程序.如果用户拥有权限,那么我只需更改关联.

有一种更好的方法来保持"精简"吗?

delphi registry file-association

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

如何将数据发送到PHP脚本,并从同一脚本中恢复数据

我在这里有一个类似的问题,但它面向PHP方面.看起来PHP能够接收一个数据包并立即(在同一个会话中)发送和回复.我的问题是Delphi能做到吗?据我所知,答案是一个很大的NO.我需要分两步完成(两个程序).问题是当第一个程序结束时,会话可能会关闭.我可以在两个过程调用之间保持会话打开.

php delphi

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

为什么Indy 10会报告内存泄漏?

我在Indy 10.5.7(Delphi 7下)中有这个漏洞.

5 - 12字节:TIdThreadSafeInteger x 1
21 - 36字节:TIdCriticalSection x 2


我像这样使用Indy:

function getWeb(a,b:Integer):Integer;
var url: string;
    H: TIdHttp;
    SS: TStringStream;
begin
  url := 'http://blabla';
  H := TIdHttp.Create(nil);
  try
    SS := TStringStream.Create('');
    try
      H.Get(url, SS);
      Result := StrToInt(SS.DataString);
    FINALLY
     SS.Free;
    END;
  finally H.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

泄漏本身并不打扰我,因为在应用程序关闭.这使得我的瓜爆炸是我每次关闭应用程序时看到的错误消息.

为什么会出现这种泄漏


我检查了Indy网站,但它几乎没有意义.无论如何,看起来这个bug无法修复:最新版本的Indy无法用Delphi 7编译.唯一的解决方案可能是Indy 9.更新:看起来网站上的内容调用v10.203实际上是v10.2.3 .

delphi

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

记录在案(无法初始化)

我有2条记录,如下所示:

TYPE
 TRecord2= packed record
  i2: Integer;
 end;

 TRecord1= packed record
  i1: Integer;
  R2: TRecord2;
 end;
Run Code Online (Sandbox Code Playgroud)

.

我想将记录字段初始化为零,但我不想使用FillMemory,因此我声明了2个常量记录,我在其中初始化字段.

CONST
  Record2c: TRecord2=
  (
   i2: 0;
  );

  Record1c: TRecord1=
  (
    i1: 0;
    R2: Record2c;      <------- error line
  );
Run Code Online (Sandbox Code Playgroud)

但是,我无法将Record2c分配给R2字段.编译器说:E2029'('期望但标识符'Record2c'找到.

但这有效(如果我评论我有错误的行):

procedure test;
var Record1: TRecord1;
begin
 Record1:= Record1c;      // initialize variable by associating the constant to it
end
Run Code Online (Sandbox Code Playgroud)

那么,我如何初始化R2字段?

delphi

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

Win3.1调色板中控件的更新

有些人说我必须使用现代控件更新Win3.1调色板(尤其是TFilterComboBox)中的控件.但是德尔福是否提供了这样的新控件?

我需要创建一个GUI(以某种方式类似于Windows资源管理器,包含DirectoryListBox,FileListBox和FilterComboBox),我允许用户轻松浏览特定类型的文件.由于界面以此Explorer为中心,因此TOpenDialog就像用锤子击中客户一样.我需要一个"易于使用"的解决方案.

不幸的是,Shell Controls不够稳定,无法用作替代品.

delphi delphi-xe

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

如何在后台从多个线程加载图像[多个线程] [又名:TBitmap不是线程安全的]

我想快速显示一些图像(jpg,png等)作为缩略图.因为解码和调整大小过程是懒惰的,所以我要在一个或多个线程中完成它.

但是,看起来使用TBitmap的画布并且TJpeg不是多线程安全的.

在这种情况下,我的问题是:
1.如果不完全重写GIF/PNG/BMP/JPG库,怎么办呢?
2.有人知道Embarcadero的Gif和Png libs是否也不安全?
3.如果我使用Lock锁定画布不会破坏性能,因为调整大小部分访问画布并占用大部分CPU周期?


我发现这让我很烦恼:

David HAROUCHE写道:这不正确.真正令人困惑的部分是,即使本地TBitmap不是线程安全的,除非你锁定它们.这是因为每个TBitmap都将自己注册到graphics.pas中的全局BitmapCanvasList列表.当DC垃圾收集FreeMemoryContexts()

http://www.codenewsfast.com/cnf/thread/0/permalink.thr-ng1908q2024

delphi

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

如何创建一个像SetLength这样的程序,它也会将内存归零?

在某些情况下,我需要设置动态数组的大小,然后用零填充它.

就像是:

procedure SetLengthAndZero(VAR X; NewSize: Integer);
begin
   SetLength(x, newsize);
   if newsize > 0
   then FillChar(x[0], length(x)* SizeOf(x[0]), 0);
end;
Run Code Online (Sandbox Code Playgroud)

但上面的代码(显然)不会编译.

memory delphi initialization

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

如何通过不使用系统关闭按钮关闭MDI子项

我通过单击系统关闭按钮使用下面的代码关闭MDI子窗体,它工作正常:

procedure Tfrm_main.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想通过使用标准按钮(在子表单本身内)关闭MDI子表单.如果我Close在事件处理程序中调用,那么我会收到访问冲突异常.

有没有办法通过使用放置在子表单本身内的标准按钮(不是系统关闭按钮)来关闭MDI子表单,而不会引发访问冲突异常?

我已经完成了类似的问题搜索,并尝试了各种代码,但仍然有例外.

delphi mdi delphi-7

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

为什么 Delphi 应用程序有多个线程?

我发现我的 Delphi 应用程序有多个线程 - 更准确地说是 7 个线程。当然,我不会创建自己的线程,我只使用“经典”VCL 控件。程序闲置。它只显示主窗体。没有对话框处于活动状态,没有个人/Indy/等线程运行。

  1. 不是应该只有一个线程(VCL 主线程)吗?
  2. 我如何知道其中哪个(已经运行的线程)是主线程?

注 1:这与程序冻结有关,但 CPU 利用率为零
注 2:我刚刚意识到其中 2 或 3 个线程来自调试器(当我暂停程序并调用“CPU 视图”窗口时会出现额外的线程) 。

delphi multithreading delphi-xe7

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

使用大量线路时,TMemo非常慢

我在TMemo中有100000行.我想做的事情如下:

 for i:= 0 to Memo.Lines.Count-1 do
  Memo.Lines[i]:= SomeTrim(Memo.Lines[i]);
Run Code Online (Sandbox Code Playgroud)

但速度是每秒0.5线!!

添加BeginUpdate/EndUpdate后,我没有看到任何速度提升.

 Memo.Lines.BeginUpdate;
 for i:= 0 to Memo.Lines.Count-1 do
  Memo.Lines[i]:= SomeTrim(Memo.Lines[i]);
 Memo.Lines.EndUpdate;
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么BeginUpdate/EndUpdate无济于事?

delphi delphi-xe7

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