![]() |
ValueListEditor mit rechter Maustaste Zeile selektieren
Hallo Gemeinde,
wie der Titel schon sagt, möchte ich im ValueListEditor mit der rechten Maustaste eine Zeile selektieren (farblich markieren) so wie es mit der linken Maustaste schon von alleine funktionert. Hintergrund: Klicke ich mit der rechten Maustaste in eine Zeile des ValueListEditors rufe ich ein popupMenu auf. Hier kann man delete und copy auswählen. Wähle ich z.B. delete aus wird auch die richtige Zeile gelöscht. Ich möchte aber gerne, daß die Zeile vorher z.B. blau markiert wird, damit dem User vor Gesicht geführt wird, welche Zeile bei der Aktion gelöscht wird. Habe da irgendwie ein Brett vor dem Kopf, vielleicht weiß ja jemand wie es gemacht wird. Grüße Klaus |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Hallo Klaus,
das Ereignis OnMouseDown() hat Vorrang vor dem Kontext-Menü. Wenn du dort die Selektion kurz verschiebst, das Popup-Menü selbst anzeigst und anschließend die Selektion wieder zurücksetzt - wäre das keine Lösung für dein Problem? Freundliche Grüße vom marabu |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Zitat:
danke für Deine Antwort. Mein OnMouseDown Ereignis schaut so aus:
Delphi-Quellcode:
Ich stehe allerdings etwas auf dem Schlauch, was Du damit meinst die Selection kurz zu verschieben.
procedure TConfigForm.feed_name_source_listMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var aRow,ACol:LongInt; begin feed_name_source_list.MouseToCell(x,y,aCol,aRow); if (button = mbRight) and (aRow <= feed_name_source_list.RowCount -1) and (aRow > 0)then begin selectedRow:=aRow; // selectedRow ist eine Var. damit ich mit dem delete/copy // aus dem PopUpMenü auch die richtige Zeile verarbeite PopUpMenu1.Popup(Left+x-feed_name_source_list.left,top+y+feed_name_source_list.Top); end else selectedRow:=0; end; freundliche Grüße Klaus |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Hallo Klaus,
bei mir funktioniert das hier:
Delphi-Quellcode:
Probiere mal selbst.
// form private: ContextRow: Integer;
procedure TDemoForm.ValueListEditor1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var iSelected, iRow, iCol: Integer; pt: TPoint; begin with Sender as TValueListEditor do begin iSelected := Row; MouseToCell(x, y, iCol, iRow); if (button = mbRight) and (iRow > 0) and (iRow < RowCount) then begin Row := iRow; ContextRow := iRow; pt := ClientToScreen(Point(x, y)); PopUpMenu.Popup(pt.x, pt.y); Row := iSelected; end else ContextRow := -1; end; end; Gute Nacht |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Hallo Achim,
danke für Deinen Quelltext. Delphi 6 kennt ContectRow anscheinend noch nicht. Ich habe das Problem jetzt etwas anders gelöst. Die Zeile wird mit der linken Maustaste selektiert und mit der rechten wird dann das PopUp aufgerufen. Ist ein wenig umständlich, aber es geht und ist auch einigermaßen Windowskonform.
Delphi-Quellcode:
Hab' noch viel zu lernen.procedure TConfigForm.feed_name_source_listMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var aRow,ACol:Integer; pt : TPoint; begin with sender as TValueListEditor do begin MouseToCell(x,y,aCol,aRow); if (button = mbRight) and (aRow = row) then begin pt:=ClientToScreen(Point(x,y)); PopUpMenu1.Popup(pt.x,pt.y); end; end end; procedure TConfigForm.delete1Click(Sender: TObject); begin feed_name_source_list.DeleteRow(feed_name_source_list.row); end; Danke! Auch eine geruhsame Nacht Klaus |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Hallo Klaus,
auch D7 kennt die Variable ContextRow nicht - die habe ich als form-globale Variable in der private section meiner Form deklariert, so wie du es wahrscheinlich mit selectedRow gemacht hast. Was mir an deiner jetzigen Lösung auffällt ist, dass man nur noch genau auf dem aktuell selektierten Eintrag ein Kontextmenü abrufen kann. Das ist nicht windowskonform, da das Kontextmenü an die Komponente gebunden ist und nicht an den Eintrag - aus der Sicht eines Benutzers. Grüße |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Zitat:
BEISPIEL: Meine Datenbank hat 1 Eintrag Header: Titel , Artist ------------------------ 1. Angel Eyes , Abba Klicke ich nun auf den eintrag Titel in der ersten zeile dann öffnet sich mein Kontexmenü mit dem Eintrag 'Alle Dateien auswählen von diesen Titel' Klicke ich nun auf den eintrag Artist in der ersten zeile dann öffnet sich mein Kontexmenü mit dem Eintrag 'Alle Dateien auswählen von diesen Artist!. Du siehst es macht schon sinn wenn man das Kontexmenu an den Eintrag bindet. Es kommt immer darauf an was im Kontexmenü steht bzw.. zur Laufzeit geändert wird. gruß |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Achim,
habe Deinen Code noch einmal genommen und ein wenig damit herumgespielt. Er verhält sich korrekt, wenn goRowSelect auf false gesetzt ist (vgl. Bild). Ich hatte goRowSelect auf true gesetzt, dann wird die gesammte Zeile blau markiert. Die Markierung wird aber nicht neu gesetzt wenn ich mit der rechten Maustaste in eine Zeile klicke (vgl. Bild, hier würde Zeile 1 gelöscht, Zeile 2 ist aber blau markiert). Und in diesem Zustand würde der User verwirrt werden. Wenn Du noch eine Idee hast? freundliche Grüße Klaus |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
@Emil:
Da ist kein Widerspruch. Natürlich darf und soll das Kontextmenü bei Containern deren Zustand berücksichtigen und auch der Punkt soll berücksichtigt werden, an dem geklickt wurde. Was ich in Frage stelle ist die Anzeige eines Kontextmenüs dann und nur dann, wenn auf das aktuelle Item geklickt wird. Damit wird die Lernkurve deutlich abgeflacht. Ich fände es besser, wenn der Benutzer immer ein Kontextmenü gezeigt bekommt, wenn er auf den Container klickt. @Klaus: Egal ob goRowSelect gesetzt ist oder nicht, die temporäre Verschiebung der Selektion auf das angeklickte Item funktioniert bei mir. Sollte sich D6 da anders verhalten als D7? Grüße |
Re: ValueListEditor mit rechter Maustaste Zeile selektieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Achim,
es schaut fast so aus, oder w2k verhält sich anders als z.B. XP wer weiß. Habe mal das Binary angehängt. Ds Programm sucht das IniFile im Programmverzeichnis. Das Programmteil, der mir Problem bereitet, ist unter RSS/add feed zu finden. Zu der Diskussion Windowskonform oder nicht. Wäre es o.k. wenn das PopUp immer angzeigt würde wenn mit der rechten Maustaste in eine Zeile geklickt wird, ist die Zeile aber nicht selektiert (blau hinterlegt) dann sind die PopUp Menüitems disabled. Einen schönen Tag noch. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz