TListView içinde Combobox nasıl kullanırım

Forumla ilgili sorularınızı buraya sorabilirsiniz.
Cevapla
carsoft
Üye
Mesajlar: 135
Kayıt: 01 Ağu 2014 11:27

TListView içinde Combobox nasıl kullanırım

Mesaj gönderen carsoft » 01 Ağu 2014 11:32

Herkesin geçmiş bayramını gönülden kutlarım arkdaşlar.

Ben TListView içinde Combobox nasıl eklerim bu konuda yardımcı olusanız sevinirim örnekli olursa süper olur.

örnek
http://www.c-sharpcorner.com/UploadFile ... ewImg1.gif

Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 08:30
Konum: Antalya

Re: TListView içinde Combobox nasıl kullanırım

Mesaj gönderen Senat0r » 01 Ağu 2014 09:42

Kod: Tümünü seç

unit Unit1;

interface

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

type

  TForm1 = class(TForm)
    Button1: TButton;
    ListView1: TListView;
    ComboBox1: TComboBox;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FOldListviewWindowProc: TWndMethod;
    FListviewHeaderHeight: Integer;
    Procedure ListviewWindowproc(var Message: TMessage);
    procedure AttachCombobox;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses commctrl;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
  r: TRect;
  ListviewHeader: HWND;
begin
  for i:= 1 to 10 do
    with listview1.Items.add do begin
      caption := format('Item %d',[i]);
      subitems.add( format('SubItem %d.1',[i]) );
      subitems.add( format('SubItem %d.2',[i]) );
    end;
  ListviewHeader :=  GetWindow( listview1.Handle, GW_CHILD );
  GetWIndowrect( ListviewHeader, r );
  FListviewHeaderHeight := r.Bottom - r.top;

  FOldListviewWindowProc:= listview1.WindowProc;
  listview1.WindowProc := ListviewWindowproc;
  AttachCombobox;
end;

procedure TForm1.AttachCombobox;
var
  r: TRect;
  wnd: HWND;
begin
  fillchar( r, sizeof(r), 0 );
  ListView_GetSubItemRect( listview1.Handle, 4, 1, LVIR_BOUNDS, @r );
  combobox1.Parent := listview1;
  combobox1.BoundsRect := r;
  combobox1.Visible := r.Top >= FListviewHeaderHeight;
end;

procedure TForm1.ListviewWindowproc(var Message: TMessage);
begin
  FOldListviewWindowProc( Message );
  Case Message.Msg Of
    WM_VSCROLL, WM_HSCROLL:
      If Message.WParamLo <> SB_ENDSCROLL Then
        AttachCombobox;
  End;
end;

end.
Bu şekilde bir kod buldum ama işinize yararmı bilmiyorum.
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: TListView içinde Combobox nasıl kullanırım

Mesaj gönderen mrmarman » 03 Ağu 2014 04:00

Merhaba.. iyi bayramlar.

(1) Eğer ListView'inin içeriği sağa sola scrollbar oluşmayan türden bir bütünlük içindeyse yine bu forumda bu linkte örnekli olarak verdim.

(2) Yukarıdaki @Senat0r'ün verdiği kodu kendi kod süzgecimden geçirip aşağıdaki şekilde yeniden düzenledim. Çünkü satır (ITEM) değiştiğinde combobox'un yeriyle ilgili bir değişiklik yer neresi göremedim. Denediğimde de sonuç alamadım.

Kod: Tümünü seç

USES commctrl;

Var
  FOldListviewWindowProc: TWndMethod;
  FListviewHeaderHeight: Integer;

procedure AttachCombobox(ComboBox:TComboBox; ListView:TListView; iItem, iSubItem: Integer);
var
  r  : TRect;
begin
  fillchar( r, sizeof(r), 0 );
  ListView_GetSubItemRect( listview.Handle, iItem, iSubItem, LVIR_BOUNDS, @r );
  combobox.Parent     := listview;
  combobox.BoundsRect := r;
  combobox.Visible    := r.Top >= FListviewHeaderHeight;
end;

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
  AttachCombobox( ComboBox1, ListView1, Item.Index, 1 );
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i  : integer;
  r  : TRect;
  ListviewHeader: HWND;
begin
  for i := 1 to 10 do ComboBox1.Items.Add( Format( 'Seçenek-%d', [i]) );

  ListView1.ViewStyle := vsReport;
  for i := 1 to 4 do
    With ListView1.Columns.Add do
    begin
      Caption := Format( 'Sütun-%d', [i]);
      Width   := 100;
    end;

  for i:= 1 to 10 do
    with listview1.Items.add do begin
      caption := format('Item %d',[i]);
      subitems.add( format('SubItem %d.1',[i]) );
      subitems.add( format('SubItem %d.2',[i]) );
    end;
  ListviewHeader         := GetWindow( listview1.Handle, GW_CHILD );
  GetWIndowrect( ListviewHeader, r );
  FListviewHeaderHeight  := r.Bottom - r.top;

  FOldListviewWindowProc := listview1.WindowProc;
  AttachCombobox( ComboBox1, ListView1, 1, 1 );
end;
Resim Resim

carsoft
Üye
Mesajlar: 135
Kayıt: 01 Ağu 2014 11:27

Re: TListView içinde Combobox nasıl kullanırım

Mesaj gönderen carsoft » 05 Ağu 2014 09:40

çok teşekkür ederim mrmarman :)

Cevapla