Grafikobjekte verschieben


mili

Grünschnabel
#1
Hallo Ihr,

bin neu hier. Hätte da ein paar Fragen zu GDI - Ich Arbeite mit vb 2005

Wie kann man gezeichnete Objekte (in PB) eindeutig identifizieren?
Ist Grundsätzlich ein Graphicspath nötig?
Wie werden die Objecte im Graphicspath gespeichert - aufruf ?

Ein Beispielcode wäre nicht schlecht - am besten in vb 2005

Ich Danke Euch im voraus

MFG
E. hiller
 

Shakie

Erfahrenes Mitglied
#3
Was ist PB?
Wenn du etwas zeichnest, dann entsteht dadurch noch kein Objekt. Wenn du dein Bild, Linien, etc später nochmal zeichnen möchtest, dann musst du dir merken, wie du es beim ersten Mal getan hast.
Meistens überschreibt man die OnPaint-Methode oder setzt den Code zum Zeichnen in einen EventHandler vom Paint-Event, damit das Gezeichnete nicht verloren geht, wenn du beispielsweise ein anderes Windows-Fenster kurz über deine Anwendung schiebst.
 

mili

Grünschnabel
#4
Hallo Shakie,

zunächst herzlichen Dank für Deine prompte Antwort.

PB bedeutet "Picturebox". Ich bin im Grafikbereich noch recht unerfahren-"na ja" einfache
Sachen krieg ich noch hin, wie Rechtecke usw. in eine PB zeichnen. Das wars aber
dann auch schon -" Du müsstest viel Geduld mit mir haben"

Deine Ausführungen "Event-Handler" überschreiben usw. verstehe ich nicht !
Wir müssten schon etwas früher beginnen!

mfG

E: hiller
 

Shakie

Erfahrenes Mitglied
#5
Also dazu gibt es schon tausend Tutorials im Internet, z.B.:
http://oreilly.com/catalog/pnetwinaps/chapter/ch10.pdf (da steht alles drin)
Du brauchst übrigens gar keine PictureBox, ein einfaches Panel tut es auch schon. PictureBox würde ich nur verwenden, wenn du beispielsweise ein JPEG, PNG, GIF,etc. darstellen möchtest. Du könntet theoretisch auch direkt auf die Form zeichnen.
Hier mal ein kleines Beispiel, was ich mit dem EventHandler meine:
Code:
Public Class Form1
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        e.Graphics.FillRectangle(Brushes.Blue, 10, 10, 100, 100)
    End Sub
End Class
Dieser Code sollte ein blaues Rechteck auf Form1 zeichnen.
Theoretisch kannst du auch nur mit
Code:
MeinControl.CreateGraphics.FillRectangle(Brushes.Blue, 10, 10, 100, 100)
ein Rechteck zeichnen, aber wenn du jetzt deine Anwendung minimierst und dann wieder neu anzeigst oder das Fenster zum Desktop hinausschiebst (so dass es nicht mehr angezeigt wird), dann ist das blaue Rechteck wieder verschwunden. Deshalb solltest du Zeichenlogik in das Paint-Event verschieben. Dieses Event wird aufgerufen, wenn Teile des Controls neu gezeichnet werden müssen.