Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#10

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 20:07
Wo wir dabei sind, warum über ListView1MouseUp() und ListView1.GetItemAt(X, Y) ?

Da gibt es doch bessere Möglichkeiten, z. B. OnClick oder OnDblClick:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
begin
  with ListView1 do
  begin
    ViewStyle := vsReport;
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Caption';
    NewColumn.Width := 150;
    for i := 1 to 10 do
    begin
      ListItem := Items.Add;
      ListItem.Caption := 'Caption #' + IntToStr(i);
    end;
  end;
end;

procedure Test(Item: TListItem; i: Integer);
begin
  ShowMessage(Format('i ist: %d; Caption: %s', [i, Item.Caption]));
end;

procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if not (Sender is TListView) then Exit;

  with TListView(Sender) do
    Test(Selected, 4711);
end;
Und um das zu steigern, warum Werte in einer Parallel-StringList? Warum nicht als Bagage an ListView?
Delphi-Quellcode:
type
  TMeineDaten = class
    Str: String;
    Int: Integer;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
  MeineDaten: TMeineDaten;
begin
  with ListView1 do
  begin
    ViewStyle := vsReport;
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Caption';
    NewColumn.Width := 150;

    for i := 1 to 10 do
    begin
      MeineDaten := TMeineDaten.Create;
      MeineDaten.Str := '_Abc';
      MeineDaten.Int := 123;

      ListItem := Items.Add;
      ListItem.Caption := 'Caption #' + IntToStr(i);
      ListItem.Data := MeineDaten;
    end;
  end;
end;

procedure Test(Item: TListItem; i: Integer; Daten: TMeineDaten);
begin
  ShowMessage(Format('i ist: %d; Caption: %s', [i, Item.Caption]));

  ShowMessage(Format('Daten aus Bagage: %s und %d', [Daten.Str, Daten.Int]));
end;

procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if not (Sender is TListView) then Exit;

  with TListView(Sender) do
  begin
    Test(Selected, 4711, TMeineDaten(Selected.Data));
  end;
end;

//WICHTIG: bei löschen, der Items muss das Objekt vorher freigegeben werden!!!
  Mit Zitat antworten Zitat