Q&A

  • listbox에서 색깔 주기..
listbox에 항목이 있는데여..

마우스를 가져가면 해당 항목만 반전(색깔변화)효과를 줄수는 없나여?

마우스가 가리키는 항목만여..마우스가 다른 항목을 가리키면 전에 가리킨

항목은 원래 색으로 돌아가구..새로 가리킨 항목이 반전 되는거염..

고수님들 알려주셈...

아무리 뒤져도 그런건 없는거 같애여..

addobject를 했는뎅 잘 안되네염..그건 아닌거 같궁..음..몰겠당..

알려주세여..

2  COMMENTS
  • Profile
    최용일 2001.05.01 03:37
    안녕하세요. 최용일입니다.



    리스트박스의 Style속성을 lbOwnerDrawFixed or lbOwnerDrawVariable로 설정해서 오너드로우로 그려주고, OnMouseMove이벤트에서 아이템의 포커스(TListBox.ItemIndex)를 바꾸어주는 방식으로 코딩해봤습니다. 참조하세요...



    object Form1: TForm1

    Left = 192

    Top = 133

    Width = 157

    Height = 372

    Caption = 'Form1'

    Color = clBtnFace

    Font.Charset = DEFAULT_CHARSET

    Font.Color = clWindowText

    Font.Height = -12

    Font.Name = '굴림'

    Font.Style = []

    OldCreateOrder = False

    OnCreate = FormCreate

    PixelsPerInch = 96

    TextHeight = 12

    object ListBox1: TListBox

    Left = 12

    Top = 12

    Width = 121

    Height = 321

    ImeName = '한국어(한글)'

    ItemHeight = 16

    Style = lbOwnerDrawFixed

    TabOrder = 0

    OnDrawItem = ListBox1DrawItem

    OnMouseMove = ListBox1MouseMove

    end

    end



    unit uUnit;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls;



    type

    TForm1 = class(TForm)

    ListBox1: TListBox;

    procedure FormCreate(Sender: TObject);

    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;

    Rect: TRect; State: TOwnerDrawState);

    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    public

    MouseIndex: Integer;

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    ListBox1.Items.AddObject('clAqua', TObject(clAqua));

    ListBox1.Items.AddObject('clBlack', TObject(clBlack));

    ListBox1.Items.AddObject('clBlue', TObject(clBlue));

    ListBox1.Items.AddObject('clDkGray', TObject(clDkGray));

    ListBox1.Items.AddObject('clFuchsia', TObject(clFuchsia));

    ListBox1.Items.AddObject('clGray', TObject(clGray));

    ListBox1.Items.AddObject('clGreen', TObject(clGreen));

    ListBox1.Items.AddObject('clLime', TObject(clLime));

    ListBox1.Items.AddObject('clLtGray', TObject(clLtGray));

    ListBox1.Items.AddObject('clMaroon', TObject(clMaroon));

    ListBox1.Items.AddObject('clNavy', TObject(clNavy));

    ListBox1.Items.AddObject('clOlive', TObject(clOlive));

    ListBox1.Items.AddObject('clPurple', TObject(clPurple));

    ListBox1.Items.AddObject('clRed', TObject(clRed));

    ListBox1.Items.AddObject('clSilver', TObject(clSilver));

    ListBox1.Items.AddObject('clTeal', TObject(clTeal));

    // ListBox1.Items.AddObject('clWhite', TObject(clWhite)); 흰색은 안보이군요.

    ListBox1.Items.AddObject('clYellow', TObject(clYellow));

    MouseIndex := -1;

    end;



    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

    Rect: TRect; State: TOwnerDrawState);

    begin

    with TListBox(Control) do

    begin

    if odFocused in State then

    begin

    Canvas.Brush.Color := TColor(Items.Objects[Index]);

    Canvas.Font.Color := clWhite;

    end

    else

    begin

    Canvas.Brush.Color := clWhite;

    Canvas.Font.Color := TColor(Items.Objects[Index]);

    end;

    Canvas.FillRect(Rect);

    Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Items[Index]);

    end;

    end;



    procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    begin

    TListBox(Sender).ItemIndex := TListBox(Sender).ItemAtPos(Point(X, Y), False)

    end;



    end.



    ^^ 항상 즐코하세요...



    이슬이(참이슬) wrote:

    > listbox에 항목이 있는데여..

    > 마우스를 가져가면 해당 항목만 반전(색깔변화)효과를 줄수는 없나여?

    > 마우스가 가리키는 항목만여..마우스가 다른 항목을 가리키면 전에 가리킨

    > 항목은 원래 색으로 돌아가구..새로 가리킨 항목이 반전 되는거염..

    > 고수님들 알려주셈...

    > 아무리 뒤져도 그런건 없는거 같애여..

    > addobject를 했는뎅 잘 안되네염..그건 아닌거 같궁..음..몰겠당..

    > 알려주세여..

  • Profile
    이슬이(참이슬) 2001.05.03 00:30