Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abstand zwischen Listvieweinträge ändern? (https://www.delphipraxis.net/97086-abstand-zwischen-listvieweintraege-aendern.html)

smart 4. Aug 2007 11:47


Abstand zwischen Listvieweinträge ändern?
 
Hallo Alle!

Wenn ich in einem Listview Symbole darstellen möchte, wie kann ich den Abstand zwischen den Symbole verkleinern?

Gruß
Heike

Klaus01 4. Aug 2007 13:10

Re: Abstand zwischen Listvieweinträge ändern?
 
Hallo Heike,

habe bei DSDT etws gefunden.
Dort wird gesagt, dass dies wenn es geändert wird (registry) sich auf das ganze Windowssystem auswirkt.

Grüße
Klaus

bitsetter 4. Aug 2007 13:19

Re: Abstand zwischen Listvieweinträge ändern?
 
Hi,

mit
Delphi-Quellcode:
ListView.Items.Item[1].SetPosition(Point(5,6));
kannst du auch selber die Positionen ändern.

smart 4. Aug 2007 13:34

Re: Abstand zwischen Listvieweinträge ändern?
 
Zitat:

Zitat von bitsetter
Hi,

mit
Delphi-Quellcode:
ListView.Items.Item[1].SetPosition(Point(5,6));
kannst du auch selber die Positionen ändern.

Hi,

wann rufst Du es auf? Bei mir gibt das eine Zugriffsverletzung.

Gruß
Heike

bitsetter 4. Aug 2007 14:15

Re: Abstand zwischen Listvieweinträge ändern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von smart
Hi,

wann rufst Du es auf? Bei mir gibt das eine Zugriffsverletzung.

Gruß
Heike

Wenn ich schon 2 Einträge im Listview habe, dann wird das 2. Item (ListView.Items.Item[1]) in der Position verändert. Die Eigenschaft ViewStyle der Listenansicht muß entweder auf vsIcon oder auf vsSmallIcon gesetzt sein.
Delphi-Referenz durchsuchenSetPosition

EDIT: So könnte man beim Hinzufügen neuer Items gleich den Abstand untereinander verringern:
Delphi-Quellcode:
var
  LstItm: TListItem;
  ItemRect: TRect;
  ItemPos: TPoint;
  ScrollX: integer;
const
  iLeft= 15;
  iTop= 0;
begin
  ScrollX := GetSystemMetrics(SM_CXVSCROLL);
  LstItm := ListView1.Items.Add;
  LstItm.Caption := 'Test Item';
  LstItm.ImageIndex := 0;
  with Listview1 do
    if Items.Count> 1 then
    begin
      ItemPos := Items.Item[Items.Count- 2].GetPosition;
      ItemRect := Items.Item[Items.Count- 2].DisplayRect(drBounds);
      if ItemRect.Right+ iLeft+ ListView1.LargeImages.Width+ ScrollX+ 10>= ClientWidth then
        LstItm.SetPosition(Point(iLeft, ItemRect.Bottom+ iTop))
      else
        LstItm.SetPosition(Point(ItemRect.Right+ iLeft, ItemPos.Y));
    end
    else
      LstItm.SetPosition(Point(iLeft, iTop));

delphinia 8. Jan 2008 01:20

Re: Abstand zwischen Listvieweinträge ändern?
 
Zitat:

Zitat von bitsetter
Zitat:

Zitat von smart
Hi,

wann rufst Du es auf? Bei mir gibt das eine Zugriffsverletzung.

Gruß
Heike

Wenn ich schon 2 Einträge im Listview habe, dann wird das 2. Item (ListView.Items.Item[1]) in der Position verändert. Die Eigenschaft ViewStyle der Listenansicht muß entweder auf vsIcon oder auf vsSmallIcon gesetzt sein.
Delphi-Referenz durchsuchenSetPosition

EDIT: So könnte man beim Hinzufügen neuer Items gleich den Abstand untereinander verringern:
Delphi-Quellcode:
var
  LstItm: TListItem;
  ItemRect: TRect;
  ItemPos: TPoint;
  ScrollX: integer;
const
  iLeft= 15;
  iTop= 0;
begin
  ScrollX := GetSystemMetrics(SM_CXVSCROLL);
  LstItm := ListView1.Items.Add;
  LstItm.Caption := 'Test Item';
  LstItm.ImageIndex := 0;
  with Listview1 do
    if Items.Count> 1 then
    begin
      ItemPos := Items.Item[Items.Count- 2].GetPosition;
      ItemRect := Items.Item[Items.Count- 2].DisplayRect(drBounds);
      if ItemRect.Right+ iLeft+ ListView1.LargeImages.Width+ ScrollX+ 10>= ClientWidth then
        LstItm.SetPosition(Point(iLeft, ItemRect.Bottom+ iTop))
      else
        LstItm.SetPosition(Point(ItemRect.Right+ iLeft, ItemPos.Y));
    end
    else
      LstItm.SetPosition(Point(iLeft, iTop));

habe den Code ausprobiert - aber die Icons bleiben bei mir im selben abstand :-(

habe es exakt so genau so gemacht wie es da oben steht - hmmm Ideen?!

bitsetter 29. Jan 2008 23:00

Re: Abstand zwischen Listvieweinträge ändern?
 
Hallo,

dazu gibt es eigentlich eine ziemlich einfache Möglichkeit:
Delphi-Quellcode:
uses commctrl;
...

  commctrl.ListView_SetIconSpacing(listview1.Handle, 55, 55);
Wenn man den Effekt gleich sehen möchte, am besten im OI IconOptions.AutoArrange des Listview auf true setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz