coding @ the speed of thought RSS 2.0
 Friday, June 01, 2007

Artık 30 dan gün alıyorum.Yolu yarıladım...
Bu ana kadar yanımda olan herkese çok teşekkür ediyorum...

Friday, June 01, 2007 9:32:41 PM (GTB Standard Time, UTC+02:00)  #    Comments [2] -
Genel
 Wednesday, May 30, 2007

http://www.csharpnedir.com/netvideo.asp linkinde bulunan Derinlemesine GridView & DetailsView görsel dersim hakkında Fatih arkadaşımızın sorusu:
Benim anlamadığım bir nokta var: SP içinde id değerini kullanıyoruz oysaki en başta DataBind işlemini gerçekleştirirken bu kolonu remove etmiştik.

Evet Id kolonunu gridview üzerinde remove ettik ve id boundfield'larda gözükmüyor, fakat Gridview'un DataKeyNames özelliğine id kolonu atanmıştır.Dolayısı ile id alanı değeri gridview tarafından halen tutulmaktadır.Bu alana , (virgül) ayracı ile birden fazla kolon ismi atayabilirsiniz...

Umarım açıklayıcı olmuştur.

Wednesday, May 30, 2007 7:13:56 AM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Software
 Monday, May 28, 2007

BHO nedir ilk önce bunu açıklayalım.Browser Helper Object, işletim sisteminde Browser görevini üstlenmiş bileşenler üzerinde çalışmak için tasarlanmış eklentilerdir.Internet Explorer 'a yazılan eklentiler iyi bir BHO örneği olacaktır.

BHO objemiz IObjectWithSite arayüzünden türemelidir.Bu arayüzün SetSite ve GetSite isminde iki metodu mevcuttur.İlk önce bu arayüzü gözden geçirelim.

using System;
using System.Runtime.InteropServices;

namespace MyBHO
{
[ComVisible(true),
Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectWithSite
{
[PreserveSig]
int SetSite([MarshalAs(UnmanagedType.IUnknown)]object site);
[PreserveSig]
int GetSite(ref Guid guid, out IntPtr ppvSite);
}
}

IE herhangi bir browser kontrolü oluşturduğunda SetSite çalışacak ve biz de gerekli nesneleri burada atayacağız.
Şimdi IObjectWithSite arayüzünden türeyen MyBHO sınıfımızı inceleyelim.

using System;
using System.Collections.Generic;
using System.Text;

using System.Runtime.InteropServices;
using Microsoft.Win32;
using SHDocVw;

namespace MyBHO
{
[ComVisible(true),
ClassInterface(ClassInterfaceType.None)]
public class MyBHO : IObjectWithSite
{
WebBrowser webBrowser;

public MyBHO()
{
}

public static string BHOKEYNAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";

[ComRegisterFunction]
public static void RegisterBHO(Type t)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);

if (key == null)
key = Registry.LocalMachine.CreateSubKey(BHOKEYNAME);

string guidString = t.GUID.ToString("B");
RegistryKey bhoKey = key.OpenSubKey(guidString);

if (bhoKey == null)
bhoKey = key.CreateSubKey(guidString);

key.Close();
bhoKey.Close();
}

[ComUnregisterFunction]
public static void UnregisterBHO(Type t)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true);
string guidString = t.GUID.ToString("B");

if (key != null)
key.DeleteSubKey(guidString, false);
}

public void webBrowser_BeforeNavigate2(object pDisp, ref object Url,
ref object Flags, ref object TargetFrameName, ref object PostData,
ref object Headers, ref bool Cancel)
{
string _Url = (string)Url;
Uri _uri = new Uri(_Url);
if (_uri.Host == "www.leventyildiz.net")
{
Cancel = true;
System.Windows.Forms.MessageBox.Show("Bu siteye çıkamazsınız");
}
}

#region IObjectWithSite Members
public int SetSite(object site)
{
if (site != null)
{
webBrowser = (WebBrowser)site;
if (webBrowser != null)
{
webBrowser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
}
}
else
{
if (webBrowser != null)
{
webBrowser.BeforeNavigate2 -= new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
webBrowser = null;
}
}
return 0;
}

public int GetSite(ref Guid guid, out IntPtr ppvSite)
{
IntPtr punk = Marshal.GetIUnknownForObject(webBrowser);
int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);
Marshal.Release(punk);

return hr;
}
#endregion
}
}

Açıklamalar
SHDOCVW
using SHDocVw;
SetSite metodu ile gelen object türünden site nesnesi "Microsoft Internet Controls" com'unda (ShDocVw.dll) bulunan WebBrowser nesnesine dönüştürülerek kullanılacağından dolayı bu com'u projemize register etmemiz gerekmektedir.

BHOKEYNAME
public static string BHOKEYNAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
Bu string, IE nin eklentilerinin kaydedildiği registry key'i dir.Assembly mizi register ettiğimizde ComRegisterFunction niteliği ile işaretlenmiş public static void RegisterBHO(Type t) metodu çalışacak ve gerekli işlemler yapılacaktır.Unregister da ise tahmin edeceğiniz gibi ComUnregisterFunction niteliği ile işaretlenmiş public static void UnregisterBHO(Type t) metodu çalışacak ve eklentinin IE kaydından çıkartılması için gerekli işlemler yapılacaktır.

SetSite
public int SetSite(object site)
{
if (site != null)
{
webBrowser = (WebBrowser)site;
if (webBrowser != null)
{
webBrowser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
}
}
else
{
if (webBrowser != null)
{
webBrowser.BeforeNavigate2 -= new DWebBrowserEvents2_BeforeNavigate2EventHandler(webBrowser_BeforeNavigate2);
webBrowser = null;
}
}
return 0;
}

bu kod IE yeni bir webbrowser kontrolü oluşturduğunda çalışacak koddur.Biz bu metodda gönderilen object türünden site nesnesini sınıf bazında erişimi olan webbrowser nesnemize set ediyoruz.Bu işlem esnasında webBrowser_BeforeNavigate2 metodunu webbrowser nesnesinin BeforeNavigate2 olayına bağlıyoruz.Dolayısı ile yeni bir sayfa açılmak istendiğinde ilk önce bizim metodumuz çağıralacak ve gerekli kontrolleri yapabiliyor olacağız.

BeforeNavigate
public void webBrowser_BeforeNavigate2(object pDisp, ref object Url,
ref object Flags, ref object TargetFrameName, ref object PostData,
ref object Headers, ref bool Cancel)
{
string _Url = (string)Url;
Uri _uri = new Uri(_Url);
if (_uri.Host == "www.leventyildiz.net")
{
Cancel = true;
System.Windows.Forms.MessageBox.Show("Bu siteye çıkamazsınız");
}
}

En basit metod :) gitmek istenilen Url bize metod tarafından bildiriliyor, bizde bunu kontrol edip izin veriyoruz veya işlemi iptal ediyoruz.Tabi bu metodda istediğimiz gibi kontroller gerçekleştirebilir, windows formlarıyla bilgi alabiliriz...

Yapılacak son işlem projemizi derledikten sonra regasm tool'u ile assembly mizi register etmek olacaktır.

vs 2005 command prompt ta

regasm /codebase MyBHO.dll
komutu IE add-on'umuzu register eder...
regasm /unregister MyBHO.dll
komutu IE add-on'umuzu unregister eder...

Sonuç olarak add-onumuzu IE özellikleri penceresinde görebiliriz.

Monday, May 28, 2007 2:47:16 PM (GTB Standard Time, UTC+02:00)  #    Comments [1] -
Software
 Sunday, May 27, 2007

Tüm İSTEK'lilere...
Yahu öldük mü biz?

Pazar günü okulun pilav günü vardı...Emre ile birlikte bir heyecanla okula gittik...
aaa hiçkimseyi tanımıyoruz.Hocalar değişmiş...Bir bilemedin iki hocayı tanıyoruz.
İlk önce fazla önemsemedik, gelir bizimkiler dedik, aldık basketbol topunu Emre ile eski günleri
andık.Kısa bir anma töreni oldu çünkü maç 2-2 iken ikimizde öldük...

Pilav gününün sonlarına doğru gidip listeye baktığımızda mezunların tarihleri 2000 den
başlıyordu, ve 95 mezunu 3 kişiydik...

Nerde İSTEK ruhu, nerde Tarabya Tatil Köyü ruhu arkadaşlar...

Sunday, May 27, 2007 11:04:15 AM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Genel
 Wednesday, May 23, 2007

Bırakın veritabanına kullanıcılar kendi formüllerini girsinler, uğraşılmaz bu kullanıcılarla canım...

declare
@v1        int,
        @v2        int,
        @v3        int

declare @formula    nvarchar(50)

set @v1=2
set @v2=4
set @v3=5
set @formula='SELECT (@v1+@v3)*@v2'

set @formula=replace(@formula,'@v1',convert(varchar,@v1))
set @formula=replace(@formula,'@v2',convert(varchar,@v2))
set @formula=replace(@formula,'@v3',convert(varchar,@v3))

print @formula
EXEC sp_executesql @formula

Wednesday, May 23, 2007 9:27:05 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Post-It | T-Sql
 Tuesday, May 22, 2007

BHO geliştiren arkadaşlar, bazen ie den manage add-ons bölümünden geliştirdiğimiz dll'i disable yapmak o dll'i serbest bırakmayabilir.Dll serbest kalmayınca da yeni kodu derlerken veya derlenmiş dll i üzerine kopyalarken bu nesne bir process tarafından tutuluyor hatası alırız.

Bu tür durumlarda yapmanız gereken task manager dan explorer process ini kill edip, new task menü seçeneğine explorer yazarak tekrar başlatmanız olacaktır.Logout Login çok uzun sürüyor :)

Tuesday, May 22, 2007 2:20:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Software

Okuma

RegistryKey rgkSettings = Registry.CurrentUser.CreateSubKey("MyRegistryKey");
txtUserID.Text = (string)rgkSettings.GetValue("LoginUserID");

Yazma

RegistryKey rgkSettings = Registry.CurrentUser.CreateSubKey("MyRegistryKey");
rgkSettings.SetValue("LoginUserID", txtUserID.Text);

Tuesday, May 22, 2007 12:07:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Post-It | Software
 Sunday, May 20, 2007

Adamlar bu işi boşuna hayat tarzı yapmamışlar.

Sunday, May 20, 2007 6:48:06 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Genel
url : http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
email : \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

Sunday, May 20, 2007 5:36:19 AM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Post-It | Software
 Saturday, May 19, 2007

System.Text.RegularExpressions.Regex rgxValidate = new System.Text.RegularExpressions.Regex("[0-9]");
if (!rgxValidate.IsMatch(txtFaxNo.Text))
{
errClients.SetIconAlignment(txtFaxNo, ErrorIconAlignment.MiddleLeft);
errClients.SetError(txtFaxNo, "Fax numarası giriş formatı hatalı.");
return;
}

Saturday, May 19, 2007 3:34:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Post-It | Software

 declare CURS_X cursor read_only forward_only for 
  (
  select X1,X2 from ...
  )

 open CURS_X
 fetch next from CURS_X into @X1,@X2
 while @@FETCH_STATUS=0
  begin
   .........
   .........
   --bir sonraki kayit okunuyor   
   fetch next from CURS_X into @X1,@X2
  end
 close CURS_X
 deallocate CURS_X

bundan sonra böyle, post-it lerimi burda tutmaya karar verdim.
bu da ilki.yazarken iyi oluyor.

Saturday, May 19, 2007 3:04:30 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Post-It | T-Sql


CP R60 :)
Secure Platform (Alet sürekli karada durduğu için)
Saturday, May 19, 2007 2:46:14 PM (GTB Standard Time, UTC+02:00)  #    Comments [0] -
Genel
Archive
<June 2007>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2008
Levent YILDIZ
Sign In
Statistics
Total Posts: 99
This Year: 31
This Month: 10
This Week: 2
Comments: 28
Themes
Pick a theme:
All Content © 2008, Levent YILDIZ
DasBlog theme 'Business' created by Christoph De Baene (delarou)