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の2つの異なるインスタンスがあります。実行可能ファイルが所有するインスタンスにスタイルを設定しましたStyleServicesが、DLLはそれを認識していません。これは次のいずれかで解決できます。

  1. スタイル設定をDLL内の関数に渡し、それらの設定を他のStyleServicesインスタンスに適用します。
  2. パッケージを使用して、VCLインスタンスが1つだけになるようにします。
于 2011-09-07T17:38:08.663 に答える
0

私はこれに多くの問題を抱えていました、そしてそれは私がとよりもむしろ使っていたからでしthemesた。VCL.THEMESVCL.STYLES

Delphiは、customeStyleException「スタイルが見つかりません」またはEcustomStyleException「このスタイルでサポートされていない機能」ということわざを投げかけていました

于 2012-01-05T11:55:26.397 に答える