Yüzen kontroller.. :)

// 15 Mayıs 2009 // Delphi, Programlama

Başlığa aldanmayın bizim kontroller yüzmeyecek tabii, ama form gibi başlıkları(yani caption’ları) olacak.Bu da demek olacak ki, siz kontrollerinizi runtime sırasında hareket ettirebilecek, boyutları ile oynayabileceksiniz.

Peki bunun için ne yapmalıyız.. Yine sevgili Delphi’mizin Help’ini açıyoruz ve CreateParams yazıyoruz..Birde bakıyoruz ki bu metodu uygulayan temel sınıf TWinControl. Dolayısı ile TWinControl sınıfından miras almış tüm sınıflarda bu metodu ezebileceğiz. ;) Eh o zaman biz ne yapalım ne yapalım..Yüzme bilen bir TEdit bileşeni geliştirelim sizlerle..

TMyEdit = class(TEdit)
public
	procedure CreateParams(var Params : TCreateParams); override;
end;

Tanımlama bu kadar basit.Şimdi bu CreateParams ne yapar..Help’den okumuşsunuzdur elbette ama kısaca şunu yapar.Biliyorsunuz Windows ortamındaki handle’ı (HWND) si olan tüm karesel bölgelere (bazende bu alanlar karesel olmayabiliyor, bknz. SetWindowRgn API) pencere deniliyor. Ve bu pencereler CreateWindow yada CreateWindowEx API’leri ile oluştuluyor. Eh Delphi tam bu noktada oluşturulacak olan bu pencerenin bazı stil ayarlarını değiştirebilmemize olanak sağlıyor.Sağolsun. :) Pencere oluşturulduktan sonra bu özellikleri değiştirmek isterseniz de bknz. SetWindowLong API sini kullanabiliyoruz. Herneyse lafı fazla uzatmadan CreateParams metodunun gövdesini yazalım..

procedure TMyEdit.CreateParams(var Params : TCreateParams);
begin
	inherited;

  with Params do
  begin
	{ Mevcut Pencere stiline başlık ve sağını solunu çekiştirebileceğiniz stil ekleniyor. }
    Style   := Style or WS_CAPTION or WS_SIZEBOX;
    ExStyle := ExStyle or WS_EX_TOOLWINDOW;
  end;
end;

İşte kod bu kadar.! Şimdi runtime sırasında taşıyabileceğiniz veya genişlik ve yüksekliğini değiştirebileceğiniz bir kontrolünüz oldu. Güle güle kullanın. Artık diğer kontrollere isterseniz yüzme öğretmek size kalmış. :)

Not: API yardımından CreateWindow ve CreateWindowEx metodlarına bakarsanız daha pek çok stilin olduğunu göreceksiniz ;) Birde windows.pas satır 19.399 :)

Saygılar,sevgiler..

Yorum Yazın