Alt Fix - Vista i Se7en

0

Cześć. Słuchajcie mam problem. Korzystam z Delphi 7 Personal i podczas wciskania prawego przycisku Alt znikają wszystkie Buttony, CheckBoxy i RadioButtony. Znalazłem fix dla systemu Vista, ale na Windows 7 generuje błąd podczas zamykania programu. Tutaj ten kod: http://www.koders.com/delphi/fid46DB71DE69DB5D536E9A1EA93FD28F5470B438B0.aspx?s=server. Możecie coś poradzić?

0

Nie mam 7 (ani nawet Vista) ale patrząc na fragment kodu:

constructor TVistaAltFix.Create(AOwner: TComponent);
begin
  inherited;
  FRepaintAll := True;
  if VistaWithTheme and not (csDesigning in ComponentState) then
  begin
    FList := TObjectList.Create;
    FApplicationEvents := TApplicationEvents.Create(nil);
    FApplicationEvents.OnIdle := ApplicationEventsIdle;
  end;
end;

destructor TVistaAltFix.Destroy;
begin
  FApplicationEvents.Free;
  FList.Free;
  inherited;
end;

widzimy że FList, FApplicationEvents są tworzone po spełnieniu określonych (wykryto Windows Vista (z włączoną kompozycja pulpitu), i komponent nie jest w fazie projektowej) warunków natomiast, w destruktorze jest próba bezwarunkowego zwolnienia tych obiektów może trzeba by sprawdzać czy obiekty te istnieją coś na kształt:

constructor TVistaAltFix.Create(AOwner: TComponent);
begin
  inherited;
  FList:= nil;
  FApplicationEvents:= nil;
  FRepaintAll := True;
  if VistaWithTheme and not (csDesigning in ComponentState) then
  begin
    FList := TObjectList.Create;
    FApplicationEvents := TApplicationEvents.Create(nil);
    FApplicationEvents.OnIdle := ApplicationEventsIdle;
  end;
end;

destructor TVistaAltFix.Destroy;
begin
  if Assigned(FApplicationEvents) then
    FApplicationEvents.Free;
  if Assigned(FList) then
    FList.Free;
  inherited;
end;<

PS: Trzeba by też sprawdzić czy funkcja VistaWithTheme poprawnie działa na 7

0

Działa poprawnie. Myślisz, że to wszystko? Bo w sumie te błędy tylko czasami się pokazywały i nie wiedziałem czemu.

0

Jeśli chodzi Ci o to: "Update (Dec 18 2006): Per-Erik Andersson came up with a new approach that is MUCH BETTER. It hooks the WM_UPDATEUISTATE message and only requires a single component instance to handle all forms in an application. Source is available at http://cc.codegear.com/item/24282." To to jest dokładnie to o czym mówimy...

0

Na razie wszystko działa tylko mam problem z pewnym "bugiem"? Chodzi o to, że po wciśnięciu przycisku Alt nie znikają mi komponenty, ale teksty na niektórych panelach w StatusBarze mi się pogrubiają...?

0

Witam uprzejmie

A ja nie mogę sobie z tym poradzić u siebie. Używam PageControl i zakładki i wciskam ALT i znikają wszystkie przyciski, opcje wyborów itd.
Zrobiłem Install Component i wybrałem ten vistaaltfix.pas jako osobny komponent w Delphi 7.
Dodał niby jak MEP, daję na Form, kompiluję, wszystko cacy, ale ALT dalej nie działa.
Coś trzeba jeszcze dodać do kodu?

Z poważaniem

1 użytkowników online, w tym zalogowanych: 0, gości: 1