Seite 1 von 2

Image Event

Verfasst: 28.06.2009 19:32
von Tur0k
Hallo Community! :allright:

Ich hatte ein Problem mit Transparenten PNG Bilder, was ich nun mit DrawAlphaImage gelöst habe.
Doch wie kann ich ein Event auslösen?

So sieht main.pb aus:

Code: Alles auswählen

Open_Window_0()

Repeat
   Event = WindowEvent()
   Select Event
     Case #PB_Event_CloseWindow
       End
     Case #PB_Event_Gadget
       Select EventGadget()
         Case #MyImage2
           MessageRequester("Hallo","Du hast Knopf 1 gedrückt",0)
       EndSelect
   EndSelect
 ForEver
End
Und so sieht mein DrawAlphaImage Code aus:

Code: Alles auswählen

LoadImage(#MyImage2,"mypicture.png")
      
      StartDrawing(WindowOutput(0))
        DrawAlphaImage(ImageID(#MyImage2),450,5)
      StopDrawing()
Funktioniert nicht :cry:

Danke und Mfg. Tur0k :allright:

Edit: Andere Frage hab ich mal entfernt...

Re: Image Event

Verfasst: 28.06.2009 19:43
von X360 Andy
Und so sieht mein DrawAlphaImage Code aus:

Code: Alles auswählen

LoadImage(#MyImage2,"mypicture.png")
      
      StartDrawing(WindowOutput(0))
        DrawAlphaImage(ImageID(#MyImage2),450,5)
      StopDrawing()
Funktioniert nicht :cry:

Ich hab versucht, ein Image zu zeichen, aber der Hintergrund war dann Schwarz und nicht Transparent
Du musst ein 32Bit Bild nehmen damit es Transparent ist.
Falls du Paint.Net auf deinem PC hast kannst du das dort sehr einfach beim Speichern auswählen.

EDIT

Zu deinem anderen Problem ,mit einem abfrage EventType() dürfte es gehen.

Code: Alles auswählen

Open_Window_0()

Repeat
   Event = WindowEvent()
   Select Event
     Case #PB_Event_CloseWindow
       End
     Case #PB_Event_Gadget
         Select EventGadget()
             Case  #MyImage2
               Select EventType()
                 Case #PB_EventType_LeftClick 
           MessageRequester("Hallo","Du hast Knopf 1 gedrückt",0)
           EndSelect
       EndSelect
   EndSelect
 ForEver
End
> Ungetestet

Verfasst: 28.06.2009 22:16
von Tur0k
Danke für deine Antwort :allright:

Habs versucht, aber funktioniert leider nicht.

Aktueller Code:

Code: Alles auswählen

Open_Window_0()

Repeat
   Event = WindowEvent()
   Select Event
     Case #PB_Event_CloseWindow
     End
     Case #PB_Event_Gadget
         Select EventGadget()
             Case  #MyImage2
               Select EventType()
                 Case #PB_EventType_LeftClick
                 MessageRequester("Hallo","Du hast Knopf 1 gedrückt",0)
               EndSelect
       EndSelect
   EndSelect
 ForEver
End

Code: Alles auswählen

      LoadImage(#MyImage2,"preferences-system.png")
     
      StartDrawing(WindowOutput(0))
        DrawAlphaImage(ImageID(#MyImage2),450,5)
      StopDrawing() 
Danke und Mfg. Tur0k

Verfasst: 28.06.2009 22:36
von HeX0R
Wie man diesem Codeschnippsel ansieht:

Code: Alles auswählen

DrawAlphaImage(ImageID(#MyImage2),450,5) 
ist #MyImage2 kein Gadget, sondern ein Image.
Logisch, dass da kein Event ankommt.
Du musst schon das entsprechende ImageGadget benutzen (wovon du wohl keins hast).

Du könntest auch über die Mauskoordinaten glücklich werden:

Code: Alles auswählen

Case #WM_LBUTTONUP
	If WindowMouseX(0) >= 450 And WindowMouseX(0) <= 450 + ImageWidth(#MyImage2) And WindowMouseY(0) >= 5 And WindowMouseY(0) <= 5 + ImageHeight(#MyImage2)
		Debug "aha"
	EndIf

Verfasst: 29.06.2009 18:16
von Tur0k
Danke für deine Antwort!

Ich hab mal versucht ein ImageGadget zu erstellt, was auch klappt.
Das Problem ist nur, das der Hintergrund Schwarz ist, auch wenn ich das Bild in Paint.NET in PNG 32Bit gespeichert habe.

So sieht der Code aus:

Code: Alles auswählen

      MyImage = LoadImage(#PB_Any,"preferences-system.png")
      
      If CreateImage(#MyImage2, 32, 32)
        If StartDrawing(ImageOutput(#MyImage2))
            DrawAlphaImage(ImageID(MyImage),0,0)
           StopDrawing() 
        EndIf
      EndIf
      
      ImageGadget(#MyImage2, 450, 5, 32, 32, ImageID(#MyImage2))
Hier das Bild:
Bild

So siehts aus in Purebasic (4.31):
Bild

Mit BackColor ändert sich der Hintergrund trotzdem nicht.

Mfg. Tur0k

Verfasst: 29.06.2009 18:31
von Kaeru Gaman
ein ImageGadget ist (noch) nicht in der Lage, Alpha korrekt darzustellen.

... und wie HeX0R ganz richtig sagte, ein Image ist kein Fensterelement das ein Event haben könnte.

du musst dich also wohl oder übel mit einer Zwischenlösung zufrieden geben.

Verfasst: 29.06.2009 18:38
von X360 Andy
Hab die das PNG mal eben zu einem Icon gemacht, jetzt geht das ganze auch Transparent.

Bild

Code: Alles auswählen

Enumeration
  #MyImage2
EndEnumeration

MyImage = LoadImage(#PB_Any, "C:\Users\Andreas\Desktop\pref.ico")

OpenWindow(0, 0, 0, 100, 100, "lol", #PB_Window_SystemMenu)
ImageGadget(#MyImage2, 50, 5, 32, 32, ImageID(Myimage))

Repeat
  
  event = WaitWindowEvent(50)
Until event = #PB_Event_CloseWindow

Verfasst: 29.06.2009 18:49
von Kaeru Gaman
aber .ico haben keine Alpha... /:->

Verfasst: 29.06.2009 18:52
von X360 Andy
Ändert aber nichts daran das es nun Transparent ist und das wollte er ja (?)
Und da kein Qualitäts verlust dabei enstanden ist das doch eigentlich egal

Verfasst: 29.06.2009 19:06
von Kaeru Gaman
> Und da kein Qualitäts verlust dabei enstanden ist das doch eigentlich egal

also, das Bild was er da vorzeigt:
Bildhat ja mal ganz eindeutig einen Halbtransparenten Schatten.
"kein Qualitätsverlust" liegt hier nie und nimmer vor, er ist nur für Laien schlecht sichtbar,
wenn die gewählte Hintergrundfarbe mit dem Grau des Schattens gut harmoniert.

aber stelle mal beides auf nem Roten Hintergrund dar, dann wird der Qualitätsverlust so deutlich sichtbar sein, dass er dir auf den Magen schlägt.