AGB  ·  Datenschutz  ·  Impressum  







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

WMSize zu früh

Offene Frage von "MasterEvil"
Ein Thema von MasterEvil · begonnen am 13. Jun 2007 · letzter Beitrag vom 15. Jun 2007
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

WMSize zu früh

  Alt 13. Jun 2007, 10:39
Hallo,

wie in diesem Thread beschrieben, würde ich gerne verhindern, dass meine Applikation im Hintergrund verschwindet, wenn man ein modales Formular minimiert.

In Delphi 6 konnte ich dies noch so tun:
Delphi-Quellcode:
procedure CBaseForm.WMSize(var Message: TWMSize);
begin
  inherited;
  if WindowState=wsMinimized then Self.BringToFront;
end;
Dies funktioniert nun nicht mehr. Hab statt BringToFront schon mehrere andere Methoden ausprobiert, um meine Applikation wieder in den Vordergrund zu holen, dies hat aber nichts bewirkt.

Wenn ich WMActive abfange, verliert meine Form zunächst den Fokus, wird dann wieder aktiviert (ich nehme an von meinem BringToFront) und verliert danach den Fokus wieder. Also gehe ich davon aus, dass nach dem WMSize wieder irgendwer mir den Fokus weg nimmt. Durch die Windows Messages krieg ich es aber nicht debuggt.

Gibt es nach dem WMSize etwas, wo ich ansetzen könnte? Oder hat vielleicht jemand eine andere Idee, wie ich mein Problem lösen kann?

Gruß,
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: WMSize zu früh

  Alt 14. Jun 2007, 15:03
Keiner eine Ahnung?
  Mit Zitat antworten Zitat
luka

Registriert seit: 10. Aug 2006
Ort: Cottbus
33 Beiträge
 
Delphi 2009 Professional
 
#3

Re: WMSize zu früh

  Alt 14. Jun 2007, 22:26
Delphi-Quellcode:
procedure BringAppToFront;
var Th1, Th2: Cardinal;
begin
  Th1 := GetCurrentThreadId;
  Th2 := GetWindowThreadProcessId(GetForegroundWindow, nil);
  AttachThreadInput(Th2, Th1, True);
  try
    SetForegroundWindow(Application.Handle);
    Application.Restore;
  finally
    AttachThreadInput(Th2, Th1, False);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: WMSize zu früh

  Alt 15. Jun 2007, 08:24
Hallo luka,

fast den selben Quelltext hab ich auch schon ausprobiert.
Hab deinen auch nochmal getestet, aber wie zu erwarten, funktioniert er nicht

Trotzdem danke,
Steffen
  Mit Zitat antworten Zitat
luka

Registriert seit: 10. Aug 2006
Ort: Cottbus
33 Beiträge
 
Delphi 2009 Professional
 
#5

Re: WMSize zu früh

  Alt 15. Jun 2007, 08:35
versuch es einmal hiermit:
Delphi-Quellcode:
procedure ShowForm(Form: TForm);
begin
  if Assigned(Form) then
  begin
    ShowWindow(Form.Handle, SW_SHOWNORMAL);
    Form.Visible := True;
    Form.BringToFront;
  end;
end;

procedure HideForm(Form: TForm);
begin
  if Assigned(Form) then
  begin
    Form.Visible := False;
    ShowWindow(Form.Handle, SW_HIDE);
  end;
end;
Beim Show als letztes einen Timer starten (250ms) und ShowForm(Self) oder BringAppToFront ausführen, oft ist es nur ein Zeitproblem.
Irgendwie muss es ja gehen, oder?
  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 20:21 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