小编TLa*_*ama的帖子

是否可以在运行时有条件地使用XPManifest?

我试图让用户选择是否要使用主题风格.是否有可能动态"加载"XPManifest?

如果用户接受主题样式,则使用清单,否则使用经典主题.在程序启动后,关闭样式选择的对话框后,我想做类似的事情:

if UserWantsThemedStyle then
  LoadManifestSomehow
else
  UseClassicStyle;
Run Code Online (Sandbox Code Playgroud)

甚至可以在运行时执行它吗?

谢谢

delphi conditional runtime manifest

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

如何在Windows桌面上创建文件快捷方式(*.lnk文件)?

function GetDesktopFolder: string;
var
  buf: array[0..MAX_PATH] of Char;
  pidList: PItemIDList;
begin
  Result := StrNoDesktopFolderFo;
  SHGetSpecialFolderLocation(Application.Handle, CSIDL_DESKTOP, pidList);
  if (pidList <> nil) then
    if (SHGetPathFromIDList(pidList, buf)) then
      Result := buf;
end;

procedure p;
var
  i: Integer;
  IObject: IUnknown;
  ISLink: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  InFolder: array[0..MAX_PATH] of Char;
  TargetName: string;
  LinkName: string;
begin
  TargetName := 'c:\folder\exeFile.exe';//hardcoded example

  IObject := CreateComObject(CLSID_ShellLink) ;
  ISLink := IObject as IShellLink;
  IPFile := IObject as IPersistFile;

  with ISLink do
  begin
    SetDescription('what ever');
    SetPath(pChar(TargetName)) ;
    SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2009

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

如何制作圆角的TFrame?

我想制作一个基于TFramewith TLMDShapeControl(用于绘制圆角背景)和TEdit控件(也可以是a TComboBox或a TDBEdit等)的组件.之后,我将使用"添加到调色板"命令将其转换为可重用的组件控件.

问题在于我需要宽度灵活,因此我有想法将所有内容都转动到Frame内部alClientTEdit使用5像素边距,这样用户就可以看到圆角.

这太糟糕了,因为我无法使用Align并将组件设置在另一个的顶部.现在我每次必须使用它时都要复制和粘贴组件!: - (((

我看到正确的事情的唯一方法是只使用TEditwith alClient和5px边距而不是TShape.相反,我可以使TFrame透明度为圆角,因此不会看起来不同颜色或丑陋TImages.

但是我该怎么做?

有没有人有任何代码示例?

这是目标:透明的圆角

delphi user-interface frame delphi-2006

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

从单元中删除表单声明是否安全?

在设计a时TForm,会在表单单元中添加一行来声明表单对象...

var
  frmMyForm: TfrmMyForm;
Run Code Online (Sandbox Code Playgroud)

我不需要自动创建这个表单,并且我打算创建它的多个实例,并且为了确保我没有使用这个声明的表单的错误,我评论了它...

//var
  //frmMyForm: TfrmMyForm;
Run Code Online (Sandbox Code Playgroud)

我想知道这样做是否安全?我没有看到任何问题,表单设计师仍然工作正常.但如果我把它完全抛弃,会不会有麻烦?

ide delphi delphi-xe2

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

如何在卸载过程中删除文件夹?

我的程序在中创建文件c:\Users\GameDev\AppData\Local\<my game folder>.是否有可能告诉InnoSetup在卸载过程中删除整个文件夹,即使安装程序没有把它放在那里?

inno-setup

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

如何在后台线程中使用LoadKeyboardLayout?

我正在使用LoadKeyboardLayout函数以这种方式加载和激活键盘布局:

procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
  LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但它冻结活动形式1-2秒,因为这种变化需要一些时间.为了防止这种情况,我将此代码移动到这样的后台线程:

type
  FLangChangeThread = class(TThread)
  private
    FLang: string;
  protected
    procedure Execute; override;
  public
    property Lang: string read FLang write FLang;
  end;

implementation

procedure FLangChangeThread.Execute;
begin
  if FLang = 'EN' then
    LoadKeyboardLayout('00000409', KLF_ACTIVATE)
  else
  if FLang = 'FA' then
    LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
Run Code Online (Sandbox Code Playgroud)

这个后台线程我正在以这种方式运行:

procedure TfrmMain.ChangeWritingLanguage(ALang: string);
begin
  with FLangChangeThread.Create(True) do
  begin
    FreeOnTerminate := True;
    Lang := ALang;
    Resume;
  end;
end;

procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
  ChangeWritingLanguage('FA');
end;
Run Code Online (Sandbox Code Playgroud)

问题是,它没有按预期更改键盘布局.我调试了代码并且所有行都被执行了; 只是LoadKeyboardLayout函数没有完成它的工作.

如何从后台线程使 …

delphi tthread keyboard-layout

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

如何检测Delphi中的屏幕分辨率变化?

问题很简单.如何检测Delphi中的屏幕分辨率变化?

delphi winapi screen-resolution

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

方法指针赋值线程是否安全?

例:

假设,我将有以下线程(请不要考虑在此示例的线程上下文执行方法中使用的内容,它仅用于解释):

type
  TSampleThread = class(TThread)
  private
    FOnNotify: TNotifyEvent;
  protected
    procedure Execute; override;
  public
    property OnNotify: TNotifyEvent read FOnNotify write FOnNotify;
  end;

implementation

procedure TSampleThread.Execute;
begin
  while not Terminated do
  begin
    if Assigned(FOnNotify) then
      FOnNotify(Self); // <- this method can be called anytime
  end;
end;
Run Code Online (Sandbox Code Playgroud)

然后假设,我想OnNotify在我需要的任何时候从主线程更改事件的方法.这个主线程实现事件处理程序方法作为ThreadNotify方法:

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FSampleThread: TSampleThread;
    procedure ThreadNotify(Sender: TObject);
  end;

implementation

procedure TForm1.ThreadNotify(Sender: TObject);
begin
  // do something; unimportant …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading

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

如何配置Indy v10以支持IPv4 + IPv6?

使用以下代码,我可以获得IPv4网站的内容:

uses 
  IdHttp;

IdHttp1 := TIdHttp.Create(nil);
try
  Result := IdHttp1.Get('http://www.heise.de/')
finally
  IdHttp1.Free;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接到IPv6网站时,我收到套接字错误#11004:

IdHttp1 := TIdHttp.Create(nil);
try
  Result := IdHttp1.Get('http://www.six.heise.de/')
finally
  IdHttp1.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我可以ping www.six.heise.de就好了(IP 2a02:2e0:3fe:100 :: 6 :)并且Firefox显示网站没有问题.

我需要在Indy(SVN的最新V10版本)中更改以连接到IPv4和IPv6网站吗?

delphi indy indy10

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

如何显示完成百分比,已用时间和预计时间进度?

我想显示完成百分比,已用时间和安装过程的估计时间值.有没有办法添加下面屏幕截图中标记的文本标签?

在此输入图像描述

inno-setup

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