은 위의 오류를 생성하는 데 사용 된 이 오류로 인해 XE2 IDE 도구 모음이 엉망인 이유는 무엇입니까?
다음 소스 코드
을 스크린 샷. 당신이해야 할 일은 프로그램을 컴파일하고 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.
응용 프로그램 화면
어떤 도움을 크게 감상 할 수 샷.
UPDATE
는 IDE 도구 모음이 더 이상 사라지지하고, 오류가 더 이상 나타나지은 "프로파일 러 도구 모음을"해제에 대한 내용은 TOndrej에 감사합니다. 이제 정상적으로 돌아 오는 데 10 ~ 15 초가 걸리는 매우 짜증나는 깜박임이 발생합니다.
필자는 Delphi XE를 사용해 볼 것을 제안합니다. 가능한 경우 더 안정적으로 보입니다. – none