Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите: Хитрости с клипбоардом [D6, Win2k]


Stager ©   (2003-01-19 19:59:00) 

Есть задача.

Вводная:Известно, что в Windows-броузере существует возможность выделить несколько файлов, скопировать в клипбоард, после чего вставить в другом месте.

Вопрос:можно ли средствами API получить список файлов, скопированных в клипбоард таким образом, а также создавать их самостоятельно?

Примечание:Попытка извлечь такое содержимое как текст выдает пустую строку. Формат сообщения в клипбоарде имеет номер 15 (CF_HDROP), и не описан ни в каких доступных мне хелпах.

С уважением, Алексей.


Stager   (2003-01-20 01:22:00) [1]

Спасибо огромное. Все работает.

С уважением, Алексей.


Набережных С.   (2003-01-19 22:06:00) [2]

procedure TForm1.BitBtn1Click(Sender: TObject);
var
H: THandle;
s: string;
n, Count: integer;
begin
ListBox1.Items.Clear;
H:=Clipboard.GetAsHandle(CF_HDROP);
if H = 0 then Exit;
Count:=DragQueryFile(H,DWORD(-1),nil,0);
if Count = 0 then Exit;
SetLength(s,MAX_PATH);
for n:=0 to Count-1 do
begin
DragQueryFile(H,n,@s[1],MAX_PATH+1);
ListBox1.Items.Add(PChar(s));
end;
end;

type
PDROPFILES = ^TDROPFILES;
TDROPFILES = packed record
pFiles: DWORD;
pt: TPOINT;
fNC: BOOL;
fWide: BOOL;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
H: HGLOBAL;
n, Size: integer;
P: PChar;
begin
Size:=SizeOf(TDROPFILES)+1;
for n:=0 to ListBox1.Items.Count-1 do
Inc(Size, Length(ListBox1.Items[n])+1);
H:=GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE or GMEM_ZEROINIT,Size);
if H = 0 then Exit;
try
P:=GlobalLock(H);
try
with PDropFiles(P)^ do
begin
pFiles:=SizeOf(TDropFiles);
fWide:=false;
end;
Inc(P, SizeOf(TDROPFILES));
for n:=0 to ListBox1.Items.Count-1 do
begin
StrPCopy(P,ListBox1.Items[n]);
Inc(P,Length(ListBox1.Items[n])+1);
end;
ListBox1.Items.Clear;
finally
GlobalUnlock(H);
end;
except
GlobalFree(H);
raise;
end;
Clipboard.SetAsHandle(CF_HDROP,H);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо