MultiColumn ComboBox

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
oklawa
Üye
Mesajlar: 68
Kayıt: 01 Oca 2008 02:53

MultiColumn ComboBox

Mesaj gönderen oklawa »

MultiColumn combobox arıyorum, delphi 7 versiyonunu http://www.o2a.com/cbplus.htm adresinden indirdim ama onu da 2007 ye kuramadım.
Sabit genişlikli fontla sütun sütun yapabilirim ama estetik olmayacağını düşünüyorum.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: MultiColumn ComboBox

Mesaj gönderen m_ekici »

DBLookupcombobox lar ile yapabilirsin. (Mesela Jedinin Memtable ve Lookup ını birlikte kullanarak çözebilirsin.)
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: MultiColumn ComboBox

Mesaj gönderen ikutluay »

oklawa yazdı:MultiColumn combobox arıyorum, delphi 7 versiyonunu http://www.o2a.com/cbplus.htm adresinden indirdim ama onu da 2007 ye kuramadım.
Sabit genişlikli fontla sütun sütun yapabilirim ama estetik olmayacağını düşünüyorum.
bu dediğiniz swisdelphicenter.ch sitesinde ipucu olarak var.

items ler

ali|deli|24 gibi yazılıyor sonra gerekli eventlerde olay kendisi hallediyor. componentede gerek yok. 2 eventti yanlış hatırlamıyorsam. denenmiş ir koddur. benim oradan yaptığım alıntılar forumda mevcut ama bu ipucu varmı hatrlamıyorum.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: MultiColumn ComboBox

Mesaj gönderen ikutluay »

İşte kod ....

procedurun içindeki kodu, sizin combobox ın drawitem kısımına yapıştıracaksınız. design time da elle yada kod ile formun create olayında ocmbobox ın sitilini csOwnerDrawFixed yapmanız gerekiyor.

kodu direk untinize koyarsanız çalışmaz. event a yazmanız gerek. buna dikkat.

Kod: Tümünü seç

procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  strVal, strAll: string;
  pos1, pos2: Integer;
  rc: TRect;
  arrWidth: array [0..3] of Integer;
begin
  Combobox1.Canvas.Brush.Style := bsSolid;
  Combobox1.Canvas.FillRect(Rect);
  // Die einzelnen Spalten müssen durch ';' getrennt sein
  // the columns must be separated by ';'
  strAll := Combobox1.Items[Index];

  arrWidth[0] := 0;
  arrWidth[1] := 100;  // Width of column 1
  arrWidth[2] := 200;  // Width of column 2
  arrWidth[3] := 300;  // Width of colimn 3

  // Zeichenbereich für erste Spalte
  // Drawingrange for first column
  rc.Left   := Rect.Left + arrWidth[0] + 2;
  rc.Right  := Rect.Left + arrWidth[1] - 2;
  rc.Top    := Rect.Top;
  rc.Bottom := Rect.Bottom;

  // Text für erste Spalte ausfiltern
  // Get text for first column
  pos1   := Pos(';', strAll);
  strVal := Copy(strAll, 1, pos1 - 1);
  // Text ausgeben
  // Draw Text
  Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal);
  // Trennlinie zwischen Spalten zeichnen
  // Draw separating line betwenn columns
  Combobox1.Canvas.MoveTo(rc.Right, rc.Top);
  Combobox1.Canvas.LineTo(rc.Right, rc.Bottom);

  // Zeichenbereich für zweite Spalte
  // Drawingrange for second column
  rc.Left  := Rect.Left + arrWidth[1] + 2;
  rc.Right := Rect.Left + arrWidth[2] - 2;

  // Text für zweite Spalte ausfiltern
  // Get text for second column
  strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1);
  pos1   := Pos(';', strAll);
  strVal := Copy(strAll, 1, pos1 - 1);

  // Text ausgeben
  // Draw Text
  Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal);
  // Trennlinie zwischen Spalten zeichnen
  // Draw separating line betwenn columns
  Combobox1.Canvas.MoveTo(rc.Right, rc.Top);
  Combobox1.Canvas.LineTo(rc.Right, rc.Bottom);

  // Zeichenbereich für dritte Spalte
  // Drawingrange for third column
  rc.Left  := Rect.Left + arrWidth[2] + 2;
  rc.Right := Rect.Left + arrWidth[3] - 2;

  // Text für dritte Spalte ausfiltern
  // Get text for third column
  strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1);
  pos1   := Pos(';', strAll);
  strVal := Copy(strAll, 1, pos1 - 1);

  // Text ausgeben
  // Draw Text
  Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal);
  // Trennlinie zwischen Spalten zeichnen
  // Draw separating line betwenn columns
  Combobox1.Canvas.MoveTo(rc.Right, rc.Top);
  Combobox1.Canvas.LineTo(rc.Right, rc.Bottom);
  strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1);
end;


// Example/ Beispiel:

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Combobox1.Items do
  begin
    Add('first;second;third;');
    Add('column1;column2;column3;');
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  //Oder im Objekt Inspektor einstellen
  //Or set this Property in the Object Inspector
  Combobox1.Style := csOwnerDrawFixed;
end;
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla