Autor Beitrag
Alice
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 04.09.07 14:53 
hi,

eine appl.(a) startet im hintergrund eine weitere exe,
diese jedoch minimiert im tray.

dabei verliert die mainform(a) jedoch den focus,
wie kann ich ihr den wieder zurückgeben?

cu

alice
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 04.09.07 15:07 
Hilft dir MainForm.SetFocus; ? :roll: Vielleicht getimert ne viertel sekunde nach dem Aufruf, vielleicht reicht's aber auch, wenn du's sofort ausführst.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Alice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 04.09.07 17:12 
user profile iconJayEff hat folgendes geschrieben:
Hilft dir MainForm.SetFocus; ? :roll: Vielleicht getimert ne viertel sekunde nach dem Aufruf, vielleicht reicht's aber auch, wenn du's sofort ausführst.


hi,

das war natürlich das erste was ich probiert hatte.
es geht so nicht.

cu

alice
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Di 04.09.07 17:40 
Application.BringToFront?

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Alice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 04.09.07 18:10 
user profile iconalias5000 hat folgendes geschrieben:
Application.BringToFront?


hi,

nun die appl. ist ja im vordergrund, nur die form ist nicht aktiv.
sie soll (wenn das überh. geht) aktiv sein/bleiben.

in dem moment wo das ext. prog. gestartet wird, verliert die mainform den focus...

BringToFront bringt die appl. in den vordergrund (was sie ja schon ist) aber setzt keinen
focus darauf :-(

//edit so geht es, eben gefunden :-) :

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:
function TForm1.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, 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;


cu

alice