Avatar billede diddl2400 Nybegynder
06. maj 2003 - 15:32 Der er 9 kommentarer og
3 løsninger

ListView Kolonne 2 og Label.Caption

Jeg kom til at give point selv om svaret ikke helt løste mit problem, derfor opretter et mere om næsten det samme.

Jeg skal have indholdet fra kolonne 2 i en ListView ind i Label1.Caption
Jeg ved ikke hvad jeg gør galt.
Ved
Label1.Caption := ListView1.Selected.Caption;
vises kun inholdet fra Kolonne 1
og ved
Label1.Caption := ListView1.Items[1].Caption;
skoder programmet :-(

Mit tidligere spørgsmål:
http://www.eksperten.dk/spm/349111
Avatar billede armena Nybegynder
06. maj 2003 - 15:40 #1
Label1.Caption := Listview1.Items.Item[1].caption;
Avatar billede hermandsen Juniormester
06. maj 2003 - 15:40 #2
ListView1.Selected.SubItems[0]
Avatar billede armena Nybegynder
06. maj 2003 - 15:40 #3
Det skal stå i Listview OnSelectItem.. ;)
Avatar billede hermandsen Juniormester
06. maj 2003 - 15:41 #4
Det er faktisk lidt pænere at skrive ListView1.Selected.SubItems.Strings[0], men det er op til dig!! :)
Avatar billede armena Nybegynder
06. maj 2003 - 15:43 #5
eller nej:
if ListView1.Items.Item[1].Selected then
Label1.Caption := Listview1.Items.Item[1].Caption;

I OnSelectItem
Avatar billede borrisholt Novice
06. maj 2003 - 15:45 #6
prøv det her :

unit Unit1;

interface

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

type
  PLVHitTestInfoNew = ^TLVHitTestInfoNew;
  TLVHitTestInfoNew = record
    Pt: TPoint;
    Flags: Integer;
    iItem: Integer;
    iSubItem: Integer;
  end;

  TCell = record
    x, y: Integer;
  end;
  TExListView = class(TListview)
  private
    FSelectedCell: TCell;
    function ListView_SubItemHitTest(var lvhti: TLVHitTestInfoNew): Integer;
    function ListViewSubItemHitTest(X: Integer; Y: Integer): Integer;
    function GetCellText(const x, y: Integer): string;
    procedure SetCellText(const x, y: Integer; const Text: string);
    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
  public
    property SelectedCell: TCell read FSelectedCell;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    ListView: TExListView;
    procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ListViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Caption := Format('Selected Cell : [%d,%d] Text : %s', [ListView.SelectedCell.x, ListView.SelectedCell.y, ListView.GetCellText(X, Y)]);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ListColumn: TListColumn;
  ListItem: TListItem;
  i: Integer;
begin
  Randomize;
  ListView := TExListView.Create(Form1);

  with ListView do
  begin
    Align := alClient;
    ReadOnly := True;
    OnMouseDown := ListViewMouseDown;
    ViewStyle := vsReport;
    RowSelect := True;
  end;

  Form1.InsertControl(ListView);

  for i := 0 to 2 do
  begin
    ListColumn := ListView.Columns.Add;
    ListColumn.AutoSize := True;
    ListColumn.Alignment := taCenter;
    ListColumn.Caption := IntToStr(Random(5000));
  end;

  for i := 0 to 15 do
  begin
    ListItem := ListView.Items.Add;
    ListItem.Caption := IntToStr(Random(5000));
    ListItem.SubItems.Add(IntToStr(Random(5000)));
    ListItem.SubItems.Add(IntToStr(Random(5000)));
  end;
end;

{ TExListView }

function TExListView.ListView_SubItemHitTest(var lvhti: TLVHitTestInfoNew): Integer;
begin
  Result := SendMessage(Self.Handle, LVM_SUBITEMHITTEST, 0, Longint(@lvhti));
end;

function TExListView.ListViewSubItemHitTest(X, Y: Integer): Integer;
var
  HitTest: TLVHitTestInfoNew;
begin
  HitTest.pt.X := X;
  HitTest.pt.Y := Y;
  // Calls ListView_SubItemHitTest from *this* unit, not from CommCtrl.pas
  ListView_SubItemHitTest(HitTest);
  Result := HitTest.iSubItem;
end;

procedure TExListView.SetCellText(const x, y: Integer; const Text: string);
var
  Item: TListItem;
  iSubItem: Integer;
begin
  Item := Self.GetItemAt(X, Y);
  if Assigned(Item) then
  begin
    iSubItem := ListViewSubItemHitTest(X, Y);
    if iSubItem = 0 then
      Item.Caption := Text
    else
      Item.SubItems[iSubItem - 1] := Text;
  end;
end;

function TExListView.GetCellText(const x, y: Integer): string;
var
  Item: TListItem;
  iSubItem: Integer;
begin
  Item := Self.GetItemAt(X, Y);

  if Assigned(Item) then
  begin
    iSubItem := ListViewSubItemHitTest(X, Y);
    if iSubItem = 0 then
      Result := Format('%s', [Item.Caption])
    else
      Result := Format('%s', [Item.SubItems[iSubItem - 1]]);
  end;
end;

procedure TExListView.WMLButtonDown(var Message: TWMLButtonDown);
var
  aCell: TCell;
var
  Item: TListItem;
  iSubItem: Integer;
  iRow: Integer;
begin
  Item := Self.GetItemAt(Message.XPos, Message.YPos);

  if Assigned(Item) then
  begin
    iSubItem := Self.ListViewSubItemHitTest(Message.XPos, Message.YPos);
    iRow := Self.Items.IndexOf(Item);
    aCell.x := iRow;
    aCell.y := iSubItem;
  end;

  fSelectedCell := aCell;

  inherited;
end;

end.
Avatar billede diddl2400 Nybegynder
06. maj 2003 - 15:51 #7
Kigger på det og vender tilbage om lidt
Avatar billede diddl2400 Nybegynder
06. maj 2003 - 15:58 #8
Jeg kan ikke helt få det til at virke. Jeg kigger på det når jeg kommer hjem. Vi skrives om et par timer. ;-)
Avatar billede borrisholt Novice
06. maj 2003 - 16:00 #9
Opret et nyt projekt og paste DET hele ind i stedet for det der stod
Avatar billede armena Nybegynder
06. maj 2003 - 16:09 #10
borrisholt> Tom form ;)
Avatar billede borrisholt Novice
06. maj 2003 - 16:15 #11
Avatar billede diddl2400 Nybegynder
06. maj 2003 - 17:43 #12
Så kom det til at virke som det skulle. Jeg brugte hermandsen 's metode men jeg skal ikke frasige mig om de andre virkede. Derfor har jeg forhøjet og fordelt point'ne mellem jer. Jeg håber det er ok sådan ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester