人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DELPHIでスクリンキャプチャツールを作っていますがデキが悪いので分かりません、質問です。

動作としてキャプチャを実行した時に、キャプチャしたファイルを、ダイアログを開かずに自動的にファイル名を「CAP-001-yymmddhhmmss」(※001の部分は連番、実行ごとに加算される。yymmddhhmmss部分は現在の時間)といった連番形式で付けて、自動的に保存させたいのです。
どう書いたらこのように自動的に連番ファイル名を付けさせるとができるでしょうか?
ソースをもらえると助かります。

●質問者: YAMAMOTO
●カテゴリ:コンピュータ
✍キーワード:CAP Delphi キャプチャ スクリ ソース
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● llusall
●200ポイント

連番は、イニファイルに保持してはいかがでしょうか?

ReadInteger で取得

WriteInteger で書込み

ができます。



uses IniFiles;

// ---------------------------------------------------------------------


var

  IniF: TIniFile;

  cnt : Integer;

begin

  Result := False;

  // ▼イニファイルオブジェクトを作成

  IniF := TIniFile.Create( 'C:\hoge.ini' );

  try

    // ---------------------------------------------------------------------

    // ---------------------------------------------------------------------

    // ▼連番取得

    cnt := IniF.ReadInteger('CAP', 'CNT',  0);

    // ▼カウントアップ

    cnt := cnt + 1;

    // ▼キャプチャ処理

    // ・・・

    // ファイル名を「CAP-000-yymmddhhmmss」にして保存

    // ▼連番書込み

    IniF.WriteInteger('CAP','CNT', cnt);

    // ---------------------------------------------------------------------

    // ---------------------------------------------------------------------

  finally

    IniF.Free;

  end;






「hoge.ini」の中身

// -------------------------------ここから

[CAP]

CNT=0

// -------------------------------ここまで

◎質問者からの返答

なるほど。

出来るか心配ですがさっそく実行してみます。

参考になりました。ありがとうございます。


2 ● aki73ix
●200ポイント

API のFileFindFirstでチェックしてみたところ上手くいきました

こちらが、サンプルになります

http://nifberry.727.net/test/hatena193.lzh

procedure TForm1.Button2Click(Sender: TObject);

var

  WFD: WIN32_FIND_DATA;

  HD: THandle;

  xdir,str:string;

  ST: SYSTEMTIME;

  hWndAll,hWndDC: THandle;

begin

//  フォルダ名にバックスラッシュをつける

    xdir:=IncludeTrailingBackslash(Edit1.Text);

    SetLength(str,1024);

    wsprintf2(PChar(str),'%sCAP-%03d*.*',PChar(xdir),Count);

    HD:=Windows.FindFirstFile(PChar(str),WFD);

    if HD<> INVALID_HANDLE_VALUE then

// 番号ファイルが存在するかチェック

    begin

    repeat

      Windows.FindClose(HD);

      Inc(Count);

      wsprintf2(PChar(str),'%sCAP-%03d*.*',PChar(xdir),Count);

      HD:=Windows.FindFirstFile(PChar(str),WFD);

//    WFD.cFileName;

    until not (HD<> INVALID_HANDLE_VALUE);

    end;

// 時刻からファイル名作成

    GetLocalTime(ST);

    wsprintf2(PChar(str),'%sCAP-%03d%02d%02d%02d%02d%02d%02d.bmp',PChar(xdir),Count,ST.wYear,ST.wMonth,ST.wDay,ST.wHour,ST.wMinute,ST.wSecond);


// キャプチャ

    hWndAll := GetDesktopWindow();

    hWndDC := GetDC(hWndAll);

    Image1.Picture.Bitmap.Width := Screen.Width;

    Image1.Picture.Bitmap.Height := Screen.Height;

    BitBlt(Image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, hWndDC, 0, 0, SRCCOPY);

    ReleaseDC(hWndAll, hWndDC);

// ファイル保存

    Image1.Picture.SaveToFile(str);

end;

◎質問者からの返答

親切な回答ありがとうございます。

問題としていた点以外にも、勉強になるところがあります。

解決しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