小编Rub*_*der的帖子

将Delphi表单最小化到系统托盘

我是德尔福学习者.我正在寻找解决方案,以便将Delphi MainForm最小化到系统托盘而不是任务栏.在右键单击系统托盘图标应该有一些菜单,如"恢复"和"关于"和"帮助"等.系统托盘图标将从Imagelis1加载,它将动画.单击"恢复"将恢复MainForm,点击"关于""Form2"将被恢复,点击"帮助""Foprm3"将被恢复.我在互联网上找到了这么多解决方案:

解决方案01

解决方案02

但每种解决方案都有一些缺点.有些可以做一次.有些人在Windows7中模糊了图标.有人可能会告诉我没有人为我编写代码,我必须显示我的代码.Plaese原谅我这个问候.请给我具体的解决方案,它可以在没有Windows版本依赖的情况下实现.它会帮助每一个人.请帮我.

delphi delphi-xe2

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

Delphi无边框和无标题应用程序

我愿意使用以下代码在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 delphi-xe2

5
推荐指数
3
解决办法
4813
查看次数

如何读取注册表项的默认值

我正在使用一个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)

delphi

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

如何在不禁用子控件功能的情况下从客户区拖动表单?

我有类似的组件德尔福XE2项目Label1,BitBtn1Image1.我已经实现了表单拖动而没有标题栏写下面的代码:

  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.OnMouseMoveLabel1.OnClick事件,但它们不起作用.如何从客户区拖动表单除了Image1Label1区域?我可以做一件我可以使用的东西TPanel,但它会破坏我的表格GlassFrameSheetOfGlass属性.

windows delphi winapi delphi-xe2

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

Windows XP中的Delphi Aero Style

是否可以使用DelphiXE2在Windows XP中制作表格和其他组件的Aero Glass效果.如果是的话请告诉我怎么样?

delphi delphi-xe2

3
推荐指数
1
解决办法
483
查看次数

TMEMO中的多行添加

我有一个带有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

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

如何设置注册表项的值

我有一个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下创建的。

delphi delphi-xe2

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

使用Delphi TOSVersion.TArchitecture在Windows中进行OS体系结构确定

我有一个表格有一个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

0
推荐指数
1
解决办法
1210
查看次数

如何从注册表字符串中读取十六进制值

我有一个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'的无效数据类型.

delphi

-2
推荐指数
1
解决办法
1297
查看次数

标签 统计

delphi ×9

delphi-xe2 ×5

winapi ×1

windows ×1