【Application.OnMessage イベントハンドラ】 procedure TForm1.AppMessage(var Mesg: TMsg; var Handled: Boolean); var Point: TPoint; idr: TRect; begin if Mesg.message = WM_MOUSEMOVE then if Mesg.hwnd = ListView1.Handle then begin if ListView1.Items.Count > 0 then begin idr := ListView1.Items[0].DisplayRect(drBounds); if FListView1ItemHeght <> (idr.Bottom - idr.Top) then FListView1ItemHeght := (idr.Bottom - idr.Top); end; Point := ListView1.ScreenToClient(Mouse.CursorPos); FListView1MouseX := Point.X; FListView1MouseY := Point.Y; FListView1ItemIndex := (FListView1MouseY - ListView1.Top) div FListView1ItemHeght - 1; end; end;
720 名前:719 mailto:sage [2008/09/27(土) 13:15:17 ]
(つづき)
【OnData イベント】 procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem); var ColumnWidth: Integer; begin ColumnWidth := ListView1.StringWidth(Format('Item%d', [Item.Index])); Item.Caption := Format('Item%d', [Item.Index]);
if (FListView1ItemIndex = Item.Index) and (FListView1MouseX < 16) then Item.StateIndex := 1 else Item.StateIndex := 0;
if ListView1.Columns[0].Width < ColumnWidth + 30 then ListView1.Columns[0].Width := ColumnWidth + 30; end;
for N:=StringGRid1.Row to StringGrid1.RowCount-2 do StringGrid1.Rows[N].Text:=StringGrid1.Rows[N+1].Text; StrinGgrid1.RowCount:=StringGrid1.RowCount-1;