Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen anoedi »

Selam dostlar ;

Vistada ,örneğin masaüstünde sağ tıklanınca açılan yeni menüsüne kendi yazdığım uygulamamın kullandığı dosya türünü eklemek istiyorum.

Dosya uzantısını programım ile ilişkilendirdim ,*.djb uzantılı bir dosya çalıştırıldığında benim programım açılıyor ancak yeni menüsüne ekleyemedim bu türü.

Yardımlarınızı bekliyorum ,saygılarımla ...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen conari »

@sabanakman hocanın bir makalesi var sitede.
olay registry ile ilgiliydi sanırım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen sabanakman »

O makale sadece program ile dosya türü ilişkilendirme hakkındaydı. Yeni menüsü için farklı teknikler gerekiyor. Tabi bu konuda hiç çalışmamıştım ama paylaşan olursa da çalışmış kadar oluruz sanırım :mrgreen: .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen conari »

:oops:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen mrmarman »

Merhaba...

Aslında metod basit. Şöyle ki, zaten dosya uzantınızı sisteme tanıtmak / eklemek işini halletmişsiniz. Tabi eklerken bazı kurallar söz konusu idi buna da uymuşsanız sadece bir anahtar eklemeniz "NEW/Yeni" menüsüne de eklenmeniz anlamına gelir.

HKEY_CLASSES_ROOT\.djb şeklinde bir başlık eklediniz. Bu başlığa geldiğinizde "(Varsayılan)" değer olarak bir adet size özel anahtar kelime yazmış olmalısınız. Örneğimizde "DJB_Ornek" olarak ifade edicem.

Bu size özel anahtar kelime olan "DJB_Ornek" şeklinde yeni bir başlığı da aynı dizinde açıyoruz ve HKEY_CLASSES_ROOT\DJB_Ornek şeklinde bir başlık elde ediyoruz.

Böylece iki başlığımız oldu. Birisi uzantımızın tanımı diğeri ise Windows tarafından ihtiyaç olduğunda ilk bakılacak yer olan referans bilgilerini barındıracak.

"DJB_Ornek" başlığımıza gidip (Varsayılan) kısmına "DJB Veritabanı" şeklinde açıklayıcı ifade yazıyoruz.
"DefaultIcon" alt başlığı oluşturup yazılımımızın tam yolunu ve adını girip, yanına virgül koyup iconindexini giriyoruz. Böylece EXE bünyesindeki (resource ile ekleyebileceğiniz) bir sürü icondan hangisinin bu veritabanı dosyasına atanacağını belirlemiş oluyoruz. Sonradan eklediğiniz icon yoksa 0 olarak bırakıyoruz ve application icon'un buna atanmasını sağlamış oluyoruz.
"shell" alt başlığı açıyoruz ve onun da altına "open" altbaşlığı, daha sonra onun da altına "command" alt başlığı açarak "(Varsayılan)" kısmına programımızın adını ve yanına bir boşluk bırakıp kullanmak istediğiniz parametreleri ve "%1" ekleyerek bu dosyanın isimini barındıracak değişkenini atamış oluyorsunuz.

- Buraya kadar olan kısım bir uzantının bir programa atanması, uzantıluı dosyaya çift tıklandığından atanan programın hangi şart ve parametre ile çalışacağını belirlemiş olduk.

*** Şimdi asıl konu olan NEW / Yeni menüsüne dosya uzantısını ekleme işlemine gelelim. Burada bir ayrıntının altını çizicez...

HKEY_CLASSES_ROOT\.djb olarak ilk açdığımız klasöre geri dönerek, altında "ShellNew" isminde bir klasör açıyoruz. Bu klasörün "(Varsayılan)" kısmına özel referans klasörümüzü yazıyoruz. yani DJB_Ornek yazıyorsunuz.

Daha sonra "FileName" isminde yeni bir değer başlığı açarak değer olarak veritabanınızın boş bir kopyasını bulundurduğunuz halinin tam yolunu yazıyorsunuz. Bu önemlidir. Çünkü Windows yeni dediğinizde bu kaynak dosyayı neredeyseniz oraya yeni bir kopyasını çıkartarak çoğaltacak ve yeni bir isim verilmesini isteyecektir.

Bu işlemleri içeren bir fonksiyon yazdığınızda program açılışlarında özel zamanlarda bu işlemlerin otomatik olarak yapılmasını sağlarsınız.

Kendi yazdığım fonksiyonu paylaşayım.

Kod: Tümünü seç

procedure RegisterFileType(sUzanti, sBildirim, sApp, sReferans, sIcon, sIconIdx, VarsayilanDataDosyasi : String) ;
var // Uses Registry, ShlObj;
   Reg:TRegistry;
begin
  if (sUzanti = '') or (sApp = '') then exit;

  Reg := TRegistry.Create;
  try
   Reg.RootKey:=HKEY_CLASSES_ROOT;
   Reg.OpenKey('.' + sUzanti, True);
   Reg.WriteString('', sReferans);
   Reg.CloseKey;

   if FileExists(VarsayilanDataDosyasi) then
   begin // Bu da Sağ Mouse - Yeni dediğinizde oluşacak yenisi için kaynak dosya.
     Reg.OpenKey('.' + sUzanti + '\ShellNew', True);
     Reg.WriteString('', sReferans);
     Reg.WriteString('FileName', VarsayilanDataDosyasi );
     Reg.CloseKey;
   end else begin
     If Reg.KeyExists('.' + sUzanti + '\ShellNew' )
       then Reg.DeleteKey( '.' + sUzanti + '\ShellNew' );
   end;

   Reg.OpenKey(sReferans, True);
   Reg.WriteString('', sBildirim) ;
   Reg.CloseKey;

   Reg.OpenKey(sReferans +'\DefaultIcon', True);
   Reg.WriteString('', sIcon + ',' + sIconIdx);
   Reg.CloseKey;

   Reg.OpenKey(sReferans + '\shell\open\command', True);
   Reg.WriteString('',sApp+' "%1"');
   Reg.CloseKey;

  finally
   Reg.Free;
  end;

  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
end;
Kullanımı

Kod: Tümünü seç

RegisterFileType( 'DJB', 'DJB Yazılımı Veritabanı', Application.ExeName, 'DJB_Ornek', Application.ExeName, '0', ExtractFilePath(Application.Exename) + 'DATA\VarsayilanBosData.djb' );
Dosya belirtmezseniz fonksiyondaki if kurgusundan geçerek Yeni / New menüsüne ekleme işlemini yaılmasının önüne geçerek olumsuzluğu önler.

başarılar...
Resim
Resim ....Resim
anoedi
Üye
Mesajlar: 33
Kayıt: 20 Nis 2009 06:20

Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum

Mesaj gönderen anoedi »

Sayın mrmarman ;

Yardımlarınızdan dolayı çok teşekkür ederim.Söylediğiniz şekilde uygulayarak sorunu çözdüm.
Çok sağolun ,saygılarımla ...
Cevapla