Seite 1 von 1

Überlagerung von Icons im Imagegadget

Verfasst: 03.01.2007 11:28
von Morty
Hi Gemeinde.

Ich hab da ein Problem mit der Zuweisung von .ico Dateien auf ein Imagegadget.
Ich erstelle ein Imagegadget und benutze ein zuvor geladenes Icon, welches ich zuweise. Das Problem tritt auf, wenn ich auf das selbe Imagegadget ein anderes Icon zuweisen will.
Das Zuweisen funktioniert, nur leider bleibt auf Grund der vorhandenen Transparenz auch das erste Icon sichtbar (drunter). Das ist halt sehr "unschick".

Mein bisheriger Lösungsgedanke ist, das Gadget mittels FreeGadget zu löschen und neu zu setzen. Was mir aber etwas umständlich erscheint.

Daher die Frage, ob es nicht irgendwie eine einfache Lösung gibt, quasi das Imagegadget vom Image zu befreien ?

Habe ich bereits erwähnt, PB 3.94? Nein? Gut, das alles in PB 3.94 da es ein älteres Projekt ist, welches ich kurz "aufpollieren" muss.

Danke schonmal.

Gruss, Morty

Verfasst: 03.01.2007 11:31
von Kaeru Gaman
die einfachste möglichkeit wäre, das image zu clearen, indem du eine box drüberzeichnest.
also startdrawing(imageoutput(..)) und dann box(0,0,breite,höhe)
ob und mit welcher farbe das dann sauber funktioniert im hinblick auf die transparenz musst du antesten...

Verfasst: 03.01.2007 11:41
von Morty
hmm, danke. Aber leider auch nicht viel einfacher.
Vorallem weil ich das Image ansich noch brauche.

Ich erklär das mal ein bissl genauer. Es geht um eine Art Play/Pause Taste, die beim Klicken den Status wechselt (man kennt es vom heimischen DVD Player). Daher brauche ich beide Bilder. Das ganze passiert aber auf einem Fenster mit Hintergrundbild. Sprich, eine einfache Box in einer beliebigen Farbe kann man da leider nicht nehmen.

Es scheint wirklich so, als ob man sich vorher alle Gadgetdaten (x,y,breite,hoehe) speichern muss, dann das Gadget mittels Freegadget rausschmeisst um es danach wieder neu zu erstellen. Hmm

Morty

Verfasst: 03.01.2007 11:51
von Kaeru Gaman
hm... sind denn die icons so unterschiedlich?

normalerweise würde ich jetzt davon ausgehen, dass beide einen undurchsichtigen knopf darstellen, der sich nur durch die aufschrift unterscheidet....

egal.
lad doch einfach zwei verschiedene images und wechsel nur, welches image dem gadget zugeordnet wird...

Verfasst: 03.01.2007 11:59
von Morty
Das mach ich ja. Das eine ist ein Icon mit zwei senkrechten Balken (ein typisches Pausezeichen) und das andere ist ein Dreieck (ein typisches Playzeichen). Und wenn ich das Image auf dem Imagegadget wechsel sehe ich halt unter meinem Playzeichen noch das Pausezeichen (bzw. umgekehrt .. kommt drauf an wie man wechselt). Weil sich halt beide Icons in ihren nichttransparenten Teilen nicht komplett überdecken.

Morty

Verfasst: 03.01.2007 12:01
von Kaeru Gaman
ne wie jetzt...
die können sich garnicht überdecken, wenn du doch ein neues image zuweist.

nur wenn du ein neues image über ein altes drüber zeichnest,
kann es zu überschneidungen kommen...

ich mein das so:

Code: Alles auswählen

Image1 = LoadImage(#PB_Any, "MyImage1.ico")
Image2 = LoadImage(#PB_Any, "MyImage2.ico")

ImageGadget(#Gadget, x, y, Breite, Hoehe, ImageID(Image1) ) 

; zweites bild anzeigen

SetGadgetState(#Gadget, ImageID(Image2) )

; wieder erstes bild anzeigen

SetGadgetState(#Gadget, ImageID(Image1) )

Verfasst: 03.01.2007 12:22
von Morty
Machen sie aber, das ist ja mein Problem.

Ich hab hier mal eine kleine Testsituation gemacht, vllt. hilft das zur Verdeutlichung.
http://www.box.net/public/iraq0lqazo
Da sind ein Beispielcode, sowie die zwei relevanten Icons drin.

Hier nochmal der Code extra:

Code: Alles auswählen

;PB 3.94

Enumeration     ;Fenster
  #main_win
EndEnumeration

Enumeration     ;Gadgets
  #bildgadget
  #btn_change
EndEnumeration

Enumeration     ;Images
  #img_icon1
  #img_icon2
EndEnumeration

LoadImage(#img_icon1,"media_pause.ico")
LoadImage(#img_icon2,"media_play.ico")

OpenWindow(#main_win,-1,-1,200,100,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Icon Test")
CreateGadgetList(WindowID(#main_win))
  ImageGadget(#bildgadget,10,10,16,16,UseImage(#img_icon1))
  ButtonGadget(#btn_change,40,10,100,20,"Icon wechseln")
quit=0
Repeat
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      quit=1
    Case #PB_Event_Gadget
      If EventGadgetID()=#btn_change
        SetGadgetState(#bildgadget,UseImage(#img_icon2))
      EndIf
  EndSelect
Until quit=1
CloseWindow(#main_win)
End
Es musste schnell gehen, daher hab ich mal auf Kontrollroutinen verzichtet. Nicht das da jetzt einige meckern.

Morty

Verfasst: 03.01.2007 12:27
von Morty
Kleiner Nachtrag.

Ich hab eben mal mein Beispiel mit PB 4 probiert, da gibt es das Problem nicht. Das freut mich schonmal, hilft mir aber leider bei dem Projekt nicht weiter. :cry:

Sorry, wenn ich evtl. mit solch "alten" Themen nerve.

Morty

Verfasst: 03.01.2007 12:29
von Kaeru Gaman
oh.. gut, dass du das nochmal dazusagst...
ich hätte das jetzt in pb4 getestet...

im moment muss ich mich auch erstmal ums essen kümmern,
heut nachmittag kann ich mir das dann nochmal ansehen...

eigentlich ist es total unlogisch, da das gadget soweit ich weiß selber keinen bildbereich hat, sondern nur das handle zum image beinhaltet.
aber wie gesagt, ich schaus mir später noch mal an...
es ist ja schon mal ein unterschied, dass dort ein useimage() steht...
also war das wohl in pb3.9 noch ganz anders...