Delphi 如何在dll窗体中显示背景图像并将面板居中?
我想加载一个图像,这将是一个最大化的形式,留在dll的背景 dll是从Vcl表单应用程序调用的,但在无法在表单上加载背景图像的情况下遇到问题,dll总是崩溃 谢谢你的帮助 =========================================================================== 可执行文件 第一单元(表格): 第二单元:Delphi 如何在dll窗体中显示背景图像并将面板居中?,delphi,dll,vcl,delphi-10-seattle,Delphi,Dll,Vcl,Delphi 10 Seattle,我想加载一个图像,这将是一个最大化的形式,留在dll的背景 dll是从Vcl表单应用程序调用的,但在无法在表单上加载背景图像的情况下遇到问题,dll总是崩溃 谢谢你的帮助 =========================================================================== 可执行文件 第一单元(表格): 第二单元: unit Unit2; interface Uses windows, Unit1, SysUtils; pr
unit Unit2;
interface
Uses
windows,
Unit1,
SysUtils;
procedure showform;
implementation
procedure showform;
begin
Form1 := TForm1.Create(Form1);
sleep(100);
Form1.Show;
Form1.Pnl1.Visible := True;
end;
end.
你的问题有很多问题,考虑到缺乏细节,我会尽力回答
Form1 := TForm1.Create(Form1);
在这场演出中,我们从自己做起。我要说的是,很可能是这就是应用程序崩溃的原因。有关DLL中窗体的详细信息,请参阅
如果无法正确调试应用程序,请在该行之前和之后各发出一声蜂鸣音(在它们之间进行延迟)- ?
- 为什么要将其构建为DLL?不能将应用程序编写为单个EXE吗?还是两个互相交流的前男友?
你说它崩溃了,怎么了?您是否已调试到DLL中以查找错误发生的位置?我没有看到任何正在设置的图像,是否在设计时将图像设置为面板背景?@mirtile,
是否在设计时将图像设置为面板背景
背景图像不必在面板中,并且在dll的Form1上为“是”。Yes是在运行时这里定义的:img1.Picture.LoadFromFile(IncludeTrailingBackslash(GetCurrentDir)+'background.bmp')
@Davison我刚刚构建了您在问题中提供的代码-它不会崩溃。这里没有人会下载项目并为您调试,所以请立即忘记这个想法。你的工作就是提出问题,提供完整的代码来重现你所遇到的问题。以您给我们的代码为例,从头开始,尝试重现问题。当你可以问一个完整的问题时,回来把你的问题和细节联系起来。奇怪的是,你不想调试自己的程序。如果您不允许自己选择调试,则很难取得任何进展。请阅读“主机应用程序”。表单可以拥有自己的功能-这是一个非常糟糕的想法,可能是问题的原因,但在这种情况下不是这样。OP的代码编译并运行良好。第三点和第四点都应该是评论——如果这是OP的问题,那就离题了。第三方的建议是离题的。要求澄清的问题属于评论。这真的不是一个答案。这是我们对提供的信息所能做的最好的:)至少,OP现在可以调试代码并查看它在哪里崩溃。可能他是在“发布”模式下运行的,或者如果他是在“调试”模式下,则项目配置不正确。一旦我们有了这些信息,我们将能够帮助他。如果你听了其他的评论,OP对调试不太感兴趣…@jaTForm
无法拥有它自己。在语句TForm1.Create(Form1)
中,Form1
要么为nil
,要么指向TForm1
的早期实例。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
img1: TImage;
pnl1: TPanel;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent:= Application.Handle;
Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST or WS_EX_TRANSPARENT;
Params.ExStyle := WS_EX_TRANSPARENT or WS_EX_TOPMOST;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
brush.Style := bsclear;
img1.Picture.LoadFromFile(IncludeTrailingBackslash(GetCurrentDir) + 'background.bmp');
SetWindowPos(Form1.handle, HWND_TOPMOST, Form1.Left, Form1.Top, Form1.Width,
Form1.Height, 0);
ShowWindow(Application.handle, SW_HIDE);
pnl1.Top := (self.Height div 2) - (pnl1.Height div 2);
pnl1.Left := (self.Width div 2) - (pnl1.Width div 2);
end;
end.
unit Unit2;
interface
Uses
windows,
Unit1,
SysUtils;
procedure showform;
implementation
procedure showform;
begin
Form1 := TForm1.Create(Form1);
sleep(100);
Form1.Show;
Form1.Pnl1.Visible := True;
end;
end.
Form1 := TForm1.Create(Form1);