2 Formen verschieben



  • Ich habe Form1 und Form2 beide Formen sind sichtbar.
    Wenn ich Form1 verschiebe soll sich Form2 in einem geringen Abstand ebenfalls verschieben. Wie kann man sowas umsetzen?



  • Ich würde im OnShow von Form1 einfach Top und Left von Form2 anpassen.

    Oder aber du fängst WM_MOVE (Edit: oder WM_MOVING) ab (siehe FAQ) und passt Top und Left da an. (Wahrscheinlich die sauberere Lösung)

    [ Dieser Beitrag wurde am 22.06.2003 um 17:18 Uhr von Eßer editiert. ]



  • Du könntest auch einfach einen Timer nehmen, Interval auf 500 stellen, und dann immer folgendes eingeben:

    Form2->Left=Form1->Left+100;
    Form2->Top=Form1->Top+100;

    Dazu muss From2 als TForm1* gekennzeichnet sein, sprich:

    Am Anfang, wo "TForm1 *Form1;" steht, darunter hinschreiben "TForm1 *Form2;".

    So wäre es am einfachsten.



  • Original erstellt von Spieleprogrammierer:
    Dazu muss From2 als TForm1 gekennzeichnet sein, sprich:[...blubb...]*

    Mal abgesehen davon, dass die von dir vorgeschlagene Lösung die unsauberste Lösung schlecht hin ist... Wozu muss bitte From2 als TForm1 gecastet sein? Überhaupt funktioniert das wie von dir vorgeschlagen überhaupt nicht. Hast du überhaupt überlegt oder einfach mal so "daumen im wind - wird schon klappen"-mässig dahergeplaudert?
    Erkläre dich bitte, ich verstehs ned... *kopfschüttel*

    -junix



  • Ich habe es trotzdem versucht mit dem Timer.
    Die Form habe ich nicht gecastet.
    Es hat funktioniert, aber ich glaube es ist keine gute Möglichkeit.
    Trotzdem Danke. Als Anfänger hat man es nicht immer leicht 😉



  • Original erstellt von merkur:
    Es hat funktioniert, aber ich glaube es ist keine gute Möglichkeit.

    Dürfte vor Allem bei schnellen Bewegungen des Forms unbrauchbare Resultate erzielen. Arbeitest du mit einem BCB >= 5?
    Da kann man nämlich einfach mit Rechtsklick im Klassen-Fenster auf das gewünschte Form -> Neue Methode -> Haken bei MessageHandler rein, WM_MOVING aussuchen, rest ausfüllen einen neuen Handler kreieren...

    -junix



  • Arbeite mit dem BCB 6.0 Prof.
    Ja Junix du sagst das so einfach mit dem "reinklicken". Ich tu mich da noch etwas schwer. Aber danke für den Tip, ich werde es auf jeden Fall ausprobieren.



  • Ich habe die Methode "bewegen" benannt.
    In der Unit1.h steht jetzt:

    __published:
    void __fastcall bewegen();

    protected:
    BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_MOVING, , bewegen)
    END_MESSAGE_MAP(TForm)

    Unit1.hpp steht:

    void __fastcall TForm1::bewegen()
    {
    Form2->Left=Form1->Left+300;
    Form2->Top=Form1->Top+300;
    }
    Es kommt der Fehler Ausdruckssyntax:
    in der Zeile : VCL_MESSAGE_HANDLER(WM_MOVING, , bewegen)



  • Fehlt dir nicht noch der Typ der Nachricht?
    [ Dieser Beitrag wurde am 23.06.2003 um 13:35 Uhr von MikeSPK editiert. ]

    [ Dieser Beitrag wurde am 23.06.2003 um 13:38 Uhr von MikeSPK editiert. ]



  • Hatte ich vergessen dumm von mir. Jetzt funktioniert es habe TWMMouse eingefügt.



  • @junix

    würdest du mir bitte sagen was du unter "Klassen-Fenster" verstehst .. würde gerne auch mal das aktivieren aber peile irgendwie net wo das stehen soll.
    habe cbuilder5.

    "Da kann man nämlich einfach mit Rechtsklick im Klassen-Fenster auf das gewünschte Form -> Neue Methode -> Haken bei MessageHandler rein, WM_MOVING aussuchen, rest ausfüllen einen neuen Handler kreieren..."



  • "Klassenfenster" ist meist links neben dem "Quellcodefenster" 😉



  • ach dassss 🙂
    das schliesse ich immer sofort, da es echt dumm gemacht wurde von borland .. ich stehe mehr auf die comboboxen von vc++ die für mich übersichtlicher als das "klassen-fenster" von borland

    danke für die info



  • Original erstellt von <muh>:
    **"klassen-fenster" von borland
    **

    btw: heißt übrigens Objektinspektor



  • Original erstellt von flosko:
    btw: heißt übrigens Objektinspektor

    Ne, richtig heisst das ding Class-Explorer. Der Objektinspektor ist was anderes.

    -junix



  • objektinspektor != klassenfenster



  • natürlich nicht...
    sorry, mein fehler 🙄


Anmelden zum Antworten