Panel soll sich bew. verschwindet aber oben im bild



  • moin leute
    ich wollte ein progrämmchen schreiben, sowas inder art wie eine alarmanlage mit lichtschranke.
    wenn panel4 das shape überquert wird lampe auf rot gesetzt. nun soll sich durch checkbox click das panel nach oben bzw. nach unten von alleine bew.
    nach unten geht es aber wenn er nach oben läuft dann verschwindet er auf nimmerwiedersehen im bildrand. weis einer was falsch ist?

    void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
    {
      Panel4->Top= ScrollBar1->Position;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
    {
      Panel4->Left= ScrollBar2->Position;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
     if((Panel4->Top <= Shape1->Top) && (Panel4->Top + Panel4->Height >= Shape1->Top))
     {
     Shape2->Brush->Color= clRed;
     }
     else
     {
     Shape2->Brush->Color=clLime;
     }
    
     if((CheckBox1->Checked) && (Panel4->Top + Panel4->Height <=Panel1->Height))
     {
     Panel4->Top = Panel4->Top +1;
     //ScrollBar1->Position = Panel4->Top;
     //ScrollBar2->Position = Panel4->Left;
     }
    
     if((CheckBox2->Checked) && (Panel4->Left - Panel4->Height <=Panel1->Width))
     {
     Panel4->Top = Panel4->Top -1;
     //ScrollBar1->Position = Panel4->Top;
     //ScrollBar2->Position = Panel4->Left;
     }
    
    }
    

    ist das mit ScrollBar1/2->Position nicht sinnlos? das hab ich doch schon oder?

    🙄



  • Was bezweckst Du mit Panel4->Left und Panel1->Width?

    PomBär schrieb:

    if((CheckBox2->Checked) && (Panel4->Left - Panel4->Height <=Panel1->Width))
    

    Gruß,

    Alexander



  • mir diesem oberkannte unterkannte sehe ich nicht ganz durch.
    kannst du mir bitte sagen wie es richtig heißt?



  • Also, ich werde mal versuchen Deinen Code zu deuten.

    Dieser Abschnitt sieht für mich relativ plausibel aus:

    // Hier wird nach unten verschoben, aber nur wenn CheckBox1 markiert ist
    // und Panel4 nicht unten verschwunden ist
     if((CheckBox1->Checked) && (Panel4->Top + Panel4->Height <=Panel1->Height))
     {
     Panel4->Top = Panel4->Top +1;
     }
    

    Dieser Abschnitt sieht für mich seltsam aus:

    // Hier wird nach oben verschoben, aber nur wenn CheckBox2 markiert ist
    // Die zweite Teilbedingung wird durch das Verschieben aber nicht geändert
    // D.h. es wird bis zum Überlauf verschoben
     if((CheckBox2->Checked) && (Panel4->Left - Panel4->Height <=Panel1->Width))
     {
     Panel4->Top = Panel4->Top -1;
     }
    

    Schau Dir doch mal die zweite Teilbedingung an. Warum ziehst Du die Höhe des
    Panels Panel1 vom linken Rand ab und vergleichst das ganze mit der Breite des
    Panels Panel2?

    Gruß,

    Alexander


Anmelden zum Antworten