Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно Cut\Paste, (файлы) 
:(
    Опции темы
Vex
Дата 7.6.2004, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Illusion Dolphin, слухай, Girder же привел пример какие папки перемещаются/копируються, так попробуй их открыть, если файла нет, то он вырезан. smile.gif


Цитата
На счёт З.Ы. полностью согласен, но я нигде не могу найти его... Уже всё перерыл и ноль...

аналогично sad.gif


--------------------
Слава Україні.
PM   Вверх
Girder
Дата 7.6.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



По моему здесь все доходчиво описанно:
http://msdn.microsoft.com/library/default....g/clipboard.asp

Но можно и схитрить (хитрость номер 1):

Код
procedure TForm1.Button2Click(Sender: TObject);
var Hand:THandle;
   Count:integer;
   pfname: array[0..1023] of char;
   Item:TListItem;
   CD:Cardinal;
   s:string;
begin
CBDInfo.Clear;
if IsClipboardFormatAvailable(CF_HDROP) then
 begin
  if OpenClipboard(Self.Handle)=false then exit;
  CD:=0;
  repeat
   CD:=EnumClipboardFormats(CD);
   if (CD<>0)and(GetClipboardFormatName(CD,pfname,1024)<>0) then
    begin
     s:=UpperCase(string(pfname));
     if Pos('DROPEFFECT',s)<>0 then
      begin
       Hand:=GetClipboardData(CD);
       if (Hand<>NULL) then
        begin
         Count:=DragQueryFile(Hand,$FFFFFFFF,nil,0);
         if Count=1 then
          begin
           Item:=CBDInfo.Items.Add();
           Item.Caption:='Copy';
          end else
          begin
           Item:=CBDInfo.Items.Add();
           Item.Caption:='Move';
          end;
        end;
       CD:=0;
      end;
    end;
  until (CD=0);
  Hand:=GetClipboardData(CF_HDROP);
  if (Hand<>NULL) then
   begin
    Count:=DragQueryFile(Hand,$FFFFFFFF,nil,0);
    if Count>0 then
     repeat
      dec(Count);
      DragQueryFile(Hand,Count,pfname,1024);
      Item:=CBDInfo.Items.Add();
      Item.Caption:=string(pfname);
     until (Count=0);
   end;
  CloseClipboard();
 end;
end;


Еще раз повторяю: "В ClipBoard-е файлы не хранятся"

Удачи.

Это сообщение отредактировал(а) Girder - 8.6.2004, 10:43


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Illusion Dolphin
Дата 7.6.2004, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Girder: Огромное тебе СПАСИБО!!! 8) Это как раз то, что надо!
Только можешь подсказать, как из программы вырезать файл?
У меня есть функция для копирования файлов, но я никак не могу её перевести для вырезки 8(... Из msdn я не понял толком, как это сделать sad.gif. Помоги, а???

Фот функция для копирования:

procedure CopyFilesToClipboard(FileList: string);
var
DropFiles: PDropFiles;
hGlobal: THandle;
iLen: Integer;
begin
iLen := Length(FileList) + 2;
FileList := FileList + #0#0;
hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
SizeOf(TDropFiles) + iLen);
if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');
begin
DropFiles := GlobalLock(hGlobal);
DropFiles^.pFiles := SizeOf(TDropFiles);
Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
GlobalUnlock(hGlobal);
Clipboard.SetAsHandle(CF_HDROP, hGlobal);
end;
end;


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Girder
Дата 8.6.2004, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



А ты что с COM не работал? baaa.gif

Хитрость номер 2(Explorer поймет, а вот хитрость номер 1 не много надо изменить):
Код

uses ... ShlObj;

//FCM=true - копирование
//FCM=false - перемещение
procedure TForm1.Copy_Move(FCM:Boolean;File_List:TStrings);
{type
PDROPFILES = ^TDROPFILES;
TDROPFILES = record
 pFiles:DWORD;
 pt:TPOINT;
 fNC:BOOL;
 fWide:BOOL;
end;}
var hGlobal,shGlobal:THandle;
   DropFiles:PDropFiles;
   REff:Cardinal;
   dwEffect:^Word;
   rSize,i:Integer;
   c:PChar;
