Announcement

Collapse
No announcement yet.

StayOnTop aber nur für die Anwendung

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

  • StayOnTop aber nur für die Anwendung

    Hallo zusammen, <br>
    <br>
    Hat irgendjemand eine Ahnung wie man ein Formular(Ich Nutze es als StatusFenster mit Progressbar) dazubekommt, dass es auf der obersten Ebene der Anwendung steht, aber wenn ich eine andere Anwednung nach vorne bringe soll das Fenster nicht mehr im Wege stehen wie bei fsStayOnTop.
    <br>
    <br>
    Danke im Voraus
    <br>

  • #2
    Ähhh erklär das doch bitte genauer:

    Wenn das Fenster nicht fsStayOnTop ist, so ist das Fenster dann oben, wenn es aktiv ist (angeklickt wurde).

    Wenn das Fenster fsStayOnTop ist, so ist das Fenster immer oben.

    Wann soll es nun da sein, und wann nicht?

    Ev. Solltest du das Fenster nicht mit fsStayOnTop vesehen, sondern mit visible=true?
    Christian

    Comment


    • #3
      Hallo Christian,<br>

      ich habe ein Hauptformular in den mit einem Button der Datentrans über die Serielle schnittstelle angestartet wird. Weil das ziemlich lange dauert habe ich ein weiteres Formular(Progressform) gemacht das währende der ganzen zeit den Status des Transfers anzeigen soll mittels Statusbar und diversen weiteren Infos was gerade gemacht wird. Dieses Fenster soll natürlich vor dem Hauptformular liegen weil die Eigentliche Anwendung ja beschäftigt ist.
      <br>
      Der gelangweilte Anwender ist nun aber geneigt in der zwischenzeit z.B. im Internet zu surfen und macht deshalb den Explorer auf.<br>
      Wenn ich mein Progressform nun mit fsStayOnTop gemacht habe hängt es dem Internet surfer im weg rum.<br>
      Wenn ich mein Progressform ohne fsStayOnTop gemacht habe und mal schaue was der status so macht (also vom IE wieder zu meiner Anwendung schalte) hängt sehe ich kein Progressform mehr weil es hinter meinem Hauptformular ist.
      <br> was ich gerne hätte ist eine ähnliches verhalten wie bei Showmodal, nähmlich das es vor meiner Anwendung nicht aber vor anderen Anwendungen ist.<br>

      ich hoffe jetzt ist es klarer und du hast eine idee

      Yve

      Comment


      • #4
        Warum macht du die Progressform dann nicht mit Showmodal??

        Progressform->ShowModal();

        Warum schaltest du das Hauptfenster während des Transfers nicht ab?? Visible=false

        StayOnTop hilft dir in diesem Fall nicht
        Christian

        Comment


        • #5
          Hallo Christian, Hallo alle anderen
          <br>
          a) Weil ShowModal() dann den ablauf in der Anwendung unterbricht (das fenster dient wirklich nur als status fenster<br>
          b)weil ich finde das sieht doof aus wenn ein status fenster da ist und ich die zugehörige Anwendung nicht sehe.<br>
          c)Deshalb habe ich mich ans Forum gewandt
          <br>
          <br>
          Vielleicht hat jemand anderes noch eine Idee in Anderen programm funktioniert es ja schließlich auch!

          <br>
          Yve

          Comment


          • #6
            Hallo Yves,<BR><BR>
            nur so eine Idee...<BR>
            Nach dem Erzeugen des Formulares den Event
            Application.onActivate auf eine Methode setzen, wo das Progressform mit BringToFront nach vorn geholt wird.<BR>
            Vor dem Zerstören Event wieder auf nil.<BR><BR>
            Fran

            Comment


            • #7
              Um einen Wechsel zu verhindern, kann man auch Screen.onActiveFormChange solange anweisen, das spezielle Formular immer wieder in den Vordergrund zu holen

              Comment


              • #8
                Hier liegt dann m.E. ein konzeptionelles Problem vor. Natürlich unterbricht ShowModal das Hauptfenster. Das soll es ja auch. Dann ist die Tranferroutine in das Progressformular aufzunehmen. Dann arbeitet diese im ShowModal-Modus
                Christian

                Comment


                • #9
                  Packt doch die Funktionen welche noch laufen sollen in eine Klasse und rufe sie dann im Progressform auf. So kanst du das Fenster modal aufrufen.

                  Gruss Renat

                  Comment


                  • #10
                    Hi Yves,<p>
                    ich hab ein ähnliches Problem so gelöst:
                    <pre>
                    <code><font size="2" face="Courier New"><span style="background-color: #FFFFFF"><font color="#000000"><b>procedure</b> TProgressDialog.StartModal;
                    <b>begin
                    </b> FDialog.Show;
                    FWindowList := DisableTaskWindows(<font color="#0000FF">0</font>);
                    EnableWindow(FDialog.Handle, True);
                    <b>end</b>;
                    <br>
                    <b>procedure</b> TProgressDialog.EndModal;
                    <b>begin
                    </b> EnableTaskWindows(FWindowList);
                    FDialog.Hide;
                    <b>end</b>;
                    </span></font>
                    </code></pre>
                    wobei FWindowList ein Pointer ist. Ist im Wesentlichen aus ShowModal abgekupfert.
                    Das Ganze kannst du dann so ähnlich anwenden:
                    <pre>
                    <code><font size="2" face="Courier New"><span style="background-color: #FFFFFF"><font color="#000000"> ProgressDialog.StartModal;
                    <b>while</b> <b>not</b> (Eof(fs) <b>or</b> ProgressDialog.CancelRequested) <b>do
                    </b> <b>begin
                    </b> ProgressDialog.Position := AlreadyRead;
                    Application.ProcessMessages;
                    <font color="#008000"><i>//...
                    </i> </font><b>end</b>;
                    ProgressDialog.EndModal;
                    </span></font>
                    </code></pre>
                    HTH, Uli

                    Comment


                    • #11
                      Ach ja: Eine (ausbaufähige) Komponente, die obiges implementiert, findest du hier:
                      http://groups.yahoo.com/group/GExpertsDiscuss/message/2607
                      <p>Uli

                      Comment


                      • #12
                        Hallo,

                        ShowModal unterbricht doch nicht den Ablauf der Anwendung. Es werden nur die Eingaben mit der Maus und Tastatur gesperrt, die Anwendung des Haupfensters läuft aber ganz normal weiter, d.h. sämtliche Timer und sonstige Events funktionieren.

                        Wenn man es aber nur mit Show() anzeigt, laufen doch beide Formulare parallel und man kann zwischen denen hin und her schalten, wo liegt das Problem ??? Zwischen diesen Formularen kann man allerdings nur mit der Maus hin und her schalten.

                        Wenn das noch nicht ausreicht, kann man es noch machen, dass das zweite Formular auch in der Windows-Taskleiste einen eigenen Eintrag hat. Wie das geht steht hier beschrieben:
                        http://www.entwickler-forum.de/webx?128@@.1dd043bc

                        Grüsse
                        Sebastia

                        Comment


                        • #13
                          Das Timer funktionieren habe ich nicht gestestet, aber bei ShowModal läuft die Anwendung nicht weiter und Events sind nicht möglich, da diese ja an das Fenster gehen welches gerad ShowModal ist. Ein Fensterwechsel ist auch nicht möglich, weil eben ShowModa
                          Christian

                          Comment


                          • #14
                            Events die von Maus oder Tastatur kommen, die gehen an das Fenster im Fordergrund, das ist klar. Aber wie gesagt, Timer funktionieren, Events von evtl. vorhandenen Sockets funktionieren, sogar das Paint-Event funktioniert. Der einzige unterschied zwischen ShowModal und Show ist der, dass bei ShowModal das Umschalten zwischen den Fenster blockiert wird und die Methode ShowModal() kehrt erst dann zurück wenn das Fenster wieder geschlossen wird

                            Comment


                            • #15
                              Wenn im Quellcode des Hauptfensters hinter dem Show oder ShowModal noch Befehle stehen, werden diese bei Show sofort abgearbeitet, bei einem ShowModal erst nach dem Schließen der Dialogbox
                              Günther

                              Comment

                              Working...
                              X