Brauche mal Denkanstösse!!



  • Hallo!

    Bin mir nicht sicher, ob ich hier richtig bin, weil mein Thema mit Grafik in WindowsForms C++/CLI zu tun hat.

    Es darum, dass ich in einem Panel mit den Maßen Höhe 300 und Breite 300, einen Kreis, ein Rechteck oder eine Linie zum Rand bewege und wieder in seine ausgangs
    Position bringe. Dabei dehnen sich der Kreis und das Rechteck zu allen vier Seiten aus während die Linie nach oben und unten bewegen soll.

    Die Ausdehnung des Kreises und des Rechteckes funktioniert, die mit der Linie leider noch nicht. Die Verkleinerung macht mir Probleme. Es tut sich zwar etwas, aber das Programm stürzt ab. Jetzt brauch ich ein wenig Hilfe um heraus zu finden warum und was ich nicht bedacht habe. Habe da so ein paar Ideen gehabt, aber die liefen alle ins Leere.

    Hier mal mein gesamtes Testprogramm wie wenigstens startet:

    #pragma once
    
    namespace spielerei2 {
    
    	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;
    			}
    		}
    
    		Graphics ^zeichenflaeche;
    
    	private: System::Windows::Forms::Panel^  panel1;
    	private: System::Windows::Forms::Button^  buttonBeenden;
    	private: System::Windows::Forms::Button^  buttonStart;
    	private: System::Windows::Forms::GroupBox^  groupBox1;
    	private: System::Windows::Forms::RadioButton^  radioButtonLinie;
    	private: System::Windows::Forms::RadioButton^  radioButtonRechteck;
    	private: System::Windows::Forms::RadioButton^  radioButtonKreis;
    	private: System::Windows::Forms::TrackBar^  trackBar1;
    	private: System::Windows::Forms::Button^  buttonLoeschen;
    	private: System::Windows::Forms::Button^  button2Fach;
    	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->panel1 = (gcnew System::Windows::Forms::Panel());
    			this->buttonBeenden = (gcnew System::Windows::Forms::Button());
    			this->buttonStart = (gcnew System::Windows::Forms::Button());
    			this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
    			this->radioButtonLinie = (gcnew System::Windows::Forms::RadioButton());
    			this->radioButtonRechteck = (gcnew System::Windows::Forms::RadioButton());
    			this->radioButtonKreis = (gcnew System::Windows::Forms::RadioButton());
    			this->trackBar1 = (gcnew System::Windows::Forms::TrackBar());
    			this->buttonLoeschen = (gcnew System::Windows::Forms::Button());
    			this->button2Fach = (gcnew System::Windows::Forms::Button());
    			this->groupBox1->SuspendLayout();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->trackBar1))->BeginInit();
    			this->SuspendLayout();
    			// 
    			// panel1
    			// 
    			this->panel1->BackColor = System::Drawing::Color::White;
    			this->panel1->Location = System::Drawing::Point(11, 9);
    			this->panel1->Name = L"panel1";
    			this->panel1->Size = System::Drawing::Size(300, 300);
    			this->panel1->TabIndex = 0;
    			// 
    			// buttonBeenden
    			// 
    			this->buttonBeenden->Location = System::Drawing::Point(497, 347);
    			this->buttonBeenden->Name = L"buttonBeenden";
    			this->buttonBeenden->Size = System::Drawing::Size(75, 23);
    			this->buttonBeenden->TabIndex = 1;
    			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(318, 347);
    			this->buttonStart->Name = L"buttonStart";
    			this->buttonStart->Size = System::Drawing::Size(75, 23);
    			this->buttonStart->TabIndex = 2;
    			this->buttonStart->Text = L"Start";
    			this->buttonStart->UseVisualStyleBackColor = true;
    			this->buttonStart->Click += gcnew System::EventHandler(this, &Form1::buttonStart_Click);
    			// 
    			// groupBox1
    			// 
    			this->groupBox1->Controls->Add(this->radioButtonLinie);
    			this->groupBox1->Controls->Add(this->radioButtonRechteck);
    			this->groupBox1->Controls->Add(this->radioButtonKreis);
    			this->groupBox1->Location = System::Drawing::Point(339, 22);
    			this->groupBox1->Name = L"groupBox1";
    			this->groupBox1->Size = System::Drawing::Size(217, 76);
    			this->groupBox1->TabIndex = 3;
    			this->groupBox1->TabStop = false;
    			this->groupBox1->Text = L"Figuren";
    			// 
    			// radioButtonLinie
    			// 
    			this->radioButtonLinie->AutoSize = true;
    			this->radioButtonLinie->Location = System::Drawing::Point(164, 30);
    			this->radioButtonLinie->Name = L"radioButtonLinie";
    			this->radioButtonLinie->Size = System::Drawing::Size(47, 17);
    			this->radioButtonLinie->TabIndex = 2;
    			this->radioButtonLinie->TabStop = true;
    			this->radioButtonLinie->Text = L"Linie";
    			this->radioButtonLinie->UseVisualStyleBackColor = true;
    			// 
    			// radioButtonRechteck
    			// 
    			this->radioButtonRechteck->AutoSize = true;
    			this->radioButtonRechteck->Location = System::Drawing::Point(71, 30);
    			this->radioButtonRechteck->Name = L"radioButtonRechteck";
    			this->radioButtonRechteck->Size = System::Drawing::Size(72, 17);
    			this->radioButtonRechteck->TabIndex = 1;
    			this->radioButtonRechteck->TabStop = true;
    			this->radioButtonRechteck->Text = L"Rechteck";
    			this->radioButtonRechteck->UseVisualStyleBackColor = true;
    			// 
    			// radioButtonKreis
    			// 
    			this->radioButtonKreis->AutoSize = true;
    			this->radioButtonKreis->Checked = true;
    			this->radioButtonKreis->Location = System::Drawing::Point(6, 30);
    			this->radioButtonKreis->Name = L"radioButtonKreis";
    			this->radioButtonKreis->Size = System::Drawing::Size(48, 17);
    			this->radioButtonKreis->TabIndex = 0;
    			this->radioButtonKreis->TabStop = true;
    			this->radioButtonKreis->Text = L"Kreis";
    			this->radioButtonKreis->UseVisualStyleBackColor = true;
    			// 
    			// trackBar1
    			// 
    			this->trackBar1->Location = System::Drawing::Point(339, 164);
    			this->trackBar1->Maximum = 3;
    			this->trackBar1->Minimum = 1;
    			this->trackBar1->Name = L"trackBar1";
    			this->trackBar1->Size = System::Drawing::Size(217, 45);
    			this->trackBar1->TabIndex = 4;
    			this->trackBar1->Value = 2;
    			// 
    			// buttonLoeschen
    			// 
    			this->buttonLoeschen->Location = System::Drawing::Point(407, 347);
    			this->buttonLoeschen->Name = L"buttonLoeschen";
    			this->buttonLoeschen->Size = System::Drawing::Size(75, 23);
    			this->buttonLoeschen->TabIndex = 5;
    			this->buttonLoeschen->Text = L"Löschen";
    			this->buttonLoeschen->UseVisualStyleBackColor = true;
    			this->buttonLoeschen->Click += gcnew System::EventHandler(this, &Form1::buttonLoeschen_Click);
    			// 
    			// button2Fach
    			// 
    			this->button2Fach->Location = System::Drawing::Point(194, 347);
    			this->button2Fach->Name = L"button2Fach";
    			this->button2Fach->Size = System::Drawing::Size(75, 23);
    			this->button2Fach->TabIndex = 6;
    			this->button2Fach->Text = L"2 Fach";
    			this->button2Fach->UseVisualStyleBackColor = true;
    			this->button2Fach->Click += gcnew System::EventHandler(this, &Form1::button2Fach_Click);
    			// 
    			// 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->button2Fach);
    			this->Controls->Add(this->buttonLoeschen);
    			this->Controls->Add(this->trackBar1);
    			this->Controls->Add(this->groupBox1);
    			this->Controls->Add(this->buttonStart);
    			this->Controls->Add(this->buttonBeenden);
    			this->Controls->Add(this->panel1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
    			this->groupBox1->ResumeLayout(false);
    			this->groupBox1->PerformLayout();
    			(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 Form1_Load(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 // einen handle auf die Zeichenfläche das Panels setzen
    
    				 // Zeichenfläche ist als Attribut der Klasse Form1 vereinbart
    
    				 zeichenflaeche = panel1 -> CreateGraphics();
    			 }
    private: System::Void buttonLoeschen_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 zeichenflaeche -> Clear(panel1 -> BackColor);
    		 }
    private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			//eine lokale Variable für die Größe
    
    			Int32 groesse;
    
    			//einen schwarzen Stift erzeugen
    
    			Pen ^stift = gcnew Pen(Color::Black);
    
    			//die Größe der Figur ermitteln
    
    			switch (trackBar1->Value) 
    			{
    				case 1:	groesse=125;
    
    						break;
    
    				case 2:	groesse=100;
    
    						break;
    
    				case 3:	groesse=75;
    
    						break;
    
    			}
    
    			// Figuren ermitteln
    
    			if (radioButtonKreis -> Checked == true)
    			 {
    				  zeichenflaeche -> DrawEllipse(stift, panel1 ->
    					 ClientRectangle.Left + groesse, panel1 ->
    					 ClientRectangle.Top + groesse, panel1 ->
    					 ClientRectangle.Width - (groesse * 2), panel1 ->
    					 ClientRectangle.Height - (groesse * 2));
    			 }
    
    			 if (radioButtonRechteck -> Checked == true)
    			 {
    				  zeichenflaeche -> DrawRectangle(stift, panel1 ->
    					 ClientRectangle.Left + groesse, panel1 ->
    					 ClientRectangle.Top + groesse, panel1 ->
    					 ClientRectangle.Width - (groesse * 2), panel1 ->
    					 ClientRectangle.Height - (groesse * 2));
    
    			 }
    
    			 if (radioButtonLinie -> Checked == true)
    			 {
    				 zeichenflaeche -> DrawLine(stift, panel1 ->
    					 ClientRectangle.Left + groesse, panel1 ->
    					 ClientRectangle.Height / 2, panel1 ->
    					 ClientRectangle.Width - groesse, panel1 ->
    					 ClientRectangle.Height / 2);
    			 }
    
    		 }
    private: System::Void button2Fach_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 Int32 groesse;
    
    			 Pen ^stift = gcnew Pen(Color::Black);
    
    			switch (trackBar1->Value) 
    			{
    				case 1:	groesse=125;
    
    						break;
    
    				case 2:	groesse=100;
    
    						break;
    
    				case 3:	groesse=75;
    
    						break;
    			}
    
    			 if (radioButtonKreis -> Checked == true)
    			 {
    				 for(Int32 i = 0; i < 20; i++)
    				 {
    
    				 	 groesse = groesse - 5;
    
    					 zeichenflaeche -> DrawEllipse(stift, panel1 ->
    						 ClientRectangle.Left + groesse, panel1 ->
    						 ClientRectangle.Top + groesse, panel1 ->
    						 ClientRectangle.Width - (groesse * 2), panel1 ->
    						 ClientRectangle.Height - (groesse * 2));
    
    					 // einen Moment warten
    
    					 Threading::Thread::Sleep(100);
    
    					 // den Zeichenbereich löschen
    
    					 zeichenflaeche -> Clear(panel1 -> BackColor);
    
    					 for(Int32 i = 20; i > 0; i--)
    					 {
    
    						 zeichenflaeche -> DrawEllipse(stift, panel1 ->
    						 ClientRectangle.Left + groesse, panel1 ->
    						 ClientRectangle.Top + groesse, panel1 ->
    						 ClientRectangle.Width - (groesse * 2), panel1 ->
    						 ClientRectangle.Height - (groesse * 2));
    
    						  /*groesse = groesse + 5;*/
    
    						 // einen Moment warten
    
    					 Threading::Thread::Sleep(100);
    
    					 // den Zeichenbereich löschen
    
    					 zeichenflaeche -> Clear(panel1 -> BackColor);
    					 }
    				 }
    			 }
    
    			 if (radioButtonRechteck -> Checked == true)
    			 {
    				 for(Int32 i = 0; i < 20; i++)
    				 {
    					 groesse = groesse - 5;
    
    					 zeichenflaeche -> DrawRectangle(stift, panel1 ->
    						 ClientRectangle.Left + groesse, panel1 ->
    						 ClientRectangle.Top + groesse, panel1 ->
    						 ClientRectangle.Width - (groesse * 2), panel1 ->
    						 ClientRectangle.Height - (groesse * 2));
    
    					 // einen Moment warten
    
    					 Threading::Thread::Sleep(100);
    
    					 // den Zeichenbereich löschen
    
    					 zeichenflaeche -> Clear(panel1 -> BackColor);
    				 }
    			 }
    
    			 if (radioButtonLinie -> Checked == true)
    			 {
    				 /*for(Int32 i = 0; i < 20; i++)
    				 {
    					groesse = groesse - 5;*/
    
    					zeichenflaeche -> DrawLine(stift, panel1 ->
    						ClientRectangle.Left + groesse, panel1 ->
    						ClientRectangle.Height / 2, panel1 ->
    						ClientRectangle.Width - groesse, panel1 ->
    						ClientRectangle.Height / 2);
    				/* }*/
    			 }
    		 }
    };
    }
    

    Danke Euch für die Hilfe

    Gruß

    champman



  • Ich rate Dir zu "Debuggen"...



  • Moin

    Nee, brauch ich nicht mehr. Rechteck und Kreis habe ich hinbekommen. Fehlt nur noch der Strich, der sich nach oben und unten bewegen soll.

    Wenn ihr neugierig seid, dann kopiere ich Euch das Ergebnis hier rein. Müsst nur danach fragen. 😃

    Trotz allem bin für Vorschläge für den sich bewegenden Strich dankbar.

    Lieber Gruß

    champman



  • Program stürzt ab im Sinne von >>Keine Rückmeldung<< : Fail
    Im Sinne von wirft eine Exception: Wie ist die Fehlermeldung, was für eine Exception..

    Würde uns helfen, dir zu helfen.. 😃



  • champman schrieb:

    Moin

    Nee, brauch ich nicht mehr. Rechteck und Kreis habe ich hinbekommen. Fehlt nur noch der Strich, der sich nach oben und unten bewegen soll.

    Wenn ihr neugierig seid, dann kopiere ich Euch das Ergebnis hier rein. Müsst nur danach fragen. 😃

    Trotz allem bin für Vorschläge für den sich bewegenden Strich dankbar.

    Lieber Gruß

    champman

    Über das Ergebnis würde ich mich freuen!!



  • Hey ist noch nicht fertig. Habe mich erst mal auf meine Abschlussprüfung konzentriert und dann ein bischen ausgespannt.

    Falls Interesse: PRÜFUNG bestanden

    Gruß

    champman



  • Falls Interesse

    Brennend!



  • Hallo

    Bin wohl doch noch nicht so ganz aus dem Prüfungsstress raus. Die kleine Spielerei ist längst abgeschlossen mit ### % Ups, mag ich gar nicht sagen.

    Aber ich würde Dir das mailen, wenn es möglich ist und Du mir deine Adresse mitteilst.

    Oder Du musst Dich etwas gedulden, bis mein jetziges Problem geknackt habe und ich stelle den Teil rein. Müsste das erst wieder aus der Versenkung graben zwischen den ganzen Umschulungskram.

    Gruß

    champman


Log in to reply