2012-05-07 2 views
5

은 위의 오류를 생성하는 데 사용 된 이 오류로 인해 XE2 IDE 도구 모음이 엉망인 이유는 무엇입니까?

enter image description here

다음 소스 코드

을 스크린 샷. 당신이해야 할 일은 프로그램을 컴파일하고 IDE가 여전히 실행 중인지 확인하는 것입니다 (IDE가 닫혀있을 때 오류가 발생하지 않음). 버튼을 12 번에서 15 번 클릭하면 오류가 팝업됩니다.

일단 오류가 발생하면 IDE로 다시 전환하면 IDE의 모든 도구 모음이 사라집니다. IDE를 종료하고 다시 실행해야 다시 나타납니다.

소스 코드

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. 

응용 프로그램 화면

enter image description here

어떤 도움을 크게 감상 할 수 샷.

UPDATE

는 IDE 도구 모음이 더 이상 사라지지하고, 오류가 더 이상 나타나지은 "프로파일 러 도구 모음을"해제에 대한 내용은 TOndrej에 감사합니다. 이제 정상적으로 돌아 오는 데 10 ~ 15 초가 걸리는 매우 짜증나는 깜박임이 발생합니다.

+0

필자는 Delphi XE를 사용해 볼 것을 제안합니다. 가능한 경우 더 안정적으로 보입니다. – none

답변

5

AQTime을 설치 했습니까? 프로파일 러 도구 모음을 단순히 숨기면 문제가 사라진 것처럼 보입니다.

+0

AQTime과 관련이 없습니다. 필자는 아이콘이 보이지 않거나 내 컴퓨터에 숨겨져있을 때 모든 윈도우 (Delphi IDE뿐만 아니라)의 모든 툴바가 깜박입니다. 그러나 나는 * OS 함수에 대한 호출이 실패 * 실패했습니다. – TLama

+0

@TLama 플리커는 관련이 없으므로 오류 일 수 있습니다. 프로파일 러 도구 모음이 표시 될 때마다 재현 가능하며 숨겨진 경우 재현 할 수 없습니다. –

+0

깜박임을 예상하지 못했습니다. 그리고 AQTime을 설치하지 않았기 때문에 당신의 이론을 확인했기 때문에 +1을 얻었습니다 ;-) – TLama

관련 문제