2012-05-07 11 views
5

Yukarıdaki hata üretmek için kullanılmıştır Bu hata neden XE2 IDE Araç Çubuklarını karıştırmaya devam ediyor?

enter image description here

kaynak kodunu

ekran görüntüsü. Tek yapmanız gereken programı derlemek ve IDE'nin hala çalıştığından emin olmak (IDE kapalıysa hata gerçekleşmez), 12 ile 15 arası tuşa tıklayın ve hata açılır.

Hata oluştuğunda, tekrar IDE'ye geçin, IDE'nin tüm araç çubukları kayboldu. Yeniden görünmeleri için IDE'yi kapatıp tekrar çalıştırmanız gerekiyor.

Kaynak Kodu

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. 

Uygulama Ekranı

enter image description here

Herhangi bir yardım büyük takdir Shot.

GÜNCELLEME

IDE araç çubukları artık kaybolur ve hata artık görünmüyor, "Profiler araç çubuğu" kapatma hakkında bilgi almak için TOndrej için teşekkürler. Şimdi bazen normale dönmek için 10-15 saniye süren çok sinir bozucu bir titreme alıyorum.

+0

Delphi XE'yi denemenizi öneririm, eğer yapabiliyorsanız daha kararlı görünüyor. – none

cevap

5

AQTime yüklü mü? Eğer Profiler araç çubuğunu gizlerseniz problem ortadan kalkar.

+0

Sanırım AQTime ile ilgili olmayacak. Bende yok ama tüm pencerelerdeki tüm araç çubukları (sadece Delphi IDE değil), simgeler makinemde gösterildiğinde veya gizlendiğinde titriyor. Ancak ben bir OS işlevi başarısız * hatası aldım. – TLama

+0

@TLama titreme ilgisiz, hata muhtemelen; Profiler araç çubuğu gösterildiğinde her zaman tekrarlanabilir, gizlendiğinde yeniden üretilemedi. –

+0

Titremeyi beklemiyordum. Ve benim +1 var, çünkü ben sadece senin teorisini teyit ediyor çünkü AQTime yüklü değil ;-) – TLama

İlgili konular