Q&A

  • 리스트박스에 아이콘을 추가하고 싶은데요...
리스트박스에 항목이 추가 될때마다 그 항목의 앞머리에 아이콘을 부여해주고 싶거든여..
부탁드립니당..
제가 해본것은

  listbox1.Items.Add('아이콘 나와라!');
  listbox1.items.Objects[0] := TBitmap.Create;
  listbox1.Items.Objects[0] := image1.picture.Bitmap;

이미지 컴포넌트에 제가쓸 이미지를 로더시켜 놓구여..
위와 같이 불러봤는데 불러지질 않네여...
리스트 박스트이 style은 lbOwnerDrawFixed 으로 놓구 했거덩여..

답변 기다리겠습니당..^^ 좋은 하루들 되세요...
4  COMMENTS
  • Profile
    홍성락 2002.11.20 23:41
    전번에 올린것을 참조해보시면 되는데요.
    ListBox의 DrawItem이벤트에 아래것을 추가해보세요
    procedure TForm1.Button2Click(Sender: TObject);
    var
        i : integer;
    begin
      i := listbox1.Items.Add('아이콘 나와라!');
      listbox1.items.Objects[i] := TBitmap.Create;
      listbox1.Items.Objects[i] := image1.picture.Bitmap;
    end;

    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var
            Bitmap: TBitmap;      { temporary variable for the item뭩 bitmap }
            Offset: Integer;      { text offset width }
    begin
            with (Control as TListBox).Canvas do  { draw on control canvas, not on the form }
            begin
            FillRect(Rect);       { clear the rectangle }
            Offset := 2;          { provide default offset }
            Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]);  { get the bitmap }
            if Bitmap <> nil then begin
                    BrushCopy(Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height),
                            Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clRed);  {render bitmap}
                    Offset := Bitmap.width + 6;    { add four pixels between bitmap and text}
            end;
            TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index])  { display the text }
            end;
    end;
    hsr/////////////////////////////////////
  • Profile
    김동완 2002.11.21 00:19
    우선 답변 감사드리고요...꾸벅...
    근데 잘 안되서요...ㅠ.ㅠ

    죄송하지만 다시한번만 봐주세요...

    아래 uses절에 보시면은 Variants 이 있는데...이걸 포함하고 실행하면
    Variants.dcu파일을 찾을수 없다고 실행이 안되네요..
    Variants을 제외하고 실행하면 실행은 되는데 아이콘이 나타나질 않구요...
    아이콘이 나타나지 않는 이유가 Variants 때문이라면 어떻게 해야되져?
    Variants.dcu파일은 찾아봐두 없던데요....
    델파일 5.0에서 작업중입니다...
    ==================================================================
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ImgList, StdCtrls, ExtCtrls, Variants;

    type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        Button1: TButton;
        Button2: TButton;
        ImageList1: TImageList;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
        procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
          Rect: TRect; State: TOwnerDrawState);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
        i : integer;
    begin
      i := listbox1.Items.Add('아이콘 나와라!');
      listbox1.items.Objects[i] := TBitmap.Create;
      listbox1.Items.Objects[i] := image1.picture.Bitmap;

    end;

    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var
            Bitmap: TBitmap;      { temporary variable for the item뭩 bitmap }
            Offset: Integer;      { text offset width }
    begin
            with (Control as TListBox).Canvas do  { draw on control canvas, not on the form }
            begin
            FillRect(Rect);       { clear the rectangle }
            Offset := 2;          { provide default offset }
            Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]);  { get the bitmap }
            if Bitmap <> nil then begin
                    BrushCopy(Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height),
                            Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clRed);  {render bitmap}
                    Offset := Bitmap.width + 6;    { add four pixels between bitmap and text}
            end;
            TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index])  { display the text }
            end;
    end;

    end.

  • Profile
    홍성락 2002.11.21 00:43
    Variants은 6.0부터 추가/분할된 유닛이므로 5.0이하에서는 제거하시구요.
    안나온다는건 리스트 박스트의 style속성을  lbOwnerDrawFixed 으로 하시구요, ListBox의 DrawItem이벤트에 ListBox1DrawItem이 선언되어 있는지 확인해보세요

    아니면 이미지컴포넌트에 있는 이미지 형식이 bmp가 아니라면 안나오니 이미지를 변환하는것을 게시판에서 찾아 bmp로 바꾸세요.
    hsr/////////////////////////////////////////////////
  • Profile
    김동완 2002.11.21 01:03