Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In ImageList eine Bitmap laden? (https://www.delphipraxis.net/89703-imagelist-eine-bitmap-laden.html)

smart 4. Apr 2007 13:28


In ImageList eine Bitmap laden?
 
Hallo Alle!

Wie kann man in einem ImageList eine Bitmap laden?

Gruß
Heike

Noobinator 4. Apr 2007 13:42

Re: In ImageList eine Bitmap laden?
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var bmp:Tbitmap;
begin
bmp:=tbitmap.Create;
bmp.LoadFromFile('Pfad zur Datei');
imagelist1.Add(bmp,bmp);//keine Ahnung was der zweite paramter macht da musste jemand anderen fragen^^
freeAndNil(bmp);
end;
so würde ich das machen

smart 4. Apr 2007 14:14

Re: In ImageList eine Bitmap laden?
 
Zitat:

Zitat von Noobinator
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var bmp:Tbitmap;
begin
bmp:=tbitmap.Create;
bmp.LoadFromFile('Pfad zur Datei');
imagelist1.Add(bmp,bmp);//keine Ahnung was der zweite paramter macht da musste jemand anderen fragen^^
freeAndNil(bmp);
end;
so würde ich das machen

Vielen Dank. Ich hatte mich oben verhauen. Ich meine in einem ListView.

Gruß
Heike

ste_ett 4. Apr 2007 15:05

Re: In ImageList eine Bitmap laden?
 
Du könntest beim Zeichnen des Controls das Bild reinmalen lassen.

Delphi-Quellcode:
procedure TForm.ListViewCustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean);
var
  Bitmap: TBitmap;
  sFileName: String;
begin
  Bitmap := TBitmap.Create;
  try
    sFileName := 'C:\Windows\Angler.bmp';
    Bitmap.LoadFromFile(sFileName);
    ListView.Canvas.Draw(0, 0, Bitmap);
  finally
    Bitmap.Free;
  end;
end;
Aus Performacegründen kannst du das Laden des Bildes auch in den Konstruktor der Form verlagern. :)

smart 5. Apr 2007 09:47

Re: In ImageList eine Bitmap laden?
 
Zitat:

Zitat von ste_ett
Du könntest beim Zeichnen des Controls das Bild reinmalen lassen.
Aus Performacegründen kannst du das Laden des Bildes auch in den Konstruktor der Form verlagern. :)

Hi,
Die Idee ist ansich nicht schlecht. Aber, ich wollte das ListView für eine Bildvorschau missbrauchen. Wenn ich mit Canvas jetzt darauf zeichne, dann gehen die ganzen Vorteile der Listview (scroll, usw.) verloren.

Gruß
Heike

bitsetter 5. Apr 2007 12:50

Re: In ImageList eine Bitmap laden?
 
Hallo,

so könnte man es machen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  LstItm: TListItem;
  Bild: TBitmap;
  Pfad: AnsiString;
begin
  Bild:= TBitmap.Create;
  try
    Pfad:= 'C:\bild.bmp';//Beispiel
    if not FileExists(Pfad) then
    begin
      Showmessage('Fehler, das Bild wurde nicht gefunden');
      exit;
    end;
    Bild.LoadFromFile(Pfad);
    ImageList1.Width:= Bild.Width;
    ImageList1.Height:= Bild.Height;
    caption:= inttostr(ImageList1.Height);

    ImageList1.Add(Bild, Bild);
    ImageList1.Add(Bild, Bild);//Demo 2 Bilder
  finally
    Bild.Free;
  end;

  ListView1.ViewStyle := vsIcon;
  ListView1.LargeImages := ImageList1;

  ListView1.Items.BeginUpdate;
  for i := 0 to ImageList1.Count - 1 do
  begin
    LstItm := ListView1.Items.Add;
    LstItm.Caption := 'Item ' + IntToStr(i);
    LstItm.ImageIndex := i;
  end;
  ListView1.Items.EndUpdate;
end;
Die Bilder in der Imagelist müssen aber immer die gleiche Größe haben.

inherited 5. Apr 2007 13:17

Re: In ImageList eine Bitmap laden?
 
Hi,
ich habe dafür letztens eine ListBox missbraucht:
Delphi-Quellcode:
procedure TMDIChild.lbTilesDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  lbTiles.Canvas.Draw(Rect.Left, Rect.Top, Tiles[Index]); //Tiles ist ein Array of TBitmap, hier einfach ein beliebeiges Bitmap einsetzen
end;
Den Style musst du auf lbOwnerDrawFixed stellen


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz