标签: delphi-2007

如何在Delphi中对表单进行子类化?最佳实践?

我在Delphi 2007中有一个基本表单,我想在另一个项目中重用,添加一些其他按钮等.

我熟悉子类化非GUI对象,但是可以以相同的方式子类化Form吗?您能否在设计模式下更改子类Form?

你是怎么做这个以及有什么需要注意的?

forms delphi inheritance delphi-2007

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

WriteComponentResFile不包括动态添加到TTabSheet的组件

我试图将一组使用自定义工具创建的表单转换为Delphi表单.我试图在运行时添加所有必要的组件,然后使用WriteComponentResFile来创建DFM文件.

在我尝试添加TPageControl和TabSheets之前,我的所有初始测试看起来都很好.当前表单可以有多个页面,所以我将使用PageControl镜像它.问题是我添加到TabSheet的任何组件都没有流式传输到DFM.如果我显示表单看起来很好,但WriteComponentResFile缺少某些东西.

我正在写一个相应的pas文件,所以我可以在完成后在IDE中打开它.目标是远离自定义表单设计器,并开始使用Delphi IDE作为表单设计器.

下面是一些示例代码,展示了我如何创建组件:

procedure WriteFormAsDFM(OutputFileName: string);
var
  PageIndex: integer;
  PageCount: Integer;
  OutputForm: TForm;
  Pages: TPageControl;
  NewPage: TTabSheet;
  NewLabel: TLabel;
begin

  OutputForm := TForm.Create(nil);
  OutputForm.Name := ChangeFileExt(ExtractFileName(OutputFileName), '');
  OutputForm.Caption := OutputForm.Name;
  OutputForm.Height := 300;
  OutputForm.Width := 300;

  Pages := TPageControl.Create(OutputForm);
  Pages.Parent := OutputForm;
  Pages.Top := 50;
  Pages.Left := 0;
  Pages.Height := 200;
  Pages.Width := 200;

  NewLabel := TLabel.Create(OutputForm);
  NewLabel.Parent := OutputForm;
  NewLabel.Caption := 'Label on Form';

  //write pages
  PageCount := 2;

  for PageIndex := 0 to PageCount - 1 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007

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

在D2007中连接字符串时,此访问冲突的原因是什么?

我有一个接受2个字符串参数的过程,其中一个具有默认值.在程序中,我想连接一个和另一个以及一些文字以形成一个更大的字符串.不知怎的,我正在收到一个AV ...任何想法?

代码是这样的

{$WRITEABLECONST ON}
constructor MyClass.Create(s1: string; s2: string = GlobalConstant);
var s3: string;
begin
    ....
    if (s2 = '') then s2 := GlobalConstant + ' (' + s1 + ')';      // AV here
    ....
end;
Run Code Online (Sandbox Code Playgroud)

如果我给你GlobalConstant + ' (' + s1 + ')s3,然后分配s3s2的AV消失.为什么?直接写入字符串参数有什么问题?

delphi string constants delphi-2007

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

如何在Delphi中使用ManagementObjectSearcher?

我在互联网上找到但我没有得到如何在delphi中使用ManagementObjectSearcher.我的主要问题是我必须在'使用'中添加哪个文件.

我找到了一个代码,但无法让它在我的系统中运行.

delphi wmi delphi-2007

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

如何将一组对象传递给函数进行创建?

所以我在Delphi 2007工作,我正在清理我的代码.我注意到在很多程序中我声明了许多相同类型的不同变量.

例如我现在正在查看的一个程序我声明了4个不同的字符串列表,我必须var1 := TStringList.Create为每个列表输入.

我有想法制作一个程序,它接受一个开放的变量数组,我的4个变量列表,然后创建它们.电话会是这样的

CreateStringLists([var1,var2,var3,var4]);
Run Code Online (Sandbox Code Playgroud)

但据我所知,你不能通过引用传递开放数组,因此不能做我希望的事情.有没有人对此有任何有趣的想法?

delphi delphi-2007 variable-initialization open-array-parameters

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

如何获得静态Tbitmap.canvas.handle?

