Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Son kolon genişliği
#1
Merhaba,


Projelerimi laptopda yapıyorum; Daha sonra farklı bilgisayarlarda ekran testi için deneme yanılma ile çıkan sorunları biraz uğraşarak çözmeye çalışıyorum.

1. Listviewdeki son kolon genişiliği ekranın en sonuna dayanacak şekilde genişliğini nasıl ayarlayabilirim? 
2. Listviewdeki satır adeti en alta geldiğine scrollbars çıkmaması için son satır genişliğini nasıl daraltırım?



Bu çözümü buldum fakat farklı ekranlarda ayrı bir sıkıntı çıkartıyor.
procedure TForm7.ListView1AdvancedCustomDraw(Sender: TCustomListView; const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
  if ListView1.Items.Count > 3 then
  begin
   ListView1.Columns[10].Width := 224;
  end
  else
  begin
   ListView1.Columns[10].Width := 240;
  end;
end;
Cevapla
#2
GetScrollInfo ile kaydırma çubuğunun konumunu bulursun.

Gerisi kolay.
Cevapla
#3
(1) ListView'in genişliği otomatik ayarlandığına göre 0'dan başlayıp son Column hariç ( Columns.Count-2 kadar) hepsini toplayın, ListView Width değerinden çıkartın. Çıkan rakam son column Width ( Columns.Count-1'in ) değeri olacaktır. Bu arada sütunları ayıran çizgiler de bir yer kaplar [sütun sayısı - 1] adet de ( 1 rakamı )  çıkartın garanti olsun  Wink

(2) son satıra kadar içeriği doldurun.  RowHeigh değeri satır sayısı * RowHeight sizin ListView'in HEIGH - başlık yüksekliği kadar olana kadar RowHeight değerini değiştirin. Tabi sizi bir sürpriz bekliyor ListView'in kendine ait bir RowHeight ayarı yok. Bunun için bir sihirbazlık lazım, SmallImage için bir ImageList koyun, bu ImageList'in height değerini değiştirdikçe, ListView 'e ona adapte olabilmek için satır yüksekliğini otomatikman o değere getirir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#4
@ahmetb ; birinci sorunuza çözüm:
ListView'in OnResize olayına şunu yazın:
ListView1.Column[ListView1.Columns.Count-1].Width := -2;

ListView'in kolon genişliğinde -1 ve -2 değerleri özel değerlerdir. Araştırması size kalsın Wink
There's no place like 127.0.0.1
WWW
Cevapla
#5
(06-02-2019, Saat: 23:54)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.(1) ListView'in genişliği otomatik ayarlandığına göre 0'dan başlayıp son Column hariç ( Columns.Count-2 kadar) hepsini toplayın, ListView Width değerinden çıkartın. Çıkan rakam son column Width ( Columns.Count-1'in ) değeri olacaktır. Bu arada sütunları ayıran çizgiler de bir yer kaplar [sütun sayısı - 1] adet de ( 1 rakamı )  çıkartın garanti olsun  Wink

(2) son satıra kadar içeriği doldurun.  RowHeigh değeri satır sayısı * RowHeight sizin ListView'in HEIGH - başlık yüksekliği kadar olana kadar RowHeight değerini değiştirin. Tabi sizi bir sürpriz bekliyor ListView'in kendine ait bir RowHeight ayarı yok. Bunun için bir sihirbazlık lazım, SmallImage için bir ImageList koyun, bu ImageList'in height değerini değiştirdikçe, ListView 'e ona adapte olabilmek için satır yüksekliğini otomatikman o değere getirir.
Big Grin  hocam ben okurken bile çok yoruldum , sen nasıl yazdın bunu çok merak ediyorum.

(07-02-2019, Saat: 11:44)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@ahmetb ; birinci sorunuza çözüm:
ListView'in OnResize olayına şunu yazın:
ListView1.Column[ListView1.Columns.Count-1].Width := -2;

ListView'in kolon genişliğinde -1 ve -2 değerleri özel değerlerdir. Araştırması size kalsın Wink

Teşekkürler SimaWB hocam..

uses Commctrl;

ListView.Columns[0].Width := LVSCW_AUTOSIZE;
ListView.Columns[0].Width := LVSCW_AUTOSIZE_USEHEADER;

Sabitleri tanımlamak için kullanılır diye yazıyor  , yazılanları yanlış anlamadıysam son sütun genişliği -1 olarak ayarlandığında diğer alanlar kalan boşluğu doldurmak için gerilecek veya açılacak.

bakmak isteyen olursa metnin orjinali burda 

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#6
Ya sorma üstadım bilgisayar başında değildim, bir procedure yazardım böyle oldu.  Smile
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#7
Merhaba.

Şimdi bilgisayar başındayım ve deneyeyim dedim. @SimaWB bir şey daha öğrendim. Teşekkürler.

- (-2) olayını hep kullanırım ama sütun başlığına göre otomatik boyutlandırma için kullanıyordum. 
- Son sütun için hiç dikkatimi çekmemişti, olayı taçlandırmışlar...  Smile

- Neden bahsettiğimi başlığı okuyanlar için açayım, ListView'in her sütununun Width değerini -2 ile eşitlerseniz sütun başlığına göre genişliği ( başlık yazıyı kesmeyecek kadar ) genişletiyor. Sadece son sütuna farklı davranıyor. Onu ListView'in sonuna kadar uzatıyor. Bunu yeni fark ettim.

- (-1) olayı ise zaten sıkça bilinir diye değerlendiriyorum, satırlar (ITEM'ler) doldurulduktan sonra nihai olarak her sütunu -1 ile eşitlenirse bu defa her item'in SUBITEM'i kadar genişletiliyor.


- (-2) ile yaptığı işlemin procedure karşılığı ise şu şekilde. Diğer yandan  Idea  Sondaki değil de baştaki veya ortadaki herhangi bir sütunu benzer şekilde boyutlandırmak isterseniz (-2) değeri işe yaramayacağından, aşağıdaki şekilde bir desteğe ihtiyacınız olacaktır. Vermiş olayım.

procedure SutunuSonaKadarUzat( aListView: TListView; iSutunIdx: Integer );
var
 i, iToplam : Integer;
begin
  iToplam := 0;

  // Uzatılacak sutun index hariç Column Width toplamları.
  for i := 0 to aListView.Columns.Count-1
    do if i <> iSutunIdx
         then inc( iToplam,  aListView.Columns[i].Width );

  // Her sütun aralık çizgi kalınlığı (1) diyelim.
  for i := 0 to aListView.Columns.Count-1
    do inc( iToplam, 1 );

  // Vertical (dikey) ScrollBar'ın Width değeri
  inc( iToplam, GetSystemMetrics(SM_CXVSCROLL) );

  // Ürün ListView
  aListView.Columns[iSutunIdx].Width := aListView.Width - iToplam;
end;

Kullanımı :
procedure TForm1.ListView1Resize(Sender: TObject);
begin
 SutunuSonaKadarUzat( TListView(Sender), 2 );
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Çok sayıda form'daki DBgridlerin kolon genişliğini değiştirmek boreas 6 421 10-07-2019, Saat: 15:09
Son Yorum: boreas
  Grid içinde anlık değişen kolon Bay_Y 2 478 27-11-2018, Saat: 12:03
Son Yorum: Bay_Y
  CxGrid Kolon Birleştirme narkotik 17 2.556 09-03-2018, Saat: 08:05
Son Yorum: narkotik
  stringlist kolon serhat 11 1.899 01-03-2018, Saat: 23:23
Son Yorum: ismailkocacan
  Kolon rengi serhat 3 878 16-01-2018, Saat: 13:41
Son Yorum: Abdullah ILGAZ



Konuyu Okuyanlar: 1 Ziyaretçi