AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Rechtsklick in Scrollbar einer TListBox abfangen

Ein Thema von Amateurprofi · begonnen am 18. Mär 2020 · letzter Beitrag vom 19. Mär 2020
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 18. Mär 2020, 14:54
Zitat:
Zu dem Hinweis "ScrollBar selbst zeichnen":
Bei mir wird die korrekt gezeichnet.
Ist nicht nötig vorausgesetzt du hast vollen Zugriff auf die Scrollbar um die Message WM_NCRBUTTONDOWN behandeln zu können.
Wie du schreibst scheint es ja bei dir jetzt zu funktionieren.

An den Tooltips (Hints) musst du aber noch was tun die stimmen mit den Einträgen nicht überein.

Geändert von venice2 (18. Mär 2020 um 14:56 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 18. Mär 2020, 17:20
Zitat:
An den Tooltips (Hints) musst du aber noch was tun die stimmen mit den Einträgen nicht überein.
Bei mir tun sie es.
Wenn die Maus in die ScrollBar zeigt, wird angezeigt, welcher Eintrag der Position des Mauszeigers entspricht.
Wenn ich dann einen Rechtsklick in die ScrollBar mache, wird die Liste so gescrollt, dass der Eintrag, der im Hint gezeigt wurde, als oberster Eintrag gezeigt wird.
Ausnahmen: Die letzten Einträge können ev. nicht ganz nach oben gescrollt werden.

Kannst du etwas genauer beschreiben, was unter "die stimmen mit den Einträgen nicht überein" zu verstehen ist.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 18. Mär 2020, 17:43
Ein Bild scheint hier angebracht zu sein.
Es ist der Eintrag 9 Selektiert und die Maus befindet sich in diesen Bereich allerdings wird hier der Eintrag 821 angezeigt.
Das passt irgendwie nicht zusammen.

Meine Meinung.
Ist aber möglich das es dir so reicht bzw. in Ordnung für dich ist.

Deine beschriebene Methode (Ergebnis) funktioniert jedoch korrekt.
Vielleicht umbenennen damit man weis um was es geht?
Zitat:
"Get List entry from current mouse position xxx"

Geändert von venice2 (20. Mär 2020 um 16:34 Uhr)
  Mit Zitat antworten Zitat
Alt 18. Mär 2020, 20:23     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
venice2
(Gast)

n/a Beiträge
 
#5

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 18. Mär 2020, 20:28
Zitat:
zeigt bei mir den Wert aus der selektierten Zeile an. Habe es mit Delphi 2006 getestet.
Ist aber nicht das was er möchte.

Er ermittelt abhängig von der aktuellen Maus Position innerhalb der Scrollbar den aktuellen Index der sich an dieser Position befindet.
Mit einem Rechtsklick schiebt er dann diesen Index on Top in der Listbox.
So habe ich das verstanden.

Das funktioniert so wie er es will.

Das wäre die korrekte Procedure damit auch alles passt.

procedure WMNCRBUTTONDOWN(var Msg: TWMNCRButtonDown); message WM_NCRBUTTONDOWN;
Delphi-Quellcode:
procedure TListBox.WMNCRBUTTONDOWN(var Msg: TWMNCRButtonDown);
var
  Index: Integer;
begin
  if MousePosToIndex(ScreenToClient(Point(Msg.XCursor, Msg.YCursor)), Index) then
  begin
    EraseSBarHint;
    TopIndex := Index;
  end;
  Msg.Result := 1;
end;

Geändert von venice2 (18. Mär 2020 um 20:55 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 19. Mär 2020, 05:40
Er ermittelt abhängig von der aktuellen Maus Position innerhalb der Scrollbar den aktuellen Index der sich an dieser Position befindet.
Mit einem Rechtsklick schiebt er dann diesen Index on Top in der Listbox.
So habe ich das verstanden..
Genau so ist es.

Das wäre die korrekte Procedure damit auch alles passt.

procedure WMNCRBUTTONDOWN(var Msg: TWMNCRButtonDown); message WM_NCRBUTTONDOWN;
Delphi-Quellcode:
procedure TListBox.WMNCRBUTTONDOWN(var Msg: TWMNCRButtonDown);
var
  Index: Integer;
begin
  if MousePosToIndex(ScreenToClient(Point(Msg.XCursor, Msg.YCursor)), Index) then
  begin
    EraseSBarHint;
    TopIndex := Index;
  end;
  Msg.Result := 1;
end;
Danke für die Korrektur. Werde ich entsprechend anpassen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 19. Mär 2020, 16:51
Zitat:
Eine Option wäre noch, die Liste so zu scrollen, dass der Eintrag, zu dem ich springe, an der Y-Position der Mauszeigers angezeigt wird und nicht als obersten Eintrag.
Genau das solltest du tun dann entspricht es dem Popup Menu Eintrag "Bildlauf hier"
und du umgehst das Problem mit dem Top Index der ListBox wenn dieser nicht mehr OnTop gesetzt werden kann.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Rechtsklick in Scrollbar einer TListBox abfangen

  Alt 19. Mär 2020, 05:22
Ein Bild scheint hier angebracht zu sein.
Es ist der Eintrag 9 Selektiert und die Maus befindet sich in diesen Bereich allerdings wird hier der Eintrag 821 angezeigt.
Das passt irgendwie nicht zusammen.

Meine Meinung.
Ist aber möglich das es dir so reicht bzw. in Ordnung für dich ist.

Deine beschriebene Methode (Ergebnis) funktioniert jedoch korrekt.
Vielleicht umbenennen damit man weis um was es geht?
Zitat:
"Get List entry from current mouse position xxx"
Dann habe entweder ich schlecht beschrieben, was ich beabsichtigte oder ... .
Der "Hint" den ich ausgebe soll nicht angeben, welcher Eintrag gerade den Fokus hat (=ItemIndex) sondern er soll mir zeigen an welcher Stelle der Liste ich lande, wenn ich die ScrollBar rechtsklicke.

"Mein Rechtsklick" ist im Prinzip das Gleiche, was Windows macht, wenn ich in dem PopUp Menu den Eintrag "Bildlauf hier" auswähle.
Was mir bei der Verwendung des PopUp Menus nicht gefällt, ist, dass ich dort keine Information habe, wo ich in der Liste lande, wenn ich "Bildlauf hier" auswähle. Ich kann zwar ungefähr abschätzen wo ich landen werde, aber ich wüsste dass gern vorher.
Bei meiner Methode wird mir angezeigt, wo ich landen werde, wobei ich die Wahl habe, mir nur den Index des Eintrags anzeigen zu lassen oder den Klartext des Listen-Eintrags.
Eine Option wäre noch, die Liste so zu scrollen, dass der Eintrag, zu dem ich springe, an der Y-Position der Mauszeigers angezeigt wird und nicht als obersten Eintrag.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz