我是德尔福学习者.我正在寻找解决方案,以便将Delphi MainForm最小化到系统托盘而不是任务栏.在右键单击系统托盘图标应该有一些菜单,如"恢复"和"关于"和"帮助"等.系统托盘图标将从Imagelis1加载,它将动画.单击"恢复"将恢复MainForm,点击"关于""Form2"将被恢复,点击"帮助""Foprm3"将被恢复.我在互联网上找到了这么多解决方案:
但每种解决方案都有一些缺点.有些可以做一次.有些人在Windows7中模糊了图标.有人可能会告诉我没有人为我编写代码,我必须显示我的代码.Plaese原谅我这个问候.请给我具体的解决方案,它可以在没有Windows版本依赖的情况下实现.它会帮助每一个人.请帮我.
我愿意使用以下代码在Delphi XE2中无边界和无标题地设计一个应用程序:
BorderIcons = []
BorderStyle = bsNone
Run Code Online (Sandbox Code Playgroud)
但问题是右键单击任务栏上的应用程序没有菜单,就像上图中一样.然后我在FormShow事件上尝试了以下代码,但还有另一个问题.在左侧和左侧B侧创建一个边框.代码是:
procedure TForm1.FormShow(Sender: TObject);
var
r: TRect;
begin
r := ClientRect;
OffsetRect(r, 0, GetSystemMetrics(SM_CYCAPTION));
OffsetRect(r, GetSystemMetrics(SM_CXFRAME), GetSystemMetrics(SM_CYFRAME));
SetWindowRgn(Handle,
CreateRectRgn(
r.Left, r.Top,
ClientWidth + r.Left, ClientHeight + r.Top), True);
end;
Run Code Online (Sandbox Code Playgroud)
请帮我.
我正在使用一个Delphi XE2项目来处理注册表项.所以我定义了以下代码:
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry: TRegistry;
begin
RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if (not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\')) then
begin
RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('', 'MyFirstProject');
end
else
begin
Memo01.Lines.Add(RegistryEntry.ReadString('(Default)')); //Not Working
Memo01.Lines.Add(RegistryEntry.ReadString('')); //Not Working
Memo01.Lines.Add(RegistryEntry.ReadString('@')); //Not Working
end;
RegistryEntry.CloseKey();
RegistryEntry.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我的要求是检查"MyName"的默认值并显示在Memo01中.但是什么都没有.所以我尝试了另外一种方法如下:
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry: TRegistry;
RegistryString: string;
begin
RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if (not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\')) then
begin
RegistryEntry.Access:= KEY_WRITE or KEY_WOW64_64KEY;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
RegistryEntry.WriteString('', 'MyFirstProject');
end
else
begin
RegistryString := RegistryEntry.ReadString('(Default)'); //Not …Run Code Online (Sandbox Code Playgroud) 我有类似的组件德尔福XE2项目Label1,BitBtn1和Image1.我已经实现了表单拖动而没有标题栏写下面的代码:
private
{ Private declarations }
procedure WMNCHitTest(var Msg: TWMNCHitTest) ; message WM_NCHitTest;
Run Code Online (Sandbox Code Playgroud)
和
procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest) ;
begin
inherited;
if Msg.Result = htClient then Msg.Result := htCaption;
end;
Run Code Online (Sandbox Code Playgroud)
在我的形式中,我的项目必须使用Image1.OnMouseMove和Label1.OnClick事件,但它们不起作用.如何从客户区拖动表单除了Image1和Label1区域?我可以做一件我可以使用的东西TPanel,但它会破坏我的表格GlassFrame和SheetOfGlass属性.
是否可以使用DelphiXE2在Windows XP中制作表格和其他组件的Aero Glass效果.如果是的话请告诉我怎么样?
我有一个带有2个按钮(Button1,Button2)和1个Memo(Memo1)的Delphi XE2项目.
我的要求是在Button1上单击某些文本将在第一行(第1行)中记住Memo1.如果我再次点击Button1,一些新文本将被写入新行(第2行).
如果我单击Button2,则另一个新文本将附加在Memo1中(在最后一行之后将创建一个新行).所以我写了以下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Text :='Line1';
Memo1.Lines.Text :='Line2';
end;
....
....
....
....
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Text :='Line3';
Memo1.Lines.Text :='Line4';
end;
Run Code Online (Sandbox Code Playgroud)
但问题是只有一行显示Button1FirstClick上的文本为"Line1",Button1SecondClick上的"Line2"和Button2Click上的"Line4".请帮我.
我有一个Delphi XE2项目,要在注册表项中写一些东西。所以我定义了以下代码:
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry: TRegistry;
begin
RegistryEntry:= TRegistry.Create(KEY_READ);
RegistryEntry.RootKey:= HKEY_LOCAL_MACHINE;
if (not RegistryEntry.KeyExists('Software\MyCompanyName\MyName\')) then
begin
RegistryEntry.Access:= KEY_WRITE;
RegistryEntry.OpenKey('Software\MyCompanyName\MyName\',True);
end;
RegistryEntry.CloseKey();
RegistryEntry.Free;
end;
Run Code Online (Sandbox Code Playgroud)
如果有任何字符串添加,我已经定义了以下代码:
if (not RegistryEntry.KeyExists('Licenced To')) then
begin
RegistryEntry.WriteString('Licenced To', 'MySurname MyFirstName');
end;
Run Code Online (Sandbox Code Playgroud)
我的要求:
01.设置默认值,如下所示:
02.在Win64 OS中,该节点是在HKEY_LOCAL_MACHINE \ WOWSys64 \ Software下创建的,而不是在HKEY_LOCAL_MACHINE \ Software下创建的。
我有一个表格有一个TEdit和一个TButton.我正在尝试确定OS体系结构.所以我按照Embarcadero论坛的建议定义了以下代码:
function OSArchitectureToStr(const a: TOSVersion.TArchitecture): string;
function OSPlatformToStr(const p: TOSVersion.TPlatform): string;
function PlatformFromPointer: integer;
.
.
.
.
.
function OSArchitectureToStr(const a: TOSVersion.TArchitecture): string;
begin
case a of
arIntelX86: Result := 'Intel X86';
arIntelX64: Result := 'Intel X64';
else
Result := 'UNKNOWN OS Aarchitecture';
end;
end;
function OSPlatformToStr(const p: TOSVersion.TPlatform): string;
begin
case p of
pfWindows: Result := 'Windows';
pfMacOS: Result := 'MacOS';
else
Result := 'UNKNOWN OS Platform';
end;
end;
function PlatformFromPointer: integer;
begin
Result := SizeOf(Pointer) * 8; …Run Code Online (Sandbox Code Playgroud) 我有一个Delphi XE2项目来检查注册表项MyCompanyName\1中的一个十六进制值.如果十六进制值为13,那么其他一些消息就会出现在那里.
所以我定义了以下代码:
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
RegistryEntry : TRegistry;
begin
RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
RegistryEntry.RootKey := HKEY_LOCAL_MACHINE;
if (RegistryEntry.KeyExists('SOFTWARE\MyCompanyName\1\')) then
begin
if (RegistryEntry.OpenKey('SOFTWARE\MyCompanyName\1\',true)) then
begin
if (RegistryEntry.ReadString('SettingValue') = '0x00000013') then
begin
Memo01.Lines.Add('SettingHexadeciamlValue exist properly')
end
else
begin
Memo01.Lines.Add('SettingHexadeciamlValue does not exist properly')
end;
end
else
begin
if (RegistryEntry.OpenKey('SOFTWARE\MyCompanyName\1\',false)) then
begin
Memo01.Lines.Add('Unable to read RegistryKey ''MyCompanyName''Exiting.......')
end;
end;
end
else
begin
Memo01.Lines.Add('RegistryKey ''MyCompanyName'' does not exist')
end;
end;
Run Code Online (Sandbox Code Playgroud)
编译后,当我运行应用程序AsAdministrator时,我收到错误,提到'SettingValue'的无效数据类型.