Avatar billede pjotre Novice
07. januar 2021 - 13:18 Der er 11 kommentarer

Delphi XE3: BMP filer i ListView under Windows10

Jeg læser f.ejs 10 BMP filer(samme størrelse) ind i en ImageList, som er er indsat i object inspector i en listview.
Når skærmen vises, er det den samme BMP, som vises i alle 10 -  det bør jo være 10 forskellige.
Hvad mon er gået galt?
07. januar 2021 - 13:46 #1
Jeg kører Delphi 7.

Prøv at vise lidt kode.  Har en ide om hvad der kan være galt, men det kan din kode afgøre.

KR
Avatar billede pjotre Novice
07. januar 2021 - 13:51 #2
procedure TfrmFBygFiler.Button6Click(Sender: TObject);
begin
  LoadBMPtoList(Sender);
  ListView1.Clear;
  ListView1.AddItem('000001', nil);
  ListView1.AddItem('000002', nil);
  ListView1.AddItem('000003', nil);
  ListView1.AddItem('000004', nil);
  ListView1.AddItem('000005', nil);
  ListView1.AddItem('000006', nil);
  ListView1.AddItem('000007', nil);
  ListView1.AddItem('000008', nil);
  ListView1.AddItem('000009', nil);
  ListView1.AddItem('000010', nil);
  ListView1.AddItem('000011', nil);
  ListView1.AddItem('000012', nil);
  ListView1.AddItem('000013', nil);
  ListView1.AddItem('000014', nil);
  ListView1.AddItem('000015', nil);
  ListView1.AddItem('000016', nil);
end;

procedure TfrmFBygFiler.LoadBMPtoList(Sender: TObject);
var
  I: Integer;
  Nummer: string;
begin
  BitmapFil := TBitmap.Create;
  ImageList1.Clear;
  AntalBitmapsFor.Caption := inttostr(ImageList1.Count);
  I := 1;
  repeat
    Nummer := inttostr(I+6);
    if length(Nummer) = 1 then
      Nummer := '00000' + Nummer
    else if length(Nummer) = 2 then
      Nummer := '0000' + Nummer;
    BitmapFil.LoadFromFile('F:\Billedarkiv\ThumbNails\' + Nummer + '.bmp');
    ImageList1.Height := BitmapFil.Height;
    ImageList1.Width := BitmapFil.Width;
    ImageList1.Add(BitmapFil, nil);
    { Imagelist1.ComponentIndex := I; }
    I := I + 1;
  until I > StrToInt(antalBilleder.Text);
  BitmapFil.free;
  AntalBitmapsEfter.Caption := inttostr(ImageList1.Count);
end;
07. januar 2021 - 14:52 #3
HEJ,

Kode modtaget. 

Må ud af huset nu.  Vil studere nøjere i aften.  Melder tilbage (måke først i mpren).

KR
07. januar 2021 - 20:53 #4
Prøv dette:

procedure TfrmFBygFiler.LoadBMPtoList(Sender: TObject);
var
  I: Integer;
  Nummer: string;
begin
  BitmapFil := TBitmap.Create;
  ImageList1.Clear;
  AntalBitmapsFor.Caption := inttostr(ImageList1.Count);
  I := 1;
  repeat
    Nummer := inttostr(I+6);
    if length(Nummer) = 1 then
      Nummer := '00000' + Nummer
    else if length(Nummer) = 2 then
      Nummer := '0000' + Nummer;
  IF FILEEXIST('F:\Billedarkiv\ThumbNails\' + Nummer + '.bmp') THEN
      BEGIN
              BitmapFil.LoadFromFile('F:\Billedarkiv\ThumbNails\' + Nummer + '.bmp');
              ImageList1.Height := BitmapFil.Height;
                ImageList1.Width := BitmapFil.Width;
                ImageList1.Add(BitmapFil, nil);
                { Imagelist1.ComponentIndex := I; }
      END
ELSE
      BEGIN
            SHOWMESSAGE('FILEN: ' + 'F:\Billedarkiv\ThumbNails\' + Nummer + .bmp'  + '  EKSISTERER IKKE ' );
      END;

I := I + 1;

  until I > StrToInt(antalBilleder.Text);
 
BitmapFil.free;
  AntalBitmapsEfter.Caption := inttostr(ImageList1.Count);
end;

Det jeg gør, er at jeg tester om filen eksisterer // om der er adgang til billed -filen. - erne.  Jeg har kørt din rutine på min D7 (med 10 veldefinerede BMP filer ) og der er ingen problemer.  (Ved dog ikke om der en en BUG i Imageliste-håndteringen på XE3.. )

Hvis det ikke er det, så arbejder vi videre indtil prblmet er løst.... 

KR
Avatar billede pjotre Novice
07. januar 2021 - 23:16 #5
Hejsa
Tak for dit svar.
Desværre giver det samme resultat.
Jeg tror der er en bug i XE3.
08. januar 2021 - 00:35 #6
Der er faktisk en mulighed mere.  Gå ind på https://stackoverflow.com/. Det er en amerikansk Webside for professionelle programmører (jeg er medlem) , omend jeg er mere over på den amatørmæssige side.  Meld dig ind og spørg om Xe3 har en BUG i Imagelist komponenten der.  De VED DET MED SIKKERHED.... 

KR
08. januar 2021 - 00:41 #8
Avatar billede pjotre Novice
08. januar 2021 - 11:30 #9
Jeg har prøvet med png og får en fejl i compileringen på
ImageList_Add(ImageList.Handle, bmp.Handle, 0);
Jeg kan ikke bruge ImageList_Add
Avatar billede pjotre Novice
08. januar 2021 - 13:08 #10
Man skal sætte image index på hver element i Listview:
ListView1.Items[0].ImageIndex := 0;
ListView1.Items[1].ImageIndex := 1;
osv. så virker det.
Du må have en god dag!
08. januar 2021 - 15:15 #11
Tak for tilbagemeldingen.

Og godt du fandt løsningen.

" Happy Programming "

KR
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester