Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

2112
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;