AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Vista und Taskbar-Preview

Ein Thema von Assertor · begonnen am 19. Jun 2007 · letzter Beitrag vom 19. Jun 2007
Antwort Antwort
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Problem mit Vista und Taskbar-Preview

  Alt 19. Jun 2007, 10:50
Hallo DPler,

ich habe da ein Problem. Es geht um Vista und die Taskbar-Preview.

Ich verwende eine AboutBox mit dem BorderStyle "bsNone". Wenn ich nun die Taskbar und/oder Flip3D Preview durchgehe, wird nur ein Teil meines MainForms in der Größe der AboutBox gezeigt.

Ach ja: Ich habe die "Korrekturen" für die Delphi Form Aktivierung richtig drin, wirklich Von beiden Seiten bei InstallationExcellence.

Die normale Preview klappt ja auch, aber sobal ein Modalform mit Borderstyle bsNone auf ist, wird der Ausschnitt kleiner.

Ich habe dann testhalber dem Modalform mal ein eigenen Taskbarbutton verpasst und dann ist es so, daß der Preview des Modals perfekt ist (wie sonst auch beim MainForm), aber das MainForm dann plötzlich im Preview nur einen Ausschnitt in der Größe der AboutBox zeigt.

Was kann man da machen?

Gruß winkel79

Hier die üblichen bekannten:

MainForm:
Delphi-Quellcode:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle and not WS_EX_TOOLWINDOW or
    WS_EX_APPWINDOW;
end;

procedure TForm1.WMSyscommand(var Message: TWmSysCommand);
begin
  case (Message.CmdType and $FFF0) of
    SC_MINIMIZE:
    begin
      ShowWindow(Handle, SW_MINIMIZE);
      Message.Result := 0;
    end;
    SC_RESTORE:
    begin
      ShowWindow(Handle, SW_RESTORE);
      Message.Result := 0;
    end;
  else
    inherited;
  end;
end;

procedure TForm1.WMActivate(var Message: TWMActivate);
begin
  if (Message.Active = WA_ACTIVE) and not IsWindowEnabled(Handle)
    and not (IsWindowEnabled(Application.Handle)) then
  begin
    SetActiveWindow(Application.Handle);
    Message.Result := 0;
  end else
    inherited;
end;

...

procedure TForm1.Create(Sender: TObject);
begin
  ...
  if not (csDesigning in ComponentState) then
  begin
    ShowWindow(Application.Handle, SW_HIDE);
    SetWindowLong(Application.Handle, GWL_EXSTYLE,
      GetWindowLong(Application.Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW
      or WS_EX_TOOLWINDOW);
    ShowWindow(Application.Handle, SW_SHOW);
  end;
  ...
end;
und halt ggf. im ModalForm die gleichen CreateParams, damit es auch einen Taskbar-Button bekommt.
Frederik
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Problem mit Vista und Taskbar-Preview

  Alt 19. Jun 2007, 14:58
Ich habe gerade rausgefunden, daß es nur zu einem falschen Preview kommt, wenn die AboutBox als BorderStyle "bsNone" und als Position "poMainFormCenter" oder "poOwnerFormCenter" hat...

Ich suche jetzt in der Forms.pas nach den Unterschieden, denke aber das hat irgendwas mit VCL Eigenheiten zu tun (SetBounds für das Modal).

Edit: Es ist tatsächlich ein Problem mit SetBounds. Wenn ich als Position "poDefaultPosOnly" eingebe und manuell im OnShow: SetBounds(300, 500, Width, Height) aufrufe, tritt das Problem auch auf.

Also geht die Suche in Controls.pas los...
Frederik
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Problem mit Vista und Taskbar-Preview

  Alt 19. Jun 2007, 16:17
Das Problem tritt tatsächlich in dieser Konstellation immer auf.

Für alle anderen, die etwas langsamer sind und erst in ein paar Monaten überhaupt auf das Problem aufmerksam werden (so wie mit meinen Threads über Indy oder die Vista Tooltips/QC bei Codegear) jetzt die Erklärung und Lösung

Betroffen:
Alle Pre-D2007, Getestet mit leerer Installation

Konstellation:
1) Applikation enthält Fix von InstallationExcellence, um TaskBarPreview zu ermöglich
2) ModalForm hat BorderStyle "bsNone" und Position "poMainFormCenter"/"poScreenCenter".
Das Parent wird vor ShowModal korrekt festgelegt (unerheblich für den Fehler)

Auswirkung:
MainForm erhält im Taskbar Preview/Flip3D ein Cropped-Thumbnail (also nur in der Größe des Modals und zusätzlich seitlich verschoben).

Lösung:
Im CreateParams des Modals fest einstellen:
Delphi-Quellcode:
procedure TfrmMyModal.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;
end;
Dann geht alles!

Gruß winkel79



Edit: Hat das eigentlich was zu bedeuten, wenn man die meisten seiner Threads selber beantwortet, insbesondere immer bei diesen komplizierten Bugs?
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz