2012-10-25 64 views
3

部件是符合條件的放置目標,有的不(第一行是列標題,第一列是一個排序索引列以後可下降到)。我有這個編碼和工作。拖動時鼠標懸停在stringgrid上?我stringgrid的

現在我在想,當他拖動鼠標在電池這是一個潛在的下降目標可能是不錯的GVE視覺indiation給用戶。我woudl想強調的單元格的行和列的第一個單元格了,他是目前徘徊(或者可能是整個行和列,形成一種十字的;我尚未確定)。我估計我可以在OnDrawCell中編碼。

我曾想過使用OnMouseMove和cehck if Dragging then,但是......

我的問題是,當我從來沒有拖動OnMouseMove事件被調用。

是否有任何其他的方式,當光標在拖動操作期間懸停在strigngrid知道嗎?

回答

4

OnDragOver event是專門爲這樣設計的;它會自動調用,並在鼠標指針所在的位置提供了XY座標。這個鏈接位置有一個代碼示例,演示如何使用它 - 這是一個TListBox,但原理是相同的。

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    ListBox1.Items.Add('Not'); 
    ListBox1.Items.Add('In'); 
    ListBox1.Items.Add('Alphabetical'); 
    ListBox1.Items.Add('Order'); 
end; 

// This OnDragOver event handler allows the list box to 
// accept a dropped label. 

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; 
    State: TDragState; var Accept: Boolean); 
begin 
    Accept := Source is TLabel; 
end; 
+0

+1和答案,@kenWhite ......我可以藉此機會說「哦!」嗎?對不起,我一直在編碼直到黑夜,然後在黎明前上升繼續。這表明,我可能會停止編碼,直到我醒來;-)感謝您一如既往的幫助。 – Mawg

+0

如果拖動源自另一個應用程序,該怎麼辦? DragOver和MouseMove)永遠不會被調用! –

+0

@Mike:這將是一個完全獨立的問題(和答案);對於跨應用程序的拖放,你必須使用OLE拖動功能,這涉及到不同的方法,並將shell註冊爲dragdrop客戶端。 –