Delphi2006 için Türkçe bir anket düzenlenmiştir.
Bu ankete http://bdn.borland.com/article/33765 adresinden katılabilirsiniz.
Daha iyi bir Delphi istiyorsak bu anketi mutlaka doldurmalıyız düşüncesindeyim?
Kolay gelsin...
Yusuf ÇELİK
Çarşamba, Kasım 08, 2006
Perşembe, Ekim 19, 2006
Delphi2006'ya geçmek için 14 neden
Eski Delphi sürümlerini kullananlar, yeni sürüme (BDS2006) neden terfi etmezler ?
Borland Delphi ustaları, yeni sürüme terfi etmek için 14 neden sıralıyorlar.
Siz ne dersiniz ?
Daha fazla bilgi için http://blogs.borland.com/NickHodges/archive/2006/10/05/28020.aspx sitesine göz atabilirsiniz.
Kolay gelsin...
Yusuf ÇELİK
Borland Delphi ustaları, yeni sürüme terfi etmek için 14 neden sıralıyorlar.
- Kalite -- Delphi 2006 yüksek kaliteli bir araçtır. Kalite, son olarak çıkarılan acil yamalar ile pekiştirildi. Kullanıcılardan gelen olumlu geri besleme bunun kanıtıdır.
- ECO -- ECO (Enterprise Core Objects) şimdi tüm versiyonlarda bulunuyor - Architect, Enterprise and Professional. ECO ile nesnel veri tabanı yapısı kurabilir ve hızlı bir şekide veri tabanınızı kontrol edebilirsiniz. Bunu yaparken, tablo değişiklikleriyle ya da tablolardaki field'ler deki değişiklikler ile uğraşmak zorunda değilsiniz. Ayrıca, gereksiz ve kabus olan DML (INSERT, UPDATE, DELETE, SELECT) ifadeleri sizin için kullanır. Bunun içi .NET kullanmanın gerekir. ECO öğrenmek için güzel bir site. Ancak Win32 de kullanmak için başka çözümler vardır, örneğin: InstantObjects.
- Hazır Kalıplar (Live Templates) -- Çok sık kullanılan ifadeleri sizin için kullanımını kolaylaştırır. Örneğin: try except/finally blokları, ShowMessage ya da bir Component'i kod içinde yaratmak gibi. Bunları herseferinde yazmak yerine bir kere tanımlıyoruz, böylece kodlamayı oldukça hızlandırmış oluyoruz.
- FormDesigner (VCL Designer Guidlines) -- Form üzerinde componentları ayarlarken çoğu zaman gereksiz zaman harcar ve sıkıntı çekeriz. Yeni form designer bu işi bizim için kolaylaştırmış. Bu component'i fare ile tuttuğunuzda diğer componentlar ile ilişkisini gösteriyor, fare ile sürükleyerek uygun pozisyona getiriyorsunuz. Artık birden fazla component'i seçerek Left'lerini ya da Top'larını aynı yapmanıza gerek yok.
- 4 programlama dil desteği -- Tek bir IDE içinde Delphi for Win32, Delphi for .NET, C++Builder ve C# dillerini programlama imkanı sağlıyor.
- Yeni VCL özellikleri -- Form üzerinde bulunan kontroller için Margin (kenarlarda boşluk), Padding (Doldurma) özellikleri (Property'ler) eklenmiştir. Bu özellikler ile form üzerinde bulunan kontrol Component'larınızı uygun bir şekilde ayarlayabilirsiniz.
- Yeni Component'lar -- TGridPanel, TFlowPanel, bunlar TPanel tarzı component'lardır. Bu paneller üzerine koyduğunuz kontrol componen'ları form'unuzu resize yapsanız bile yerleri uygun bir şekilde otomatik olarak ayarlanıyor. TCategoryButtons, bu özelliklerde başka bir component'dir. Bu component ile butonlarınızı gruplayabilirsiniz.
- Refactorings -- Bence çok güzel ve güçlü bir özellik. Örneğin: Bir projede bulunan bir değişkenin değiştirilmesi. Ya da Class yapısı kullanırken, bir metod'u bir üst class'a taşıma. Ya da çok sık kullanılan bir kod parçasını bir Metod olarak ayrıştırma işi.
- History Tab (Kod'un tarih bilgisi) -- Bir kod üzerinde çalışma yaparken, sık sık daha önce neler yaptığımızı merak ederiz. Bu özellik ile kod'unuzun save edilmiş son n adetini bulabilir ve bunları bir biriyle karşılaştırabilirsiniz. Bence bu da mükemmel bir özellik.
- Paketli ürünler -- IDE için birçok Plug-In bulabilirsiniz. Bunlardan bazıları: Castalia, CodeHealer ve BuilderBooster.
- Two Way Modeling (İki türlü modelleme) -- Architect, Enterprise ve Professional versiyonlarında Together UML modelleme yapısı kullanılıyor. Class ve UML modellerini görebilir, kod ve modelleme geçişini yapabilirsiniz.
- Yeni Tool Palette (Component Palette) -- Yeni component palette ile aradığınız component'i Ctrl+Alt+P ile arayarak bulabilirsiniz. Hatta isterseniz bir kategory oluşturup çok sık kullandığınız component'ları elinizin altında tutmak için oraya taşıyabilirsiniz.
- Expandable Debugger Hints -- Bir nesneyi ya da component'i debug ederken, fare ile üzerinde geldiğinizde o component'in tüm özelliklerini görmenizi sağlar.
- Daha binlarce minik özellik -- Örneğin: Structure Pane: Kod içinde compile hatası var ise hatayı gösteren pencere. Ya da çok sık kullandığınız Delphi ekran düzenin kaydedebilirsiniz.
Siz ne dersiniz ?
Daha fazla bilgi için http://blogs.borland.com/NickHodges/archive/2006/10/05/28020.aspx sitesine göz atabilirsiniz.
Kolay gelsin...
Yusuf ÇELİK
Cuma, Ekim 06, 2006
From C# To Delphi.NET
C# kodunuzu nasıl Delphi.NET koduna çevirirsiniz ?
Bunun için Borland'ın bir hizmetinden yararlanabiliriz.
Ayrıntılı bilgi için tıklayınız
Kolay gelsin...
Yusuf ÇELİK
Bunun için Borland'ın bir hizmetinden yararlanabiliriz.
Ayrıntılı bilgi için tıklayınız
Kolay gelsin...
Yusuf ÇELİK
Perşembe, Eylül 28, 2006
Delphi IDE'sinde bulunan imajlara nasıl ulaşılır ?
Delphiciler olarak GUI programlar yazmak için genellikle Delphi IDE'sini kullanırız.
Ancak bu IDE içindeki imajlara nasıl ulaşırız ?
Bunları kaydetmek mümkün mü ?
Bu sorular sanırım pek çok kimsenin aklına gelmez ya da işimize yaramadığı için pek önemsemeyiz.
Delphide yüklü imajlara ulaşmak için Delphide tanımlı olan (ToolsApi.pas) servislerden faydalanırız.
Bunun için işimizi gören servis INTAServices dır.
Bu servis aslında yalnızca IDE'de bulunan imajlara erişmemizi sağlamaz, ek olarak Ana Menu, ToolBar, ActionList gibi.
Bunlara ulaştığımızda bunlarla istediğimiz gibi oynayabiliriz.
Bu örnekte imaj için kullanacağımız INTAServices.ImageList değişkenidir.
Şöyleki:
var
imgList : TCustomImageList;
begin
if not BorlandIDEServices.SupportsService(INTAServices) then Exit;
imgList := (BorlandIDEServices as INTAServices).ImageList;
end;
imgList içinde artık Delphi IDE'si içinde kullanılan imajlar saklıdır.
Devamı için http://yusufcelik.googlepages.com/delphiota_ideimages
sitesinden bilgi alabilirsiniz.
Kaynak kod için : TestPIn_Img.zip
Kolay gelsin...
Yusuf ÇELİK
Ancak bu IDE içindeki imajlara nasıl ulaşırız ?
Bunları kaydetmek mümkün mü ?
Bu sorular sanırım pek çok kimsenin aklına gelmez ya da işimize yaramadığı için pek önemsemeyiz.
Delphide yüklü imajlara ulaşmak için Delphide tanımlı olan (ToolsApi.pas) servislerden faydalanırız.
Bunun için işimizi gören servis INTAServices dır.
Bu servis aslında yalnızca IDE'de bulunan imajlara erişmemizi sağlamaz, ek olarak Ana Menu, ToolBar, ActionList gibi.
Bunlara ulaştığımızda bunlarla istediğimiz gibi oynayabiliriz.
Bu örnekte imaj için kullanacağımız INTAServices.ImageList değişkenidir.
Şöyleki:
var
imgList : TCustomImageList;
begin
if not BorlandIDEServices.SupportsService(INTAServices) then Exit;
imgList := (BorlandIDEServices as INTAServices).ImageList;
end;
imgList içinde artık Delphi IDE'si içinde kullanılan imajlar saklıdır.
Devamı için http://yusufcelik.googlepages.com/delphiota_ideimages
sitesinden bilgi alabilirsiniz.
Kaynak kod için : TestPIn_Img.zip
Kolay gelsin...
Yusuf ÇELİK
Perşembe, Eylül 21, 2006
Turbo ve BDS2006 ürünleri için acil yamalar
Borland tarafından ücretsiz olarak sunulan Turbo ürün ailesi ve ücretli BDS 2006 (Borland Developer Studio 2006) için acil yamalar (Hotfix) çıktı.
Yamaları http://cc.borland.com/item/24132 adresinden indirip install edebilirsiniz.
Bu yamaların içeriği kısaca:
Kolay gelsin...
Yusuf ÇELİK
Yamaları http://cc.borland.com/item/24132 adresinden indirip install edebilirsiniz.
Bu yamaların içeriği kısaca:
- Hotfix 7: C++ ve Delphi.NET ile ilgili.
- Hotfix 8: Bir database field'ını incelerken 'DataSet.FieldByName('ALAN').As...' değerinden ziyade Access Violation hatası vermekteydi. Düzeltildi.
- Hotfix 9: Memory problemi ile ilgili. Editör içinde birden fazla dosya açık iken bunların arasında dolaşmak memoride allocate edilen bazı alanları Free edemiyordu. Düzeltildi.
Kolay gelsin...
Yusuf ÇELİK
Çarşamba, Eylül 20, 2006
İki işlem arasında geçen süre
İki işlem arasında geçen yaklaşık süre için bu sayfadaki örnek kullanılabilir.
Ancak burada milisaniyeler(saliseler) bazında da olsa hata olabilir.
Sürenin doğruluğu sizin için çok önemli ise örneğin saliseler bazında, o zaman başka yönteme bakmanızı öneririm.
Bu güncede anlatacağım sanırım sizi ilgilendiriyor.
İki işlem arasında geçen süre genellikle GetTickCount ya da timeGetTime adlarıyla bilinen Windows API fonksiyonları tarafından ölçülür, ancak bu fonksiyonlar bir kaç milisaniyelik (salise) de olsa hata yapabilirler.
Onun yerine daha kesin sonuç veren QueryPerformansCounter Windows API fonksiyonunu kullanma taraftarıyım.
Ancak QueryPerformansCounter Windows API fonksiyonu QueryPerformansFrequency Windows API fonksiyonu ile birlikte kullanılır.
QueryPerformansFrequency : Her bir saniyede, bilgisayarın donanımındaki timer’ın artan değeridir yani frekansı da diyebiliriz. Bu fonksiyondan dönen değeri, baz olarak alacağız. (Her donanım desteklemeyebilir.)
QueryPerformansCounter : Sistem (Windows) başladığından beri geçen sürenin milisaniye cinsinden değerini de verir.
Yapılması gereken şey öncelikler, bilgisayarın donanımının frekansının bulunması, dönen değer 64-bit yani Int64 değerindedir.
var
tmpFreq : Int64Rec;
Freq : Cardinal;
....
....
Freq := 0;
if not QueryPerformanceFrequency(TLargeInteger(tmpFreq)) then
begin
ShowMessage('Donanım desteklemiyor');
Exit;
end;
if tmpFreq.Lo = 0 then Exit;
Freq := tmpFreq.Lo div 1000;
Burada frekansın ilk 32-bitlik değerin 0 olması işimize yaramaz, çünkü bu değeri 1000 sayısına böleceğiz. Yukardaki işlemi 1 kere kullanmak yeterlidir, çünkü bu donanımsal bir değerdir, hiçbir zaman değişmez.
Daha sonra işimizi asıl QueryPerformansCounter fonksiyonu çözecektir.
var
counter : TLargeInteger;
donen_ms : Cardinal;
....
....
if Freq <> 0 then
begin
QueryPerformanceCounter(counter);
donen_ms := counter div Freq;
end;
Şimdi yukarıda anlattıklarımızı kod’a dökelim.
unit UntUtilities;
interface
function MSecEllapsed():Cardinal;
implementation
uses
SysUtils, Windows;
var
Freq : Cardinal;
tmpFreq : Int64Rec;
function MSecEllapsed():Cardinal;
var
counter : TLargeInteger;
begin
if Freq <> 0 then
begin
QueryPerformanceCounter(counter);
Result := counter div Freq;
end
else
Result := GetTickCount;
end;
initialization
Freq := 0;
if not QueryPerformanceFrequency(TLargeInteger(tmpFreq)) then Exit;
if tmpFreq.Lo = 0 then Exit;
Freq := tmpFreq.Lo div 1000;
end.
Örnek kullanım:
....
....
uses
Windows, //GetTickCount için
UntUtilities, //MSecEllapsed
MMSystem, //timeGetTime
Dialogs; //ShowMessage
....
....
const
SLP = 1024; //salise
var
st, en : Cardinal;
begin
st := timeGetTime();
Sleep(SLP); //1024 salise bekleyelim
en := timeGetTime();
ShowMessage(Format('timeGetTime:%d', [en-st]));
st := GetTickCount();
Sleep(SLP); //1024 salise bekleyelim
en := GetTickCount();
ShowMessage(Format('GetTickCount:%d', [en-st]));
st := MSecEllapsed();
Sleep(SLP); //1024 salise bekleyelim
en := MSecEllapsed();
ShowMessage(Format('MSecEllapsed():%d', [en-st]));
end;
Kolay gelsin...
Yusuf ÇELİK
Ancak burada milisaniyeler(saliseler) bazında da olsa hata olabilir.
Sürenin doğruluğu sizin için çok önemli ise örneğin saliseler bazında, o zaman başka yönteme bakmanızı öneririm.
Bu güncede anlatacağım sanırım sizi ilgilendiriyor.
İki işlem arasında geçen süre genellikle GetTickCount ya da timeGetTime adlarıyla bilinen Windows API fonksiyonları tarafından ölçülür, ancak bu fonksiyonlar bir kaç milisaniyelik (salise) de olsa hata yapabilirler.
Onun yerine daha kesin sonuç veren QueryPerformansCounter Windows API fonksiyonunu kullanma taraftarıyım.
Ancak QueryPerformansCounter Windows API fonksiyonu QueryPerformansFrequency Windows API fonksiyonu ile birlikte kullanılır.
QueryPerformansFrequency : Her bir saniyede, bilgisayarın donanımındaki timer’ın artan değeridir yani frekansı da diyebiliriz. Bu fonksiyondan dönen değeri, baz olarak alacağız. (Her donanım desteklemeyebilir.)
QueryPerformansCounter : Sistem (Windows) başladığından beri geçen sürenin milisaniye cinsinden değerini de verir.
Yapılması gereken şey öncelikler, bilgisayarın donanımının frekansının bulunması, dönen değer 64-bit yani Int64 değerindedir.
var
tmpFreq : Int64Rec;
Freq : Cardinal;
....
....
Freq := 0;
if not QueryPerformanceFrequency(TLargeInteger(tmpFreq)) then
begin
ShowMessage('Donanım desteklemiyor');
Exit;
end;
if tmpFreq.Lo = 0 then Exit;
Freq := tmpFreq.Lo div 1000;
Burada frekansın ilk 32-bitlik değerin 0 olması işimize yaramaz, çünkü bu değeri 1000 sayısına böleceğiz. Yukardaki işlemi 1 kere kullanmak yeterlidir, çünkü bu donanımsal bir değerdir, hiçbir zaman değişmez.
Daha sonra işimizi asıl QueryPerformansCounter fonksiyonu çözecektir.
var
counter : TLargeInteger;
donen_ms : Cardinal;
....
....
if Freq <> 0 then
begin
QueryPerformanceCounter(counter);
donen_ms := counter div Freq;
end;
Şimdi yukarıda anlattıklarımızı kod’a dökelim.
unit UntUtilities;
interface
function MSecEllapsed():Cardinal;
implementation
uses
SysUtils, Windows;
var
Freq : Cardinal;
tmpFreq : Int64Rec;
function MSecEllapsed():Cardinal;
var
counter : TLargeInteger;
begin
if Freq <> 0 then
begin
QueryPerformanceCounter(counter);
Result := counter div Freq;
end
else
Result := GetTickCount;
end;
initialization
Freq := 0;
if not QueryPerformanceFrequency(TLargeInteger(tmpFreq)) then Exit;
if tmpFreq.Lo = 0 then Exit;
Freq := tmpFreq.Lo div 1000;
end.
Örnek kullanım:
....
....
uses
Windows, //GetTickCount için
UntUtilities, //MSecEllapsed
MMSystem, //timeGetTime
Dialogs; //ShowMessage
....
....
const
SLP = 1024; //salise
var
st, en : Cardinal;
begin
st := timeGetTime();
Sleep(SLP); //1024 salise bekleyelim
en := timeGetTime();
ShowMessage(Format('timeGetTime:%d', [en-st]));
st := GetTickCount();
Sleep(SLP); //1024 salise bekleyelim
en := GetTickCount();
ShowMessage(Format('GetTickCount:%d', [en-st]));
st := MSecEllapsed();
Sleep(SLP); //1024 salise bekleyelim
en := MSecEllapsed();
ShowMessage(Format('MSecEllapsed():%d', [en-st]));
end;
Kolay gelsin...
Yusuf ÇELİK
Cuma, Eylül 08, 2006
Borland Turbo ürünleri çıktı
Borland, ücretsiz beklenen Turbo ürünlerini piyasaya çıkardı.
Hepsi de ücretsiz olarak aşağıdaki aşağıdaki sitelerden indirilebilirler.
İndirdikten sonra Key için http://www.borland.com/downloads/download_turbo.html
adresinde Keys Only (If you have a CD) bölümünden alabilirsiniz.
Ücretsiz Turbo ürünleri ile paralılar arasında bir kaç fark var (Olmazsa şaşardım zaten).
Ücretsiz Turbo ürünlere aşağıdaki maddeleri eklemeyi unutmuşlar sanki (!)
En azından yazdığınız programları satabilme şansınız var.
Teşekkürler Borland
Nice Turbolu günlere...
Yusuf ÇELİK
Hepsi de ücretsiz olarak aşağıdaki aşağıdaki sitelerden indirilebilirler.
İndirdikten sonra Key için http://www.borland.com/downloads/download_turbo.html
adresinde Keys Only (If you have a CD) bölümünden alabilirsiniz.
Ücretsiz Turbo ürünleri ile paralılar arasında bir kaç fark var (Olmazsa şaşardım zaten).
Ücretsiz Turbo ürünlere aşağıdaki maddeleri eklemeyi unutmuşlar sanki (!)
- IDE'ye istediğiniz gibi ekleme yapamıyorsunuz, yani standar üründe olan OTA işlemlerini yapamıyorsunuz. OTA nedir diyorsanız adres: http://yusufcelik.googlepages.com/delphiota
- 3.parti componentları install edemiyorsunuz, ancak yazdığınız component'ları kod içinden kullanabilirsiniz. Tek eksik kısım, Drag-and-Drop olayını es geçmişler, eeee ne de olsa beleş et. Yahnisi de o kadar olur. En azından kod içinde kullanma olanağı sunuyor.
- Standart üründe var olan 3.parti ürünler bunlar kısaca, InterBase Express, Örnek componentlar , Uzaktan hata ayıklama (Remote Debugging), C++ için Expanded ActiveX/COM server özelliği, Rave Reports, IntraWeb ve Indy gibi.
En azından yazdığınız programları satabilme şansınız var.
Teşekkürler Borland
Nice Turbolu günlere...
Yusuf ÇELİK
Kaydol:
Kayıtlar (Atom)
