Listview kolon geniş.otomatik ayarlamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Listview kolon geniş.otomatik ayarlamak

Mesaj gönderen cozturk »

Listview içeriği oluşturuldu.

Bu esnada kullanıcı ctrl + 'ya basarsa tüm kolanların genişliği otomatik olarak ayarlanıyor.

Bunu programın içinden nasıl yaptırabiliriz? içerik tamamlandıktan sonra Listview.? dan sonrakilerden hangisini nasıl kullanmalıyım?

kolonlara ait autosize özelliği sadece formun ebatlarıyla ilgili olarak işe yaramaktadır. minwidth, maxwidth ayarlayabiliyoruz fakat içeriğine duyarsız.
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

merhaba,

listview'ın bunu simule eden bir özelliği mutlaka vardır ama ben bulamadım. ama sorununuzun, listview e focuslanıp kodla Ctrl+'+' tuş kombinasyonunu göndermek suretiyle çözümü aşağıdaki gibi;

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  //Burada prosedürü deklare ediyoruz
  Procedure PostKeyEx32( key: Word; Const shift: TShiftState; specialkey: Boolean ); 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//prosedürü yazıyoruz
Procedure tform1.PostKeyEx32( key: Word; Const shift: TShiftState; specialkey: Boolean );
  Type
    TShiftKeyInfo = Record
                      shift: Byte;
                      vkey : Byte;
                    End;
    byteset = Set of 0..7;
  Const
    shiftkeys: Array [1..3] of TShiftKeyInfo =
      ((shift: Ord(ssCtrl); vkey: VK_CONTROL ),
       (shift: Ord(ssShift); vkey: VK_SHIFT ),
       (shift: Ord(ssAlt); vkey: VK_MENU ));
  Var
    flag: DWORD;
    bShift: ByteSet absolute shift;
    i: Integer;
  Begin
    For i := 1 To 3 Do Begin
      If shiftkeys[i].shift In bShift Then
        keybd_event( shiftkeys[i].vkey,
                     MapVirtualKey(shiftkeys[i].vkey, 0),
                     0, 0);
    End; { For }
    If specialkey Then
      flag := KEYEVENTF_EXTENDEDKEY
    Else
      flag := 0;

    keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );
    flag := flag or KEYEVENTF_KEYUP;
    keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );

    For i := 3 DownTo 1 Do Begin
      If shiftkeys[i].shift In bShift Then
        keybd_event( shiftkeys[i].vkey,
                     MapVirtualKey(shiftkeys[i].vkey, 0),
                     KEYEVENTF_KEYUP, 0);
    End; { For }
  End; { PostKeyEx32 }



procedure TForm1.Button1Click(Sender: TObject);
begin
//Bu kodları sizin için gerekli yerde kullanarak istediğiniz işlemi yapabilirsiniz. (Burada 107 +'nın karşılığıdır.)
ListView1.SetFocus;
PostKeyEx32(107,[ssCtrl],true);
end;

end.
NOT: Forma bir adet listview ve buton koydum. Listview'a birkaç item ekleyip ViewStyle'ını vsReport yaptım. Tuş kombinasyonu göndermeyle ilgili prosedür http://www.nsonic.de/Delphi/txt_WIS00355.htm sitesinden alınmıştır.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba..

- Aşağıdaki kodu dener misin... İşe yarayacaktır...

Kod: Tümünü seç

  ListView1.Columns[0].Width := -1;
- Başarılar...
Resim
Resim ....Resim
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

teşekkür ederim . tuş gönderme olayı sanırım kesin olur.
Columns[0] ile ilk kolon için oluyor.

Kod: Tümünü seç

ListView1.Columns[0].Width := -1; 
gibi her kolon için tekrarlanırsa olur sanırım. .
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Basit bir 0 to Columns.Count-1 'lik bir döngü işini görecektir...
Resim
Resim ....Resim
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

Saolun buna da gerek yokmuş. Tasarım zamanında object inspectordan tüm(veya istenen) kololnların genişliğini -1 yapmak yeterli oldu. :)

-1 in manası neyse artık. helpte de sadece bu yazıyor:
Delphi syntax:
property Width: Integer;
C++ syntax:
__property int Width = {read=GetWidth, write=SetWidth};
Description
The Width property determines the default width of the column, in pixels. List columns can be resized at runtime by dragging their borders.

örnek:
Resim
Cevapla