Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Selectieren Listview / ListBox ???? (https://www.delphipraxis.net/155054-selectieren-listview-listbox.html)

maluprog 6. Okt 2010 14:56

Selectieren Listview / ListBox ????
 
Hallo,

Habe eine ListView und eine ListBox, welche über einen Button selectiert und um eine Zeile gleichzeitig nach unten verschoben werden sollen.
Bei 2 ListBoxen klappt es, jedoch nicht gem. o.g. gesagtem. Warum nicht ?
Nachstehenden Code:
Delphi-Quellcode:
procedure TFmein.BSelectClick(Sender: TObject);
begin
        if not (ListBoxA1.ItemIndex = ListBoxA1.Count - 1) then
        begin
         ListBoxA1.ItemIndex := ListBoxA1.ItemIndex +1;
        end
        else
        begin
         ListBoxA1.ItemIndex := 0;
        end;

         if not (ListViewA1.ItemIndex = ListViewA1.Items.Count - 1) then
        begin
         ListViewA1.ItemIndex := ListViewA1.ItemIndex +1;
        end
        else
        begin
         ListViewA1.ItemIndex := 0;
        end;

end;
Bei Listview gibt's kein ListView.Count, darum obenstehender Code.

Benötige Hilfe.

maluprog 6. Okt 2010 23:31

AW: Selectieren Listview / ListBox ????
 
Hallo,

habe nochmal alles pepostet, sowie alle Themen durchgeforstet, nichts gefunden !

Hat keiner eine Idee ?

Unverständlicherweise wird bei der Listbox sofort die erste Zeile selectiert, jedoch beim Listview passiert nichts. Es muß doch gehen ?

Grüsse

manne:roll:

Satty67 7. Okt 2010 00:14

AW: Selectieren Listview / ListBox ????
 
Woraus schliesst Du, dass es nicht funktioniert?

Delphi-Quellcode:
ListView.HideSelection := False
könnte evtl. für eine Überaschung sorgen.

toms 7. Okt 2010 06:22

AW: Selectieren Listview / ListBox ????
 
Hallo,

Hast du schon gegoogelt? Dies habe ich nach ein paar Sekunden gefunden:

Delphi-Quellcode:
procedure ListViewItemMoveUpDown(lv: TListView; Item: TListItem; MoveUp,
  SetFocus: Boolean);
var
  DestItem: TListItem;
begin
  if (Item = nil) or
    ((Item.Index - 1 < 0) and MoveUp) or
    ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp)) then
    Exit;
  lv.Items.BeginUpdate;
  try
    if MoveUp then
      DestItem := lv.Items.Insert(Item.Index - 1)
    else
      DestItem := lv.Items.Insert(Item.Index + 2);
    DestItem.Assign(Item);
    lv.Selected := DestItem;
    Item.Free;
  finally
    lv.Items.EndUpdate;
  end;
  if SetFocus then
    lv.SetFocus;
  DestItem.MakeVisible(False);
end;
Beispiele:

// Das ausgewählte Item nach Oben schieben und den Fokus setzen
ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);

// Das 2. Item nach Oben schieben
ListViewItemMoveUpDown(ListView1, ListView1.Items[1], True, False);

Satty67 7. Okt 2010 06:42

AW: Selectieren Listview / ListBox ????
 
Also ich bin mir nicht ganz sicher, aber glaube er will sich nur darin Bewegen (wie mit Pfeiltasten). Zumindest sieht sein Code für die ListBox so aus, der ja anscheinend wie gewünscht funktioniert.

Aber kann mich auch täuschen und er will trotzdem die Anordnung ändern?

Eine ListBox zeigt das selektierte Item bei Default-Einstellungen an, auch wenn sie nicht den Focus hat. Ein ListView eben nicht, weshalb man denken könnte, eine Selektierung funktioniert nicht.

maluprog 7. Okt 2010 12:45

AW: Selectieren Listview / ListBox ????
 
Hallo,

habe beide Vorschläge soeben ausprobiert, bei
Delphi-Quellcode:
........
        ListView.HideSelection := False;
        .......
futzt garnicht's.

Die Alternative zeigt, dass nur Zeile 1 mit Zeile 2 vertauscht wird. Bei jeden neuen "ButtonClick"
werden immer nur die beiden Zeilen getauscht.

