Screen ShotPourquoi cette erreur continue-t-elle à tordre les barres d'outils XE2 IDE?
Le code source suivant a été utilisé pour produire l'erreur ci-dessus. Tout ce que vous avez à faire est de compiler le programme et assurez-vous que l'IDE est toujours en cours d'exécution (l'erreur ne se produit pas si l'IDE est fermé), cliquez sur le bouton 12 à 15 fois et l'erreur apparaîtra.
Une fois l'erreur survenue, revenez à l'IDE, toutes les barres d'outils de l'EDI ont ensuite disparu. Vous devez arrêter l'IDE et recommencer, pour qu'ils réapparaissent.
Source Code
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.
écran d'application Prise de
Toute aide serait grandement appréciée.
MISE À JOUR
Les barres d'outils IDE ne disparaissent plus, et l'erreur ne semble pas plus, grâce à TOndrej pour les informations sur la désactivation de la « barre d'outils Profiler ». Maintenant, je reçois un scintillement très ennuyeux qui prend parfois de 10 à 15 secondes pour revenir à la normale.
Je vous suggère d'essayer le Delphi XE, si vous le pouvez, il semble plus stable. – none