Überlagerung von Icons im Imagegadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

Überlagerung von Icons im Imagegadget

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

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

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

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

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

Beitrag 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) )
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

Beitrag 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
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

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

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