お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"クリップボードからStringGridに貼り付け"





  エクセルのワークシート上で矩形領域のデータをコピーし、それをクリップ
ボード経由でStringGrid上に貼り付けるために作りました。当然 Clipbrd ユニ
ットをuseすることが必要です。動作チェックは Delphi 3 のみですが、Delphi
2 以降なら問題ないと思います。

  手続きにしましたが、関数にしてエラーコードなどを返すようにした方が便利
かもしれません(クリップボードが空、はみ出したデータがカットされた、等)。

{-------------------------------------------------------------------
クリップボードのデータをStringGridに読み込むための汎用手続き
  エクセルからのデータの転送を想定している。
  カラム間はTABで区切られ、
  行間はCRLFで区切られているという前提で書かれている。
  Col,Rowは書き込む最初のセル(左上のセル)の番地
--------------------------------------------------------------------}
procedure PasteFromClipboardToStringGrid(SGrid : TStringGrid;
                                         Col, Row : integer);
const
  Tab = #9;
  CR  = #13;
  LF  = #10;
var
  S, Subs : string;
  Cols,
  Rows,
  i       : integer;
begin
  {Col,Row が負の値のときには0に修正する}
  if Col < 0 then Col := 0;
  if Row < 0 then Row := 0;

  S := Clipboard.AsText;
  Rows := 0;
  Cols := 0;
  Subs := '';
  for i := 1 to Length(S) do
    case S[i] of
      Tab : begin
              if (Col + Cols < SGrid.ColCount) and
                 (Row + Rows < SGrid.RowCount) then
                SGrid.Cells[Col + Cols, Row + Rows] := Subs;
              Inc(Cols);
              Subs := '';
            end;
      CR  : begin
              if (Col + Cols < SGrid.ColCount) and
                 (Row + Rows < SGrid.RowCount) then
                SGrid.Cells[Col + Cols, Row + Rows] := Subs;
              Cols := 0;
              Inc(Rows);
              Subs := '';
            end;
      LF  : ;
      else  begin
              Subs := Subs + S[i];
            end;
    end;
end;

                                                            ひの


Original document by ひの            氏 ID:(GFD03044)


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

Copyright 1996-2002 Delphi Users' Forum