Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TListBox ListBox1MouseActivate ItemIndex? (https://www.delphipraxis.net/193607-tlistbox-listbox1mouseactivate-itemindex.html)

Glados 20. Aug 2017 21:59

TListBox ListBox1MouseActivate ItemIndex?
 
Ich quäle mich gerade etwas ab und weiß nicht wie ich weiterkommen.

Kann man irgendwie im ListBox1MouseActivate-Event an den Index des Items kommen, das man angeklickt hat?

Uwe Raabe 20. Aug 2017 22:43

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Eventuell kannst mit den X,Y-Werten und
Delphi-Quellcode:
ItemAtPos
was erreichen. Ich weiß nur gerade nicht, ob X,Y relativ zu Client oder Screen sind.

zeras 20. Aug 2017 22:46

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Hift der Link hier?
Hier

Glados 20. Aug 2017 22:49

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Zitat:

Zitat von zeras (Beitrag 1379081)
Hift der Link hier?
Hier

Ich kann ehrlich gesagt keinen Zusammenhang zwischen meinem Problem und diesem Thread finden.

zeras 20. Aug 2017 22:53

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Zitat:

Zitat von Glados (Beitrag 1379082)
Zitat:

Zitat von zeras (Beitrag 1379081)
Hift der Link hier?
Hier

Ich kann ehrlich gesagt keinen Zusammenhang zwischen meinem Problem und diesem Thread finden.

Dort steht unter anderem:

Delphi-Quellcode:
ListBox1.Items[ListBox.ItemIndex]

Sollte das nicht die Lösung sein?

Glados 20. Aug 2017 22:55

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Nein.

Denn während des Activate der Maus (ListBox1MouseActivate-Event) ist ListBox.ItemIndex noch nicht auf das neue, angeklickte Item, gesetzt.
Genau das ist das Problem.

Mein Ziel erklärt:
ich möchte beim Klick auf ein Item erst ein paar Prüfungen durchführen, ob das Item überhaupt den Index bekommen darf.
Das funktioniert aktuell in OnClick natürlich super. Nur ab und zu sieht man halt noch, wie das neu angeklickte Item selektiert wird und dann (gewollt) wieder zum alten zurückspringt.

Uwe Raabe 21. Aug 2017 09:42

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Wie schon oben erwähnt, bietet ItemAtPos hier eine einfache Möglichkeit:

Delphi-Quellcode:
procedure TForm207.ListBox1MouseActivate(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y, HitTest:
    Integer; var MouseActivate: TMouseActivate);
var
  idx: Integer;
begin
  idx := ListBox1.ItemAtPos(Point(X, Y), true);
  if idx >= 0 then begin
    // mach was mit Item idx
  end;
end;

Glados 21. Aug 2017 16:41

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Hilft leider und komischerweise auch nicht.
Das MouseActivate-Event wird nach meinen Tests noch vor dem Zeichnen des Selected-Rectangles aufgerufen.
Wenn eine Bedingung in dem Event Zutrifft, rufe ich Exit auf und setze das neue ItemIndex erst gar nicht.

Ich glaube hier müsste ich wohl eher im DrawItem ansetzen und irgendwie das Zeichnen des Selected-Rectangles unterbinden oder?

Uwe Raabe 21. Aug 2017 16:56

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Zitat:

Zitat von Glados (Beitrag 1379157)
Hilft leider und komischerweise auch nicht.

Was hilft nicht? Liefert der Code nicht den Index des angeklickten Items?

Zitat:

Zitat von Glados (Beitrag 1379157)
Das MouseActivate-Event wird nach meinen Tests noch vor dem Zeichnen des Selected-Rectangles aufgerufen.
Wenn eine Bedingung in dem Event Zutrifft, rufe ich Exit auf und setze das neue ItemIndex erst gar nicht.

Ich glaube hier müsste ich wohl eher im DrawItem ansetzen und irgendwie das Zeichnen des Selected-Rectangles unterbinden oder?

Hier kann ich dir leider nicht mehr folgen. Kannst du mal im Detail erklären, was du vorhast?

Glados 21. Aug 2017 17:08

AW: TListBox ListBox1MouseActivate ItemIndex?
 
Ich habe eine ListBox, wo ich die Items selber Zeichne.
Manchmal sind gewisse Items "deaktiviert". Ich ändere nur das Font zu Grau und Style zu Italic. In einem Boolean-Array halte ich den Index der "deaktivierten" Items fest.

Klicke ich nun auf ein Item prüfe ich, ob dieses "aktiviert" oder "deaktiviert" ist (ich gucke einfach nach dem Index im Array nach).

Wenn der Array-Index für dieses Item nun False ist, dann soll der ItemIndex der ListBox nicht auf das angeklickte Item gesetzt werden. Ist das der Fall (Item "deaktiviert"), wird also aktuell im OnClick der ItemIndex auf das zuletzt angewählte Item zurückgesetzt. Und genau hier sieht man ab und zu trotzdem, wie das "deaktivierte" Item kurzzeitig "selektiert" wird und die Selektion dann wieder zum alten Item zurückspringt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Seite 1 von 2  1 2   

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