16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:クリップボードにテキストファイルをコ"
この発言は #01101 わいわい さんのクリップボードにテキストファイルをコピー に対するコメントです
この発言に対し以下のコメントが寄せられています
#01108 わいわい さん Re^2: クリップボードにテキストファイルを
わいわい さん、こんにちは。
こちらも APIのみで書いてみました。
program TextCopy;
uses Windows;
function SkipExeName(s: PChar): PChar;
begin
Result := s;
if Result^ = '"' then begin
repeat
Inc(Result);
until Result^ = '"';
Inc(Result);
end else begin
repeat
if Result^ = #0 then Exit;
Inc(Result);
until Result^ = ' ';
end;
while Result^ = ' ' do Inc(Result);
end;
label 0, 1;
var
FileName: PChar;
NextParam: PChar;
FileHandle: THandle;
FileSize: Integer;
MemHandle: HGlobal;
TextStr: PChar;
NumberOfBytesToRead: Integer;
begin
FileName := SkipExeName(CmdLine);
NextParam := SkipExeName(FileName);
if NextParam[-1] = ' ' then NextParam[-1] := #0;
FileHandle := CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if FileHandle = INVALID_HANDLE_VALUE then Exit;
FileSize := GetFileSize(FileHandle, nil);
MemHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, FileSize + 1);
if MemHandle = 0 then goto 0;
TextStr := GlobalLock(MemHandle);
if TextStr = nil then goto 1;
ReadFile(FileHandle, TextStr^, FileSize, NumberOfBytesToRead, nil);
TextStr[NumberOfBytesToRead] := #0;
GlobalUnlock(MemHandle);
if not OpenClipboard(0) then goto 1;
EmptyClipboard;
SetClipboardData(CF_TEXT, MemHandle);
CloseClipboard;
goto 0;
1:GlobalFree(MemHandle);
0:CloseHandle(FileHandle);
end.
>でも、こんだけのプログラムでも、290Kにもなるんですね。
> > Delphi5
上のもので Delhi2.0では 8.00KB、
アセンブリにしたもので TASMでは 4.50KBでした。
ぜえた (QZC05100)
Original document by ぜえた 氏 ID:(QZC05100)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|