Seite 1 von 4

Im ListIconGadget zeichnen

Verfasst: 15.03.2012 04:23
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 05:14
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 05:40
von STARGÅTE
geile Idee ts-soft, für sowas ein Unicode-Zeichen zu nutzen :allright:

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 06:21
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:

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 07:02
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 07:33
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 07:55
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 08:25
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:

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 09:15
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

Re: Im ListIconGadget zeichnen

Verfasst: 15.03.2012 09:25
von ts-soft
@rolaf
Jetzt machste bitte Unicode in den Compileroptionen und Deine Liste ist in der zweiten Spalte leer :mrgreen: