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