Pazartesi, Ekim 26, 2009

Pointers in Delphi

Pointer ve kullanımı, güzel bir makale(Pointers and its use)
http://rvelthuis.de/articles/articles-pointers.html

Çarşamba, Kasım 08, 2006

Delphi2006 anketine katılmak ister misiniz?

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

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.
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. Paketli ürünler -- IDE için birçok Plug-In bulabilirsiniz. Bunlardan bazıları: Castalia, CodeHealer ve BuilderBooster.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
Eski Delphi versiyonu kullanıyorsanız, yukarıda anlatılanlar Delphi 2006'ya terfi etmek için bence geçerli nedenlerdir.
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

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

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:
  1. Hotfix 7: C++ ve Delphi.NET ile ilgili.
  2. Hotfix 8: Bir database field'ını incelerken 'DataSet.FieldByName('ALAN').As...' değerinden ziyade Access Violation hatası vermekteydi. Düzeltildi.
  3. 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.
Yamalar hakkında daha fazla ayrıntı için Borland'ın resmi sitesinden bilgi alabilirsiniz.

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