|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"StringGrid Drag&Dropで行の移動"
{StringGridでDrag&Dropで行を移動する方法
DragMOdeをdmAutomaticにしておくと普通に選択したときも反応しちゃうので
このサンプルでは0列でクリックしたときだけドラッグが始まるようにしました
というわけで、stringGrid1のDragMOodeはdmManualにして置いて下さい。}
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
try
StringGrid1.mouseToCell(x,y,acol,arow);
if acol=0 then
begin
StringGrid1.row:=arow;
StringGrid1.BeginDrag(True);
end;
except
end;
end;
procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X,
Y: Integer);
var
i,currRow,r,c:integer;
bufStrings:TStringList;
begin
stringGrid1.mouseTocell(x,y,c,r);
bufStrings:=TStringList.create;
try
currRow:=stringGrid1.row;
bufstrings.Assign(stringGrid1.rows[currRow]);
//削除する
for i:=currRow to stringGRid1.RowCount-2 do
begin
colorList[i-1]:=colorList[i];
StringGrid1.Rows[i].assign(StringGrid1.Rows[i+1]);
end;
//前から後ろと後ろから前の調整
if currRow<r then r:=r-1;
//挿入する
for i:=stringGrid1.RowCount-1 downTo r do
begin
StringGrid1.Rows[i].assign(StringGrid1.Rows[i-1]);
end;
stringGrid1.Rows[r].assign(bufstrings);
finally
bufstrings.free;
end;
end;
procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
{このイベントハンドラに何か記述があるだけでAcceptはTrueに
なっちゃうので if sender=StringGrid1 then accept=Trueではだめ}
if sender<>stringGrid1 then accept:=false;
end;
☆☆☆ わからないときサンプル蔵 わかったときサンプル蔵 ☆☆☆
97/12/15(月) 02:03 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|