Autor Beitrag
Eagle-Data
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: Do 12.08.04 08:19 
Hallo,

ich hab ein Programm im Systray hängen. (Oder auch in der Taskleiste) Bei einer bestimmten Aktion soll das Programm in den Vordergrund (über alle anderen Programme) kommen. Kann mir einer sagen wie das geht?

Ich habs schon probiert mit:

ausblenden Delphi-Quelltext
1:
SendMessage(Form1.Handle, WM_ACTIVATE, WA_ACTIVE, 0);					

sowie
ausblenden Delphi-Quelltext
1:
form1.SetFocus;					

und
ausblenden Delphi-Quelltext
1:
SetForeGroundWindow(form1.Handle);					


Danke
Eagle-Data Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

WinXP SP2 (Pro), Win 2000
D5 Ent., D7 Ent.
BeitragVerfasst: Do 12.08.04 08:23 
Titel: Ich habs
Hi,

ich habs gelöst. Mit ner Lösung aus dem Forum ;-) Sorry

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
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 > 4or ((Win32MajorVersion = 4and  
      (Win32MinorVersion > 0)))) then  
    begin  
      // Code from Karl E. Peterson, www.mvps.org/vb/sample.htm  
      // 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{ ForceForegroundWindow }
NeWsOfTzzz
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 233


D4 Prof
BeitragVerfasst: Do 12.08.04 09:17 
Also wenn es auch in der Taskleiste sein kann, musst du noch Application.Restore; benutzen... Danach hab ich in meinem Thread net gefragt weil ich dat schon wusste hab ja schliesslich erstmal lange probiert in der Hilfe was zu finden...
Und wenn dann das Programm in der Taskleiste ist fokussiert Restore das Programm sogar, aber leider nicht wenn es nicht in der Taskleiste ist, dann mach Restore nämlich gar nix...