我有一个Delphi 7应用程序,它有两个文档视图(例如,所见即所得HTML编辑可能有WYSIWYG视图和源视图 - 而不是我的真实应用程序).它们可以在单独的窗口中打开,也可以停靠在主窗口中的选项卡中.
如果我从其中一个单独的表单打开模式对话框,则主表单将显示在前面,并在Windows任务栏中显示为选定的窗口.假设主窗体是WYSIWYG视图,并且源视图被激活.您转到源视图中的特定点并插入图像标记.将出现一个对话框,允许您选择并输入图像所需的属性.如果WYSIWYG视图和源视图重叠,则WYSIWYG视图将显示在前面,并且隐藏源视图.一旦对话框被解除,源视图就会重新出现.
我已经尝试将所有者和ParentWindow属性设置为与其相关的表单:
dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;
我该如何解决这个问题?我还应该尝试什么?
鉴于人们似乎对我的例子感到磕磕绊绊,也许我可以尝试一个更好的例子:一个文本编辑器,允许你同时打开多个文件.您打开的文件位于选项卡(如Delphi IDE中)或其自己的窗口中.假设用户调出拼写检查对话框或查找对话框.发生的情况是,如果文件正在其自己的窗口中进行编辑,则在显示模式对话框时,该窗口将以z顺序发送到主窗体下方; 关闭对话框后,它将返回到原始的z顺序.
注意:如果您正在使用Delphi 7并寻找此问题的解决方案,请在页面下方查看我的答案,看看我最终做了什么.
我在我的代码中创建了以下简单类,我得到"TObject不是有效约束"错误消息.
TTest = class
class function Test<T:TObject>(Dummy: integer): string;
end;
...
class function TTeste.Teste<T>(Dummy: integer): string;
begin
Result := 'Compiled';
end;
Run Code Online (Sandbox Code Playgroud)
我做错了什么?这可能吗?(您可以在D2010之后的版本中包含选项,因为我们将在接下来的两周内收到XE2许可证).
我有一个.pas文件,在编程中间 - 代码完成停止工作.我删除了IDEFixPack,这是可疑的,但没有任何改变.什么可以?
(我会自己回答,把这个发现留给社区).
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
end.
Run Code Online (Sandbox Code Playgroud)
编辑:我怀疑这可能是由奇怪的行尾(混合CR,LR和CRLF通过文件)引起的:
unit Unit2;[CR]
[LF]
interface[CR][LF]
[LF]
uses[LF]
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,[CR]
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;[LF]
Run Code Online (Sandbox Code Playgroud)
等等...
考虑以下命令行参数
"alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
当我为我正在工作的项目指定Run> Parameters ...时,应用程序在Process Explorer上显示为命令行:
"c:\myapp\myapp.exe" "alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
ParamCount显示4个参数.但是当我从启动器应用程序(执行访问控制)启动相同的可执行文件时,Process Explorer显示:
"alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
ParamCount显示3个参数.命令行是从启动器应用程序中提取的.理论上它可以工作,因为从启动器启动应用程序工作完美无缺.从IDE启动时,它尝试在"4"上面执行StrToInt ,但只检索"beta"参数.
来自启动器应用程序的示例代码:
var
StartupInfo: TSTARTUPINFO;
ProcessInfo: PROCESS_INFORMATION;
CurrentDirPath: String;
begin
Result := 0;
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
DirCorrente := ExtractFilePath(sExe);
if CreateProcess(PChar(sExe), PChar(sParam), nil, nil, true,
NORMAL_PRIORITY_CLASS, nil, PChar(CurrentDirPath),
StartupInfo, ProcessInfo) then
Run Code Online (Sandbox Code Playgroud)
sParam的内容是上面的命令行参数,sExe是可执行路径.为什么会这样?
注意:我已经设计了如何将命令行参数解释更改为此边缘情况的健壮 - 这里的重点是为什么会发生这种情况.
我创建了一个使用Windows Messaging System的Windows服务.当我从调试器测试应用程序时,消息很好地通过,但是当我安装它时,我的消息...在14分钟前询问
弗拉基米尔1tuga
警告:完全重写.
场景:
我从TCustomADODataset后代的数据库中加载了一些数据.之后,我将这些数据保存在XML临时文件中(使用TCustomADODataset.SaveToFile)以允许将XML数据作为字符串获取并将其作为文本blob存储在数据库表中 - 它是一个导出表.
另一个程序(不同于存储XML的程序)将获取该数据,显示内部元素,并允许用户选择要导入到主数据库模式的元素.
问题:
上述方法的问题是需要临时文件以允许TCustomADODataset使用LoadFromFile方法.
有没有其他方法可以将存储为数据库导出表中的文本的XML数据加载到不需要临时文件的TCustomADODataset中?
笔记:
我想将内部对象的一些功能公开为DLL - 但该功能使用变体.但我需要知道:我可以使用Variant参数导出函数和/或返回 - 或者更好地转到仅字符串表示形式?
什么是更好的,从语言无关的POV(消费者不是用Delphi制作 - 但所有将在Windows中运行)?
我想展示一个涵盖整个屏幕的ProgressDialog.我的意思是当对话框显示时,不应触摸或点击或交互UI.如何创建这样的对话框?
delphi ×7
delphi-2010 ×3
delphi-xe2 ×3
android ×1
constraints ×1
delphi-7 ×1
delphi-ide ×1
dll ×1
generics ×1
tadodataset ×1
variant ×1