Results 1 to 8 of 8

Thread: Listview met star rating

  1. #1

    Listview met star rating

    Ik ben in Delphi 10.2 bezig met een tool voor downloaden van Films. Nu geeft de server voor elke film een rating mee (1/10 en 1/5). Nu leek het mij een leuk idee om een starrating te gebruiken, deze hoeft niet selecteerbaar te zijn en dient enkel als indicator waarmee je snel de rating van een film kan zien. Is er iemand die een listview kent waarin dit mogelijk is, of eventueel iemand die me in de juiste richting kan wijzen?

    Het is een listview in report view - dus met kolommen.. Ik heb wel devexpress components, maar weet niet of dit daarin ook mogelijk is.

  2. #2
    Ja, dat is volgens mij in elke listview wel mogelijk. Maar volgens mij heb je twee vragen:

    1. Hoe zet ik een rating om naar een plaatjes van sterren?
    2. Hoe zet ik een plaatje in een listview?

    Klinkt als een goede uitdaging voor een hobbyist. Dus, wat weerhoudt je ervan om te beginnen? Waar loop je vast?
    1+1=b

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Het toevoegen van een ster is het probleem niet. Het wordt leuker om standaard 5 sterren aan te geven en dan gekleurd 4 1/2 ster.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Het ophalen van de rating ligt aan de API waartegen je praat (MovieMeter, IMDB?), dus
    als je daar hulp bij nodig hebt moet je iets specifieker zijn.

    Een "Normale" icon-image voor je tekst in een TListView plaatsen werkt niet, vanwege de
    beperkte ruimte daarvoor.

    Wel kun je in ieder willekeurige kolom zelf in een OnXXXDrawSubItem (of OnXXXDrawItem
    voor de eerste kolom) eenvoudig plaatjes "Tekenen".
    Het enige dat je daarnaast dan nodig hebt is het plaatje van een gevulde ster, een halve ster
    en eventueel een lege ster als je altijd alle sterren wil laten zien.
    In (bijvoorbeeld) de laatste kolom haal je eerst (indien deze aanwezig is) de breedte van de
    tekst in die kolom op, voegt daar een stukje ruimte aan toe en gaat dan het benodigd aantal
    hele en halve sterren tekenen.
    TMemoryLeak.Create(Nil);

  5. #5
    Kijk eens op https://www.google.nl/search?q=starr...&tbm=isch&sa=X

    Mij lijkt het makkelijkste zo'n image in een resource te zetten en dan via TImage te laten zien.

    Bijvoorbeeld
    Click image for larger version. 

Name:	800px_COLOURBOX12519350.jpg 
Views:	131 
Size:	95.7 KB 
ID:	7825

    of

  6. #6
    Ik weet niet wat je precies hebt van devexpress maar er bestaat ook een dxRatingControl

  7. #7
    Dank jullie wel - het praten tegen die api's is het probleem niet inderdaad ik haal van moviemeter.nl , omdb, en tvdb informatie op. Nu geef ik deze allemaal weer op een schaal van 1/10 maar zou dit inderdaad willen "tekenen" met sterren 1/5.
    Ik ga eens proberen om een stukje wat ik vond over een progressbar tekenen in een subitem - eens kijken of ik er een rating in kan tekenen.

  8. #8
    Nu heb ik zelf wat sterretjes getekend - en krijg ze ook wel op de listview subitem, alleen teken ik nu rechtstreeks op het canvas van de listview met als gevolg zwarte blokjes bij selectie, ook het tekenen gaat niet zo heel erg netjes..

    Click image for larger version. 

Name:	Image 13.png 
Views:	110 
Size:	71.7 KB 
ID:	7834

    Ik doe dit nu zo:
    Delphi Code:
    1. procedure TfrmMain.lvVODCustomDrawSubItem(Sender: TCustomListView;
    2.   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
    3.   var DefaultDraw: Boolean);
    4. var
    5.   ListView: TListView absolute Sender;
    6.   R: TRect;
    7. begin
    8.   DefaultDraw := SubItem <> 1;
    9.   if not DefaultDraw then
    10.   begin
    11.     ListView_GetSubItemRect(ListView.Handle, Item.Index, SubItem,
    12.       LVIR_BOUNDS, @R);
    13.     Listview.Canvas.StretchDraw(R, image2.Picture.Graphic);
    14.   end;
    15.   Sender.Canvas.Font.OnChange(Sender);
    16. end;

    [Edit]
    Met dank aan de ideeen van mensen hier is het toch gelukt!
    Click image for larger version. 

Name:	list.png 
Views:	104 
Size:	53.0 KB 
ID:	7835

    Code:
    Delphi Code:
    1. procedure TfrmMain.lvVODCustomDrawSubItem(Sender: TCustomListView;
    2.   Item: TListItem; SubItem: Integer; State: TCustomDrawState;
    3.   var DefaultDraw: Boolean);
    4. var
    5.   ListView: TListView absolute Sender;
    6.   R: TRect;
    7.  
    8.   procedure DrawStarRating(Canvas: TCanvas; R: TRect; Rating: Integer);
    9.   begin
    10.     case Rating of
    11.       0 : Canvas.Draw(R.Left + 4, R.Top + 2, EmptyStarRating);
    12.       1 : Canvas.Draw(R.Left + 4, R.Top + 2, OneStarRating);
    13.       2 : Canvas.Draw(R.Left + 4, R.Top + 2, TwoStarRating);
    14.       3 : Canvas.Draw(R.Left + 4, R.Top + 2, ThreeStarRating);
    15.       4 : Canvas.Draw(R.Left + 4, R.Top + 2, FourStarRating);
    16.       5 : Canvas.Draw(R.Left + 4, R.Top + 2, FullStarRating);
    17.     end;
    18.   end;
    19.  
    20. var
    21.   E: Extended;
    22.   I: Integer;
    23. begin
    24.   DefaultDraw := SubItem <> 1;
    25.   if not DefaultDraw then
    26.   begin
    27.     ListView_GetSubItemRect(ListView.Handle, Item.Index, SubItem, LVIR_BOUNDS, @R);
    28.     Listview.Canvas.Brush.Style := bsClear;
    29.     if TryStrToFloat(listView.Items[Item.Index].SubItems[0], E, RatingFormat) then
    30.     begin
    31.       DrawStarRating(Listview.Canvas, R, Ceil(E / 2));
    32.     end else
    33.     if TryStrToInt(listView.Items[Item.Index].SubItems[0], I) then
    34.     begin
    35.       DrawStarRating(Listview.Canvas, R, Ceil(I / 2));
    36.     end else
    37.     begin
    38.       DrawStarRating(Listview.Canvas, R, 0);
    39.     end;
    40.   end;
    41.   Sender.Canvas.Font.OnChange(Sender);
    42. end;

    Opmerkingen of verbeteringen zijn welkom! Als de code efficienter kan dan zelfs graag!
    De afbeeldingen zijn png, heb deze zelf even getekend in Fireworks.
    Last edited by Reidinga; 24-Nov-18 at 19:20.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •