-
22.10.05 19:00 #1
Hi,
Folgendes Problem:
Ich zeichne ein Diagramm in einem Panel und habe die größe dessen auf die Fenstergröße verknüpft.
Beim ändern der Fenstergröße wird das Diagramm durch meine Resize Klasse neu gezeichnet. Das ganze wirkt aber sehr störend, da es extrem Flackert.
2.Problem:
Ich biete die Möglichkeit in das Diagram zu zoomen, dazu zeichne ich ein Rechteck vom MouseDown-Punkt zum MouseMove-Punkt. Das Rechteck soll also jedesmal wieder neu gezeichnet werden. Allerdings das Diagramm kann gleich bleiben damit es nicht flackert.
Hat jemand eine Idee wie man dies optimieren kann?
Danke!
lg MichiGeändert von MichiStroi (22.10.05 um 19:13 Uhr)
Don't hang and loose but run and win!
-
22.10.05 22:08 #2
Hi.
Also gegen flickern stell Ich immer den DoubleBuffer auf true, wenn Ich was mit GDI+ mach...
MfG Alexander12
-
23.10.05 10:55 #3
Hi,
kann ich das auch für ein Panel einstellen?
Denn...
...bewirkt bei mir gar nichts.Code :1 2 3 4 5 6 7 8 9 10
[C#] public void EnableDoubleBuffering() { // Set the value of the double-buffering style bits to true. this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); this.UpdateStyles(); }
Schönen Dank!
lg MichiDon't hang and loose but run and win!
-
Damit DoubleBuffer für ein Panel funktioniert, müsstest du von Panel eine Klasse ableiten, dort die entsprechenden DoubleBuffer etc. Einträge vornehmen und dann das von dir erstellte abgeleitete Panel verwenden.
Eine andere Möglichkeit besteht darin, den Beginn des Resizes, sowie das Ende des Resizes abzufangen und in der Zwischenzeit die Neuzeichnung deines Diagramms zu verhindern. D.h. erst, wenn der Resize abgeschlossen ist, wird gezeichnet.
-
23.10.05 14:29 #5
Hi,
Danke, das Erste ist für meine Kenntnisse glaub ich etwas zuviel, aber das Zweite klingt nach einer guten und einfachen Lösung für mein Problem.
Kann ich eigentlich irgendetwas wie zb. ein Panel auch transparent machen, sodass ich mein Auswahlrechteck über dem eigentlichen Diagramm zeichnen kann ohne dieses Flackern durch die Neuzeichnung meines Diagrammes zu erhalten?
Schönen Dank!
lg MichiDon't hang and loose but run and win!
-
23.10.05 14:51 #6
Hi.
Also Formulare kannst mit dem Opacity-Property trnsparent machen, für Panel gibts das - meines wissens - nicht, lasse mich aber auch gerne eines besseren Belehren.
MfG Alexander12
-
Opacity hilft das wenig weiter. Denn bei 100% Druchsichtigkeit sieht man nix mehr

Aber:
Du kannst die BackgroundColor auf "transparent" setzen. Zu finden im Register Web.Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
23.10.05 18:35 #8
hast du das mit transparent schon getestet?
Ich erhalte nämlich dennoch ein graues Fenster anstelle transparent.
lg MichiDon't hang and loose but run and win!
-
wo hast du denn Transparent gesetzt? Bei der Form oder beim Panel?
Bei der Form ist das nicht möglich, macht auch keinen Sinn. Du kannst Transparent nur bei Controls nutzen.Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
23.10.05 20:19 #10
Schon klar...
Gibt's da eine andere Alternative? Wenn man in #Develop ein Rechteck aufzieht (mit dem Auswahlwerkzeug) dann Flackert ja auch nur das Rechteck und sonst nichts.
Wie geht das denn dort?
lg MichiDon't hang and loose but run and win!
-
Hallo Michi!
Erstell eine Klasse die von Panel erbt und ruf deine Methode EnableDoubleBuffering() darin im Kontruktor auf.
Dann musst Du noch den Auswahlrahmen deines Panels zeichnen.
Dann zeichnest Du dieses erweiterte Panel, so wie Du es schon sagtest, über deine GrafikNach dem MouseUp hast dann deine Koordinaten zum zoomen.dazu zeichne ich ein Rechteck vom MouseDown-Punkt zum MouseMove-Punkt.
Bilder Zoomen ? - Thread
Ansonsten auch mal auf the Code Project schauen.
Btw. Frage zu GDI+ Speichern + Anklickbarkeit - Thread
Da findest noch einen interessanten Link zu GDI+
MfG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
26.10.05 10:39 #12
Hi,
Erstmals Danke für deine Tipps!
Ich hab das Steuerelement geerbt und ein neues mit dem DubbleBuffer im Konstruktur erstellt. (http://msdn.microsoft.com/library/de...ithVisualC.asp)
Jetzt verschwindet das Steuerelement jedesmal wenn es fertiggezeichnet ist. Ist das das Ziel dessen?
Ich hab auch eine andere Anleitung ausprobiert, wo man einem Steuerelement einen transparenten Hintergrund verpassen kann. http://msdn.microsoft.com/library/de...ithVisualC.asp
Aber da scheint ledeglich die hintergrundfarbe des dahinterliegenden Steuerelement durch, nicht aber meine gezeichneten Striche.
lg
MichiDon't hang and loose but run and win!
-
Wenn Du UserPaint eingestellt hast und selber nichts zeichenst, dann ja.
Zitat von MichiStroi

Oder meinst mit Fertigzeichnen das Du schon was reingemalt hast und es dann verschwindet?
Das war immer noch der gleiche Link.
Zitat von MichiStroi

Zeichne die Striche mal ohne UserPaint hinein. Wenn Du sie dann auch nicht siehst,
hast sie ausserhalb des Rectangles gezeichnet.
Wenn Du sie dann aber auf einmal sehen solltest, hab ich keine Ahnung.
Btw. Was zu SetStyle() - Thread
MfG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
28.10.05 14:58 #14
- Registriert seit
- Mar 2005
- Beiträge
- 147
Halllo!
Also, ich mache das mit dem Me.DoubleBuffered, und zwar so:.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#Region " Vom Windows Form Designer generierter Code " Public Sub New() MyBase.New() ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. InitializeComponent() Me.DoubleBuffered = True '======================= MyColor = Color.Silver ' Add any initialization after the InitializeComponent() call. End Sub
Gruß
Christoph
-
31.10.05 22:23 #15
Hi,
naja, schon langsam bekomm ich ja einen Überblick...aber...
benötgt laut MSDN diese beiden Werte gesetzt auf "true";Code :1
this.SetStyle(ControlStyles.DoublePuffer,true);
Code :1 2
this.SetStyle(ControlStyles.AllPaintingInWmPaint,true); this.SetStyle(ControlStyles.UserPaint,true);
allerdings spielt da "AllPaintingInWmPaint" nicht mit. Sobald dieser auf true gesetzt wird, verschwindet das Diagramm nach dem neuzeichnen.
Happy Halloween
MichiDon't hang and loose but run and win!
Ähnliche Themen
-
Automatischen stage-resize verhindern
Von cycovery im Forum Flash PlattformAntworten: 2Letzter Beitrag: 09.09.08, 17:57 -
JFrame - flackern verhindern
Von Billie im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 24.05.05, 13:03 -
"flackern" bei refresh verhindern
Von derAlex im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 24.11.04, 17:17 -
flackern verhindern bei IE
Von hemorrhoid im Forum PHPAntworten: 3Letzter Beitrag: 04.07.04, 23:42 -
Bei resize des Fensters auch resize der Controls
Von SixDark im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 25.11.03, 10:27



1Danke

Zitieren

Login





