我在Delphi 2007中有一个基本表单,我想在另一个项目中重用,添加一些其他按钮等.
我熟悉子类化非GUI对象,但是可以以相同的方式子类化Form吗?您能否在设计模式下更改子类Form?
你是怎么做这个以及有什么需要注意的?
我试图将一组使用自定义工具创建的表单转换为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) 我有一个接受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,然后分配s3到s2的AV消失.为什么?直接写入字符串参数有什么问题?
我在互联网上找到但我没有得到如何在delphi中使用ManagementObjectSearcher.我的主要问题是我必须在'使用'中添加哪个文件.
我找到了一个代码,但无法让它在我的系统中运行.
所以我在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
尝试设置一个Opengl上下文以呈现为位图,但我发现从Tbimap画布对象返回的句柄不断变化,因此渲染上下文不断抛出异常,因为它与创建渲染上下文的句柄不匹配.
我发现更改位图宽度或高度将更改句柄值,如果位图是在执行渲染的过程之外创建的,则每次输入过程时都会得到不同的句柄.
我需要这个保持静态,或者它有点无意义,有能力首先渲染到位图.
任何线索如何修复手柄?
我想在运行时确定是否在IDE中特别忽略了异常类.原因是:当从IDE运行应用程序时,我可能会收到一个异常,我知道原因,但现在不想处理.所以我选中"忽略这些例外"框并单击继续.
我可能忘记稍后禁用此设置,因此我想在应用程序启动时添加代码以警告我列表中的异常Tools/Options/Debugger Options/CodeGear Debuggers/Language Exceptions被忽略.
另一种方法是可以在不触发IDE中的异常的情况下确定异常类状态(即是否忽略)的代码片段.
我有一个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 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编码,我想我应该WideString在Delphi-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 ×10
delphi-2007 ×10
string ×2
unicode ×2
constants ×1
delphi-ide ×1
delphi-xe2 ×1
encoding ×1
forms ×1
inheritance ×1
opengl ×1
pchar ×1
wmi ×1