尝试设置一个Opengl上下文以呈现为位图,但我发现从Tbimap画布对象返回的句柄不断变化,因此渲染上下文不断抛出异常,因为它与创建渲染上下文的句柄不匹配.

我发现更改位图宽度或高度将更改句柄值,如果位图是在执行渲染的过程之外创建的,则每次输入过程时都会得到不同的句柄.

我需要这个保持静态,或者它有点无意义,有能力首先渲染到位图.

任何线索如何修复手柄?

delphi opengl delphi-2007

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

Delphi 2007 - 是否有可能在运行时获取被忽略的异常类列表?

我想在运行时确定是否在IDE中特别忽略了异常类.原因是:当从IDE运行应用程序时,我可能会收到一个异常,我知道原因,但现在不想处理.所以我选中"忽略这些例外"框并单击继续.

我可能忘记稍后禁用此设置,因此我想在应用程序启动时添加代码以警告我列表中的异常Tools/Options/Debugger Options/CodeGear Debuggers/Language Exceptions被忽略.

另一种方法是可以在不触发IDE中的异常的情况下确定异常类状态(即是否忽略)的代码片段.

delphi exception-handling delphi-2007 delphi-ide

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

将PAnsiChar分配给(unicode-)字符串的正确方法是什么?

我有一个DLL函数,返回一个指向ANSI文本(PAnsiChar)的指针.我想将它分配给(unicode-)字符串(这是Delphi XE2.).以下编译,但我得到一个警告"W1057隐式字符串从'AnsiChar'转换为'字符串'":

function TProj4.pj_strerrno(_ErrorCode: Integer): string;
var
  Err: PAnsiChar;
begin
  Err := Fpj_strerrno(_ErrorCode);
  Result := Err;
end;
Run Code Online (Sandbox Code Playgroud)

编辑:有问题的文本是英文错误信息,因此这里不太可能有任何转换问题.

我现在很想明确地将Err明确强制转换成这样的字符串......

Result := String(Err);
Run Code Online (Sandbox Code Playgroud)

..摆脱警告.这可能会出错吗?我宁愿使用临时的AnsiString变量吗?

var
  s: AnsiString;
[...]
s := Err;
Result := String(s);
Run Code Online (Sandbox Code Playgroud)

如果是,为什么?

或者我应该明确说明,代码首先将PAnsiChar转换为AnsiString,然后将AnsiString转换为String?

Result := String(AnsiString(Err));
Run Code Online (Sandbox Code Playgroud)

当然,我可以使它成为一个功能:

function PAnsicharToString(_a: PAnsiChar): string;
begin
   // one of the above conversion codes goes here
end;
Run Code Online (Sandbox Code Playgroud)

所有这些选项都可以编译,但它们会起作用吗 这里最好的做法是什么?

加分:理想情况下,代码应该与Delphi 2007和更新版本一起编译和使用.

delphi unicode delphi-2007 pchar delphi-xe2

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

如何在Delphi-2007上将unicode字符串转换为字节数组,反之亦然

Delphi XE7中,我们使用以下命令将一些值从字符串转换为字节,从字节转换为字符串:

MyBytes := TEncoding.Unicode.GetBytes(MyString);
Run Code Online (Sandbox Code Playgroud)

MyString := TEncoding.Unicode.GetString(MyBytes);
Run Code Online (Sandbox Code Playgroud)

我想编写自己的函数,在Delphi-2007上得到相同的值。我真的不熟悉chars编码,我想我应该WideStringDelphi-2007中使用type (是吗?)

function StringToBytes(AValue : WideString) : TBytes;
begin
   Result := //...
end;

function BytesToString(AValue : TBytes) : WideString;
begin
   Result := //...
end;
Run Code Online (Sandbox Code Playgroud)

有人可以帮我编写这两个功能吗?

delphi string unicode encoding delphi-2007

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

Delphi保存错误

我试图在delphi 2007中保存一个单元.但不幸的是我无法保存它,因为它不断地把我的错误扔给我,你可以在下面找到.有人遇到过同样的事吗?在此输入图像描述

delphi delphi-2007

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