AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ValueListEditor mit rechter Maustaste Zeile selektieren
Thema durchsuchen
Ansicht
Themen-Optionen

ValueListEditor mit rechter Maustaste Zeile selektieren

Ein Thema von Klaus01 · begonnen am 29. Okt 2006 · letzter Beitrag vom 30. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#1

ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 16:10
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
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 16:46
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 18:01
Zitat von marabu:
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
Hallo Achim,

danke für Deine Antwort.

Mein OnMouseDown Ereignis schaut so aus:

Delphi-Quellcode:
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;
Ich stehe allerdings etwas auf dem Schlauch, was Du damit meinst die Selection kurz zu verschieben.

freundliche Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 19:23
Hallo Klaus,

bei mir funktioniert das hier:

Delphi-Quellcode:
// 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;
Probiere mal selbst.

Gute Nacht
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 19:56
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:

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;
Hab' noch viel zu lernen.

Danke!

Auch eine geruhsame Nacht
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 20:12
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 20:55
Zitat:
Das ist nicht windowskonform, da das Kontextmenü an die Komponente gebunden ist und nicht an den Eintrag - aus der Sicht eines Benutzers.
Dem muss ich wiedersprechen!

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ß
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 21:22
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
Miniaturansicht angehängter Grafiken
gorowselect_691.jpg  
Klaus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 29. Okt 2006, 21:55
@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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: ValueListEditor mit rechter Maustaste Zeile selektieren

  Alt 30. Okt 2006, 08:47
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
Angehängte Dateien
Dateityp: zip rssreader_104.zip (382,1 KB, 6x aufgerufen)
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:36 Uhr.
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