06. maj 2003 - 15:32Der 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 :-(
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;
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 ;-)
Synes godt om
Ny brugerNybegynder
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.