ListImageGadget - ListGadget mit beliebig großen Images

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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 ^^
Bild

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 ...
Zuletzt geändert von STARGÅTE am 09.07.2010 16:08, insgesamt 1-mal geändert.
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
Andesdaf
Moderator
Beiträge: 2658
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag von Andesdaf »

nette Idee :allright:

funktioniert alles gut, danke für den Code.
Win11 x64 | PB 6.00 (x64)
Benutzeravatar
KeauHou
Beiträge: 133
Registriert: 23.06.2009 00:22
Computerausstattung: Q9550, GTX260, Corsair Dominator 4GB 1066mhz, 22" Asus 16:10
Wohnort: Vorm Monitor
Kontaktdaten:

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag von KeauHou »

Jup funktioniert einwandfrei - gefällt mir!
If x = 1 and x = 2
MessageRequester("!!!", "WTF")
EndIf
Es ist möglich!
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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

[...]
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag von gnaps »

Hallo,

danke RSBasic, das habe ich ja so gemacht.

Ich simpel habe

UseJPEGImageDecoder()
UsePNGImageDecoder()

aber sags niemanden wieter. :D

Manchmal steht man echt auf dem Schlauch.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag von gnaps »

Hi,

nochmal eine Frage

wie bekomme ich nun heraus welcher Eintrag angeklickt wurde.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListImageGadget - ListGadget mit beliebig großen Images

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten