Announcement

Collapse
No announcement yet.

Delphifunktionen zum Docken zweier Forms (D5.x)

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

  • Delphifunktionen zum Docken zweier Forms (D5.x)

    Hi!<br>
    <br>
    Wie bekomme ich es hin, daß 2 Forms mit Hilfe der STD-Delphifunktionen aneinander andocken?<br>
    <br>
    <p>
    <font name="courier" size="3">
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+----------+&nbsp;&nbsp;+----------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+----------+----------+<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|<-|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br >
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+----------+&nbsp;&nbsp;+----------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+----------+----------+<br>
    </font></font></p><br>
    DANKE!<br>
    <br>
    MFG Nico Stöckigt

  • #2
    Hi!<br>
    Schau mal in die Hilfe zu ManualDock.<br>
    BYE BERND<br&gt

    Comment


    • #3
      Das gleiche Problem habe ich auch in Delphi 4, hab auch schon in der Hilfe unter "ManualDock" nachgeschaut, aber bekomme es einfach nicht hin...
      Hab´s im Moment mit nem Timer geregelt, der auf dem minimalen Intervallwert das Fenster neu positioniert, dass am MainForm dran hängt, sobald es sichtbar ist, aber das sieht nicht so schön aus, wie beispielsweise bei "WinAmp"...

      Mit freundlichen Grüssen
      Andreas Schüttle

      Comment


      • #4
        Ich könnte Dir ersteinmal folgendes anbieten:
        <br>
        <PRE>
        ...
        procedure WMMove(var Message: TWMMove); message WM_MOVE;
        ...

        procedure TForm1.WMMove(var Message: TWMMove);
        begin
        inherited;
        try
        Form2.Left := Form1.Left + Form1.Width;
        Form2.Top:= Form1.top;
        except
        end;
        end;
        </PRE&gt

        Comment


        • #5
          <b>
          Passend dazu kann man noch das hier hinzufügen
          (netter Effect)
          </b>
          <PRE>
          ...
          private
          procedure WMNCHitTest(var M: TWMNCHitTest);message WM_NCHitTest;
          { Private-Deklarationen }
          ...

          procedure TForm1.WMNCHitTest (var M: TWMNCHitTest);
          begin
          inherited;
          if M.Result = htClient then
          M.Result := htCaption;
          end;
          </PRE&gt

          Comment


          • #6
            Hmm...das werde ich gleich einmal ausprobieren - danke :-)

            das, was ich im Moment habe, funktioniert zwar reibungslos, aber das Fenster hat eine gewisse Verzögerung, bevor es dem anderen Fenster folgt...sieht zwar auch nicht übel aus, aber will´s unbedingt "richtig" haben :-)

            naja, werd mal ran und Deinen Vorschlag probieren :-)

            Mit freundlichen Grüssen,<BR>
            -Andreas Schüttle

            Comment


            • #7
              Jaa, es geht :-)

              Bekomme zwar eine Schutzverletzung, bei der ich nicht verstehe, woher sie kommt, da ja nur die Position der zweiten Form verändert wird, aber ich denke, das ist etwas, was man noch in den Griff bekommt...

              An Fensterbotschaften hab ich zwar schon gedacht, aber war erstmal auf der Suche, wie man´s mit den Docking-Klamotten von Delphi hinbekommen kann...aber jetzt belasse ich es erstmal hierbei und danke ganz herzlich für die Hilfe :-)

              Mit freundlichen Grüssen,<BR>
              Andreas Schüttle

              Comment


              • #8
                oki, hab die Schutzverletzung wegbekommen. Lasse einfach, bevor die Prozedur auf die Positionsänderung losrennt, noch prüfen, ob die Form1 fokussiert ist:

                <PRE>
                procedure TForm1.WMMove(var Message: TWMMove);
                begin
                inherited;
                try
                if Form1.focused then
                begin
                Form2.Left := Form1.Left + Form1.Width;
                Form2.Top:= Form1.top;
                end;
                except
                end;
                end;
                </PRE>

                Mit freundlichen Grüssen,<BR>
                Andreas Schüttle

                Comment

                Working...
                X