2012-02-05 4 views
3

私はコンポーネントパッケージを開発しており、良いコンポーネントパッケージ(TMS、CnPackなど)のように、Delphi XEのスプラッシュにアイコンとそのライセンス情報を表示したいと考えています。Delphi Splash Screenのアイコンと情報が初めて表示されるのはなぜですか?

実際、私はOTAを通じてこれをやっていますが、不思議なことに、最初のコンパイルとインストールの直後にのみ、これらのことがスプラッシュ画面に表示されます。 Delphiを閉じてもう一度開くと、何も表示されません。

これは私のコードからの抜粋です。

unit Wizards.Information; 

interface 

implementation 

{$R *.res} 

uses 
    ToolsAPI, Windows, Graphics, SysUtils; 

const 
    ICON_SPLASH = 'SPLASHICON'; 
    ICON_ABOUT = 'ABOUTICON'; 

var 
    AboutBoxServices: IOTAAboutBoxServices = nil; 
    AboutBoxIndex: Integer = 0; 

resourcestring 
    resPackageName = 'Delphi Framework v1.0'; 
    resLicense = 'Mozilla Public License 1.1'; 
    resAboutCopyright = 'Copyright My Company Ltd.'; 
    resAboutTitle = 'Delphi Framework'; 
    resAboutDescription = 'Good description here ;)'; 

procedure RegisterSplashScreen; 
var 
    bmp: TBitmap; 
begin 
    bmp := TBitmap.Create; 
    try 
    bmp.LoadFromResourceName(HInstance, ICON_SPLASH); 
    SplashScreenServices.AddPluginBitmap(resPackageName, bmp.Handle, False, resLicense); 
    finally 
    bmp.Free; 
    end; 
end; 

procedure RegisterAboutBox; 
var 
    ProductImage: HBITMAP; 
begin 
    Supports(BorlandIDEServices,IOTAAboutBoxServices, AboutBoxServices); 
    ProductImage := LoadBitmap(FindResourceHInstance(HInstance), ICON_ABOUT); 
    AboutBoxIndex := AboutBoxServices.AddPluginInfo(resPackageName, resAboutCopyright + #13#10#13#10 + resAboutDescription, ProductImage, False, resLicense); 
end; 

procedure UnregisterAboutBox; 
begin 
    if (AboutBoxIndex <> 0) and Assigned(AboutBoxServices) then 
    begin 
    AboutBoxServices.RemovePluginInfo(AboutBoxIndex); 
    AboutBoxIndex := 0; 
    AboutBoxServices := nil; 
    end; 
end; 

initialization 
    RegisterSplashScreen; 
    RegisterAboutBox; 

finalization 
    UnRegisterAboutBox; 
end. 

あなたは私は、Delphi XEのボックスについても、中にいくつかの情報を表示しようとしている、と私は立ち上がっていますが、この情報は、同じ問題が、残念ながらスプラッシュスクリーンで起こっ苦しむ見ることができるように。

どういうところが間違っていますか?

ヒントは大歓迎です!事前に

おかげ

質問が回答されており、すべてが今動作しているようだが、他の考慮事項は大歓迎ですが、私は意味、ForceDemandLoadState(dlDisable)の使用から、他の回答diferentは大歓迎です!

答えて

1

登録手続きの開始時にForceDemandLoadState(dlDisable)に電話してみるといいでしょうか?

+0

こんにちは!これは両方の登録手続きで行う必要がありますか?私が試してみます。ありがとうございました! –

+0

解決策は動作しますが、これは「回避策」の一種のようです。これは私の問題の修正のより良い形ですか?もう少し説明できますか? –

+0

私はリポジトリウィザードに表示された3つの特別なフォームを持つウィザードを作っています。スプラッシュ画面のアイコンが表示されていない場合でも、私のウィザードはまだ動作していますが、これは問題があると思いますが、修正可能な問題です。この回避策を使用する必要がありますか? –