Announcement

Collapse
No announcement yet.

formular immer im vordergrund

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

  • formular immer im vordergrund

    ich möchte daß ein formular(kein hauptformular) immer im vordergrund ist, auch wenn andere anwendungen
    geladen werden!!!! formstyle stayontop versagt!!!!!!!!

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    hilft in Deinem konkreten Fall die API-Funktion <b>BringWindowToTop</b> weiter? Als Parameter wird das Fensterhandle des in den Vordergrund zu bringenden Fensters benötigt.

    Wenn das nicht ausreicht, hilft eventuell die folgende "Brechstange" weiter:
    <pre>
    with Form2 do
    SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
    SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    </pre>
    Dieser Aufruf kann in Ereignisbehandlungsmethoden für OnShow, OnDeactivate und OnActivate untergebracht werden.

    P.S: Windows 98 unterscheidet sich in diesem Punkt von Windows95/NT auf der einen und Windows 2000 auf der anderen Seite

    Comment


    • #3
      hat alles nichts gebracht!!!!!
      mach mal folgenden versuch:

      nimm ein formular, rufe über einen button ein zweites auf und dieses zweite soll immer angezeigt
      werden auch wenn eine andere anwendung aktiv ist!!

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo,

        in diesem Fall gelten völlig andere Regeln, da es sich nicht um ein Top-Level-Window handelt. Wie wird das zweite Formular aufgerufen, mit <b>Show</b> oder mit <b>ShowModal</b>? Wenn es sich um einen modalen Dialog handelt, würde in jedem Fall auch das Eltern-Fenster mit in den Vordergrund gebracht werden. Bei einem nicht-modalen Formular kann man am Fenster-Stil drehen. Und nun meine letzte Frage, für welche Windows-Version wird eine Lösung benötigt?

        P.S: Hast Du auch mit dem Delphi-Tool <b>WinSight</b> nachgeschaut, ob sich ein anderes Fenster bereits automatisch in den Vordergrund drängt

        Comment


        • #5
          tag andreas,

          showmodal hat doch den nachteil, daß erst weiter gearbeitet werden kann, wenn das fenster geschlossen wird
          oder nicht??? ich rufe es mit show auf. das programm ist für windows 95,98 und nt!!!!

          am stil habe ich schon rum gebastelt ohne erfolg!!!!!
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Markus,

            in Deiner Anwendung soll das über <b>Show</b> aufgerufen Formular immer sichtbar sein, auch wenn andere Anwendungen im Vordergrund laufen? Wenn ja, ist folgendes notwendig. Das 2. Formular wird erzeugt und über Show aufgerufen:
            <pre>
            uses Unit2;

            procedure TForm1.Button1Click(Sender: TObject);
            begin
            Form2 := TForm2.Create(nil);
            Form2.Show;
            end;
            </pre>
            Damit das 2. Formular immer im Vordergrund ist, muss es als "Findelkind" einem anderen Elternteil "untergeschoben" werden. Dazu erkläre ich einfach den <b>Desktop</b> (Fensterhandle = 0) zum Elternfenster, indem <b>CreateParams</b> überschrieben wird:
            <pre>
            type
            TForm2 = class(TForm)
            procedure FormClose(Sender: TObject; var Action: TCloseAction);
            private
            { Private-Deklarationen }
            procedure CreateParams(var Params: TCreateParams);override;
            public
            { Public-Deklarationen }
            end;

            var
            Form2: TForm2;

            implementation

            {$R *.DFM}

            procedure TForm2.CreateParams(var Params: TCreateParams);
            begin
            inherited;
            with Params do
            begin
            ExStyle := ExStyle or WS_EX_TOPMOST;
            WndParent := 0;
            end;
            end;

            procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
            begin
            Action := caFree;
            end;
            </pre>
            &#10

            Comment

            Working...
            X