ImageGadget mit weiteren Parameter

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

ImageGadget mit weiteren Parameter

Beitrag von Tur0k »

Hallo Community!

Ist es möglich, ein ImageGadget mit weiteren Parameter zu füttern?

Ich möchte gerne eine Adresse im Gadget speichern, um am Schluss wieder auszulesen.

So hab ich es mir vorgestellt:

Code: Alles auswählen

ImageGadget(#PB_Any, 10, 10, 100, 100, ImageID(MyImage1), "Meine URL")
Und Aufrufen:

Code: Alles auswählen

   If EventType() = #PB_EventType_LeftClick 
      Debug Str(EventGadget())
      Debug Geturl(EventGadget())
   EndIf 
Mfg. Tur0k
buuh* :D
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ImageGadget mit weiteren Parameter

Beitrag von STARGÅTE »

guck dir mal in der Hilfe : SetGadgetData() und GetGadgetData() an
damit kannst du "eigene" Daten einem gadget zuweisen und auslesen ... Aber kein String direkt !
du müsstest den String zB als Pointer dort eingeben welcher natürlich dann später noch gültig ist.
Oder Speichers die URLs in einer LinkedList deren Element-Pointer du dann dort angibst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: ImageGadget mit weiteren Parameter

Beitrag von Tur0k »

Vielen Dank! Werde ich mal versuchen :bounce:
buuh* :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ImageGadget mit weiteren Parameter

Beitrag von ts-soft »

jetzt hab ich das Beispiel umsonsten geschrieben :roll:

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 381, 68, "Example", #PB_Window_SystemMenu)

Define.s MeineURL = "www.purebasic.com"
ImageGadget(0, 0, 0, 381, 68, LoadImage(0, #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp"))
SetGadgetData(0, @MeineURL)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0
        RunProgram(PeekS(GetGadgetData(0)))
      EndIf
  EndSelect
ForEver
Zur Strafe gibts trotzdem den Code :wink:

Gruß
Thomas
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: ImageGadget mit weiteren Parameter

Beitrag von Tur0k »

Danke für den Code :allright:

Bei mir ist das Problem, das ich mehrere ImageGadget erstelle:

Code: Alles auswählen

          NumberGadget.i = ImageGadget(#PB_Any, PositionX, PositionY, ImageWidth(MyImage1), ImageHeight(MyImage1), ImageID(MyImage1))
          
          Define.s ImageURL = GetInfo(MyResultString, "Thumb")
          SetGadgetData(NumberGadget, @ImageURL)
Wenn ich auf das ImageGadget klicke, bekomm ich die Meldung: Angegebene Adresse ist Null.
buuh* :D
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: ImageGadget mit weiteren Parameter

Beitrag von Josh »

wiso gibts diese funktion eigentlich fürs fenster nicht? wäre doch nur konsequent, wenn es für die gadgets schon eingeführt worden ist.

zumindest unter windows ist das ja als api vorhanden.
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: ImageGadget mit weiteren Parameter

Beitrag von Tur0k »

Hier die Lösung für dich:

http://forums.purebasic.com/german/view ... gadgetdata

Auf meine warte ich noch :D
buuh* :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ImageGadget mit weiteren Parameter

Beitrag von ts-soft »

Der Code-Ausschnitt ist nichtssagend, nicht ausführbar, also absolut unbrauchbar um Dir zu helfen.

SetGadgetData(ID, @derString) funktioniert auch mit vielen Gadgets, Du mußt aber für jedes
Gadget eine andere ID und auch einen anderen String! nehmen. Der String muß in dem Scope auch
gültig sein, bzw. wenn Du Prozeduren benutzt, ist der String auch Global zu deklarieren.

Gruß
Thomas
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: ImageGadget mit weiteren Parameter

Beitrag von Tur0k »

Hier die ganze Procedure:

*Ich weiss, der reinste Chaos* xD

Code: Alles auswählen

Procedure ImageList(Window)

PositionX = 10
PositionY = 10

Reihen = 0

AnzahlBilder = 0
LoadedImg = 0


If ReadFile(0, Temp)         
  While Eof(0) = 0
    MyNewString.s = ReplaceString(ReadString(0), Chr(34), "'")
    
    If CreateRegularExpression(0, "</div><a href='(.*?)'><img src='(.*?)' alt='Vorschau'></a>")
    
      Dim Result$(0)
       
      a = ExtractRegularExpression(0, MyNewString, result$())
      
      For k=0 To a-1
        MyResultString.s = Result$(k)
        MyResultString.s = ReplaceString(MyResultString, "</div><a href='", "[Url=]")
        MyResultString.s = ReplaceString(MyResultString, "'><img src='", "[ENDURL] [Thumb=]")
        MyResultString.s = ReplaceString(MyResultString, "' alt='Vorschau'></a>", "[ENDTHUMB]")
        
        
        Datei$ = Space(2000)
        
        If URLDownloadToCacheFile_(0, GetInfo(MyResultString, "Thumb"), Datei$, Len(Datei$), 0, 0) = #S_OK
          Delay(200)
        
          MyImage1 = LoadImage(#PB_Any, Datei$)
          
          AnzahlBilder + 1
          LoadedImg + 1
          
          NumberGadget.i = ImageGadget(#PB_Any, PositionX, PositionY, ImageWidth(MyImage1), ImageHeight(MyImage1), ImageID(MyImage1))
          
          PositionX + ImageWidth(MyImage1) + 10
          
          Define.s ImageURL = GetInfo(MyResultString, "Url")
          SetGadgetData(NumberGadget, @ImageURL)
          
          If AnzahlBilder > 4
            PositionY + 160
            PositionX = 0+10
            Reihen + 1
            AnzahlBilder = 0
          EndIf
          
        Else
          MessageRequester("Fehler", "Bilder konnten nicht in den Cache geladen werden. Bitte überprüfen Sie ihre Internetverbindung.")
        EndIf
        
      Next
    EndIf
      
  Wend
  
EndIf
buuh* :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ImageGadget mit weiteren Parameter

Beitrag von ts-soft »

Na gut, da spar ich mir jedes Beispiel.
Mach ein Array aus ImageURL und bau einen Zähler in die Schleife ein. Ansonsten hatte
ich das Problem ja bereits oben beschrieben. Du überschreibst jedesmal den String.

Andere Möglichkeit:

Code: Alles auswählen

Define *mem
Define.s ImageURL
ImageURL = "bla"
*mem = AllocateMemory(Len(ImageURL + 1))
If *mem
  PokeS(*mem, ImageURL)
  SetGadgetData(ID, *mem)
EndIf
Aber der Speicher kann jetzt nicht freigegeben werden, wird erst beim Programmende wieder freigegeben.

Gruß
Thomas
Antworten