TComboBox İçinde Renk, Font Seçim Listesi Göstermek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

TComboBox İçinde Renk, Font Seçim Listesi Göstermek

Mesaj gönderen RamazanG »

Makale: Zarko Gajic.
Çeviri: Ramazan Gülbahar.

Resim

Delphi ComboBox ile Owner Drawing
Menü değişiklikleri gibi bağzı özel değişiklikleri Owner Drawn özelliğini kullanarak yapabiliriz. Bir owner-drawn combo box Grafik şeklinde liste gösterebilir.
Owner-draw combo box oluşturmak için, Style özelliğini csOwnerDrawFixed ya da csOwnerDrawVariable olarak değiştirmeliyiz.
ComboBox içindeki bütün liste nesneleri ikonlar ya da metinlerle aynı yükseklikteyse uygulama csOwnerDrawFixed stil özelliğini kullanabilir
Eğer nesneler değişik yükseklikteyse, mesela bitmap resimleri farklı boyuttalarsa uygulama csOwnerDrawVariable stilini kullanmalıdır. Bu sebepten dolayı uygulama WM_MEASUREITEM Windows mesajını ve OnMeasureItem olayını her nesne için gerçekleştirecek. Combo box içindeki nesnelerin belirtilen yüksekliklerine göre olayı gerçekleştirecek.
Bunu yaparken windows eğer gerkliyse tekrar boya mesajını WM_DRAWITEM herdefasında gönderecek. owner-drawn combo box (owner)’un parent window’u (form), gerekli olan her sefer için OnDrawItem olayını tekrar boyama için çalıştıracak.

Renk Seçici
Renkler içinbir ComboBox oluşturulması, ilk olarak renk adlarını combo box’a ekliyeceğiz (Form.OnCreate olayı içine). Bütün renkler(Renk isimleri) bir renk constant’ı içinde aşşağıdaki gibi tanımlandı :

Kod: Tümünü seç

const Colors: array[0..17] of TColor = (clAqua, clBlack, ..., clWhite, clYellow) ;
 
Kod çok karışık değil kodda Nesne çizme(Draw Item) özelliği kullanıldı.Basitçe anlatmak gerekirse oluşturduğumuz nesnelere yeniden renk vereceğiz ve combobox içinde bir renk alanı çizip gösterilmesini sağlayacağız. Her renk içinde adlarını gösterecek metin oluşturacağız, ColorToString RTL uygulamasını çağıracağız.

Kod: Tümünü seç

procedure TForm1.ColorComboDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ;
 begin
  with Control as TComboBox do
  begin
    {Dolu dikdörtgen alanı çizin}
    Canvas.Brush.Color := TColor(Colors[Index]) ;
    Canvas.FillRect(Rect) ;
    {Renk adını çizin}
    Canvas.TextOut(Rect.Left, Rect.Top, ColorToString(Colors[Index]))
  end;
 end; 
Not: "Additional" VCL tabından TColorBox seçebilirsiniz.
Not2: Bu makale yazıldığında, Delphi bir TcolorBox komponenti içermiyordu.

Yazı Tipi Seçici
Bütün metin sitilleri combobox içinde gösterilebilir, ComboBox içinde bir resim göstermek aslında zor bir iştir. Ben bir Screen (TScreen) ile yazı tiplerinin gösterilmesini sağlayacağım, sistem bütün Screen yazı tiplerini destekler.
font-combo içini bütün yazı tipi adlarıyla doldur, burda basitçe göstereceğim:

Kod: Tümünü seç

var
   cnt : integer;
 begin
   for cnt := 0 to Screen.Fonts.Count-1 do
     FontCombo.Items.Add(Screen.Fonts.Strings[cnt]) ;
 end; 

Font Combo’nun  OnDrawItem olayı aşşağıdaki gibi görünecektir: 

 procedure TForm1.FontComboDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ;
 begin
  with (Control as TComboBox).Canvas do
  begin
    Font.Name := Screen.Fonts.Strings[Index];
    FillRect(Rect) ;
    TextOut(Rect.Left, Rect.Top, PChar(Screen.Fonts.Strings[Index]))
  end;
 end; 
Daha Fazla Fikir...
Birsürü Windows kontrolüne, list view, tree view, tab control, status bar, gibi owner-drawn ve Custom yöntemleriyle harika özellikler verilebilir. Örnek olarak: bir list view ve list box owner-drawn yöntemiyle her nesnenin yanına bir check box konabilir.
Dosya ekleri
ownercombo.zip
Kaynak kod
(7.21 KiB) 159 kere indirildi
Cevapla