标签: vcl

将 TForm 作为参数传递给函数

我有一个包含多个表单的应用程序。其中两个非常相似,它们具有共同的 VCL 对象(标签、图像等)形式的特征,我将其命名为相同的。我想在特定类中有一个函数,它可以接受这两个 Form 之一作为参数,以便修改它们共有的参数。我遇到的解决方案似乎不起作用。

由于我的应用程序非常大且复杂,我使用一个小示例复制了该问题。首先,下面是我的 MainForm 的一个例子:

在此处输入图片说明

以及一个子表单的示例(它们都以类似的方式排列)

在此处输入图片说明

我有一个额外的类,用于填写子表单上的编辑。这个类的代码如下:

#pragma hdrstop

#include "master_class.h"
#include "sub_Form2.h"
#include "sub_Form3.h"
#include "sub_Form4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

Master::Master(void)
{

}

Master::~Master(void)
{

 }

 void Master::WriteToForm(TForm* Form)
{
TForm2* curForm = static_cast<TForm2*>(Form);

TForm3* self = dynamic_cast<TForm3*>(Form);
TForm2* self2 = dynamic_cast<TForm2*>(Form);

if (self != NULL && self2 == NULL) {
    TForm3* curForm = static_cast<TForm3*>(Form);
}

else if (self == NULL && self2 != NULL) {
    TForm2* curForm = static_cast<TForm2*>(Form);
}

curForm -> Edit1 -> Text = …
Run Code Online (Sandbox Code Playgroud)

c++ vcl c++builder

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

自动运行Delphi程序运行在C:\windows\system32

我编写了一个应在启动 Windows 时运行的应用程序。

我使用此代码来使用复选框来决定它是否在启动时运行:

// d('randomString'); -> this is a function which adds text to a memo for debugging purposes
// GetDosOutput is a function to run cmd commands and get the output of them piped in a memo

function GetRegistryValue(KeyName: string): string;
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create(KEY_READ);
  try
    Registry.RootKey := HKEY_CURRENT_USER;

    // False weil kein Eintrag erzeugt werden soll, sofern er nicht vorhanden ist.
    Registry.OpenKey(KeyName, False);

    result := Registry.ReadString('SomeRandomAppIWantToRun');
  finally
    Registry.Free;
  end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
var …
Run Code Online (Sandbox Code Playgroud)

windows delphi vcl autostart delphi-10.4-sydney

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

尝试..除了在线程内被忽略

try..except当尝试将 PNG 文件加载到以下文件中时,我有一个捕获错误的基本方法TImage

try
  Previewimage.Picture.LoadFromFile(filename);
except
  //code to handle exception
end;
Run Code Online (Sandbox Code Playgroud)

通常,如果文件不存在,或者在我的情况下 PNG 已损坏,则此方法可以正常工作。我无法控制 PNG 的源创建,因此需要捕获 PNG 无法加载的情况,即它给出错误:

此“便携式网络图形”图像无效,因为它包含无效的数据片段(crc 错误)。

我的问题是它try..except在工作线程内。这似乎导致try..except被忽略,并且我的程序因 CRC 异常而崩溃。

对于这个问题有什么简单的解决办法吗?

delphi png vcl timage

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

Delphi 的 VCL 中是否有 HitTest 属性或其他内容?

在 FireMonkey (FMX) 中,每个TControl组件都有一个HitTest属性,允许我启用或禁用组件上的鼠标事件。

VCL中有类似的东西吗?我试着寻找它,但我HitTest在任何地方都找不到房产。

如果没有HitTestVCL,如何实现同样的效果呢?有人可以提供一个关于如何在 VCL 中执行此操作的代码示例吗?

我正在使用 Embarcadero Delphi 12。

delphi vcl mouseevent hittest firemonkey

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

什么时候TGraphicControl.Paint叫?

我正在尝试编写一个自定义TGraphicControl后代,允许用户在VCL表单上嵌入SDL渲染表面.这将提供一种在表单中显示SDL动画的简单方法.

显然,使用Paint方法重绘了TGraphicControl.这种情况多久被召唤一次?只有当某些事情发生在使控件无效时,或者还有其他事情可以调用它吗?它如何与自己绘图的东西相互作用?

delphi vcl sdl image

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

单个应用程序中的多个MDI父表单

VCL本身不允许MainForm以外的其他表单托管MDI子表单。这是Borland的硬编码限制,不是Microsoft MDI体系结构的限制。Microsoft允许应用程序中的多个窗口托管MDI子级。Win32 API中没有MainForms的概念。

我尝试将下面的embarcadro c ++示例转换为embarcadro delphi,但未成功。创建mdi子表单时,我始终遇到错误“当前没有任何mdi表单处于活动状态”。

此c ++示例演示了如何允许一个非MDI项目承载多个MDI父窗体,这些窗体都不是VCL的MainForm。

随信息一起下载(需要下载帐户) http://cc.embarcadero.com/item/23574

直接下载(无需下载帐户) http://www.delphibasics.info/MultipleMDIParentFormsInASingleApplication.zip

如果有人将这个示例从embarcadro c ++语言转换为embarcadro delphi语言,将不胜感激。谢谢。

delphi mdi vcl

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

禁用时显示自定义控件提示

我编写了一个自定义控件(TCustomControl),它显示了悬停时的标准内置提示.但是,禁用该控件时,不会显示提示.但是,TSpeedButton当它被禁用时确实显示了一个暗示,所以必须有一种方法可以在我的控制中做同样的事情.

当我的控件被禁用时,我需要做什么才能显示提示?

delphi vcl custom-controls

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

从循环中的TreeView中删除用户选择的项时,如何避免无效索引错误?

我有一个树视图和一个列表视图,以及一个应该将所选项目从树视图移动到列表视图的按钮.选择和传输完全正常,但删除树视图中的项目不是.它仅在我在树视图下选择单个项目时才有效.当我有TreeView1.MultiSelect := True,然后有一个问题.

这是我正在使用的代码:

For i := 0 to TreeView1.Items.Count-1 do Begin
 If TreeView1.Items[i].Selected then
 Begin
 Itm := ListView1.Items.add;
 .....
 TreeView1.Items[i].Delete
Run Code Online (Sandbox Code Playgroud)

上述代码在某些选择后给出无效索引.不完美有时只添加两个中的一个.

尝试:

  1. For i := TreeView1.Items.Count to 1 do Begin
  2. 首先填充listview,然后尝试从treeview中删除,而不是同时执行它.同样的错误.
  3. 试图将Parent和Child存储在一个数组中,然后用名称删除它们.问题是未在树视图中选择的特定项目.

当我选择父节点中的所有元素被复制的最后一个元素时,这是不起作用的代码

for Itr := TreeView1.Items.Count-1 downto 0 do Begin
  if TreeView1.Items[Itr].Selected then
  begin
    Str := TreeView1.Items[Itr].Parent.Text + ' ,' + TreeView1.Items[Itr].Text;
    TrimLeft(Str);
    for k := 0 to SaveList.Count -1 do Begin
      If ansipos(Str, SaveList[k]) > 0 Then Begin
        Value := StringReplace(SaveList[k], Str, '',[rfReplaceAll, rfIgnoreCase]);
      End; …
Run Code Online (Sandbox Code Playgroud)

delphi treeview listview vcl

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

将4字节十六进制颜色转换为RGB

我在尝试将4字节十六进制格式颜色转换为RGB格式时遇到问题,最大的问题是4字节十六进制颜色的两个第一个字符,我不知道如何转换它.所以我有这个十六进制:$16750899并希望转换格式RGB(0..255,0..255,0..255)

delphi vcl

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

带有复选框支持 vsIcon 和 vsSmallIcon 的虚拟 ListView?

我在 Delphi 中使用 ListView。我将 OwnerData 属性设置为 true,以便在 OnData 事件中提供该项目的数据。

此外,我想为列表视图的每个项目添加一个复选框。但是Checkbox 属性只支持vsList 和vsReport 模式,不支持vsIcon 和vsSmallicon。有解决方法吗?或者是否有任何现成的 3rd 方 VCL 支持这样的功能?

delphi checkbox listview vcl

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

TProgressBar带小数值

是否可以使用十进制值填充进度条?

有解决方案吗

delphi vcl

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

将单元用于标准Windows应用程序和firemonkey移动应用程序

我正在将Delphi Xe5用于Windows和Firemonkey移动应用程序.

我在我的项目组中有两个不同项目的单元.(Windows应用程序和Firemonkey移动应用程序)

1.)如何确定Delphi Xe5的版本?或者,版本是什么?

2.)有没有办法确定Win 32应用程序之间.赢得64应用程序和Firemonkey移动应用程序

3.)在代码中,如何根据应用程序的类型告诉编译器使用哪个版本的Dialogs.那就是VCL.Dialogs(Windows App)与FMX.Dialogs(Firemonkey移动应用程序)

谢谢

delphi vcl firemonkey delphi-xe5

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

Embarcadero Delphi VCL - 组件名称

这个可视组件的名称是什么?谢谢

在此输入图像描述

delphi vcl

-6
推荐指数
1
解决办法
274
查看次数