Strich soll auch nach oben laufen



  • Hallo

    Habe hier einen Strich, der nach unten läuft. Mir fehlt im Moment die zündende Idee, wie ich auch gleichzeitig nach oben ausdehnen kann. Das einzige was ich aus meinen Versuchen herausgefunden habe ist, dass die Anweisung: YPos = YPos + 5;
    in YPos = YPos - 5; umgewandelt werden kann.

    Hier mal der Code:

    #pragma once
    
    namespace TestStrich2 {
    
    	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();
    
    				 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;
    
    				 for(Int32 i = 0; i < 20; i++)
    				 {						 
    					while(YPos < YMax) 
    					{						
    						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);*/
    				 }
    
    			 }
    
    	private: System::Void panel1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    			 {
    				 Void buttonStart_Click();
    			 }
    	};
    }
    

    Bin Euch dankbar für jede Hilfe

    champman



  • Hey

    Habe es schon mal soweit geschafft, dass der Strich sich nach oben und unten ausdehnt. Jetzt muss er nur noch in der Mitte die Ausgangsgröße behalten und sich gleichmäßig ausdehnen.

    Hier der Code nur für Button Start:

    private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 Int32 groesse, ausfuehren = 0;
    
    				 Graphics ^zeichenflaeche;
    
    				 zeichenflaeche = panel1 -> CreateGraphics();
    
    				 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 XMax = panel1 -> ClientRectangle.Width;
    				 Int32 YMax = panel1 ->ClientRectangle.Height;
    
    				 Int32 YPos = ClientRectangle.Height / 2;
    
    				 for(Int32 i = 0; i < 20; i++)
    				 {						 
    					while(YPos < YMax) 
    					{						
    						zeichenflaeche -> DrawLine(stift, panel1 ->
    						ClientRectangle.Left + groesse, 
    						YPos, panel1 -> 
    						ClientRectangle.Width - groesse, 
    						YPos );
    
    						YPos = YPos + 5;
    
    						/*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 );
    
    						YPos = YPos - 5;
    
    				 for(Int32 i = 0; i < 20; i++)
    				 {						 
    					while(YPos < YMax) 
    					{						
    						zeichenflaeche -> DrawLine(stift, panel1 ->
    						ClientRectangle.Left + groesse, 
    						YPos, panel1 -> 
    						ClientRectangle.Width - groesse, 
    						YPos );
    
    						/*YPos = YPos + 5;*/
    
    						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 );
    
    						/*YPos = YPos - 5;*/
    
    			 }
    

    Bin auf Eure Hilfestellung gespannt

    champman



  • private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) 
    { 
    
    	float 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=0; 
    		break; 
    
    	case 2: groesse=50; 
    		break; 
    
    	case 3: groesse=100; 
    		break; 
    	} 
    
    	Int32 YPos = 0; 
    	int step=5;
    
    	Int32 XMax = panel1 -> ClientRectangle.Width; 
    	Int32 YMax = panel1 ->ClientRectangle.Height;
    
    	float change=(panel1 -> ClientRectangle.Width-groesse/2)/(YMax/step);
    	float diff=0;
    
    	while(YPos < YMax) 
    	{                       
    		zeichenflaeche -> DrawLine(stift, 
    			panel1 -> ClientRectangle.Left-(int)diff, 
    			YPos,
    			panel1 -> ClientRectangle.Width+(int)diff, 
    			YPos ); 
    
    		YPos = YPos + step; 
    		if(YPos<=YMax/2)
    		{
    			diff = diff - change; 
    		}
    		else
    		{
    			diff = diff + change; 
    		}
    	} 
    }
    

    So in etwa ?



  • Hey DarkShadow44

    Genau so!!

    Werde mir den Code mal genauer ansehen und wenn es Dich nicht stört noch ein paar Fragen stellen. Möchte das ganze erst mal für mich nach vollziehen.

    Melde mich dann wieder

    Recht lieben lieben Dank

    champman


Anmelden zum Antworten