Brauche Hilfe bezüglich Bildermalen



  • Hallo,

    Kann mir jemand verraten wie man einfach so die Bilder( aus Dateien oder Ressource ) auf ein Frame bzw. Form malen kann, und zwar ohne einer ImageBox.

    Aus Java kenne ich sowas wie Paint - Methode, die macht nichts anderes als nur Grafiken an bestimmte Koordinate des Frames malen, oder so wars irgendwie 🙄

    http://img141.imageshack.us/img141/4305/unbenanntes0.jpg
    Ich Habe bereits ImageBox, dort ist Schon ein Image geladen. Nun Möchte ich jetzt Steine auf das feld malen, bspw wenn man auf das Feld mit der Maus klickt.



  • Ziehe ein Panel (oder was auch immer) auf das Form oder verwendet direkt das Form und reagiere auf OnPaint ( bzw. Paint-Event).

    Ein Bild aus einer Datei erhälst Du via
    - Image.FromFile

    Und zeichnen tust Du es mittels:
    - e.Graphics.DrawImage

    Für ein Beispiel siehe:
    http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx



  • Jupp, werde ich sofort vornehmen.

    Frage nebenbei: Wie mache ich dass Panel auf onPaint reagiert, finde das irgendwie in den Eigenschaften nicht.



  • Paljut schrieb:

    Frage nebenbei: Wie mache ich dass Panel auf onPaint reagiert, finde das irgendwie in den Eigenschaften nicht.

    Wenn Du "OnPaint" verwenden willst, dann musst Du es ableiten und "OnPaint" überladen...



  • OK! Vielen Dank, das sitzt !



  • Eine Frage noch: Wie kann ich ´mittels Mausklick einen Paint verursachen.

    So wie ich verstanden habe:

    this->SpielfeldBox->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::SpielfeldBox_Paint);

    ... lässt das ganze auf ein Paint warten, und sobald ein Paint auftritt, wird dann "SpielfeldBox_Paint" ausgeführt, wo steht:

    e->Graphics->DrawImage( Image::FromFile("aaa.jpg"), PointF( 50, 30 ) );

    Das heißt also: Wenn gepaintet wird, dann Zeichne die Datei aaa auf die Box.

    Irgendwie ferstehe ich das nicht ganz 😕



  • Paljut schrieb:

    Eine Frage noch: Wie kann ich ´mittels Mausklick einen Paint verursachen.

    this->Invalidat();



  • Nun thanks, das klappt ja super !

    Und allerletzte Frage noch: 🙄

    Dieses Repaint wird ja nicht nur von this->Invalidat(); verursacht( wenn ich klicke ) sondern auch nur so, bei Dialog bspw.

    Mit welcher if-Abfrage kann ich nun das abfangen, dass es nun wirklich auf repaint des Mausklicks funktioniert und nicht auf andere Repaints ?

    Sowas wie im Mouse-Event dieses OnPaint-Event aufrufen oder so.

    Sorry für doofe Fragen, bin blöß von Java umgestiegen, muss mich noch einarbeiten.



  • Paljut schrieb:

    Nun thanks, das klappt ja super !

    Und allerletzte Frage noch: 🙄

    Dieses Repaint wird ja nicht nur von this->Invalidat(); verursacht( wenn ich klicke ) sondern auch nur so, bei Dialog bspw.

    Mit welcher if-Abfrage kann ich nun das abfangen, dass es nun wirklich auf repaint des Mausklicks funktioniert und nicht auf andere Repaints ?

    Sowas wie im Mouse-Event dieses OnPaint-Event aufrufen oder so.

    Sorry für doofe Fragen, bin blöß von Java umgestiegen, muss mich noch einarbeiten.

    Naja denk doch mal nach, du setzt irgendeine bool variable auf true (von dir zu der Klasse hinzugefügt) und weißt somit das geklickt wurde. Dann erst reagierst du in der OnPaint Methode darauf. 😉

    BR
    Vinzenz


Anmelden zum Antworten