Announcement

Collapse
No announcement yet.

Programm blendet sich nicht hoch

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programm blendet sich nicht hoch

    Hallo,

    ich habe Probleme beim start eines Programms unter Windows 98 und 2000. Das Hauptfenster kommt nicht in den Vordergrund. Der Api-Aufruf SetForegroundWindow sollte eigentlich behilflich sein, jedoch versteckt sich immer noch das Hauptfenster hinter allen anderen (versteckt sich hinter dem Explorer, Word, ...)! Andere mit Delphi programmierte Programme haben keine Probleme. Der einzige unterschied ist, daß diese keine Größe von 8 MB aufweisen! Ich programmiere z.Z. unter Delphi 4. Auffällig ist auch, daß der Eintrag in der Taskleiste beim Start des Programms gewölbt und nicht eingedrückt, also das Programm anscheinend nicht aktiv ist! Wer kann mir helfen Windows zu zwingen das Programm 1. zu aktivieren und 2. in den Vordergrund zu stellen?

  • #2
    Hallo,

    wie wird SetForegroundWindow aufgerufen? Microsoft hat die Regeln dazu geändert, so dass eine vorherige Vorbereitung notwendig wird:
    <pre>
    function ForceForegroundWindow(hWnd: THandle): BOOL;
    var
    hCurWnd: THandle;
    begin
    hCurWnd := GetForegroundWindow;
    AttachThreadInput(
    GetWindowThreadProcessId(hCurWnd, nil),
    GetCurrentThreadId, True);
    Result := SetForegroundWindow(hWnd);
    AttachThreadInput(
    GetWindowThreadProcessId(hCurWnd, nil),
    GetCurrentThreadId, False);
    end;
    </pre>

    In der Taskleiste ist nur das Symbol für das aufgrund seiner Grösse unsichtbare Fenster von TApplication zu sehen. Wievele Formulare werden bereits in der DPR-Datei beim Programmstart erzeugt und wie lange dauert dies, bis das Hauptfenster sichtbar wird

    Comment


    • #3
      Hallo Herr Kosch,

      danke für die schnelle Antwort. Ich habe den Lösungsansatz noch nicht ausprobiert, werde es aber baldigst tun. Sie haben mich gefrage wieviele Forms ich automatisch erstelle: spaßeshalber habe ich ein leeres Form in das Projekt hinzugebunden und das Hauptform einmal auf Eis gelegt (nur das neue Form habe ich mal von der DPR erstellen lassen). Beim Start des Programms ist es ebenfalls in den Hintergrund getreten! Ich denke es ist ein Zeitproblem hervorgerufen durch die Ladezeit des Programms. Wie schon gesagt: 8MB

      Comment


      • #4
        Hallo Michael,<BR>
        die 8MB sind sicherlich <B>nicht</B> das Problem. Wir arbeiten auch mit ähnlich großen Projekten. Rufst Du im OnCreate-Event des Hauptformulars etwas auf (Systemcalls, OpenDialog o.Ä.)?<BR>
        Gruss<BR>
        Fran

        Comment


        • #5
          Hallo Frank,

          wie schon gesagt: ich habe einfach mein Hauptformular von der DPR nicht erstellen lassen, dafür aber ein ganz schlichtes leeres Form, was nix macht! Es hommt einfach nicht hoch! Ich habe schon mal die Funktion ForceForegroundWindow ausprobiert. Funktioniert eigentlich bestens (vielen Dank noch mal). Habe jedoch einige Seiteneffekte, die ich noch erforschen muß (wahrscheinlich zieh ich mir selbst den Boden unter den Füßen weg [ziemlich gewalttätige Funktion]). Das gleiche Phänomen kann man bei Delphi beobachten. Z.B. beim Debuggen: man mache einen Breakpoint irgendwohin, drücke Start und drücke z.B. auf einen Button im zu testenden Form, der auf den Breakpoint läuft. Normalerweise kommt Delphi hoch, bei Windows 2000 blinkt nur das Fenster auf der Taskleiste (anscheinend ein Signal, welches besagt, das jene Anwendung jetzt aktiv ist). Wie der Herr Kosch angedeutet hat; Microsoft hat da wahrscheinlich jetzt andere Spielregeln eingeführt. Diese Spielregeln aber interessieren mich nicht!!!! Kann man dieses abschalten? Ich arbeite für eine kleine Softwarefirma, die bereits Probleme hat den Kunden zu vermitteln, wie man mit Windows arbeitet. Den Kunden kann man nicht vermitteln, daß man -wenn so etwas auftritt- einfach auf das Icon klickt, damit das Programm hochkommt. Außerdem können wir keinen Programmstand ausliefern, der noch solche Probleme hat. Wenn diese Spielregel per Registry-Eintrag zu steuern ist, so sagt mir wie...

          Gruß

          Michae

          Comment


          • #6
            Hallo Michael,<br>
            <br>
            mal ein kleiner Auszug aus dem Microsoft Platform SDK (August 2001)zu 'SETFOREGROUNDWINDOW':<br>
            To have SetForegroundWindow behave the same as it did on Windows 95 and Windows NT 4.0, change the foreground lock timeout value when the application is installed. This can be done from the setup or installation application with the following function call:

            SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

            This method allows SetForegroundWindow on Windows 98 and Windows 2000 to behave the same as Windows 95 and Windows NT 4.0, respectively, for all applications. The setup application should warn the user that this is being done so that the user isn't surprised by the changed behavior. On Windows 2000, the SystemParametersInfo call fails unless the calling thread can change the foreground window, so this must be called from a setup or patch application. <br>
            <br>
            Ciao<br>
            Chri

            Comment

            Working...
            X