Entwickler-Ecke

WinForms - Hintergrund eingrauen/deaktivieren


GURKE deluxe - Mo 01.11.10 20:46
Titel: Hintergrund eingrauen/deaktivieren
Hallo,
Ich möchte bei einem Klick auf ein Button eine PictureBox anzeigen lassen und nebenbei den Hintergrund "runterdimmen" lassen. Das Anzeigen ist natürlich kein Problem, aber wie bekomme ich es hin, das der Hintergrund so gräulich wird damit man das Bild besser erkennt?

Ich dachte da an ein Panel in der Größe der Form, allerdings kenne ich nur durchsichtig und undurchsichtig, aber nichts dazwischen.
Sonst viele mir noch ein, eine zweite PictureBox zu nehmen. Die momentan Ansicht zwischenzuspeichern ("Druck-Taste") und dann dort anzeigen zu lassen, wobei ich bei jedem Pixel noch die RGB Werte gleichmäßig Richtung 255 verschiebe.
Allerdings bin ich von dieser Idee nicht wirklich überzeugt.

Gibt es für sowas keine einfache Lösung?

Gruß
Julian


Th69 - Di 02.11.10 12:45

Hallo Julian,

bei http://www.c-sharp-forum.de/viewtopic.php?t=101795 habe ich dafür die LowLevelLibrary empfohlen.
Bei dir könnte dann "new GrayScale().Execute(bitmap);" zum Einsatz kommen...

Du willst aber nur deine eigene Form abdimmen oder den ganzen Desktop (wie bei "Computer ausschalten" unter WinXP und höher)?


GURKE deluxe - Di 02.11.10 20:11

Hallo,
Ich habe mir das ganze mal gedownloadet, allerdings ist die beste Funktion die meiner am nächsten kommt, die Farbe->Grau "Machung". Und das passt ja auch nicht so gut oder habe ich da was übersehen? Gibt es denn nicht vll. die Möglichkeit eine PictureBox zu 50% oder so durchsichtig machen?

Gruß
GURKE


Th69 - Mi 03.11.10 21:12

Ich habe zufällig diesen Link gefunden:
Bildschirm um Dialog herum abdunkeln [http://www.mycsharp.de/wbb2/thread.php?threadid=43292]
Vllt. ist das passender für dich, kannst es ja auch dann abändern, da der Source-Code dabei ist...


jaenicke - Do 04.11.10 07:51

Es gibt in der Windows API die Funktion AlphaBlend. Diese zeigt eine Bitmap semitransparent an:
http://msdn.microsoft.com/en-us/library/dd183351(VS.85).aspx


GURKE deluxe - Do 04.11.10 17:27

Hallo,
Danke für die Antworten!
@Th69:
Ich habe den Code mal bei mir eingefügt, aber wie führe ich diesen nun aus? :D

@jaenicke:
Habe mir Alphableding mal angschaut. Kann es sein, das .Net 4.0 das nicht mehr unterstützt? Irgendwie findet man darüber nur sehr weniges. Hast du sonst evtl. mal ein Codebeispiel?


Th69 - Do 04.11.10 17:51

Du hast die Beschreibung dazu gelesen?
Zitat:

ShowShadow:
Aktiviert den Abdunklungs-/Ausgrauungsvorgang


Da diese Klasse abstrakt ist, mußt du also dein Formular davon erben lassen:

C#-Quelltext
1:
2:
3:
4:
class YourForm : DialogShadowTopForm
{

}

Und deine Form anschließend dann mit Show() oder ShowDialog() aufrufen (also nach ShowShadow()).

Beachte aber auch die Anmerkungen der anderen Beiträge, z.B. zu CloseShadow().


GURKE deluxe - Fr 05.11.10 15:49

Hallo Th69,
Ich habe noch nie mit abstrakten Klassen gearbeitet. Was muss ich genau machen um die Klasse aufrufen zu können?