Thema: Delphi ListBox für Bilder

Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: ListBox für Bilder

  Alt 29. Okt 2005, 14:09
Zitat:
wenn ich jetzt zB ein verzeichnis mit 50 bildern so anzeigen möchte, wo soll ich die bilder denn dann hinladen?
zB. in einem Array
var MyBmpArray: Array[0..49] of TBitmap; oder besser in ein dyn. Arrayvar MyBmpArray: Array of TBitmap; Das ist aber eine Sache für nicht so grosse der Bitmaps, man kann auch eine Komponente schreiben. Hier in dieser ImageListBox werden die Bitmaps aus einer Imagelist verwendet.


Delphi-Quellcode:
unit ImageListBox;

interface

uses
  Windows, Classes, Graphics, Controls, StdCtrls, Imglist;

type
  TImageListBox = class(TListbox)
  private
    FImageList: TImageList;
    procedure SetImageFromList(const Value: TImageList);
  public
    constructor Create(AOwner: TComponent); override;
    procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
  published
    property ImageList: TImageList read FImageList write SetImageFromList;
  end;

  procedure Register;

implementation

// Register -----------------------------------------------------------------

procedure Register;
begin
  RegisterComponents('Samples', [TImageListBox]);
end;

// --------------------------------------------------------------------------

constructor TImageListBox.Create(AOwner: TComponent);
begin
  inherited;
  Style := lbOwnerDrawVariable;
  ControlStyle := ControlStyle + [csAcceptsControls];
end;

procedure TImageListBox.DrawItem(Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
var
  Bmp: TBitmap;
begin
  if FImageList <> nil then
  begin
    Bmp := TBitMap.Create;
    FImageList.GetBitmap(Index, Bmp);
    ItemHeight := Bmp.Height;

    with Canvas do
    begin
      FillRect(Rect);

      if FImageList.DrawingStyle = dsTransparent then
      begin
        Canvas.BrushCopy(
          Bounds(Rect.Left, Rect.Top, Bmp.Width, Bmp.Height),Bmp,
          Bounds(0, 0, Bmp.Width, Bmp.Height), Bmp.TransparentColor);
      end else
        Draw(Rect.Left , Rect.Top, Bmp);

      TextOut(
        Rect.Left + Bmp.Width + 5,
        (Rect.Top + (Rect.Bottom-Rect.Top) div 2) - (TextHeight('X') div 2),
        Items.Strings[Index]);
    end;

    Bmp.Free;
  end;
end;

procedure TImageListBox.SetImageFromList(const Value: TImageList);
begin
  FImageList := Value;
  Self.Repaint;
end;

end.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat