Fragensteller
Umsetzung einer Statusleiste: Problem bei OnPaint

Frage
-
Hallo liebe Community,
ich brauche mal Rat von den vielen Profis hier. Ich möchte eine Infoleiste, ähnlich wie sie beim Internet Explorer oder Firefox gibt, programmieren. Das ist eine Leiste, die von oben runterscrollt und ein Bild und ein Text anzeigt (siehe bild)
Die Animation und die gesamte Logik habe ich schon fertig und funktioniert super. Ursprünglich hatte ich es im OnPaint der BasisForm gezeichnet. Im Einsatz zeigte sich jedoch das Problem in diesem Konzept: Man hat nicht immer oben eine freie Stelle, so dass eventuell vorhandene Controls meine InfoLeiste überdecken. Das sieht dann so aus:
Mein nächster Gedanke war, dass ich ein transparentes Control erstelle und dessen OnPaint überschreibe. Jedoch gibt es unter WindowsForms keine echte Transparenz für Controls. Ich musste also umständlich was coden, damit ich ich doch sowas wie eine Transparenz hin bekomme. Dadurch wirkt die Animation aber nicht mehr so schön (mikro Ruckler) und ich muss mein transparentes Control über die eventuell vorhandenen legen. Es funktioniert zwar, aber schön ist was anderes. Vor allem, wenn ich im Designer die Controls verschieben möchte, lande ich mit einem klick beim drüber liegendem transparentem Control. Alles doof.
Da frage ich mich, wie es Microsoft mit der Combobox macht. Diese klappt auch eine Grafik auf und überdeckt dabei mögliche andere Controls. Und das Ganze ohne vorher mit irgendwas transparentem den Platz vorzubelegen.
Kann mir jemand Ideen oder gar Lösungsansätze für mein Problem geben? Vielen Dank!
Alle Antworten
-
Hallo Manuel,
bei der ComboBox wird ein eigenes Fenster (eine ListBox) aufgemacht, siehe COMBOBOXINFO
Wenn Du das Benachrichtigungsfenster direkt im Formular als Steuerelement einbetten willst,
so wäre eine Möglichkeit dafür ein Panel zu verwenden und dieses einzublenden.
Ein ähnliches Vorgehen findet man beim ToolStripContainer, der für die Toolstrips an den Seiten "Platzhalter" bereitstellt, in denen sie platziert werden können.Der andere Weg wäre ein eigenes Fenster zu verwenden, was dann "eingepasst" wird.
Dort ginge es besser mit der Transparenz über WS_EX_LAYERED - was sinnigerweise erst in Windows 3.8 für Child Windows Transparenz erlaubt (wo man die Transparenz fast ganz eliminiert hat).Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. September 2012 11:51
- Tag als Antwort aufgehoben Robert BreitenhoferModerator Donnerstag, 27. September 2012 12:09
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 27. September 2012 12:09
-
Hallo Manuel Kobloch,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Bin leider noch nicht dazu gekommen es auszuprobieren, da ich privat gerade kaum zum programmieren komme.
Hallo Manuel Knobloch,
Ok, teste es und melde Dich dann hier mit dem Ergebnis wie es funktioniert hat, denn dann profitieren unter Umständen andere mit dem gleichen Problem davon.
*********************************************************************
Ich möchte Dich bitte folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten. Vielen Dank.
Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Postings anderer Beantworter bewerten.
Hier dazu die wichtigsten Anhaltspunkte aus den Forenregelnund FAQs.Lösungsbeiträge als „Die Antwort“ markieren
Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen. [Quelle: Forenregeln]Bitte markiere den/die Beiträge als Antwort, die dir geholfen haben, dein Problem zu lösen. Das ist zum einen eine Anerkennung für die Autoren dieser Beiträge, zum anderen hilft es zukünftigen Lesern, sich in diesem Thread besser zu orientieren und Antworten auf ihre Fragen schneller zu identifizieren.
Wie zeige ich an, dass meine Frage durch einen Beitrag beantwortet wurde?
Wie bewerte ich einen Beitrag als hilfreich? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben. [Quelle: Häufig gestellte Fragen]Danke und Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.