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

Informatiker Board » Themengebiete » Praktische Informatik » C# Transparency Key » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
InformaTiger

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
eulerscheZahl

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
InformaTiger

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
eulerscheZahl

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)
InformaTiger C# Transparency Key

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