Results 1 to 7 of 7

Thread: listvieuw opbouwen met afbeeldingen uit records

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    listview opbouwen met afbeeldingen uit records

    Is het mogelijk om een listview te maken met afbeeldingen vanuit een tabel. Ik zie een hoop voorbeelden van FM, maar niet van VCL. Een hoop sites zeggen dat je eerst moet laden in een imagelist en dan deze tonen in de listvieuw. Ben ik dan niet dubbel bezig. Past mijn afbeelding wel in een imagelist?
    Last edited by jkuiper; 24-Apr-18 at 17:09.
    Delphi is great. Lazarus is more powerfull

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Toch een poging gedaan met een imagelist en listview. De performance is niet slecht. Als ik de procedure in een thread gaat zetten, zal het zelfs nog sneller gaan.
    Delphi is great. Lazarus is more powerfull

  3. #3
    Ik ben nieuwsgierig hoe je dit sneller gaat maken met een thread.
    1+1=b

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Inderdaad, niet.
    Ik heb nu dit:
    Delphi Code:
    1. procedure tdeelnemers.LoadImageBG(AListView: TListView; aImagelist : TImagelist);
    2. begin
    3.     TThread.CreateAnonymousThread(
    4.       procedure
    5.       var ListItem : TListItem;
    6.           LV       : TListview;
    7.           ImageList: TImageList;
    8.       begin
    9.         ImageList:= TImageList.Create(nil);
    10.         try
    11.           Imagelist.Height := 128;
    12.           Imagelist.Width  := 128;
    13.           Imagelist.ColorDepth := cd32bit;
    14.           AListView.LargeImages := ImageList;
    15.           AListView.Items.BeginUpdate;
    16.           DataModule.pokemonlist.Active := true;
    17.           DataModule.pokemonlist.First;
    18.           while not DataModule.pokemonlist.eof do
    19.           begin
    20.             //application.ProcessMessages;
    21.               ListItem := AListView.Items.add;
    22.               Listitem.Caption := DataModule.pokemonlist.FieldByName('pokemon').AsString;
    23.               ListItem.ImageIndex := LoadImagesFromDataset2ImageList(ImageList, DataModule.pokemonlist);
    24.             DataModule.pokemonlist.Next
    25.           end;
    26.         finally
    27.           AListView.items.EndUpdate;
    28.           DataModule.pokemonlist.Active := false;
    29.         end;
    30.  
    31.         TThread.Synchronize(TThread.Current, // Geen 'self' beschikbaar
    32.         procedure
    33.           begin
    34.             aImagelist.Assign(Imagelist);
    35.           end);
    36.  
    37.     end
    38.   ).Start;
    39. end;
    Maar ik zie helemaal geen performance winst. Alleen mijn form kan ik vrijuit bewegen door het opstarten van een andere thread.
    (Vraag mij ook af of ik de thread wel goed heb opgebouwd).

    Ik denk dat het probleem in het opbouwen van de imagelist is.
    Delphi is great. Lazarus is more powerfull

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik denk zelfs dat het beter is om een objectlist aan te maken, die te vullen met afbeeldingen en alle andere items, en dan tonen in de listview.
    De listview hooft niet alles te tonen. Aan de zijkant staat een treeview met ABC of met type van het soort. Op die selectie moet er worden gevuld en geselecteerd.
    Delphi is great. Lazarus is more powerfull

  6. #6
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik laat de listview voor wat het is. Er worden niet meteen 750 items met afbeeldingen gemaakt. Zoals ik het nu heb, wordt er op letter niveau getoond, waardor er maar een bepaald aantal items worden aangemaakt.
    Delphi is great. Lazarus is more powerfull

  7. #7
    Maar ik zie helemaal geen performance winst. Alleen mijn form kan ik vrijuit bewegen door het opstarten van een andere thread.
    En dat is je winst! Een thread maakt het niet sneller. Een thread verplaatst het werk naar de achtergrond, zodat je hoofdthread vrij is om naar de gebruiker te luisteren.

    Als je dingen sneller wilt maken, én je hebt een computer met meerdere cores, dan kán het helpen om het werk te verdelen over meerdere threads die samen het werk doen, afhankelijk van wat dat werk is.
    1+1=b

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
  •