Rahmenfarbe über Dialogform ändern



  • Hallo Leute

    Habe da ein Problem mit meiner Farbänderung meines Sielfeldrahmens.

    Ich habe zwei Formen. 1. Die Form1 (Hauptform) und dann die Form2 (Einstellungsdialog).In dem Einstellungsdialog möchte ich die Hintergrundfarbe und die Rahmenfarbe ändern. Diese Änderung soll dann in der Vorschau des Einstellungsdialog angezeigt werden und auf der dann beim Schließen auf der Hauptform übernommen werden. Für die Hintergrundfarbe läuft es, aber die Farbänderung für mein Rahmen bekomme ich nicht hin. Änderungen sollen über "colorDialog" erfolgen. Habe es mit einem und zwei colorDialogen versucht.

    Hier die betreffenden Teile des Programms.

    Methode aus der Hauptform, in der die Änderungen übernommen werden sollen.

    private: System::Void spielfeldToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 Point neueGroesse;
    			 Color rahmen;
    
    			 // bitte jeweils in einer Zeile eingeben
    
    			 einstellungenDialog ^neueWerte = gcnew einstellungenDialog();
    
    			 // wenn der Dialog über OK beendet wird
    
    			 if (neueWerte -> ShowDialog() == Windows::Forms::DialogResult::OK)
    			 {
    				 // die neue Größe holen
    
    				 neueGroesse = neueWerte -> liefereWert();
    				 spielfeld->BackColor = neueWerte->liefereBackColor();
    				 /*pinsel->Color = neueWerte->lifereRahmenfarbe();*/
    				 rahmen = neueWerte->liefereRahmenfarbe();
    
    				 // den Dialog wieder schließen
    
    				 neueWerte -> Close();
    
    				 // das Formular ändern
    
    				 this -> Width = neueGroesse.X;
    				 this -> Height = neueGroesse.Y;
    
    				 // neu ausrichten
    
    				 // bitte jeweils in einer Zeile eingeben
    
    				 this -> Left = (Screen::PrimaryScreen -> Bounds.Width - this -> Width) / 2;
    				 this -> Top = (Screen::PrimaryScreen -> Bounds.Height - this -> Height) / 2;
    
    				 // die Zeichenfläche neu beschaffen
    
    				 zeichenflaeche = spielfeld -> CreateGraphics();
    
    				 // das Spielfeld neu setzen
    
    				 setzeSpielfeld();
    
    				 // Spielfeld löschen
    
    				 zeichenflaeche -> Clear(spielfeld -> BackColor);
    
    				 // und einen neuen Ball und Schläger zeichnen
    
    				 neuerBall();
    			 }
    		 }
    };
    

    Konstruktoren aus Form2 Einstellungsdialog

    //
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    
    			linie = 6;
    			pinsel1 = gcnew SolidBrush(Color::Black);
    			malflaeche = panel1Vorschau->CreateGraphics();
    			panel1Vorschau->BackColor = Color::Black;
    
    			setzeVorschau();
    

    Die Maße des Vorschaupanels festlegen

    Void setzeVorschau()
    		{
    			vorschauGroesse = panel1Vorschau->ClientRectangle;
    
    			vorschauMaxX = vorschauGroesse.Right - linie;
    			vorschauMinX = vorschauGroesse.Left + linie + 1;
    			vorschauMaxY = vorschauGroesse.Bottom - linie;
    			vorschauMinY = vorschauGroesse.Top + linie;
    		}
    

    Rahmen der Vorschau zeichnen

    Void maleVorschau()
    		{
    			pinsel1->Color = Color::White;
    
    			malflaeche->FillRectangle(pinsel1, 0, 0, vorschauMaxX, linie);
    			malflaeche->FillRectangle(pinsel1, vorschauMaxX, 0, linie, vorschauMaxY + linie);
    			malflaeche->FillRectangle(pinsel1, 0, vorschauMaxY, vorschauMaxX, linie);
    			malflaeche->FillRectangle(pinsel1, 0,0, linie, vorschauMaxX);
    
    		}
    

    Hintergrundfarbe übergeben

    Color liefereBackColor()
    		{
    			return panel1Vorschau->BackColor;
    		}
    

    Diese Methode klappt!!!!

    Rahmenfarbe übergeben Das klappt nicht!!! 😡

    Color liefereRahmenfarbe()
    		{
    			pinsel1 = gcnew SolidBrush(colorDialog2->Color);
    			return pinsel1->Color; 
    		}
    

    Attributte? festlegen

    private:
    
    		Graphics ^malflaeche;
    
    		SolidBrush ^pinsel1;
    
    		Rectangle vorschauGroesse;
    
    		Int32 linie, vorschauMaxX, vorschauMaxY, vorschauMinX, vorschauMinY;
    

    Butten um die Rahmenfarbe mit colorDialog zu ändern

    private: System::Void buttonRahmenfarbe_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 if(colorDialog2->ShowDialog() == Windows::Forms::DialogResult::OK)
    				 {
    					 pinsel1->Color = colorDialog2->Color;
    					 /*maleVorschau();*/
    				 }
    			 }
    

    Button um die Hintergrundfarbe mit colorDialog zu ändern

    private: System::Void buttonSpielfeldfarbe_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {			 
    			 if(colorDialog1->ShowDialog() == Windows::Forms::DialogResult::OK)
    			 {
    				 panel1Vorschau->BackColor = colorDialog1->Color;
    			 }
    		 }
    

    Paintmethode der Vorschau

    private: System::Void panel1Vorschau_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    		 {
    			 maleVorschau();
    		 }
    

    Gans lieben Dank für Eure Hilfe.

    champman



  • Viel zu viel Text, viel zu viel Code. Beschränk dich auf das wichtigste.
    Ich hab paar FillRectangle Aufrufe gesehen, aber kein DrawRectangle. Das ist wohl das was dir fehlt, wenn ich die Frage richtig verstanden habe.



  • Hallo Mechanics

    Warum ist das zu viel Text und zu viel Code? Ich denke schon das ich das Wesentliche an Text und Code reingestellt habe um Hilfe zu erhalten. Schließlich sollen die Helfer schon wissen was ich so alles für diese Methode (Funktion) erstellt habe und sie sollten auch so ungefähr Ahnen in welche Richtung es gehen kann, soll (wie man das im Moment auch nennen mag). Es geht ja eben nur um diesen Teil, der die Rahmenfarbe in der Vorschau und in der Hauptform ändert.

    Das die Änderung des Hintergrundes funktioniert habe ich deutlich gesagt, aber die Sache mit dem Rahmen muss doch noch anders aussehen oder vielmehr funktionieren. Darum auch den Teil aus der Hauptform, in dem die Änderungen übergeben werden und verarbeitet werden.

    Das ganze sähe noch komplizierter aus, wenn ich meine ganzen Eigenversuche nur Auskommentiert hätte. währe wesentlich noch mehr Text.

    Jede Hilfe ist Willkommen!!!

    Gruß

    champman



  • champman schrieb:

    Warum ist das zu viel Text und zu viel Code?

    Weil es völlig uninteressant ist 😉 Versuch mal die Leute zu verstehen, die versuchen hier zu helfen. Solche Probleme sind für Leute die sich auskennen einfach total uninteressant. Man versucht, auf einen Blick das Problem zu erkennen und dann weiß man entweder die Antwort eh schon, oder man weiß sofort, nach was man Googeln müsste. Niemand will hier irgendwelche Romane lesen und hunderte Zeilen Code analysieren.
    Ich hab aus dem Text auch nicht so ganz verstanden, was du konkret machst und was du konkret willst. Was ist die Rahmenfarbe und wie willst du die darstellen? Zeichnest du selber was, setzt du irgendeine Eigenschaft vno irgendwas? Das geht aus dem Text nicht hervor. Seh ich auch im Code jetzt nicht so ganz.
    Du schreibst auch, dass du eine Vorschau zeichnest. Ich sehe FillRectangle, aber wie gesagt kein DrawRectangle. Das bräuchtest du, um einen Rahmen um das Rechteck zu zeichnen. Deswegen hab ich das gleich erwähnt. Wenn das nicht das ist was du willst, sorry, dann versuch mal in zwei Sätzen zu erklären, was genau du machen willst und wie.



  • Hallo Mechanics

    Es geht darum, dass ich die Farbänderung auf meinem Einstellgsdialog auf meine Hauptform angezeigt bekommen möchte. Die Anzeige in der Vorschau funktioniert. Doch die Übergabe auf die Hauptform nicht. Liegt wohle daran, dass der colorDialog bei der Änderung des pinsel1 auf meiner Form2 schon geschlossen ist, wenn ich diese Änderung auf den pinsel für meine Hauptform übergeben möchte.

    Hätte dir das gerne an Hand einer Bildschirmkopie hier gezeigt, finde hier aber nichts mit dem ich diese hier hochladen kann.

    Hier noch mal die Farbeänderung mittels eines Button au der Form2

    private: System::Void buttonRahmenfarbe_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 if(colorDialog2->ShowDialog() == Windows::Forms::DialogResult::OK)
    				 {
    					 pinsel1->Color = colorDialog2->Color;
    					 maleVorschau();
    
    					 /*return;*/
    				 }
    			 }
    

    Und hier noch mal die Funktion zur Übergabe auf die Form1 (Hauptform)

    Color liefereRahmenfarbe()
    		{
    			/*return pinsel1->Color = colorDialog2->Color;*/
    			/*return maleVorschau();*/
    			/*return pinsel1->Color;*/
    			/*return maleVorschau();*/
    			/*pinsel2 = pinsel1->Color;*/
    			/*return pinsel1->Color = colorDialog2->Color;*/
    			/*return pinsel2; */
    
    			/*return malflaeche;*/
    			/*return pinsel1->Color = colorDialog2->Color;*/
    			return colorDialog2->Color;
    			/*return panel1Vorschau;*/
    		}
    

    Sind noch ein paar Versuch drin, die alle nicht funktionieren. 😕

    Wie Du siehst habe ich auf der Form2 einen pinsel1 und auf der Hauptform (Form1) einen pinsel. Dieser pinsel der Form1 soll die geänderte Farbe übernehmen um mein Spielfeld auf der Form1 dann in der geänderten Farbe erscheinen zu lassen.

    Ich hoffe es ist jetzt verständlicher für Dich

    Gruß

    champman


Anmelden zum Antworten