[C#]Windows Form - Bildteile farbig Markieren

07/23/2013 21:03 GodHacker#1
Hallo,
ich würde gerne wissen, ob (und wenn ja, dann wie) es möglich ist in einer Windows Form einzelne Teile eines Bildes, welches in einer PictureBox ist, dazu zu bringen, dass sie die Farbe ändern, wenn man mit der Maus über diese geht und diese Teile des Bilden dann auch wie einen Button anklicken kann, damit eine Aktion ausgeführt wird.
Die Teile des Bildes haben hierbei immer eine andere Form.
Es ist mir egal, ob ich noch ein weiteres Steuerelement hinzufüge, welches sich ändert und anklickbar ist (es soll nur gehen).

Beispiel:
[Normal]
[Maus über der Fläche]

Es sollte am besten nur die Umrandung (und ggf. ein paar Ramenlinien) gefärbt werden, so wie in dem Beispiel.



Ich bin für jede hilfreiche Antwort dankbar.
07/23/2013 21:29 Ludder231#2
Ich bin mir nicht sicher aber geht das nicht wie bei Schrift auch über Color und Forecolor etc? Da gibts bestimmt iwas mit Border oderso. brauchte das noch nie, aber ich schätze mal...
07/23/2013 21:43 Kraizy​#3
Keine Ahnung obs eine bessere Möglichkeit gibt, aber was mir auf die Schnelle einfallen würde:
du speicherst von jeden Buttons (also zb Home-Button, Menu-Button, ...) die Position, und prüfst ob die Maus in diesem Bereich ist. Falls ja, einfach die Umrandung mit GDI übermalen.
07/23/2013 22:17 Else#4
Wie wäre es mit MouseHover? Ansonsten musst du, wie bereits erwähnt, die Pixel selbst rausrechnen. (Position; je Breite, Höhe)
07/23/2013 22:48 GodHacker#5
Ok, das klingt schon einmal gut.
Wie mache ich dies nun in der Praxis? Hat jemand eine Anleitung (Links, Codebeispiele, etc.) für mich?
07/23/2013 23:00 Kraizy​#6
Mausposition abfragen: MouseMove_Event
GDI: [Only registered and activated users can see links. Click Here To Register...]

Pseudo-Code:
PHP Code:
if mouse.button.x andalso mouse.< (button.button.widththen //wenn maus innerhalb des button bereichs..kannst aber auch einfach zb if mouse.x > 20 andalso mouse.x < 40 then nehmen. angenommen dein Button wäre jz 20px breit und beginnt bei X:20 auf deinem Bild (nur ein Beispiel). das ganze natürlich auch mit der Y Koordinate. 
   
gdi.drawlines
else
   
gdi.remove
end 
if 
Falls ich grad komplette scheiße schreibe, dann sry, bin grad ziemlich müde :>
07/23/2013 23:45 GodHacker#7
Quote:
Originally Posted by Kraizy​ View Post
Mausposition abfragen: MouseMove_Event
GDI: [Only registered and activated users can see links. Click Here To Register...]

Pseudo-Code:
PHP Code:
if mouse.button.x andalso mouse.< (button.button.widththen //wenn maus innerhalb des button bereichs..kannst aber auch einfach zb if mouse.x > 20 andalso mouse.x < 40 then nehmen. angenommen dein Button wäre jz 20px breit und beginnt bei X:20 auf deinem Bild (nur ein Beispiel). das ganze natürlich auch mit der Y Koordinate. 
   
gdi.drawlines
else
   
gdi.remove
end 
if 
Falls ich grad komplette scheiße schreibe, dann sry, bin grad ziemlich müde :>
Also kann ich auch einfach beim Klicken abfragen, an welcher Position es war und somit dann die entsprechende Funktion ausführen, oder muss ich irgendwie noch über dem Bild die Buttons einbauen (wenn ja, wie mache ich es, dass diese dann genau auf diesen Formen sind)?

PS: Das Bild ist eine *.png Datei (in einer PictureBox, wie ich schon geschrieben habe).
07/23/2013 23:54 Kraizy​#8
Es gibt ja auch das MouseClick_Event, wo du ebenfalls die Mausposition abrufen kannst (e.X; e.Y). Dann einfach prüfen ob die Position der Maus im Bereich des jeweiligen Buttons liegt und wenn ja, kannst du deine Funktion ausführen lassen.
07/24/2013 12:45 Sedrika#9
MouseHover Event und ggf. die OnPaint/Paint funktion umschreiben.
Mit XYZ.PointToClient(Cursor.Position) kannst du die aktuelle Position der Maus auf dem Objekt abfragen.
07/24/2013 21:46 GodHacker#10
Danke, ich werde es mal probieren.
Wenn noch jemand etwas weiß oder mir Beispiele (oder Links) geben kann, dann währe ich dankbar, wenn ihr diese Postet.
07/27/2013 16:23 Easy-Emu#11
Du solltest von Windows Forms auf WPF/XAML umsteigen (Windows Forms sind total veraltet), wenn das ganze nur auf Windows laufen muss. Dort kannst du solche Teile auch sehr gut per Patch zeichnen lassen und dort die Farben angeben.

Ansonsten kannst du auch mit transparenten Bildern arbeiten und beim Hover/Enter Event die Hintergrundfarbe ändern, wobei das Arbeiten mit solchen dingen, wie schon gesagt um einiges besser mit WPF klappt,
07/29/2013 23:40 GodHacker#12
Quote:
Originally Posted by Easy-Emu View Post
Du solltest von Windows Forms auf WPF/XAML umsteigen (Windows Forms sind total veraltet), wenn das ganze nur auf Windows laufen muss. Dort kannst du solche Teile auch sehr gut per Patch zeichnen lassen und dort die Farben angeben.

Ansonsten kannst du auch mit transparenten Bildern arbeiten und beim Hover/Enter Event die Hintergrundfarbe ändern, wobei das Arbeiten mit solchen dingen, wie schon gesagt um einiges besser mit WPF klappt,
Sehr toll... würde ich gerne machen, aber ich habe noch gar nichts mit WPF gemacht. Erklär du mir jetzt einmal, wie ich eine WPF-Anwendung gestalte, etc.
Hat schon einen Sinn, wenn ich nach Windows Forms frage und nicht nach WPF bzw. allgemein.
Hast du noch so tolle Ideen?


(Sry, aber wenn ich extra Windows Forms schreibe, dann sollte man sich wohl denken, dass dies seinen Grund hat und dann nicht mit solchen dämlichen Kommentaren um die Ecke kommen)
07/30/2013 12:33 Easy-Emu#13
Na dann ok. Bei dieser Antwort empfehle ich dir: Lass es am besten ganz sein und hör auf einem damit zu belästigen.
07/30/2013 14:21 taigatenshi#14
Hier nen einfacher vorschlag mit winforms

du legst ein weiteres bild (das selbe nur in farbe oder ähnliches)
bei einem mousover darüber
dann färbt sich das bild auch wenn du mit der maus drüber gehst
08/01/2013 00:01 GodHacker#15
Quote:
Originally Posted by taigatenshi View Post
Hier nen einfacher vorschlag mit winforms

du legst ein weiteres bild (das selbe nur in farbe oder ähnliches)
bei einem mousover darüber
dann färbt sich das bild auch wenn du mit der maus drüber gehst
Wahrscheinlich nicht das beste, aber würde glaube ich gehen. Danke!


Quote:
Originally Posted by Easy-Emu View Post
Na dann ok. Bei dieser Antwort empfehle ich dir: Lass es am besten ganz sein und hör auf einem damit zu belästigen.
Wenn du mit solchen Dingen kommst, wenn jemand speziell nach etwas anderem Fragt, dann musst du mit solchen Antworten rechnen. Wie gesagt, hat so etwas schon seinen Sinn, wenn man es schreibt.