Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form in den Vordergrund bringen (https://www.delphipraxis.net/7118-form-den-vordergrund-bringen.html)

Lefko 2. Aug 2003 13:34


Form in den Vordergrund bringen
 
Hallo Freunde,

ich weiss nicht, ob ich zu doof bin oder was.
ich will nur, dass mein programm wiederhergestellt und VOR ALLE anderen (Windows-)Fenster gesetzt und aktiviert wird.

Das hab ich auf mehrere Weisen probiert, es klappt NIE!

also:

Application.restore;
Application.bringtoFront;
Form1.activate;

oder:

Application.restore;
Form1.bringtofront;

oder:

Application.restore;
Form1.formstyle := fsStayontop;


NIX davon funktioniert. das programm wird wiederhergestellt und blinkt in der taskleiste, mehr nicht.
(ich hab winME)

würde mich über ne lösung freuen!

MfG Lefko.

CalganX 2. Aug 2003 13:41

Re: Form in den Fordergrund bringen
 
Ich weiß, ja nicht, was du machst, aber bei mir funktioniert davon alles.
Delphi-Quellcode:
Application.Restore;
Application.BringToFront;
Form1.BringToFront;
Schon mal versucht?

Am besten gibst du uns noch ein wenig mehr Source (z.B. Minimieren, wo rufst du den obigen Source auf, usw.)

Chris

heiopei 2. Aug 2003 13:44

Re: Form in den Fordergrund bringen
 
Willkommen im forum lefko, :P
was macht die funktion application.restore und warum soll das programm wiederhergestellt werden, bzw. was passiert davor?

tschüss,
heiopei

CalganX 2. Aug 2003 13:54

Re: Form in den Fordergrund bringen
 
Hm... Was könnte Application.Restore denn machen? :roll:
Wie wäre es damit, dass es die Anwendung wiederherstellt (Gegenteil von minimieren)?

Chris

D.BraunSoft 2. Aug 2003 13:55

Re: Form in den Fordergrund bringen
 
Ich benutze die folgenden Zeilen in einem Timer (2s) um ein Alarmfenster
in einem Leitstellenprogramm zu realisieren.


setActivewindow(Application.handle);
Application.restore;
bringtofront;

viel Spaß

Lefko 2. Aug 2003 14:35

Re: Form in den Fordergrund bringen
 
Ahja, dann hab ich auch noch SetForeGroundWindow(Application.handle) probiert...

auch das klappt nicht.

ich werd den o.g. tipp ausprobieren, danke, aber vielleicht wisst ihr etwas 100%iges.

MfG Lefko. :coder:

Lefko 6. Aug 2003 17:52

Re: Form in den Vordergrund bringen
 
Hallo Freunde,

Ich hab jetzt einfach in der Form.Create Form1.formstyle := fsStayOnTop eingestellt und beim Minimieren Form1.formstyle := fsNormal eingestellt.
damit funktioniert es einigermaßen, auch, wenn es gegen den Rat von Borland ist (siehe Hilfe...)

MfG Lefko.

Luckie 6. Aug 2003 17:55

Re: Form in den Vordergrund bringen
 
Schon mal mit SetWindowPos und HWND_TOP als zweiten Parameter probiert? Und diese Warnung würde ich nicht ignorieren, sie steht da nicht umsonst.

lkz633 6. Aug 2003 19:10

Re: Form in den Vordergrund bringen
 
hatte das gleiche Problem, habe dann diesen Code gefunden, ich glaube von swissdelphicenter:

Delphi-Quellcode:
function ForceForegroundWindow(hwnd: THandle): Boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

  if GetForegroundWindow = hwnd then Result := True
  else
  begin
    // Windows 98/2000 doesn't want to foreground a window when some other
    // window has keyboard focus

    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
      ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
      (Win32MinorVersion > 0)))) then
    begin
      // Code from Karl E. Peterson, [url]www.mvps.org/vb/sample.htm[/url]
      // Converted to Delphi by Ray Lischner
      // Published in The Delphi Magazine 55, page 16 

      Result := False;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
      begin
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        // Code by Daniel P. Stasinski
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
          SPIF_SENDCHANGE);
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
    end;

    Result := (GetForegroundWindow = hwnd);
  end;
end;
Gruss lkz633

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

Lefko 17. Aug 2003 16:39

Re: Form in den Vordergrund bringen
 
Oke, ich hab s jetz einfach so gemacht, danke :)

MfG Lefko.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.
Seite 1 von 2  1 2      

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