Dieses ist nicht die gewollte Lösung, nochmals, wenn ButtonClick ausgelöst wird soll bei der Listbox und bei der Listview je eine Zeile nach unten verschoben werden, d.h. von 1 nach 2 in beiden! Bei erneutem Click von jetzt 2 nach 3 usw. Bei der Listbox funktioniert es ausgezeichnet.
Wenn zBp. die letzte Zeile "x" angesprochen wird, dann wird wieder auf Zeile 1 umgeschalten, deshalb der eingebaute Code;
Delphi-Quellcode:
.....
        else
        begin
         ListBoxA1.ItemIndex := 0;
        end;
       ......
bzw.
Delphi-Quellcode:
....
       end
        else
        begin
         ListViewA1.ItemIndex := 0;
        end;
Ich hoffe Ihr versteht was ich meine.
Ich hoffe auf einen anderen Tip, habe im DP-Portal lange gesucht, nichts gefunden, werde bald nach 2 Tagen "verrückt"

Bis dahin und hoffe weiter und Danke bis hierhin

mann:roll:

e-gon 7. Okt 2010 14:14

AW: Selectieren Listview / ListBox ????
 
1. Also unter "Verschieben" verstehst Du wohl nicht das Verschieben von den Einträgen in ListBox oder ListView sondern das "Verschieben" des Cursors um eines nach unten, oder? Nach dem Button-Klick ist dann nicht mehr das erste Element sondern nun das zweite markiert.

2.
Delphi-Quellcode:
ListViewA1.HideSelection := False;
ist richtig. Sollte in ListViewA1 dennoch kein Eintrag markiert sein, kann man mit
Delphi-Quellcode:
ListViewA1.Items[0].Selected:= True;
nachhelfen.
Die Funktionen in ListView sind allerdings etwas umfangreicher als in ListBox. So hat ein ListItem (also ein einzelner Eintrag eines ListView) auch noch weiter Eigenschaften bezüglich der Markierung:
Delphi-Quellcode:
ListViewA1.Items[0].Focused:= True;    // zeichnet einen Rahmen um den Eintrag
ListViewA1.Items[0].MakeVisible(True); // scrollt den markierten Eintrag in den sichtbaren Bereich
Beides wird bei ListBox automatisch gemacht!

Gruß
e-gon

maluprog 7. Okt 2010 17:16

AW: Selectieren Listview / ListBox ????
 
Hallo,

genau das ist es, für die Tips besten Dank, muß "neben mir gestanden haben"! Die Werte kann man ja in den Eigenschaften definieren. Habe aber um sicher zu gehen diese Werte in den Code geschrieben.
Der erste Hinweis "ListView.HideSelection := False;"hätte mich schon stutzig machen müssen, aber ....
So futzt es:
Delphi-Quellcode:
        ......
        ListViewA1.HideSelection := False;
        ListViewA1.RowSelect := True;
        ListViewA1.MultiSelect := False;
        if not (ListViewA1.ItemIndex = ListViewA1.Items.Count -1) then
        begin
         ListViewA1.ItemIndex := ListViewA1.ItemIndex + 1;
        end
        else
        begin
         ListViewA1.ItemIndex := 0;
        end;
        .......
Bis hierhin Danke, jedoch noch eine Frage dazu, warum ist der selectierte Eintrag nun grau und nicht blau gekennzeichnet. Kann ich den selectierten Eintrag so wie er jetzt dargestellt wird zwecks "Copy" in eine andere
Delphi-Quellcode:
ListViewA2 ect.
weiter verarbeiten?

Bitte noch auf meine Frage eine Antwort.

Gruß

manne:roll:

maluprog 7. Okt 2010 19:29

AW: Selectieren Listview / ListBox ????
 
Bin's nochmal,

letzte Einzelheit bzw. Frage hat sich erledigt, der selectierte Eintrag in "grau" futzt!
Mit dem weiterkopieren oder anderweitigem Verarbeiten des einzelnen Eintrages klappt's!

Danke an alle, Thema hat sich erledigt.

manne:)

DP-Maintenance 25. Apr 2011 20:11

Dieses Thema wurde am "25. Apr 2011, 21:11 Uhr" von "Matze" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "GUI-Design mit VCL / Qt / Common Controls" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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