Im ListIconGadget zeichnen

Für allgemeine Fragen zur Programmierung mit PureBasic.
BSP
Beiträge: 203
Registriert: 01.02.2009 14:04

Im ListIconGadget zeichnen

Beitrag von BSP »

Hallo.

Ich habe eine Liste mit Zahlen, die im ListIconGadget gelistet sind.
Nun möchte ich in der Spalte daneben einen Balken zeichnen,
abhängig von der Zahl.

Geht sowas und wenn ja, habt ihr eine Lösung für mich?

Bisher habe ich meine komplette Liste auf einem Image gezeichnet.

Hier mal ein Beispiel, was ich meine:

Code: Alles auswählen

EnableExplicit

Define EventID
Define i

Global Dim img(10)

Procedure ZeichneBalken(zeile)

; Diesen Teil möchte ich
; durch einen echten Grafikbalken ersetzen.
  Protected zahl=Val(GetGadgetItemText(1,zeile,0))
  Protected a$=LSet("",zahl,Chr(149))
  SetGadgetItemText(1,zeile,a$,1)
;
  Protected Texth = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, 1, 0) >> 16 - 4
  Protected faktor=8 ; wird später Errechnet
  img(zeile)=CreateImage(#PB_Any,zahl,Texth)
  StartDrawing(ImageOutput(img(zeile)))
    Box(0,0,zahl*faktor,Texth,RGB(255,0,0))
  StopDrawing()
  ;BalkenEinsetzen
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,"Zahl",50,#PB_ListIcon_GridLines)
  AddGadgetColumn(1,1,"Balken",300)
  
  For i=0 To 9
    AddGadgetItem(1,-1,Str((Random(20)+1)*2))
  Next
  
  For i=0 To 9
    ZeichneBalken(i)
  Next
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Vielen Dank schon mal im Voraus.
Bernd

PB 4.60 (x86) Win Vista Home
PB 5.31 (x86) & (x64) Win10
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: Im ListIconGadget zeichnen

Beitrag von ts-soft »

In der IDE UTF8 aktivieren!
In den Compileroptionen UNICODE aktivieren!

Code: Alles auswählen

EnableExplicit

Define EventID
Define i, font
font = LoadFont(#PB_Any, "Lucida Sans Unicode", 10)

Procedure ZeichneBalken(zeile)
  Static gerade
  Protected zahl=Val(GetGadgetItemText(1,zeile,0))
  Protected a$=LSet("",zahl, Chr(9606))
  gerade ! 1
  If gerade
    SetGadgetItemColor(1, zeile, #PB_Gadget_FrontColor, #Red)
  Else
    SetGadgetItemColor(1, zeile, #PB_Gadget_FrontColor, #Blue)
  EndIf
  SetGadgetItemText(1,zeile,a$,1)

EndProcedure

If OpenWindow(0,0,0,650,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,"Zahl",50,#PB_ListIcon_GridLines)
  SetGadgetFont(1, FontID(font))
  AddGadgetColumn(1,1,"Balken",550)
 
  For i=0 To 9
    AddGadgetItem(1,-1,Str((Random(19)+1)*2))
  Next
 
  For i=0 To 9
    ZeichneBalken(i)
  Next
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf 
Bild

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Im ListIconGadget zeichnen

Beitrag von STARGÅTE »

geile Idee ts-soft, für sowas ein Unicode-Zeichen zu nutzen :allright:
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
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: Im ListIconGadget zeichnen

Beitrag von ts-soft »

STARGÅTE hat geschrieben:geile Idee ts-soft, für sowas ein Unicode-Zeichen zu nutzen :allright:
Naja, alte Schule, zu DOS und TI99/4A Zeiten war es relativ normal, Zeichen zum malen zu nutzen :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
BSP
Beiträge: 203
Registriert: 01.02.2009 14:04

Re: Im ListIconGadget zeichnen

Beitrag von BSP »

Hallo Thomas (ts-soft).
Nicht ganz, was ich gerne hätte, aber sieht gut aus.
Ist wohl der beste "Mittelweg".
Kennst Du mir sagen, wo ich eine Liste mit den Unicode- Zeichen finde?

Und dann ist mir noch etwas anderes aufgefallen:
#PB_Ascii : Liest den String als ASCII, auch wenn das Programm im Unicode-Modus kompiliert ist
Scheint bei mir aber nicht so ganz zu funktionieren.
Aber das ist ja eine andere Baustelle.
Vielen Dank jedenfalls für Deinen Tip.
Bernd
PB 5.31 (x86) & (x64) Win10
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: Im ListIconGadget zeichnen

Beitrag von ts-soft »

BSP hat geschrieben: Kennst Du mir sagen, wo ich eine Liste mit den Unicode- Zeichen finde?

Code: Alles auswählen

RunProgram("charmap.exe")
BSP hat geschrieben:Und dann ist mir noch etwas anderes aufgefallen:
#PB_Ascii : Liest den String als ASCII, auch wenn das Programm im Unicode-Modus kompiliert ist
Scheint bei mir aber nicht so ganz zu funktionieren.
Das funktioniert schon, aber ich weiß ja nicht, in welchem Zusammenhang Du die
Konstante verwendest. Damit kann man peeken, poken, readstring usw.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
BSP
Beiträge: 203
Registriert: 01.02.2009 14:04

Re: Im ListIconGadget zeichnen

Beitrag von BSP »

Nochmal Hallo.
Code:
RunProgram("charmap.exe")
Danke.
Das funktioniert schon, aber ich weiß ja nicht, in welchem Zusammenhang Du die
Konstante verwendest. Damit kann man peeken, poken, readstring usw.
Ja, richtig, kannst Du so nicht wissen.
War halt schon wieder ne lange Nacht.
Also:

Code: Alles auswählen

ReadString(f , #PB_Ascii)
Ich habe bisher immer mit den PB- Grundeinstellungen gearbeitet.
Also alles als "Reiner Text".
Nächste Nacht werde ich mich also mal mit den Unicode- Einstellungen beschäftigen.

In diesem Sinne:
Einen guten Tag und vielen Dank.
Bernd
PB 5.31 (x86) & (x64) Win10
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: Im ListIconGadget zeichnen

Beitrag von ts-soft »

BSP hat geschrieben: Ich habe bisher immer mit den PB- Grundeinstellungen gearbeitet.
Also alles als "Reiner Text".
Die ist schon mal verkehrt, weil UTF-8 ermöglicht beides, "Reiner Text" schränkt also nur ein :wink:
Und das ein deutschen eines Formates, das nun mal "Plain/Text" heißt hält mich sowie ab, so was
zu nutzen :mrgreen:
Wat geid mich de text von de reiner an, ick will de text von de anneliese :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Im ListIconGadget zeichnen

Beitrag von rolaf »

ts-soft hat geschrieben:Wat geid mich de text von de reiner an, ick will de text von de anneliese :lol:
Also ich bin mit dem Text vom Reiner bisher immer zurande gekommen, Anneliese brauch ich nicht.
Auch wenn deine Liste damit zur Toten-Liste wird, sieht doch auch schick aus. :lol:

Bild
:::: WIN 10 :: PB 5.73 :: (x64) ::::
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: Im ListIconGadget zeichnen

Beitrag von ts-soft »

@rolaf
Jetzt machste bitte Unicode in den Compileroptionen und Deine Liste ist in der zweiten Spalte leer :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten