線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1605
推到 Plurk!
推到 Facebook!

取得存在剪貼簿的檔案名稱?

答題得分者是:careychen
a0
一般會員


發表:11
回覆:29
積分:18
註冊:2003-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-24 03:39:18 IP:118.165.xxx.xxx 訂閱
取得copy到簡貼簿的檔案名稱


procedure TForm1.Button3Click(Sender: TObject);
var
len,ftype:integer;
tmp: string;
myData: THandle;
myDataPtr: Pointer;
myDataLen: integer;
pFormatName: AnsiString;
begin
try
Clipboard.Open;
try
ftype := EnumClipboardFormats(0);
while (ftype>0) do
begin
SetLength(pFormatName,255);
len:=GetClipboardFormatName(ftype,@pFormatName[1],255);
setLength(pFormatName,len);
if UpperCase(pFormatName)='FILENAME' then begin
myData := GetClipboardData(ftype);
if myData <> 0 then begin
myDataPtr := GlobalLock(myData);
if myDataPtr <> nil then
try
myDataLen := GlobalSize(myData);
if myDataLen>0 then
begin
SetLength(tmp,myDataLen);
Move(myDataPtr^,tmp[1],myDataLen);
if copy(tmp,length(tmp),1)=#0 then
SetLength(tmp,length(tmp)-1);
Showmessage(tmp);
SetLength(tmp,0);
end;
finally
GlobalUnlock(myData);
end;
end;
end;
ftype := EnumClipboardFormats(ftype);
end;
finally
Clipboard.Close;
end;
finally
end;
英文檔名沒問題 遇到中文就會少字 不知道有無解法?
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-24 20:15:47 IP:59.126.xxx.xxx 訂閱
Hi, 我把程式稍微修正了一下,就可以了
修正的地方

tmp String ==> WideString
FILENAME ==> FILENAMEW
SetLength(...) ==> 增加 div 2 (因為 Unicode 的字增加兩倍的長度,所以要除回來)

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
len,ftype:integer;
tmp: WideString;
myData: THandle;
myDataPtr: Pointer;
myDataLen: integer;
pFormatName: AnsiString;
begin
Clipboard.Open;
try
ftype := EnumClipboardFormats(0);
while (ftype>0) do
begin
SetLength(pFormatName,255);
len := GetClipboardFormatName(ftype,@pFormatName[1],255);
setLength(pFormatName,len);
if UpperCase(pFormatName) = 'FILENAMEW' then
begin
myData := GetClipboardData(ftype);
if myData <> 0 then
begin
myDataPtr := GlobalLock(myData);
if myDataPtr <> nil then
try
myDataLen := GlobalSize(myData);
if myDataLen>0 then
begin
SetLength(tmp,myDataLen div 2);
Move(myDataPtr^,tmp[1],myDataLen);
//if copy(tmp,length(tmp) div 2,1)=#0 then
// SetLength(tmp,(length(tmp) div 2)-1);
Showmessage(tmp);
SetLength(tmp,0);
end;
finally
GlobalUnlock(myData);
end;
end;
end;
ftype := EnumClipboardFormats(ftype);
end;
finally
Clipboard.Close;
end;
end;
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
a0
一般會員


發表:11
回覆:29
積分:18
註冊:2003-09-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-24 20:36:22 IP:218.169.xxx.xxx 訂閱
原來如此,感謝您的指導
系統時間:2024-04-25 17:32:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!