5

使用 Delphi XE2,您可以选择将自定义样式(皮肤)嵌入到 VCL 项目中。
一切正常。现在,我将一些表单放入了一个动态显示的单独 dll 中。
当然,那些不是剥皮的。我该如何纠正?

我想我必须以某种方式调用 TVisualStyle,但没有运气。

主人:

procedure TForm1.Button1Click(Sender: TObject); 
var   
  l: THandle;   
  p: procedure (const h: THandle); stdcall; 
begin   
 l:= LoadLibrary('project1.dll');   
 if l > 0 then   
 begin
        @p:= GetProcAddress(l,'ShowIt');
        p(Application.Handle);
        FreeLibrary(l);   
  end; 
end;

DLL:

procedure ShowIt(const h: THandle);stdcall;
var
  form: TForm;
  b: TButton;
  han: THandle;
begin
  han:= Application.Handle;
  Application.Handle:= h;
  form :=Tform.Create(Application);
  b:= TButton.Create(form);
  b.Parent:= form;
  b.Caption:= 'ytes';
  b.Left:= 2;
  b.Top:= 2;
  form.ShowModal;
  form.Release;
  Application.Handle:= han;
end;

exports ShowIt ;
begin
end.

很标准的东西。现在,要使 dll 表单使用宿主的样式主题,究竟必须做些什么呢?

4

2 回答 2

14

您有两个不同的 VCL 实例。您已经在可执行文件拥有的实例中设置了样式StyleServices,但您的 DLL 对此一无所知。您可以通过以下任一方式解决此问题:

  1. 将样式设置传递给 DLL 中的函数,该函数将这些设置应用于其他StyleServices实例。
  2. 使用包,以便您只有一个 VCL 实例。
于 2011-09-07T17:38:08.663 回答
0

我遇到了很多麻烦,这是因为我使用的是themes而不是VCL.THEMESand VCL.STYLES

Delphi 抛出了一个customeStyleException说法“未找到样式”或EcustomStyleException“此样式不支持的功能”

于 2012-01-05T11:55:26.397 回答