2012-05-24 34 views
2

我正在製作非常簡單的測試應用程序,只是爲了查看拖動&拖放是如何工作的。當拖動模式=自動時不能更改行

基本上我有兩個stringgrids,源&的目的地,並且想從源選擇行中拖動一個單元格到目的地,併爲它創建一個新行。爲了讓事情儘可能簡單,我使用拖拽模式=自動,以便不必編寫手動拖拽模式處理程序。

只需幾行代碼,我只能從源的第一行拖動&刪除,但僅限。當我嘗試點擊不同的行時,要使用它作爲源,OnClick事件處理程序甚至不會觸發。

簡短的問題......當我使用drag mode = automatic時,我可以做我想做的事情嗎(拖動&拖放並拖動源行)?

跌落處理器看起來像這樣...

DestinationStringGrid.RowCount := DestinationStringGrid.RowCount + 1; 
DestinationStringGrid.Cells[0, DestinationStringGrid.RowCount - 1] := 
    SourceStringGrid.Cells[0, SourceStringGrid.Row]; 

所以,很顯然,我希望能夠改變SourceStringGrid.Row當我點擊SourceStringGrid

請讓我知道,如果德問題不明確。在此先感謝您的幫助

回答

3

可以使用OnStartDrag事件來確定鼠標位置拖動開始:

procedure TForm1.StringGrid1StartDrag(Sender: TObject; 
    var DragObject: TDragObject); 
var 
    Pt: TPoint; 
    C, R: Integer; 
begin 
    Pt := StringGrid1.ScreenToClient(Mouse.CursorPos); 
    StringGrid1.MouseToCell(Pt.X, Pt.Y, C, R); 
    if (R > 0) and (R < StringGrid1.RowCount) then 
    StringGrid1.Row := R; 
end; 
+0

+1和答案。謝謝! – Mawg

相關問題