我试图让用户选择是否要使用主题风格.是否有可能动态"加载"XPManifest?
如果用户接受主题样式,则使用清单,否则使用经典主题.在程序启动后,关闭样式选择的对话框后,我想做类似的事情:
if UserWantsThemedStyle then
LoadManifestSomehow
else
UseClassicStyle;
Run Code Online (Sandbox Code Playgroud)
甚至可以在运行时执行它吗?
谢谢
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) 我想制作一个基于TFrame
with TLMDShapeControl
(用于绘制圆角背景)和TEdit
控件(也可以是a TComboBox
或a TDBEdit
等)的组件.之后,我将使用"添加到调色板"命令将其转换为可重用的组件控件.
问题在于我需要宽度灵活,因此我有想法将所有内容都转动到Frame内部alClient
并TEdit
使用5像素边距,这样用户就可以看到圆角.
这太糟糕了,因为我无法使用Align
并将组件设置在另一个的顶部.现在我每次必须使用它时都要复制和粘贴组件!: - (((
我看到正确的事情的唯一方法是只使用TEdit
with alClient
和5px边距而不是TShape
.相反,我可以使TFrame
透明度为圆角,因此不会看起来不同颜色或丑陋TImages
.
但是我该怎么做?
有没有人有任何代码示例?
在设计a时TForm
,会在表单单元中添加一行来声明表单对象...
var
frmMyForm: TfrmMyForm;
Run Code Online (Sandbox Code Playgroud)
我不需要自动创建这个表单,并且我打算创建它的多个实例,并且为了确保我没有使用这个声明的表单的错误,我评论了它...
//var
//frmMyForm: TfrmMyForm;
Run Code Online (Sandbox Code Playgroud)
我想知道这样做是否安全?我没有看到任何问题,表单设计师仍然工作正常.但如果我把它完全抛弃,会不会有麻烦?
我的程序在中创建文件c:\Users\GameDev\AppData\Local\<my game folder>
.是否有可能告诉InnoSetup在卸载过程中删除整个文件夹,即使安装程序没有把它放在那里?
我正在使用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中的屏幕分辨率变化?
假设,我将有以下线程(请不要考虑在此示例的线程上下文执行方法中使用的内容,它仅用于解释):
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) 使用以下代码,我可以获得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 ×8
inno-setup ×2
conditional ×1
delphi-2006 ×1
delphi-2009 ×1
delphi-xe2 ×1
frame ×1
ide ×1
indy ×1
indy10 ×1
manifest ×1
runtime ×1
tthread ×1
winapi ×1