ListView: ItemIndex ?

Rund um die LCL und andere Komponenten
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

ListView: ItemIndex ?

Beitrag von Nils »

Hi,

ich möchte mit dem aktuell ausgewählten Eintrag eines ListViews etwas machen. In Delphi gibt es dafür ListView.ItemIndex, in Lazarus 24 (aktuellste Version bis jetzt) nicht. Im Forum habe ich gelesen, man könne anstelle von ItemIndex einfach Selected.Index benutzen, das funktioniert nicht: Wenn ich 3 Einträge habe und wähle Eintrag 3 aus, ist Selected.Index nicht mal gesetzt, wenn ich anschliessend Eintrag 1 auswähle, wird plötzlich etwas mit Eintrag 3 getan, um es zu verdeutlichen wähle ich nun noch Eintrag 2 aus und es passiert was mit Eintrag 1. Selected.Index ist also sozusagen im Rückstand. ItemFocused.Index ist ebenso immer im Rückstand. Was könnte ich tun um den wirklich aktuellen ItemIndex auszulesen ?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Es gibt da noch ein Event bei der ListView onSelect... dort gibt es eine Variable item.... meines wissenens könnte sein das der Wert genauer ist...
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

pluto hat geschrieben:meines wissenens könnte sein das der Wert genauer ist...
Genauer? Entweder der Index stimmt, oder er stimmt nicht. Aber genauer? Es wird wohl kaum sein, dass ein 'könnte sein, dass es 1 oder 2 ist' oder Index:=1.5; zurückkommt.
Würden wir über Berechnungen mit Gleitkommazahlen reden, so würde ich ein "genauer" ja aktzeptieren, aber bei einem Index... :roll:


Bei mir funktionieren übrigens

Code: Alles auswählen

ListView1.Selected.Index
für den Index des gewählten Eintrags und

Code: Alles auswählen

ListView1.Selected.Caption
für dessen Inhalt ganz wunderbar.

Wenn kein Element gewählt ist, wird so vermute ich -1 zurückgegeben. Ein Aufrufen der Caption müsste man eventuell abfangen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn kein Element gewählt ist, ist Selected ni

Ich hab gerad mal in die VCL geschaut und TListView hat kein ItemIndex du verwechselst das sicher mit TListBox.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Dann schau mal bei Delphi rein, da gibt es das. Steht aber nicht in der Codehilfe drinnen, hat Borland wohl vergessen. Auf jeden Fall funktioniert Selected.Index nicht, es wird außerdem geprüft ob Selected nil ist und somit abgebrochen, falls ja.
Meine Musik: spiker-music.net

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Bei mir funktionierts, bei Bembulak auch, poste doch ma n codebeispiel.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Was nutzt du GTK2 ? GT ? GTK1 ? kann ja sein das irgendwo dort noch ein kleiner Fehler drin ist...
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Das könnte durchaus sein.
Aber da von Nils der Bezug auf Delphi vorhanden ist, gehe ich mal von Windows aus.

Ich beziehe mich übrigens auch auf Windows, weil es im Moment (durch die Arbeit) meine Hauptplattform ist. Wenn ich Linux meine, erwähne ich es extra, um Verwirrung zu vermeiden.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

So wollte ich es machen, ging aber nicht da ItemIndex fehlt:

Code: Alles auswählen

procedure TfrmMain.mmEditRadtourClick(Sender: TObject);
begin
  if LV.ItemIndex > -1 then
  begin
    with frmCreate do
    begin
      ShowModal;
 
      with LV.Items[LV.ItemIndex] do
      begin
        c           := StrToInt(Caption);
        eKM.Text    := SubItems[0];
        eRoute.Text := SubItems[1];
        eDatum.Text := SubItems[2];
      end;
    end;
  end;
end;
So habe ich es nun gemacht, funktioniert nicht, siehe oben:

Code: Alles auswählen

procedure TfrmMain.mmEditRadtourClick(Sender: TObject);
begin
  if LV.ItemFocused = nil then
    Exit;
  if LV.ItemFocused.Index > -1 then
  begin
    with frmCreate do
    begin
      ShowModal;
 
      with LV.Items[LV.ItemFocused.Index] do
      begin
        c           := StrToInt(Caption);
        eKM.Text    := SubItems[0];
        eRoute.Text := SubItems[1];
        eDatum.Text := SubItems[2];
      end;
    end;
  end;
end;
Ich benutze momentan Win32. Unter Linux werde ich es mit GTK2 kompilieren. Denn GTK2 sieht hier ziemlich mies aus und ich möchte eher darauf setzen etwas überall gut zu haben, statt irgendwo nicht so gut wenn gar nicht schlecht, da ist es mir die Arbeit eben wert.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Die ListView hat noch die Eigenschaft Selectet.... aber eigentlich müsste das so klappen wie du es gemacht hast...

Evlt. ist das aber auch ein BUG....
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ItemFocused und Selected sind 2 paar schuhe das ist dir klar ?
Ich denke du willst eigentlich Selected nehmen ?! probiers mal damit.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Warum ? ist itemFoucee und Selected nicht das gleiche ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nö warum sollte es 2 Propertys geben die das selbe machen ?
Und jetzt frag nicht was die machen 1. sagts der name schon 2. stehts in der hilfe.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Hilfe ist toll *G* naja ich gebe es auf... evlt. verätt es mir ja jemand anders wo der Unterschied liegt. Meiner Meinung nach machen beide das gleiche !
Kann natürlich sein das eine den "Alten" Index Enthält und der andere einen den Neuen.
MFG
Michael Springwald

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Christian: Oben habe ich schon gesagt, dass ItemFocues und Selected keinerlei Unterschiede zeigt. Abgesehen davon passt Focused vom Namen her viel besser. Nun gut, noch einmal kurz zusammengefasst: Selected funktioniert nicht wie gewünscht, es ist IMMER im Rückstand.
Meine Musik: spiker-music.net

Antworten