Ana içeriğe atla

Visual Studio 2008 Add-In (Eklentiler)

Bu makalede Microsoft Visual Studio 2008 içerisine nasıl bir eklenti yazılabilir onu inceleyeceğiz. Bir eklenti yazmak için öncelikle bir Add-in projesi yaratmamız gerekmektedir.
Fileà New Project menüsüne tıkladığımızda karşımıza gelen ekranda “Project Types” alanında “Other Project Types” ağacı açılıp içerisinden “Extensibility” menüsü seçilir, sol tarafa gelen proje şablonlarından “Visual Studio Add-in” seçilir ve proje özellikleri girilerek “Ok” tuşuna basılır.
1
Yukarıdaki ekranda “Ok” tuşuna basıldıktan sonra ekrana add-in projesini yaratmak için 4 ekrandan oluşan bir wizard çıkar.

2
3
Şekil 1
Şekil 2
4 5
Şekil 3
Şekil 4
  • 1. ekranda add in yazılacağı dil seçilir. (Şekil 1)
  • 2. ekranda hangi tür uygulamalarda add-in’in destekleneceği seçilir (default seçimler seçili gelir). (Şekil 2)
  • 3. ekranda yazılacak Add-in’in adı ve tanımının girileceği 2 adet alan gelir. (Şekil 3)
  • 4. ekranda ise Add-in’in seçeneklerinin seçildiği ekrandır. İlk seçenek Tool menu yani seçeneklerde add in butonu yer alıp almayacağı için, 2. Seçenek add-in ne visual studio başladığında mı yükleneceği, 3. Seçenekte kullanıcı ara yüzü olmadan command yardımı ile çalıştırılıp çalıştırılmayacağı seçenekleridir. (Şekil 4)
  • En son çıkan 2 bilgi ekranı da Next  ile geçilerek “Finish” butonuna basılıp işlem tamamlanır.
proj
Projede oluşacak olan sınıflar yukarıdaki şekilde görülebilmektedir. ”CommandBar.resx” dosyası visual studio’da bulunan menu butonlarının isimlerini diller bazında tutan bir dosyadır. Dolayısı ile tıklandığı menünün ne olduğunu dil bazında ayrıştırılmasında kullanılabilir. “Connect.cs” dosyası asıl add-in projesinde yapılmak istenilen şeylerin kodlarının yazılabileceği sınıftır.
Connect sınıfı içerisindeki “OnConnection” metodu add-in’in yüklendiği fonksiyondur. Yani bu metod içerisinde menülere eklentiler yapılabilir. Zaten kod yaratıldığında seçenekler menüsüne buton ekleyen kod şablonu hazır bir şekilde gelmektedir.
“OnConnection” metoduna gelen parametrelerden ilki “application”, çağırılan uygulamanın adres bilgisidir. Eğer visual studio içersinden tetikleniyor ise bunu “DTE2” sınıfına cast ederek tüm visual studio’nun özelliklerine erişebiliriz. Şöyle ki; visual studio içerisinde bulunan tüm menülere solution’a, altındaki projelere ve tüm context menülerine erişilebilir.
Örnek olarak bir tool menüsü altına buton eklemek istersek kodu şöyle olabilir:
//Tools menüsü handle’ına ulaşılır.
CommandBarControl toolsControl = (((CommandBars)_applicationObject.CommandBars)[ "MenuBar"]).Controls["Tools"];






//Tools menüsü pop up olduğu için popup sınıfına cast edilir.
CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;

//Yeni bir command yaratılır. Yani eklenecek menü yaratılır. İlk //parametresi add-in’in handle’ı, ikincisi butonun id’si, üçüncü //parametresi butonun görünecek text’i, dördüncüsü tooltip text’i, //beşincisi MSO butonu olup olmadığı, altıncısı menüde başında görünecek //resim, yedincisi geri dönecek olan unique id’si
Command command = ((Commands2)_applicationObject.Commands).AddNamedCommand2(_addInInstance, "ButtonToolsMenu", "Entity Ekle", "Wizard", true, 159, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);






//Yaratılan command tool menüsüne eklenir.
command.AddControl(toolsPopup.CommandBar, 1);     
Menülere erişirken şu isimler kullanılabilir:
Sınıfların üzerinde sağa tıklandığında çıkan menü = "Class View Item";
Web Item üzerinde sağa tıklandığında çıkan menü = "Web Item";
Web Klasörü üzerinde sağa tıklandığında çıkan menü = "Web Folder";
Project üzerinde sağa tıklandığında çıkan menü = "Project Node";
Item üzerinde sağa tıklandığında çıkan menü = "Item";
Klasör üzerinde sağa tıklandığında çıkan menü = "Folder";
Proje üzerinde sağa tıklandığında çıkan menü = "Project";
Solution üzerinde sağa tıklandığında çıkan menü = "Solution";
Yukardaki MenuBar = "MenuBar";
Menü bardaki tool menüsü = "Tools";
Kod yazılan ekranda sağa tıklandığında çıkan menü = "Code Window";
Kod yazılacak bölümde sağa tıklayıp açılan context menüye “drop down list” şeklinde menüler eklenmesi için yazılacak kod örneği:
//Açılacak context menünün handle’ı alınır.
CommandBar oCommandBar = ((CommandBars)_applicationObject.CommandBars)[clsConstants "Code Window"];

//Açılacak Popup menü oluşturulur.
CommandBarPopup oPopup = (CommandBarPopup)oCommandBar.Controls.Add(MsoControlType.msoControlPopup, System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, true);
oPopup.Caption = "Bilgileri Güncelle";



//Popup menüye diğer alt menüleri eklenir.
CommandBarControl oControl = oPopup.Controls.Add(MsoControlType.msoControlButton, System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, true);
oControl.Caption = "Tümünü güncelle";

oControl = oPopup.Controls.Add(MsoControlType.msoControlButton, System.Reflection.Missing.Value, System.Reflection.Missing.Value, 1, true);



oControl.Caption = "Entity güncelle";

Bir proje item’ının üzerinde sağa tıklandığında çıkan menü eklenmesi için yazılacak kod:



//Eklenecek menü yaratılır.
Command command = _applicationObject.Commands.AddNamedCommand(_addInInstance, "GüncelleButonu", "Güncelle", "Güncelle", true, 159, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled);



//Item context menü handle’ı alınır.
CommandBar itemCmdBar = ((CommandBars)_applicationObject.CommandBars)[ "Item"];



//Yaratılan menü context menüye eklenir.
command.AddControl(itemCmdBar, 1);
Eklenen menülere tıklandığında ise yine “Connect.cs” sınıfı içerisindeki “Exec” metoduna düşülür ve istenilen işlemler burada yapılabilir. Bir add-in projesi içerisinde birden fazla buton eklenmiş olabilir, hangi butona basıldığını anlamak için “Exec” methoduna geçirilen ilk parametre olan “commandName” değerine bakılabilir. Bu değişkende eklenilen butonun id’sidir. Yani command yaratırken geçirilen ikinci parametredir.
if (commandName == "MyAddin1.Connect. GüncelleButonu")
şeklinde bir kontrol yapılarak güncelle butonuna tıklanıp tıklanmadığı anlaşılabilir. “MyAddin1.Connect” add-in projesinin adından gelmektedir.
Projeyi çalıştığında yeni bir visual studio açılacak ve “OnConnect” methodu çalışacaktır. Eğer buton ekleme kodları “OnConnect” metodunda ise visual studio açıldıktan sonra ilgili menülerde, eklenen butonlar görülebilir. Eklenilen butona tıklandığında da yine “Exec” metoduna girecek ve buradaki kodlar çalışacaktır. Bu add-in projesi içerisinde visual studio’nun tüm sınıflarına erişebiliriz demiştik. Bu sayede istenilen projeye bir klasör yada sınıf ekleyebilir, hatta sınıf içerisine kodlar, fonksiyonlar yazabiliriz. Bir sonraki makalede de bunlara değineceğiz.
Armağan DÖKER

Yorumlar

Bu blogdaki popüler yayınlar

UML ve Modelleme – Bölüm 4 (Class (Sınıf) Diyagramları)

Bir önceki makalemizde UML modellemede kullanılan ilk diyagram olan Use Case diyagramını incelemiştik. Bu makalemizde nesne tabanlı programlamada kullanılan sınıflar ve sınıfların arasındaki ilişkileri modelleyebileceğimiz diyagramlar olan Class(Sınıf) diyagramlarını inceleyeceğiz. UML’de sınıflar, nesne tabanlı programlama mantığı ile tasarlanmıştır. Sınıf diyagramının amacı bir model içerisinde sınıfların tasvir edilmesidir. Nesne tabanlı uygulamada, sınıfların kendi özellikleri (üye değişkenler), işlevleri (üye fonksiyonlar) ve diğer sınıflarla ilişkileri bulunmaktadır. UML’de sınıf diyagramlarının genel gösterimi aşağıdaki gibidir. Şekil 1. Class Diyagram Şekil1’de görüldüğü üzere bir dikdörtgeni 3 parçaya bölüyoruz. En üst bölüm sınıf adını, orta kısım özellik listesini (üye değişkenler) ve en son kısım, işlev listesini (üye fonksiyonlar) göstermektedir. Çoğu diyagramlarda alt iki bölüm çıkarılır. Genelde tüm özellik ve işlevler gösterilmemektedir. Ama

Yazılım Maliyet Tahmineleme Tecrübeleri

Yazılım mühendisliğinde maliyet hesabı her zaman problem olmuştur. "Bu iş kaç Adam/Gün tutar?" sorusuyla sıkça karşılaşıyoruz. Adam/gün veya Adam/ay ölçütleri bir kaynağın/kişinin belirtilen zaman dilimindeki iş gücü anlamına gelir. Tabi bu noktada yine kafa karışıklıkları başlar. 6 A/G'lik bir işi hızlandıralım diye 2 kişi ile yapmaya çalışsak ve kaynak/kod, modül, altyapı, insan vb. her bir şeyi bir kenara bıraksak, matematiksel basit formülle 6/2=3 A/G'de biter? Gerçek hayat böyle değil, öncelikle bunu anlamamız lazım. Hep şu örnek verilir; "Aynı bebeği 2 kadın birlikte daha kısa sürede doğurur mu?" Eğer bunun cevabı "Evet" ise (veya bir gün böyle bir durum ortaya çıkarsa), yazımı değiştirmem gerekecek:) Mevzu gerçekten derin...Maliyet hesabı; bulunduğunuz firmanın yazılım süreçlerini hangi methodlarla uyguladığına, ilgili işin o dönemdeki aciliyetine, (şirket yönetiminin baskısına:)) vb. bir çok duruma bağlı olabilir. Örneğin; bizim firmada e

UML ve Modelleme – Bölüm 3 (Use Case Diyagramlar)

Önceki iki makalemizde ( 1 , 2 ) UML’e genel olarak değinip ve modellemede kullanacağımız dokuz diyagram hakkında bilgiler vermiştik. Bu makalemizde Use Case diyagramından detaylı bahsedeceğiz. Öncelikle, genel Use case diyagramının tanımını hatırlayalım. “Bir kullanıcı ve bir sistem arasındaki etkileşimi anlatan senaryo topluluğudur.” Ivar Jacobson Senaryo tanımı için der ki: “Aktörle sistem arasında gerçekleştirilen, sonucunda aktöre farkedilir getirisi/ faydası oluşan etkileşimli diyalogdur. ” UML Use Case Diyagramları  sistemin işlevselliğini açıklamak amacıyla kullanılır. Sistemin birbirinden ayrı özelliklerinin detaylarını göstermekten ziyade, Use Case Diyagramlar, tüm mevcut işlevselliği göstermek için kullanılabilir. Buradaki en önemli noktalardan biri,   Use Case Diyagramlar temelde sequence diyagram ve akış diyagramlarından farklıdır. Use Case diyagramlar dört ana elemandan oluşmaktadır. Aktörler , Sistem (Proje kapsamını belirtir) , Use Caseler ve bunlar ara