C# Nichtrechteckige Formulare

Registriert
Dez. 2009
Beiträge
213
Auf msdn.microsoft.com findet man eine Anleitung für nichtrechteckige Formulare.
Doch diese sind dann eigentlich auch rechteckig, nur eben an einigen stellen transparent.
Wie kann ich das so erweitern, dass sich Klicks auf die transparente Fläche auf Hintergrundprogramme (zB. Desktop) beziehen?
 
wo genau hast du das her? kannst du link geben? Vielleicht klappt es auch nur unter Vista und höher.
 
indem du beim klick schaust, auf welcher Position der Klick stattfand ;) und den klick einfach weitergibst an das OS
 
OK, das findet man also auf:

http://msdn.microsoft.com/de-de/library/6k15y9et.aspx

Aber es ist ja nicht das Problem, das es nicht funktioniert, so wie es dort steht funktioniert es
auch, nur ist das eigentliche Formular immer noch rechteckig.

Die Idee von olampl hört sich gut an, doch wie soll ich die Klickpositionen an das OS weitergeben?
Für Codebeispiele wäre ich dankbar!

Hinweis: Ich verwende Windows XP
 
hmm was ist denn dort nicht verständlich? du sollst einen WinForm projekt erstellen, dann ein Huntergrundbild auflegen lassen. Dein Bild soll genau so sein wie dein Formular. Also wenn du ein Recheckiges Bild hast dann bleibt dein Form rechteckig. Den hintergrund ausblenden lassen. Das wars. Formular beenden brauchst du nicht wirklich, da du mit ALT+F4 das auch machen kannst. diesen button nachzumachen ist aber auch billig.

Wenn du den Sourcecode noch zeigen würdest kann ich vielleicht noch weiterhelfen.

#

Legen Sie die FormBorderStyle-Eigenschaft auf Keine fest.

Dadurch wird die Titelleiste aus dem Formular entfernt. (Gleichzeitig werden die entsprechenden Funktionen der Titelleiste entfernt, einschließlich der Möglichkeit, das Formular zu schließen oder zu verschieben. Diese Unzulänglichkeit wird jedoch im Folgenden durch einzufügenden Code wieder ausgeglichen.)
#

Legen Sie für die BackgroundImage-Eigenschaft des Formulars die zuvor erstellte Bitmapdatei fest. Es ist nicht erforderlich, die Datei dem Projektsystem hinzuzufügen. Dies geschieht automatisch, wenn sie als Hintergrundbild festgelegt wird.

Diese Eigenschaft legt fest, dass das Bitmapbild als Hintergrund des Formulars dient. (Wenn diese Eigenschaft zusammen mit der nachfolgend festgelegten TransparencyKey-Eigenschaft verwendet wird, bestimmt sie die Form des Formulars.)
#

Legen Sie für die TransparencyKey-Eigenschaft die Hintergrundfarbe der Bitmapdatei fest.

Diese Eigenschaft bestimmt, welche Teile des Formulars transparent sein sollen.

ich habe jetzt ein projekt nach der anweisung erstellt und es klappt! da noch ein bild dazu!
 

Anhänge

  • exit.jpg
    exit.jpg
    143 KB · Aufrufe: 127
Zuletzt bearbeitet:
roker002 hat meine Frage wohl nicht verstanden oder sie nicht richtig durchgelesen. Es funktioniert so wie es da steht! Doch TransparencyKey macht entsprechende Stellen nur
durchsichtig. Das bedeutet aber nicht, dass Klicks auf diese Stellen an Hintergrundanwendungen weitergegeben werden.
 
Du willst also das dein Hintergrund auch "wirklich" Transparent und durchklickbar wird? es macht aber glaube ich kein Programm. Das einzige was du machen kannst ist den, Klick an den Parent übergeben. Du musst aber irgendwie regeln wie du den auch verarbeitest. Du kannst ja nicht auf den Desktop Frame (Desktop ist auch nichts anderes als eine Windows Form Anwendung, wo alle kinder des Desktops andere Programme sind) codemässig einfach so zugreifen. Zumindest hat mich das bis jetzt noch garnicht interessiert!

ps:

Ich habe jetzt ausgibig getestet. Meine Klicks werden weitergeleitet. Das Programm wird wirklich zu 100% transparent an den stellen. Hast du das vielleicht selbst ausprobiert oder ist das nur deine aussage?

mein testprogramm liegt bei!
 

Anhänge

  • test.rar
    811,3 KB · Aufrufe: 178
Zuletzt bearbeitet:
@roker
Hab mir dein Programm mal runtergeladen und es klappt nicht, deine From fängt die Klicks auf den Transparenten Bereich ab und das darunter liegende Fenster bekommt keinen Fokus.
Getestet unter WinXP SP3, .NET 3.5 mit neuestem SP.

@TS
Ich glaub mit ner WPF-Anwendung wärst du besser beraten, weil WPF extra für Steuerelemente und Fenster mit beliebiger Form und beliebigem Design entwickelt wurde.
Damit klappt dein Vorhaben dann zu 100%.

Lies dich am besten mal in das Thema ein: Gewusst wie: Erstellen einer WPF-Anwendung in C#
 
@grantig

ja es kann sein dass es unter XP nicht funktioniert. Aber unter Vista und höher klappt es auf jeden fall. Keine Ahnung wieso es jetzt vom Betriebsystem abhängt.
 
Wahrscheinlich weil Vista und 7 ein bisschen anders Rendern als das alte XP.
Vista und 7 beziehen ja auch die GraKa viel mehr mit ein, bei XP macht eigentlich alles der Prozessor.

Nichts desto trotz ist diese Lösung mit der partiell transparenten Form imo nur ein Gefrickel.
Mit WPF funktionierts auch unter XP und es wird einem einiges erleichtert.
 
Kann ja sein, dass es mit WPF - Anwendungen funktioniert, doch da kenne ich mich leider gar nicht aus.
Wenn es ansonsten unter Windows XP nicht funktioniert, muss ich wohl darauf verzichten.
Villeicht fällt irgendjemandem ja doch noch ein, wie man Klicks an andere Anwendungen übergeben kann.
Eine simple Windows-Nachricht mit den entsprechenden Parametern würde ja reichen (zB. 'WM_LBUTTONDOWN').
Hinzu kommt natürlich noch, dass man erst herausfinden muss, welche Anwendung verdeckt ist, bzw. die Zugriffsinstanznummer dieser Anwendung auslesen.
 
Zurück
Oben