| Makale Tarihi : 09 Ocak 2000
Yazan:Can Kaynak |
|
Resimleri combobox içine
yerleştirmek
VCL de sağlanılan OwnerDraw sitilini kullanarak
Tcombobox nesnesine resim yerleştirebiliriz. İki farklı sitil özelliği bizi
ilgilendiriyor. bunlar:
- csOwnerDrawFixed Bütün resimlerin hepsi aynı
boyutta ise
- csOwnerDrawVariable resimler farklı boyutlarda ise
Önce onDrawItem olayını kullanmalıyız. Bu olay,
uygulama ne zaman isterse combobox'ı tekrar çizilmesine yarıyor. Tanımlaması:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState)
| Control |
Item'e sahip olan kontrol |
| Index |
Gösterilecek aktüel itemin
indeksi |
| Rect |
İtemlerin
gösterilmesi gerekilen liste kutusundaki dikdörtgen |
| State |
Bu
itemin seçildiği gösterildiği yada odaklandığını gösterir (odSelected, OdDisabled, OdFocused) |
csOwnerDrawFixed sitilli combobox için ondrawItem
olayında bir bitmap yada metin çizen yordam yazarak herşey hallolur.
csOwnerDrawVairable stilli combobox için bir az daha
fazla iş yapmamız gerekiyor.Bu bölüm OnMeasureItem olayına olay handler'i yazmak
olacak. Bu olay Drawitemden önce çağırılır böylece gerçekte nasıl olması
gerektiğini tanıtabiliriz.
Tanımlaması:
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
| Control |
itemleri bulunduran
kontroldür. |
| Index |
gösterilecek olan aktüel
itemin indeksidir. |
| Height |
indekslenmiş itemlerin
doğru boyuta değiştirebilceğiniz değeri |
Adım adım uygulayın:
- yeni bir uygulama başlatın
- forma bir imagelist ve bir combobox yerleştirin
- Object Inspector'dan aşağıdaki özellikleri
yerleştirin.
| Öğe |
Özellik |
Değer |
Neden |
| ComboBox1 |
Style |
csOwnerDrawFixed |
İtemlerin nasıl
çizildiğini kontrol edebiliriz. |
| ComboBox1 |
Items |
Add whatever strings you want here to be
displayed alongside the bitmaps. |
Grafikal
gösterimden daha iyisi bir metinsel gösterim sağlar. |
| ImageList1 |
ImageList Editorü kullan |
Aynı boyutta ve
aynı kuralda istediğiniz gibi göründüğünden emin olduğunuz bit eşlemleri ekleyin
Eğer transparent renk istiyorsanız tanımlayın. |
Combobox'da
kullanılmasını istediğiniz resimler. |
- En son olarak OnDrawItem olayına şu kodu yazın:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
Index:Integer; Rect: TRect; State: TOwnerDrawState);
begin
(* kullanılan doğru highlite rengi barındırır *)
combobox1.canvas.fillrect(rect);
(* Aktüel resmi çizer *)
imagelist1.Draw(comboBox1.Canvas,rect.left,rect.top,Index);
(* resimden sonra metini girern satırdır.*)
combobox1.canvas.textout(rect.left+imagelist1.width+2,rect.top,
combobox1.items[index]);
end;
|