名前 題名 ▼ takaさん > ▼ Mr.XRAYさん > > > ファイルのリストをクリップボードにコピーする参考コードです. > > > TClipboard.SetAsHandle で行う場合です. > > > > ハイ.この件は早くも終了 !! > > いつも,こうありたいですね. > > え、別コードで 切り捨てですか?! もったいない > > Delphi 2005 で実行できるように いじらせてもらいました。 > (10.1も最後に実行してみました) > > 変更点 > ・眼に見えない操作なので、クリップボードは呼び出した時点でクリアしました > ・個数が0の時は、クリップボードにコピーしない > ・'' は無視 > ・LpDropFilesは、#0で初期化 > ・古いDelphiで構文エラーがでたのでその修正 ByteLength , Move > > [エラー] Unit1.pas(56): E2003 未定義の識別子 : 'ByteLength' > [エラー] Unit1.pas : E2015 この型には指定した演算子は使えません > > SetLength(LFileNameArray, 1); > LFileNameArray[0] := Application.ExeName; //ファイル > に置き換えてコピーできるか動作確認しました。 > > procedure CopyFilesToClipboard(const FileNames: array of string); > var > LFileListText : string; > LValue : string; > LpDropFiles : PDropFiles; > LhGlobal : THandle; > LLen : Integer; > begin > //CF_HDROP形式のファイルのコピーは,ファイル名の末尾に#0を付加 > //最後は#0#0とする > LhGlobal := 0; > LFileListText := ''; > Clipboard.Clear; > > for LValue in FileNames do begin > if (LValue <> '') then begin > LFileListText := LFileListText + LValue + #0; > end > end; > LFileListText := LFileListText + #0; > > LLen := {$IFDEF UNICODE}ByteLength{$ELSE}Length{$ENDIF}(LFileListText); > if (LLen = 1) then > Exit; > > LhGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, > SizeOf(TDropFiles) + LLen); > > if (LhGlobal = 0) then begin > //エラー > end else begin > try > LpDropFiles := GlobalLock(LhGlobal); > if (LpDropFiles = nil) then begin > //エラー > end else begin > try > FillChar(LpDropFiles^, SizeOf(LpDropFiles^), #0); > LpDropFiles^.pFiles := SizeOf(TDropFiles); > {$IFDEF UNICODE}LpDropFiles^.fWide := True;{$ENDIF} > > if LFileListText <> '' then begin > {$IF CompilerVersion >= 18.0} > Move(LFileListText[1], (PByte(LpDropFiles) + SizeOf(TDropFiles))^, LLen); > {$ELSE} > Move(LFileListText[1], Ptr(Integer(LpDropFiles) + SizeOf(TDropFiles))^, LLen); > {$IFEND} > end; > finally > GlobalUnlock(LhGlobal); > end; > Clipboard.SetAsHandle(CF_HDROP, LhGlobal); > end; > except > GlobalFree(LhGlobal); > end; > end; > end; GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link