program dskcapt; { レイヤードウィンドウのスクリーンショットも取れるツール。 スタートボタンを押してキャプチャ対象へマウスカーソルを持っていきホットキーを押す ことで対象のスクリーンショットを取る。 ※課題 ・ツールバーアイコンのサイズ指定(2倍)。 ・連番ファイルで保存。 ・AVIやアニメーションGIF作成のUIをスマートに。 ・インターバル時間を指定しての連続キャプチャ。 ・画像の保存オプションを選択するダイアログの作成。 ・それに伴う保存時のプレビュー画面。 ・文字入力。 2017-01-24:Ver 0.2.15.36 ・コントロールキャプチャでエラーが出る不具合を修正。  DwmGetWindowAttribute APIがトップレベルウィンドウ以外ではエラーを返す仕様であっ  たことに対応していなかったミス。 ・範囲選択ウィンドウに簡易マウスジェスチャー機能を追加。 2017-01-19:Ver 0.2.14.24 ・範囲選択フォームの枠を広げると痕跡が残ってしまう不具合を修正。 ・範囲選択フォームが何かのはずみ(画面下に移動したりした場合)に四隅が透明に抜けて  しまう不具合を修正。 ・範囲選択の範囲の判定がおかしかった(上に少しずれていた)不具合を修正。 ・高DPI環境に部分対応。 2011-10-07:Ver 0.2.13.24 ・拡大・縮小時に子ウィンドウの大きさを画像の大きさに合わせるようにした。 ・キャプチャ後の画像表示でサイズが100%以上になる場合は100%に収めるように仕様変更。 ・「スムーズに拡大・縮小」オプション追加。  したのは良いけれど大差なかった。 ・ズームメニューの「常にウィンドウサイズに合わせる」の設定を保持していなかった不  具合を修正。 2011-09-24:Ver 0.2.12.23 ・高解像度の画像をキャプチャするとイメージリストのエラーが起きる不具合を修正。  キャプチャ画像の管理をTImageListではなくTListにすることで回避。  イメージリストはWindowsの管理下にあるようなのでリソース不足になるのであろうかと。  多分アイコンやボタンのビットマップ向けの小さな画像の管理用なのだろうかなと。 ・範囲選択の操作パネルに拡大・縮小用の矢印ボタンを追加。  [Ctrl]と[Alt]併用で移動用の矢印キーで拡大・縮小も兼ねるのだけではやりづらいので。 2011-09-21:Ver 0.2.11.23 ・モニター情報の変更に対応していなかった不具合を修正。 2011-09-09:Ver 0.2.10.23 ・プログラム起動で起動済みなら前面に移動の処理で大文字と小文字の区別をしていたた  め起動済みであっても新規に起動してしまうことがあった不具合を修正。 2011-09-03:Ver 0.2.9.23 ・マウスカーソル下のウィンドウではなくアクティブなウィンドウのキャプチャに対応。  コントロールはフォーカスのあるコントロール。 2011-08-29:Ver 0.2.8.23 ・アニメーションGIFとAVIのフレーム間の時間のデフォルトを500ミリ秒から1秒に変更。 ・MDI子ウィンドウのツールバーを下から上に移動。  下だとキャプチャ画像と紛らわしいのとやはりツールバーは上にあるのが基本であろう  ということで。 ・「ウィンドウサイズに合わせる」動作が正しくなっていなかった不具合を修正。 2011-08-25:Ver 0.2.7.23 ・キャプチャ画像の拡大縮小を切りのいい倍率にした。 2011-08-21:Ver 0.2.6.22 ・「AVIで保存」復活。  ffdshowの設定のコーデックで「Raw video」を全サポートにしていたのを無効に変えた  ら色化けが直った。 ・ShiftとCtrlキー同時押しで起動するとエラーが起きていた不具合を修正。  多分iniファイルなしで起動した場合もエラーになっていたものと思われる。 2011-08-13:Ver 0.2.5.22 ・プログラムの追加のダイアログの初期フォルダを選択ファイルのフォルダにするように  変更。 ・2011-08-04:Ver 0.2.3.22で削除した「シフトキー」と「スペースキー」を復活。  Fキーはプログラムによって機能が割り当て済みであったりするので。 2011-08-12:Ver 0.2.4.22 ・アニメーションGIFの透過GIFの指定が逆になっていた不具合を修正。 ・ファイルメニューに「ファイル形式を指定して保存」を追加。 ・保存ダイアログで選択したファイルのフォルダを初期フォルダにセットしていなかった  不具合を修正。 ・AVIへの保存で色化けしていた不具合発覚。  以前はなかったように思うのでPCの調子がおかしくなっただけなのかも知れない。  なので24bitカラーではなく32bitカラーの無圧縮AVIに変更。  というかAVIへの保存機能を凍結。 2011-08-04:Ver 0.2.3.22 ・ホットキーから「シフトキー」と「スペースキー」を削除。  ビデオキャプチャ機能追加(予定)に伴いキーのバッティングを避けるため。  それとシフトキーなんかは便利なのだけれどもうっかり複数キャプチャや連続キャプチャ  で大量にキャプチャしてしまうことがあったので削除な方向で。 2011-07-29:Ver 0.2.2.22 ・ツールボタンでチェックのオン・オフを行う場合ボタンのスタイルをtbsCheckにすれば  マウスダウンした後ボタンから移動してもチェックが外れないことを発見。  MouseDownとMouseUpイベントが不要になった。 2011-07-12:Ver 0.2.1.22 ・範囲選択で表示領域とキャプチャ画像の大きさが合っていなかった不具合を修正。 2011-06-09:Ver 0.2.0.22 ・アニメーションGIF、AVIの保存に対応。 ・アニメーションGIF、AVI用に連続キャプチャ機能を実装。 ・子ウィンドウの下部に編集用ツールバーを実装。 ・表示画像の大きさが子ウィンドウより大きい場合スクロールバーを表示するようにした。 マイナーバージョンアップ。 2011-05-10:Ver 0.1.7.18 ・TScreenのMonitorプロパティがモニター情報の変更に追随しないことからモニター情報  が変わった後にツールバーのドロップダウンメニューを表示させようとするとアクセス  違反のエラーが出てしまっていた不具合を修正。 2011-04-22:Ver 0.1.6.18 ・「隠れた部分もキャプチャ」でウィンドウリージョンを適用していなかった不具合を修  正。 ・「マウスカーソルをキャプチャ」でリソースを解放していなかった不具合を修正。 ・キャプチャ画像をダブルクリックした時の動作を常に実寸表示にしていたのを実寸表示  になっていたらウィンドウに合わせるよう変更。 2011-04-15:Ver 0.1.5.13 ・「隠れた部分もキャプチャ」機能実装。 ・マルチモニター環境でマイナスの位置にモニターがある場合デスクトップのキャプチャ  がうまくいかなかくなっていた不具合を修正。 ・クライアント領域のキャプチャがウィンドウリージョンを無視していた不具合を修正。 2011-04-08:Ver 0.1.4.13 ・範囲選択キャプチャを実装。  拡大画像表示つきのコントロールウィンドウも作成。 ・マウスカーソルのホットスポットが左上ではないカーソルの位置がずれてキャプチャさ  れていた不具合を修正。 2011-03-25:Ver 0.1.3.12 ・拡大・縮小表示(保存やコピーは実寸) ・画像をマウスでつかんで移動する機能を追加。  それに合わせてTShapeとTImageの利用を取りやめ。  移動させると盛大にちらつくので。 2011-03-23:Ver 0.1.2.8 ・MDI化。 ・複数キャプチャに対応。 ・キャプチャに「カーソルを含める」オプション追加。 2011-03-20:Ver 0.1.1.8 ・保存ダイアログの「透過GIF」のチェックの状態を設定ファイルに持つようにした。 ・保存ダイアログのファイルの種類の選択を設定ファイルに持つようにした。 2011-03-15:Ver 0.1.0.8 ・GIF,JPEGの保存に対応。 ・ファイルメニューの「プログラム」→「実行」をリストで選択されているプログラムの  実行からリストの項目をサブメニューに持つものに変更。  合わせてUnicodeの表示に対応。 ・バージョン情報のURLが間違っていた不具合を修正。 マイナーバージョンアップ 2011-03-14:Ver 0.0.3.4 ・クライアント領域のキャプチャがうまくいっていなかった不具合を修正。 ・「クリア」機能を実装。 2011-03-09:Ver 0.0.2.2 ・プログラムリストにプログラムアイコンを表示するようにした。 2011-03-07:Ver 0.0.1.2 ・プログラム起動支援機能を実装。  キャプチャ後実行する機能を盛り込んだものの今ひとつ使い勝手も良くなかったのでと  りあえず非表示な方向で。  単にリストから実行させるだけの単機能ということに。 2011-01-12:作成。 } (* //{$DEFINE _DEBUG} {$IFDEF DEBUG} myDebug, {$ENDIF} my_safedll, main in 'main.pas' {App_TOOLDskCapt}, childwin in 'childwin.pas' {App_TOOLDskCaptWindow}, area in 'area.pas' {App_TOOLDskCaptArea}, area_ctrl in 'area_ctrl.pas' {App_TOOLDskCaptAreaCtrl}, custom_toolbar in 'custom_toolbar.pas' {App_CustomToolBar}; *) //{$R 'CustomFileDialog.res' 'CustomFileDialog.rc'} //リソースファイルができた後は削除あるいはコメントアウト。 uses my_safedll, {$IFDEF _DEBUG} myDebug, {$ENDIF} Windows, Forms, myApp, myControl, myFile, myNum, myParam, main in 'main.pas' {App_TOOLDskCapt}, childwin in 'childwin.pas' {App_TOOLDskCaptWindow}, area in 'area.pas' {App_TOOLDskCaptArea}, area_ctrl in 'area_ctrl.pas' {App_TOOLDskCaptAreaCtrl}; // custom_toolbar in 'custom_toolbar.pas' {App_CustomToolBar}, // save_serialnum in 'save_serialnum.pas' {Form1}; {$R *.RES} {$R manifest.res} var lh_Handle : HWND; begin {$IFDEF _DEBUG} {$ENDIF} {$IFDEF DEBUG} ReportMemoryLeaksOnShutdown := True; {$ENDIF} if not(ParamW.OptionExists('area_window')) then begin Application.Initialize; Application.Title := 'DeskCapt'; Application.CreateForm(TApp_TOOLDskCapt, App_TOOLDskCapt); Application.Run; end else begin //範囲選択ウィンドウ lh_Handle := HWND(gfniStrToInt(ParamW.QuoatedValueString('area_window'))); if (IsWindow(lh_Handle)) then begin // gpcWindowStyleAdd(Application.Handle, WS_EX_TOOLWINDOW); Application.Initialize; Application.Title := 'DeskCapt-範囲選択'; Application.CreateForm(TApp_TOOLDskCaptArea, App_TOOLDskCaptArea); App_TOOLDskCaptArea.MessageHandle := lh_Handle; Application.Run; end else begin Exit; end; end; end.