Entwickler-Ecke
WinForms - Parent durchscheinen lassen
JayK - So 28.05.06 21:47
Titel: Parent durchscheinen lassen
Hallo,
ich versuche gerade so etwas wie einen SpeedButton zu programmieren, der dasselbe Design wie ein ToolStripButton haben soll.
Die Dinger sind normalerweise transparent - bis auf den Glyph natürlich - und der Hintergrund (der TB-Gradient) scheint durch. Wenn man mit der Maus drüberfährt gibt es einen soliden Rand und eine halbtransparente Füllung. Beim MouseDown ne dunklere Füllung und Rand.
Die Färbungen sind alles kein Problem, so nach und nach kriegt man die raus, was ich nicht hinbekomme ist die Tranzparenz.
Wenn ich einfach garnüscht zeichne, dann bleibt der Hover-effekt nach dem MouseLeave logischerweise bestehen. Zeichne ich mit FillRectangle und Color.Transparent drüber, isses derselbe Effekt.
Ich müsste quasi das Parent Control an der Stelle drüberzeichnen lassen und dann mein Image draufbringen. Aber wie macht man das?
Code bisher:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| protected override void OnPaint(PaintEventArgs pevent) { if (mouseDown || mouseOver) { if (mouseDown) { baseBackground = new SolidBrush(SystemColors.ControlDark); } else { Color c = Color.FromArgb(128, SystemColors.Highlight.R, SystemColors.Highlight.G, SystemColors.Highlight.B); baseBackground = new SolidBrush(c); } pevent.Graphics.FillRectangle(baseBackground, ClientRectangle); pevent.Graphics.DrawRectangle(new Pen(SystemColors.Highlight), new Rectangle(0, 0, ClientSize.Width - 1, ClientSize.Height - 1)); } if (Image != null) { pevent.Graphics.DrawImage(Image, new Point(ClientSize.Width / 2 - Image.Size.Width / 2, ClientSize.Height / 2 - Image.Height / 2)); } pevent.Graphics.Flush(); } |
Vielen Dank für Hilfe
JayK
JayK - Do 08.06.06 21:23
Ich hab immer noch keine Idee :(
Christian S. - Fr 09.06.06 15:07
Hallo!
Irgendwie kann ich mir das gerade nicht vorstellen. Könntest Du das Projekt (Quellcode) eventuell einmal anhängen, dann könnte man auch noch ein bisschen mit rumspielen um Lösungen zu finden.
Grüße
Christian
JayK - So 11.06.06 18:41
Quellcode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| class MyButton : Button {
protected Brush baseBackground = null; protected bool mouseOver, mouseDown = false;
protected override void OnPaint(PaintEventArgs pevent) { if (mouseDown || mouseOver) { if (mouseDown) { baseBackground = new SolidBrush(SystemColors.ControlDark); } else { Color c = Color.FromArgb(128, SystemColors.Highlight.R, SystemColors.Highlight.G, SystemColors.Highlight.B); baseBackground = new SolidBrush(c); } pevent.Graphics.FillRectangle(baseBackground, ClientRectangle); pevent.Graphics.DrawRectangle(new Pen(SystemColors.Highlight), new Rectangle(0, 0, ClientSize.Width - 1, ClientSize.Height - 1)); } else { } if (Image != null) { pevent.Graphics.DrawImage(Image, new Point(ClientSize.Width / 2 - Image.Size.Width / 2, ClientSize.Height / 2 - Image.Height / 2)); }
}
} |
|EDIT: Abgeleitete Klasse vegessen mitzukopieren
JayK - Mi 21.06.06 15:04
Immer noch nicht vorstellbar?
Christian S. - Mi 21.06.06 15:08
Vorstellbar schon, auch wenn man dem Code oben noch ein paar Dinge hinzufügen muss, damit er überhaupt was tut. Allerdings habe ich auch keine Lösung finden können.
JayK - Mi 21.06.06 15:17
Christian S. hat folgendes geschrieben: |
auch wenn man dem Code oben noch ein paar Dinge hinzufügen muss |
:shock: Die da wären? (außer die Events, wo mouseDown etc gesetzt werden)
Christian S. hat folgendes geschrieben: |
Allerdings habe ich auch keine Lösung finden können. |
Schade :(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!