picturebox: ausschneiden + verschieben

JRKleemann

Grünschnabel
ich möchte in einer picturebox einen bestimmten Bereich ausschneiden können und dann rumverschieben (wie bei z.b. Paint). Was ich verschieben will ist immer ein schwarzer Kreis, in verschiedenen Größen.
Hat da jemand ne Ahnung wie das gehen könnte?
Was ich bisher hab machen können ist eine andere pbox mit eben so einem Kreis rumzuverschieben, aber alles in der ersten pbox was unter die andere gerät verschwindet halt, weil pbox2 die erste verdeckt und windows blöderweise alles aus dem speicher drunter löscht.
Kann man das verhindern? also windows anweisen den inhalt der pbox1 im speicher zu behalten?

oder hat einer von euch eine andere Anregung wie ich das ganze bewerkstelligen kann?

im großen uns ganzen gehts halt darum, dass ich einer picturebox voller schwarzer Kreise habe und jeweils einen davon anklicken und verschieben will, ohne das alle milisekunde die pbox neu gezeichnet werden muss (was bei 1000+ kreisen schon heftiges flackern hervorrufen würde).

gruß
jan
 
Wüßte nicht das sowas in einer PictureBox möglich ist... würde mal nach GDI+ suchen, da ist es sicherlich möglich...

Gruss

MFC OpenGL
 
Ist so ziemlich das gleiche:

Hier


MfG Alexander12
Nicht ganz, auserdem:
Was ich bisher hab machen können ist eine andere pbox mit eben so einem Kreis rumzuverschieben,

Also kann er schon mit dem Bild "Fahren", was also nicht sein Problem ist, sondern das "zerteilen" einer bestehenden Picturebox, und dann die einzelnen Teile handhaben, sprich eine Picturebox in viele kleine Pictureboxis verwandeln :)
Ich mach jetzt "Feier"-Abend :) cya monday
 
zioProduct hat gesagt.:
Nicht ganz, auserdem:


Also kann er schon mit dem Bild "Fahren", was also nicht sein Problem ist, sondern das "zerteilen" einer bestehenden Picturebox, und dann die einzelnen Teile handhaben, sprich eine Picturebox in viele kleine Pictureboxis verwandeln :)
Ich mach jetzt "Feier"-Abend :) cya monday

hmm, also recht hast dass das vom alex nicht das ist was ich suche. aber ich versteh nicht was mir das zerteilen der pbox bringen soll.

übrigens hab ich Wrox' artikel schon gelesen, deshalhb weiss ich überhaupt warum das gezeichnete verschwindet, wenn es verdeckt wird. aber entweder hab ichs überlese oder es steht nicht drin, wie man das ändern kann.
 
Hallo JRKleemann!
JRKleemann hat gesagt.:
übrigens hab ich Wrox' artikel schon gelesen, deshalhb weiss ich überhaupt warum das gezeichnete verschwindet, wenn es verdeckt wird. aber entweder hab ichs überlese oder es steht nicht drin, wie man das ändern kann.
Du zeichnest von aussen her.
Woher soll dein Control wissen das es deine Grafiken mit zeichnen soll,
wenn es sich grad selber zeichnet?
Du musst dafür von dem Control ableiten, OnPaint überschreiben und darin zeichen.
[thread=218953]Frage zu GDI+ Speichern + Anklickbarkeit - Thread[/thread]

MfG, cosmo
 
cosmochaosmaker hat gesagt.:
Hallo JRKleemann!Du zeichnest von aussen her.
Woher soll dein Control wissen das es deine Grafiken mit zeichnen soll,
wenn es sich grad selber zeichnet?
Du musst dafür von dem Control ableiten, OnPaint überschreiben und darin zeichen.
[thread=218953]Frage zu GDI+ Speichern + Anklickbarkeit - Thread[/thread]

MfG, cosmo

das ist ja richtig, nur wenn ich das so mache hab ich tierisches flackern.
wenn da mehrere tausende bohrungen (es geht um lochscheiben) gezeichnet werden, dauert allein das zeichnen schon über ne sekunde. aber das müßte so 25mal die sekunde passieren (damit das menschliche auge das nicht bemerkt).

mach mal paint auf und zieh ein paar gefüllte rechtecke. da ist kein flackern, kein neuzeichnen. das gezeichnete bleibt einfach im speicher, ohne gelöscht zu werden. genau diese funktionalität brauch ich. einfach nur neu zeichnen bringt mir nichts.

anderes beispiel ist der mauszeiger selber, wenn du damit über das gezeichnete gehst verschwindet das ja auch nicht.
 
Gegen das Flackern hilft das Einschalten des DoubleBuffering
Code:
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );
SetStyle( ControlStyles.DoubleBuffer, true );
Zudem könntest du es erst dann neu zeichnen lassen, wenn die Vergrößerung/Verkleinerung freigegeben wird. Sprich keine Neuzeichnung, solange der User noch die gewünschte Größe einstellt.
 
Norbert Eder hat gesagt.:
Gegen das Flackern hilft das Einschalten des DoubleBuffering
Code:
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );
SetStyle( ControlStyles.DoubleBuffer, true );
Zudem könntest du es erst dann neu zeichnen lassen, wenn die Vergrößerung/Verkleinerung freigegeben wird. Sprich keine Neuzeichnung, solange der User noch die gewünschte Größe einstellt.


du meinst wahrscheinlich das markieren eines bereichs, nicht?
sorry, hab wohl den titel etwas falsch gewählt. die bohrungen werden direkt angewählt, also sozusagen per drag&drop

bisher läuft es so dass ich die anklicke, und dann den mauszeigetr bewege und die entfernung berechne, und erst am ende wird die bohrung versetzt. nur hat man dabei recht wenig kontrolle.

hab bei bei thecodeproject auch was gefunden zum thema doublebuffering. werde aber deinen tipp auch mal probieren. vielleicht krieg ich damit das restflackern ja weg :)

gruß
jan
 
Zurück