Image Event

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Image Event

Beitrag 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...
Zuletzt geändert von Tur0k am 28.06.2009 22:30, insgesamt 1-mal geändert.
buuh* :D
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Image Event

Beitrag 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
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Beitrag 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
buuh* :D
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Beitrag 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
buuh* :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

aber .ico haben keine Alpha... /:->
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten