Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » C# Transparency Key » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C# Transparency Key
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

C# Transparency Key Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
ich habe letztens eine Windows Form programmiert in der ich keinen Rahmen verwende und in der ich den Hintergrund mit der Transperency Key- Eigenschaft transparent mache. Egal was ich aber mache bleibt der Rand immer verpixelt (siehe Bild). Ich habe bereits nach bekannten Bugs dieser Funktion gesucht aber das hat mir nicht wirklich weitergeholfen. Und ansonsten habe ich keine Idee mehr nach was ich noch Suchen könnte.

Weiß jemand vielleicht womit das zusammenhängt?

smile

Mfg
InformaTiger

InformaTiger hat dieses Bild (verkleinerte Version) angehängt:
infoboard.png



__________________
Why do Java developers wear glasses? Because they can't C#
07.03.2014 19:08 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Im angefügten Bild haben die grauen Pixel am Rand verschiedene Farbwerte. Kann es sein, dass du genau einen Farbwert transparent machen willst und die Ränder deiner Vorlage nicht "sauber" sind?

Falls es daran nicht liegt, brauchen wir schon etwas mehr (Orginalbild und etwas Quelltext)

__________________
Syntax Highlighting fürs Board (Link)
08.03.2014 11:45 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ok, ums genauer zu machen:

die im Bild abgebildete Symbolleiste ergibt sich wie folgt:

code:
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:
private void Main_Paint(object sender, PaintEventArgs e)
        {
            // es wird nur gezeichnet wenn sich das Programm an der obersten Position befindet
            if (this.AutoScrollPosition.Y == 0)
            {
                // Rendering Modus wird auf AntiAlias gesetzt
                e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

                // der Grafikpfad zum Zeichnen des Infobereichs wird erstellt
                GraphicsPath menueDrawer = new GraphicsPath();
                menueDrawer.StartFigure();
                menueDrawer.AddBezier(new Point(0, 0), new Point(20, 5), new Point(20, 60), new Point(45, 60));
                menueDrawer.AddLine(new Point(45, 60), new Point(220, 60));
                menueDrawer.AddBezier(new Point(220, 60), new Point(240, 55), new Point(240, 0), new Point(265, 0));
                menueDrawer.CloseFigure();

                // Zweifarbig? Ja/Nein
                if (bUseTwoColors)
                {
                    e.Graphics.FillPath(new LinearGradientBrush(new Rectangle(0, 0, 265, 60), Color.White, Color.Black, LinearGradientMode.ForwardDiagonal), menueDrawer);
                    e.Graphics.DrawPath(new Pen(new LinearGradientBrush(new Point(0, 0), new Point(265, 0), Color.White, Color.Black)), menueDrawer);
                }
                else
                {
                    e.Graphics.FillPath(new SolidBrush(Color.Gray), menueDrawer);
                    e.Graphics.DrawPath(new Pen(new SolidBrush(Color.DarkGray)), menueDrawer);
                }
                menueDrawer.Dispose();
            }
        }


Und der Transparency Key ist so definiert:

code:
1:
2:
// die Form wird transparent gemacht
this.TransparencyKey = Color.FromKnownColor(KnownColor.Control);

wobei eben die Hintergrundfarbe normal (also Control) belassen wird.

Was eventuell noch sein könnte:
ich zeichne hier ja auch einen Rand, mit der Farbe Dunkelgrau bzw. Schwarz/Weiß kann sein das sich das mit dem Transparency Key nicht verträgt?

Mfg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
08.03.2014 19:47 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ist bUseTwoColors true oder false?
TransparencyKey macht nur eine Farbe durchsichtig, LinearGradientBrush macht dir aber mehrere Farben an den Rand, das verträgt sich, denke ich, nicht.

Wenn du dein Projekt hochlädtst (oder die wesentlichen Teile, aber bitte soviel, dass ich es direkt ausführen kann), kann ich mal drübergucken. Ich kann dir aber nichts versprechen, habe selbst noch nicht mit so etwas gearbeitet.

PS: .NET 4.5 hat ja einiges an Funktionalität hinzugefügt geschockt

__________________
Syntax Highlighting fürs Board (Link)
08.03.2014 20:42 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ob bUseTwoColors true oder false ist entscheidet der User indem er die Einstellungen ändert sprich zu beginn werden diese boolean-Werte aus der config.ini Datei gelesen.

code:
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:
36:
37:
38:
39:
40:
41:
            try
            {
                // Konfigurationsdaten werden aus der config-datei gelesen
                StreamReader sr = new StreamReader("config.ini");
                List<string> config = new List<string>();
                while (!sr.EndOfStream)
                {
                    config.Add(sr.ReadLine());
                }
                sr.Close();

                // es wird in die jeweilige Variable aufgeteilt
                for (int i = 0; i < config.Count; i++)
                {
                    string[] temp = config[i].Split('=');

                    switch (i)
                    {
                        case 0:
                            {
                                bHideTaskbar = Convert.ToBoolean(temp[1]);
                                break;
                            }
                        case 1:
                            {
                                bTopMost = Convert.ToBoolean(temp[1]);
                                break;
                            }
                        case 2:
                            {
                                bUseTwoColors = Convert.ToBoolean(temp[1]);
                                break;
                            }
                    }
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


für den Rest habe ich dir das gesamte Projekt in einer Email geschickt.

Vielen Dank inzwischen smile

Mfg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
09.03.2014 11:14 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » C# Transparency Key