2012-05-07 10 views
5

画面には、次のソースコードが上記のエラーを生成するために使用したなぜこのエラーはXE2 IDEツールバーを台無しにしていますか?

enter image description here

ショット。あなたがしなければならないのは、プログラムをコンパイルして、IDEがまだ動作していることを確認することです(IDEが閉じているとエラーは発生しません)。ボタンを12〜15回クリックするとエラーがポップアップします。

エラーが発生したら、IDEに戻って、IDEのすべてのツールバーが消えます。それらを再表示するには、IDEをシャットダウンして再度実行する必要があります。すべてのヘルプ

enter image description here

ショット

ソースコード

unit MainUnit; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, Winapi.ShlObj, System.SysUtils, 
    System.Variants, System.Classes, System.StrUtils, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.StdCtrls; 

type 
    TMainFrm = class(TForm) 
    Button1: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    MainFrm: TMainFrm; 
    hDesktop: HWND; 

implementation 

{$R *.dfm} 

function GetHandle(theHandle: HWND; NotUsed: NativeInt): LongBool; stdcall; 
begin 
    if (theHandle <> 0) then 
    begin 
    hDesktop := FindWindowEx(FindWindowEx(theHandle, 0, 'SHELLDLL_DefView', 
     nil), 0, 'SysListView32', nil); 
    end; 
    Result := (hDesktop = 0); 
end; 

procedure TMainFrm.FormCreate(Sender: TObject); 
var 
    lpss: TShellState; 
begin 
    ZeroMemory(@lpss, SizeOf(lpss)); 
    try 
    SHGetSetSettings(lpss, SSF_HIDEICONS, False); 
    finally 
    Button1.Caption := IfThen(lpss.fHideIcons, 'Show Icons', 'Hide Icons'); 
    end; 
    EnumWindows(@GetHandle, 0); 
    Button1.Enabled := (hDesktop <> 0); 
end; 

procedure TMainFrm.Button1Click(Sender: TObject); 
const 
    nCmdShow: array [Boolean] of NativeInt = (SW_HIDE, SW_SHOW); 
var 
    lpss: TShellState; 
begin 
    ZeroMemory(@lpss, SizeOf(lpss)); 
    try 
    SHGetSetSettings(lpss, SSF_HIDEICONS, False); 
    ShowWindow(hDesktop, nCmdShow[lpss.fHideIcons]); 

    lpss.fHideIcons := (not BOOL(lpss.fHideIcons)); 
    Button1.Caption := IfThen(lpss.fHideIcons, 'Show Icons', 'Hide Icons'); 
    finally 
    SHGetSetSettings(lpss, SSF_HIDEICONS, True); 
    end; 
end; 

end. 

アプリケーション画面をいただければ幸いです。

UPDATE

IDEのツールバーがもはや消えず、エラーはもう表示されない、「プロファイラのツールバー」をオフにする方法についてはTOndrejに感謝。今、私は非常に迷惑なフリッカーを得ることがありますが、時には通常の状態に戻るのに10〜15秒かかります。

+0

私はあなたができるならば、それはより安定して見えるデルファイXEをお勧めします。 – none

答えて

5

AQTimeはインストールされていますか?プロファイラツールバーを非表示にするだけで問題は消えてしまうようです。

+0

私はそれがAQTimeに関係しないと思う。私はそれを持っていないが、アイコンが表示されたり、私のマシン上に隠されているときにすべてのウィンドウ(Delphi IDEだけでなく)上のすべてのツールバーがちらつく。しかし、私は* OS関数の呼び出しが失敗*エラーを取得しませんでした。 – TLama

+0

@TLamaフリッカーは無関係ですが、おそらくエラーです。プロファイラツールバーが表示されるたびに再現性があり、非表示にすると再現できませんでした。 –

+0

私はちらつきが予想されませんでした。私はAQTimeがインストールされていないのであなたの理論を確認しているので私の+1を得ました;-) – TLama

関連する問題