Bin mit wandernden Strich noch nicht ganz zu frieden



  • Hallo Leute

    Habe den wandernden Strich soweit fertig. Er läuft zwar von der Mitte nach unten, dann wieder zurück und danach erst nach oben und wieder zur Mitte zurück.

    Ich stelle mir das ganze aber so vor, dass beide Richtungen (OBEN und UNTEN) gleichzeitig laufen.

    Hat da jemand eine Idee?

    Hier das Programm:

    #pragma once 
    
    namespace TestStrich4 { 
    
        using namespace System; 
        using namespace System::ComponentModel; 
        using namespace System::Collections; 
        using namespace System::Windows::Forms; 
        using namespace System::Data; 
        using namespace System::Drawing; 
    
        /// <summary> 
        /// Zusammenfassung für Form1 
        /// </summary> 
        public ref class Form1 : public System::Windows::Forms::Form 
        { 
        public: 
            Form1(void) 
            { 
                InitializeComponent(); 
                // 
                //TODO: Konstruktorcode hier hinzufügen. 
                // 
            } 
    
        protected: 
            /// <summary> 
            /// Verwendete Ressourcen bereinigen. 
            /// </summary> 
            ~Form1() 
            { 
                if (components) 
                { 
                    delete components; 
                } 
            } 
        private: System::Windows::Forms::Button^  buttonBeenden; 
        private: System::Windows::Forms::Button^  buttonStart; 
        private: System::Windows::Forms::Panel^  panel1; 
        private: System::Windows::Forms::TrackBar^  trackBar1; 
        protected: 
    
        private: 
            /// <summary> 
            /// Erforderliche Designervariable. 
            /// </summary> 
            System::ComponentModel::Container ^components; 
    
    #pragma region Windows Form Designer generated code 
            /// <summary> 
            /// Erforderliche Methode für die Designerunterstützung. 
            /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. 
            /// </summary> 
            void InitializeComponent(void) 
            { 
                this->buttonBeenden = (gcnew System::Windows::Forms::Button()); 
                this->buttonStart = (gcnew System::Windows::Forms::Button()); 
                this->panel1 = (gcnew System::Windows::Forms::Panel()); 
                this->trackBar1 = (gcnew System::Windows::Forms::TrackBar()); 
                (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->trackBar1))->BeginInit(); 
                this->SuspendLayout(); 
                // 
                // buttonBeenden 
                // 
                this->buttonBeenden->Location = System::Drawing::Point(478, 346); 
                this->buttonBeenden->Name = L"buttonBeenden"; 
                this->buttonBeenden->Size = System::Drawing::Size(75, 23); 
                this->buttonBeenden->TabIndex = 0; 
                this->buttonBeenden->Text = L"Beenden"; 
                this->buttonBeenden->UseVisualStyleBackColor = true; 
                this->buttonBeenden->Click += gcnew System::EventHandler(this, &Form1::buttonBeenden_Click); 
                // 
                // buttonStart 
                // 
                this->buttonStart->Location = System::Drawing::Point(369, 346); 
                this->buttonStart->Name = L"buttonStart"; 
                this->buttonStart->Size = System::Drawing::Size(75, 23); 
                this->buttonStart->TabIndex = 1; 
                this->buttonStart->Text = L"Start"; 
                this->buttonStart->UseVisualStyleBackColor = true; 
                this->buttonStart->Click += gcnew System::EventHandler(this, &Form1::buttonStart_Click); 
                // 
                // panel1 
                // 
                this->panel1->BackColor = System::Drawing::Color::White; 
                this->panel1->Location = System::Drawing::Point(12, 12); 
                this->panel1->Name = L"panel1"; 
                this->panel1->Size = System::Drawing::Size(300, 300); 
                this->panel1->TabIndex = 2; 
                this->panel1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::panel1_Paint); 
                // 
                // trackBar1 
                // 
                this->trackBar1->Location = System::Drawing::Point(340, 241); 
                this->trackBar1->Maximum = 3; 
                this->trackBar1->Minimum = 1; 
                this->trackBar1->Name = L"trackBar1"; 
                this->trackBar1->Size = System::Drawing::Size(232, 45); 
                this->trackBar1->TabIndex = 3; 
                this->trackBar1->Value = 2; 
                // 
                // Form1 
                // 
                this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
                this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
                this->ClientSize = System::Drawing::Size(584, 382); 
                this->Controls->Add(this->trackBar1); 
                this->Controls->Add(this->panel1); 
                this->Controls->Add(this->buttonStart); 
                this->Controls->Add(this->buttonBeenden); 
                this->Name = L"Form1"; 
                this->Text = L"Form1"; 
                (cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->trackBar1))->EndInit(); 
                this->ResumeLayout(false); 
                this->PerformLayout(); 
    
            } 
    #pragma endregion 
        private: System::Void buttonBeenden_Click(System::Object^  sender, System::EventArgs^  e) 
                 { 
                     Close(); 
                 } 
        private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) 
                 {
    
    				Int32 groesse, ausfuehren = 0; 
    
    				Graphics ^zeichenflaeche; 
    
    				zeichenflaeche = panel1 -> CreateGraphics(); 
    
    				zeichenflaeche -> Clear(panel1 -> BackColor); 
    
    				Pen ^stift = gcnew Pen(Color::Black); 
    
    				Rectangle bereich; 
    
    				bereich = panel1 -> ClientRectangle; 
    
    				switch (trackBar1->Value) 
    				{ 
    					case 1: groesse=125; 
    					break; 
    
    					case 2: groesse=100; 
    					break; 
    
    					case 3: groesse=75; 
    					break; 
    				} 
    
    				 Int32 YPos = 150;
    
    				 Int32 XMax = panel1 -> ClientRectangle.Width;
    				 Int32 YMax = panel1 -> ClientRectangle.Height;
    
    				 while(ausfuehren < 2)
    				 {
    				 for(Int32 i = 0; i < 29; i++)
    				 {						
    					zeichenflaeche -> DrawLine(stift, panel1 ->
    					ClientRectangle.Left + groesse, 
    					YPos, panel1 -> 
    					ClientRectangle.Width - groesse, 
    					YPos );
    
    					YPos = YPos + 5;
    					groesse = groesse - 5;
    
    					// einen Moment warten
    
    					Threading::Thread::Sleep(100);
    
    					// den Zeichenbereich löschen
    
    					zeichenflaeche -> Clear(panel1 -> BackColor);
    
    					 zeichenflaeche -> DrawLine(stift, panel1 ->
    					 ClientRectangle.Left + groesse,
    					 YPos, panel1 -> 
    					 ClientRectangle.Width - groesse, 
    					 YPos);
    				 }
    
    				 for(Int32 i = 29; i > 0; i--)
    				 {						
    					zeichenflaeche -> DrawLine(stift, panel1 ->
    					ClientRectangle.Left + groesse, 
    					YPos, panel1 -> 
    					ClientRectangle.Width - groesse, 
    					YPos );
    
    					YPos = YPos - 5;
    					groesse = groesse + 5;
    
    					// einen Moment warten
    
    					Threading::Thread::Sleep(100);
    
    					// den Zeichenbereich löschen
    
    					zeichenflaeche -> Clear(panel1 -> BackColor);
    
    					 zeichenflaeche -> DrawLine(stift, panel1 ->
    					 ClientRectangle.Left + groesse,
    					 YPos, panel1 -> 
    					 ClientRectangle.Width - groesse, 
    					 YPos);
    				 }
    
    				 for(Int32 i = 0; i < 29; i++)
    				 {						
    					zeichenflaeche -> DrawLine(stift, panel1 ->
    					ClientRectangle.Left + groesse, 
    					YPos, panel1 -> 
    					ClientRectangle.Width - groesse, 
    					YPos );
    
    					YPos = YPos - 5;
    					groesse = groesse - 5;
    
    					// einen Moment warten
    
    					Threading::Thread::Sleep(100);
    
    					// den Zeichenbereich löschen
    
    					zeichenflaeche -> Clear(panel1 -> BackColor);
    
    					 zeichenflaeche -> DrawLine(stift, panel1 ->
    					 ClientRectangle.Left + groesse,
    					 YPos, panel1 -> 
    					 ClientRectangle.Width - groesse, 
    					 YPos);
    				 }
    
    				  for(Int32 i = 29; i > 0; i--)
    				 {						
    					zeichenflaeche -> DrawLine(stift, panel1 ->
    					ClientRectangle.Left + groesse, 
    					YPos, panel1 -> 
    					ClientRectangle.Width - groesse, 
    					YPos );
    
    					YPos = YPos + 5;
    					groesse = groesse + 5;
    
    					// einen Moment warten
    
    					Threading::Thread::Sleep(100);
    
    					// den Zeichenbereich löschen
    
    					zeichenflaeche -> Clear(panel1 -> BackColor);
    
    					 zeichenflaeche -> DrawLine(stift, panel1 ->
    					 ClientRectangle.Left + groesse,
    					 YPos, panel1 -> 
    					 ClientRectangle.Width - groesse, 
    					 YPos);
    				 }
    					++ausfuehren;
    				}
    
    			 }
    
        private: System::Void panel1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
                 { 
                     Void buttonStart_Click(); 
                 } 
        }; 
    }
    


  • Hast du nicht schon nen Thread.. ? 🙄

    Ich stelle mir das ganze aber so vor, dass beide Richtungen (OBEN und UNTEN) gleichzeitig laufen.

    Hat da jemand eine Idee?

    Klar. Wie wärs wenn dus einfach so programmierst dass beide Richtungen gleichzeitig laufen ? 🤡

    Achja, hier noch der obligatorische Link.

    So und hier das letzt mal code, den Rest musst du allein schaffen :p

    private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) 
    { 
    
    	Int32 groesse, ausfuehren = 0; 
    
    	Graphics ^zeichenflaeche; 
    
    	zeichenflaeche = panel1 -> CreateGraphics(); 
    
    	zeichenflaeche -> Clear(panel1 -> BackColor); 
    
    	Pen ^stift = gcnew Pen(Color::Black); 
    
    	Rectangle bereich; 
    
    	bereich = panel1 -> ClientRectangle; 
    
    	switch (trackBar1->Value) 
    	{ 
    	case 1: groesse=125; 
    		break; 
    
    	case 2: groesse=100; 
    		break; 
    
    	case 3: groesse=75; 
    		break; 
    	} 
    
    	Int32 YPos = 150; 
    	Int32 YPos2 = 150; 
    	Int32 groesse2=groesse;
    
    	Int32 XMax = panel1 -> ClientRectangle.Width; 
    	Int32 YMax = panel1 -> ClientRectangle.Height; 
    
    	while(ausfuehren < 1) 
    	{ 
    		for(Int32 i = 0; i < 29*2; i++) 
    		{                      
    			zeichenflaeche -> DrawLine(stift, panel1 -> 
    				ClientRectangle.Left + groesse, 
    				YPos, panel1 -> 
    				ClientRectangle.Width - groesse, 
    				YPos ); 
    
    			zeichenflaeche -> DrawLine(stift, panel1 -> 
    				ClientRectangle.Left + groesse2, 
    				YPos2, panel1 -> 
    				ClientRectangle.Width - groesse2, 
    				YPos2 ); 
    
    			if(i<29)
    			{
    				YPos += 5; 
    				YPos2 -= 5;
    				groesse -= 5; 
    				groesse2 -= 5;
    			}
    			else
    			{
    				YPos -= 5; 
    				YPos2 += 5;
    				groesse += 5; 
    				groesse2 += 5;
    			}
    
    			// einen Moment warten 
    
    			Threading::Thread::Sleep(100); 
    
    			// den Zeichenbereich löschen 
    
    			zeichenflaeche -> Clear(panel1 -> BackColor); 
    
    			zeichenflaeche -> DrawLine(stift, panel1 -> 
    				ClientRectangle.Left + groesse, 
    				YPos, panel1 -> 
    				ClientRectangle.Width - groesse, 
    				YPos); 
    			zeichenflaeche -> DrawLine(stift, panel1 -> 
    				ClientRectangle.Left + groesse2, 
    				YPos2, panel1 -> 
    				ClientRectangle.Width - groesse2, 
    				YPos2 ); 
    		} 
    		++ausfuehren; 
    	} 
    
    }
    


  • Hallo DarkShadow44

    Mal wieder typisch, da ist man sowas von in seinen Gedanken festgefahren, dass man keinen anderen Weg mehr sieht.

    Lieben, lieben Dank.

    champman


Anmelden zum Antworten