begin
i:=File_List.Count;
if (i=0)or(OpenClipboard(Self.Handle)=false) then exit;
try
 EmptyClipboard();
 rSize:=sizeof(TDropFiles);
 repeat
  dec(i);
  rSize:=rSize+Length(trim(File_List.Strings[i]))+1;
 until (i=0);
 inc(rSize);
 hGlobal:=GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,rSize);
 if hGlobal<>0 then
  begin
   DropFiles:=GlobalLock(hGlobal);
   DropFiles.pFiles:=sizeof(TDropFiles);
//    DropFiles.pt:=;
   DropFiles.fNC:=false;
   DropFiles.fWide:=False;
   i:=File_List.Count;
   c:=PChar(DropFiles);
   c:=c+DropFiles.pFiles;
   repeat
    dec(i);
    StrCopy(c,PChar(trim(File_List.Strings[i])));
    c:=c+Length(trim(File_List.Strings[i]))+1;
   until (i=0);
   GlobalUnlock(hGlobal);
   shGlobal:=SetClipboardData(CF_HDROP,hGlobal);
   if (shGlobal<>0)and(FCM=false) then
    begin
     hGlobal:=GlobalAlloc(GMEM_MOVEABLE,sizeof(dwEffect));
     if hGlobal<>0 then
      begin
       dwEffect:=GlobalLock(hGlobal);
       dwEffect^:=2;//DROPEFFECT_MOVE;
       GlobalUnlock(hGlobal);
       REff:=RegisterClipboardFormat(PChar('Preferred DropEffect'));//'CFSTR_PREFERREDDROPEFFECT'));
       SetClipboardData(REff,hGlobal)
      end;
    end;
  end;
finally
 CloseClipboard();
end;
end;


А по хорошему надо юзать COM. Вот тебе некоторые ссылки(там есть готовый компоненты):
http://www.unitoops.com/uoole/examples/index.htm#Delphi
http://www.unitoops.com/default.htm
http://podgoretsky.com/ftp/Docs/Delphi/D3/...ogLib/ch_04.htm
http://www.undu.com/Articles/990317b.html
http://www.undu.com/Articles/990901g.html

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Girder
Дата 8.6.2004, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Ладно, не буду мучать тебя, вот что надо изменить в хитрости номер 1:

Было:
Код

begin
...
    if Pos('DROPEFFECT',s)<>0 then
     begin
      Hand:=GetClipboardData(CD);
      if (Hand<>NULL) then
       begin
        Count:=DragQueryFile(Hand,$FFFFFFFF,nil,0);
        if Count=1 then
         begin
          Item:=CBDInfo.Items.Add();
          Item.Caption:='Copy';
         end else
         begin
          Item:=CBDInfo.Items.Add();
          Item.Caption:='Move';
         end;
       end;
      CD:=0;
     end;
...
end;


заменить на:
Код

...
var ...
     dwEffect:^Word;
begin
...
     if Pos('DROPEFFECT',s)<>0 then
      begin
       Hand:=GetClipboardData(CD);
       if (Hand<>NULL) then
        begin
         dwEffect:=GlobalLock(Hand);
         if dwEffect^=2 then
          begin
           Item:=CBDInfo.Items.Add();
           Item.Caption:='Move';
          end else
          begin
           Item:=CBDInfo.Items.Add();
           Item.Caption:='Copy';
          end;
         GlobalUnlock(Hand);
        end;
       CD:=0;
      end;
...
end;


Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Illusion Dolphin
Дата 8.6.2004, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Girder: СПАСИБО-СПАСИБО!!!! smile.gif smile.gif smile.gif
Да, я не работал ещё толком с этой технологией, я только вот пытаюсь кое-что освоить... Очень благодарен!!!!!!



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Mephisto
Дата 7.6.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Доброго фсем дня...
Хочу подключить свою трубу под линузом (Mandriva 2006). Труба Nokia 2610, кабель CA-45. Из-под винды асилил только подключится при помощи MobiMB v3.4, ничего более не кушало ее. USB кабло определяется как Prolific USB-to-Serial Comm Port. Теперь собсна вопросец... Как ентот мегадевайс подключить под линузом? GPlus ниасилил трубу ни под линузом, ни под виндами... :/
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.