ListView Click Event

Started by OPLisp, November 15, 2010, 08:26:37 AM

Previous topic - Next topic

OPLisp

Hallo zusammen,

ich habe eine erweiterte Liste mit MultipleSelection und ShowSelectAlways
(siehe Datei ListView.bmp). Die Anzahl der Reihen ist variabel.

Mein Ziel ist es auf die Auswahl des Users direkt zu reagieren, um unzulässige
Reihen der Selektion (blaue Markierung) wieder zu entfernen.
In DCL geht dies unter action_tile geht das ganz gut.

In OPENDCL würde ich das Ereignis Clicked nehmen und mit der Methode
(dcl_ListView_GetSelectedNths Projekt_Form_lstView)
auslesen.
Bewerten und neu belegen mit
(dcl_ListView_SetCurSel Projekt_Form_lstView -1)
(dcl_ListView_SetCurSel Projekt_Form_lstView index)

Das Problem ist aber, dass Clicked bei einer Fensterwahl  P1 nach P2 nicht ausgelöst wird.
Gleichzeitig fand aber tatsächlich eine Auswahl statt, dies ist auch für den User sichtbar. 
Dies passiert natürlich nicht wenn ich von P2 nach P1 oder über eine andere Sammelmethode wähle.
Clicked wird als nur abgefeuert wenn man in den Zellen beginnt.

MouseDown wird immer gefeuert, nur da habe ich noch keinen Einfluss auf die Selektion.
Bei MouseUp konnte ich keine klare Linie erkennen.

MouseDown benütze ich auch um der ListView gleich den Fokus zu geben
(dcl_Control_SetFocus Projekt_Form_lstView)
Sonst geht  bei der ersten Fensterwahl (P2 P1) die blaue Markierung gar nicht.

Mit welchem Ereignis kann ich auf jeden Fall die Selektion erfassen und neu setzen?

Danke für Ihre Mithilfe!



Fred Tomke

Hallo, ja das Problem kenne ich leider. Ich hatte gehofft, dass dies im Zuge meines FeatureRequest Eingang findet. Es wäre gut, könnte man dieses Feature-Request dahingehend konkretisieren, dass ein OnSelChanged wie in der ListBox auch in der ListView zur Verfügung stünde (Steter Tropfen höhlt den Stein  ;) ).

Bis dahin bleibt mir nichts anderes übrig als zu raten, innerhalb des OnMouseUp die Prüfung einzubauen. Eigentlich müsste es so sein, dass es ein kein OnMouseUp ohne OnMouseDown gibt.

Tipp: Setze den Fokus durch OnMouseOver, wenn nicht das ListView bereits den Fokus hat. Ich guck morgen früh mal nach einem Beispiel. Mir dröhnt grad die Rübe ...

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

Fred Tomke

Hallo,

auch wenn anbei ein zumindest halbwegs funktionierender Workaround zu finden ist, fände ich es besser, gäbe es ein OnSelChanged-Ereignis.
Der Nachteil im beiliegenden Code: ziehst Du einen Rahmen für die Auswahl und lässt die linke Maustaste außerhalb des Dialogs los, bekommt das kein Event mit.

Aber vielleicht kommt es Deinem Ziel etwas näher...

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

OPLisp

Hallo Fred,

danke erstmal für Deine Dateien da sind gute Hinweise drin. Die Ereignisse funktionieren
bis auf OnMouseUp.
Du schreibst wenn ein Rahnmen gezogen und die linke Maustaste außerhalb los
gelassen wird funktioniert es nicht. Ich stelle aber fest, wenn die Maus innerhalb der
ListView logelassen wird (auch auf den Zellen), wird MouseUp nicht gefeuert.
Auch wenn ich die die Reihe 'Nicht markierbar', oder eine andere anklicke (Maus wird ja wieder los-
gelassen) nichts passiert.
Und das ist mein Problem. Ich arbeite mit OpenDCL 5.1.2.3

Gruß


Fred Tomke

Hallo, das ist suspekt. Ich habe es mit 6.0.1.2 getestet und da funktioniert es. Habe 5.1.2.3 nicht mehr im Einsatz.

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

OPLisp

Fred,

also noch einmal genau das MouseUp Ereignis funktioniert bei mir nur wenn ich auf einen Zelltext beginne,
die Maus leicht verschiebe und dann loslasse. Damit kann ich aber nicht sammeln.
Mit der Maus alleine kann ich sammeln wie in meiner BitMap gezeigt. Hier funktioniert aber das MouseUp
Event nicht.
Arbeitet die Version 6.0.1.2 zuverlässig mit AutoCAD 2010 ?

OPLisp

Also unter 6.0.1.3 funktioniert das MouseUp Event.
und unter 5.1.2.3 nur wie beschrieben.
Ich hoffe 6.0.1.3 läuft sonst stabil und ist bald als 'stably version'
zum herunterladen.

Das war's!

Gruß