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.
MultiColumn ComboBox
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.
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.
Re: MultiColumn ComboBox
DBLookupcombobox lar ile yapabilirsin. (Mesela Jedinin Memtable ve Lookup ını birlikte kullanarak çözebilirsin.)
Re: MultiColumn ComboBox
bu dediğiniz swisdelphicenter.ch sitesinde ipucu olarak var.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.
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: MultiColumn ComboBox
İş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.
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog