pjotre Praktikant
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?
snestrup2000 Professor
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
pjotre Praktikant
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;
snestrup2000 Professor
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
snestrup2000 Professor
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
pjotre Praktikant
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.
snestrup2000 Professor
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
snestrup2000 Professor
08. januar 2021 - 00:41 #8
pjotre Praktikant
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
pjotre Praktikant
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!
snestrup2000 Professor
08. januar 2021 - 15:15 #11
Tak for tilbagemeldingen.

Og godt du fandt løsningen.

" Happy Programming "

KR
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

Opret Preview

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





Premium
IBM sætter flere navne på topledelsen for sit nye selskab 'NewCo'
Der er blevet sat navne på flere af de aboslutte topposter i IBM's nye driftsselskab, NewCo. Ind til videre fisker IBM inden for egne rækker.
Computerworld
Trump bønfalder Helle Thorning: Giv mig min Facebook-konto tilbage
Facebooks tilsynsråd, der har Helle Thorning-Schmidt i spidsen, har modtaget en erklæring fra Donald Trump, som ønsker at få genoprettet adgangen til sin Facebook og Instagram-konto.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
IBM Danmark trækker tilbud om frivillige fratrædelser tilbage for stort antal ansatte: "IBM har taget røven på sine ansatte"
Som led i IBM Danmarks store fyringsrunde fik 130 ansatte grønt lys til at forlade selskabet på en frivillig fratrædelsesordning. Men nu har IBM Danmark trukket det oprindelige tilbud tilbage for størstedelen af de ansatte.
White paper
Sådan: Giv medarbejderne frit valg og øg arbejdsglæden
Mange virksomheder udleverer stadig samme smartphone, laptop eller tablet til alle medarbejderne. Det kan koste dyrt på produktivitet, effektivitet, arbejdsglæde – og reelt også medføre ressourcespild, massivt øget administration og øgede sikkerhedsrisici. Men det behøver slet ikke at koste ekstra, hvis du giver medarbejderne indflydelse på, hvilke enheder de skal arbejde på. Tværtimod kan du med en gennemtænkt choose-your-own-device-aftale stille præcis det udvalg af enheder og tilbehør til rådighed, som både lever op til medarbejdernes forventninger og virksomhedens sikkerhedskrav.