Seite 1 von 1
ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 14.09.2009 02:12
von STARGÅTE
Tachchen,
immer wieder habe ich versucht auf irgend eine Weise in einem ListIconGadget Ganze Bilder als 16*16 Icon darzustellen, doch da erkennt man ja nix, und der 32*32 Modus ist keine richtige Liste.
Also habe ich mit Hilfe der ScrollAreaGadget und ImageGadgets eine neuen Typen geschrieben:
Das ListImageGadget
Quellcode mit Beispiel am Ende
ListImageGadget(#Gadget, x, y, Width, Height) ; Erstellt ein neues ListImageGadget
AddListImageGadgetItem(#Gadget, Position, Text$, Image) ; Fügt ein Eintrag (mit 'Text$' und 'Image') hinzu (Position derzeit immer -1)
GetListImageGadgetState(#Gadget) ; Gibt die Nummer des ausgewählten Eintrags zurück
GetListImageGadgetText(#Gadget) ; Gibt den Text des ausgewählten Eintrags zurück
SetListImageGadgetState(#Gadget, State) ; Ändert den ausgewählten Eintrag auf 'State'
Hier ein Beispiel, natürlich können es beliebige Images sein, nicht nur SchwarzeRechtecke ^^
Die Funktionen für das Gadget sind noch nicht Fertig !
Derzeit kann man nur Befüllen und State und Text aus/einlesen und Navigieren (mit Tasten und Maus)
Bitte teste mal diese Funktionen ... ob das Auswählen klappt usw.
die anderen werden später kommen ...
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 15.09.2009 16:02
von Andesdaf
nette Idee
funktioniert alles gut, danke für den Code.
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 15.09.2009 16:06
von KeauHou
Jup funktioniert einwandfrei - gefällt mir!
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 14:06
von gnaps
Hallo Leute,
ich wolltes das hier nutzen da ich eine Bildverwaltung erstellen muss.
Leider bekomme ich keine Bilder in die Liste.
Wie binde ich da Bilder ein?
Stargate schreibt:
Hier ein Beispiel, natürlich können es beliebige Images sein, nicht nur SchwarzeRechtecke ^^
Ich bekommen das nicht hin.
gruß
gnaps
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 14:22
von RSBasic
Du musst nur die Nummer deiner erstellten oder geladenen Grafik angeben. Aso kein ImageID() o.ä.:
Code: Alles auswählen
CreateImage(1, 100, 100, 24, RGB(255, 0, 0));oder LoadImage(1, ...)
OpenWindow(0, 0, 0, 600, 400, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListImageGadget(1, 10, 10, 280, 380)
ListImageGadget(2, 310, 10, 280, 380)
For n = 1 To 20
AddListImageGadgetItem(1, -1, Str(Random(999999)), 1);Image-Nummer 1
AddListImageGadgetItem(2, -1, Str(Random(999999)), 1);Image-Nummer 1
Next
[...]
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 14:43
von gnaps
Hallo,
danke RSBasic, das habe ich ja so gemacht.
Ich simpel habe
UseJPEGImageDecoder()
UsePNGImageDecoder()
aber sags niemanden wieter.
Manchmal steht man echt auf dem Schlauch.
gruß
gnaps
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 15:06
von gnaps
Hi,
habe da doch noch ein paar Fragen zu dem Code
Was ist das ?
\Gadget
\BackgroundImageGadge
Und wie ist das zu verstehen
AddElement(ListImageGadgetItem())
\Gadget = Gadget
\State = #False
\Text$ = Text$
\Image = Image
\BackgroundImage = CreateImage(#PB_Any, GadgetWidth(Gadget)-32, ImageHeight(Image)+2)
Wie bekomme ich einen Mehrzeiligen Text?
Code: Alles auswählen
bildtext.s="das ist das Bild"+Chr(13)+bild
AddListImageGadgetItem(1, -1,bildtext.s,bild)
das geht nicht?
Gruß
gnaps
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 15:32
von RSBasic
gnaps hat geschrieben:Was ist das ?
\Gadget
\BackgroundImageGadge
Geht es dir um die Syntax?
Das sind die Einträge (Member) einer Struktur, die mit dem Schlüsselwort "With" eingeleitet wurden.
Und ListImageGadgetItem() ist eine NewList, die mit der Struktur ListImageGadgetItem verknüpft wurde.
Man könnte auch stattdessen ohne With folgendes schreiben:
Code: Alles auswählen
ListImageGadgetItem()\Gadget
ListImageGadgetItem()\BackgroundImageGadget
gnaps hat geschrieben:Wie bekomme ich einen Mehrzeiligen Text?
Da der übergebene Text mit DrawText() gezeichnet wird, musst du selber mehrzeilig zeichnen. Etwa so...
Code: Alles auswählen
For n = 1 To 20
AddListImageGadgetItem(1, -1, "Erste Zeile" + Chr(13) + "Zweite Zeile", CreateImage(#PB_Any, Random(80)+20, Random(40)+20))
AddListImageGadgetItem(2, -1, "Nur eine Zeile", CreateImage(#PB_Any, Random(80)+20, Random(40)+20))
Next
Ersetze den Code:
Code: Alles auswählen
DrawText(ImageWidth(\Image)+6, (ImageHeight(\BackgroundImage)-TextHeight(\Text$))/2, \Text$, $000000)
Durch:
Code: Alles auswählen
LineBreakCount = CountString(\Text$, Chr(13))
For a=1 To LineBreakCount+1
CurrentText$ = StringField(\Text$, a, Chr(13))
DrawText(ImageWidth(\Image)+6, (a-1)*TextHeight(CurrentText$), CurrentText$, $000000)
Next
Die vertikale Zentrierung des Textes musst du selber machen.
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 20:56
von gnaps
Hi,
nochmal eine Frage
wie bekomme ich nun heraus welcher Eintrag angeklickt wurde.
gruß
gnaps
Re: ListImageGadget - ListGadget mit beliebig großen Images
Verfasst: 16.10.2018 21:13
von RSBasic
Im Callback. Die Message mit der Nummer 273 ist der Mausklick und 256 mit dem wParam-Wert von 38 ist Pfeiltaste nach oben und 40 ist Pfeiltaste nach unten.
Mit \Gadget weißt du, auf was geklickt wurde. Wenn du stattdessen nur eine Nummer (1, 2, 3, ...) haben möchtest, dann musst du die Struktur ListImageGadgetItem erweitern und in der Funktion AddListImageGadgetItem() die aufsteigende Nummer beim Hinzufügen eintragen, so dass du später die Position abfragen kannst.