1
두 번 클릭하면 항목의 배경을 빨간색으로 변경하여 해당 색상으로 유지하여 예를 들어 FormClose에서 빨간색으로 만 할 수 있습니다. (예 : OnClose 빨간색 항목 만 삭제) 표준 구성 요소로 가능합니까?더블 클릭하면 델파이가 목록 상자에서 항목 배경을 변경합니다.
두 번 클릭하면 항목의 배경을 빨간색으로 변경하여 해당 색상으로 유지하여 예를 들어 FormClose에서 빨간색으로 만 할 수 있습니다. (예 : OnClose 빨간색 항목 만 삭제) 표준 구성 요소로 가능합니까?더블 클릭하면 델파이가 목록 상자에서 항목 배경을 변경합니다.
ListBox를 소유자 드로잉해야합니다. Style
속성을 lbOwnerDraw
, lbOwnerDrawVariable
또는 lbVirtualOwnerDraw
으로 설정 한 다음 OnDrawItem
이벤트를 사용하여 원하는 항목을 그리십시오 (lbOwnerDrawVariable
의 경우 OnMeasureItem
이벤트 처리기도 제공해야 함). 어떤 항목을 두 번 클릭했는지 추적해야하며, 그런 다음 해당 항목을 다른 항목과 다르게 그릴 수 있습니다. 예를 들면 :
type
MyItem = record
Text: String;
DblClicked: Boolean;
end;
MyItems: array of MyItem;
var
Item: MyItem;
begin
SetLength(MyItems, ...);
MyItems[0].Text := 'Item Text';
MyItems[0].DblClicked := False;
...
for Item in MyItems do
ListBox1.Items.Add(Item.Text);
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
var
Pos: DWORD;
Pt: TPoint;
Index: Integer;
begin
Pos := GetMessagePos;
Pt.X := Smallint(LOWORD(Pos));
Pt.Y := Smallint(HIWORD(Pos));
Index := ListBox1.ItemAtPos(ListBox1.ScreenToClient(Pt), True);
if Index <> -1 then
begin
MyItems[Index].DblClicked := True;
ListBox1.Invalidate;
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
if MyItems[Index].DblClicked then
begin
ListBox1.Canvas.Brush.Color := clRed;
ListBox1.Canvas.Font.Color := clWhite;
end else
begin
ListBox1.Canvas.Brush.Color := ListBox1.Color;
ListBox1.Canvas.Font.Color := ListBox1.Font.Color;
end;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, MyItems[Index].Text);
end;
하지만 그것은 OnDblClick 이벤트해야합니다. 예를 들어 주시겠습니까? – Gab
'OnDblClick' 이벤트는 색상을 직접 변경할 수는 없지만 두 번 클릭 한 항목을 추적하는 데 사용할 수 있으며 다시 그리기를 트리거하기 위해 ListBox를'무효화 (') 할 수 있으며'OnDrawItem' even 필요에 따라 다른 색상을 사용하여 현재 추적 된 두 번 클릭 된 항목을 그릴 수 있습니다. –
추적을 위해 무엇을 제안 하시겠습니까? – Gab