お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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:33 凛(MXB01744)


Original document by 凛              氏 ID:(MXB01744)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum