Clipboard'ı Ezmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Clipboard'ı Ezmek

Mesaj gönderen vkamadan »

Merhaba değerli üyeler ,
galiba konu başlığı çok açıklayıcı değil şöyle bir yapıya ihtiyacım var ;

uygulamamızın bir bölümünde elektronik dokümantasyon yaptırıyoruz yani kullanıcının bilgisayarında ki ya da tarayıcı,kamera vb gibi yerlerden doğrudan dosya kaydetmesini sağlıyoruz, bu dosyaları ana bilgisayarda FTP ye kaydediyoruz veri tabanında ise dosyanın adı vb gibi bilgileri tutup ekranda dosya uzantısına uygun simgeyle listeleyip çift tıkladığında da FTP den dosyayı kendi bilgisayarına çekip açıyoruz, talep edilen şey uygulama içinde dosyaları görüntülediğimiz yerde bir dosya adını seçip klasik CTRL + C ye basıp , herhangi bir uygulamaya (masaüstü, yeni mail , photoshop , word,excel vb) gidip CTRL + V diyerek yapıştırmak istiyor, bunu yapabilmek için sanırım şöyle bir yol izlemeliyim ;

Dosya gösterdiğim ListBox ın üstünde CTRL + C tuş kombinasyonu tıklandığında dosyayı hemen FTP den geçici bir yere çekip Clipboarda dosya gibi yazmalıyım, sonra zaten herhangi bir uygulamaya gidip yapıştırabilir. bu yöntem eğer kopyaladığı dosyayı herzaman biryere yapıştıracaksa sıkıntı çıkartmaz ama CTRL + C der ve yapıştırmak istemezse boşuna FTP den dosyayı çekmiş oluruz bu gibi durumlar içinde kişi CTRL + C dediğinde clipboarda anlayabileceğim özel bir TEXT bilgi yazıp sonra clipboardu hook layıp herhangi bir yerde CTRL + V yapılırsa clipboarddaki TEXt bilgi benim istediğim bilgiyse FTP den çekip dosyayı uygulamaya göndermek bu yöntem daha karmaşık gibi ama olsun ilk yöntem içinde yol gösteren olursa memnun olurum.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Clipboard'ı Ezmek

Mesaj gönderen Battosai »

Merhaba, içerik olarak clipboarda alıp hemen ilgili programa aktarmak istiyorsa ilk yöntemi deneyin yani her defada dosyayı çeksin. Öteki yöntem bana uygulanabilir gelmedi.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Clipboard'ı Ezmek

Mesaj gönderen vkamadan »

evet peki clipboard a nasıl dosya yazacağım ?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Clipboard'ı Ezmek

Mesaj gönderen Battosai »

Aşağıdaki procedure 'u netten buldum ama test etmedim. Sizin uygulamızda dosyayı yerelde bir temp dizinine çekmeniz sonrada aşağıdaki CopyFilesToClipboard producedure ile clipboarda almanız gerekiyor.

Kod: Tümünü seç

uses
  ShlObj, ClipBrd;

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;
Usage Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat');
end;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Clipboard'ı Ezmek

Mesaj gönderen vkamadan »

@Battosai
verdiğiniz örnekle belirttiğim işlemi yapabildim , teşekkür ederim.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla