Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechtsklick reagiert nicht (https://www.delphipraxis.net/202367-rechtsklick-reagiert-nicht.html)

Delbor 26. Okt 2019 13:46

Delphi-Version: 5

Rechtsklick reagiert nicht
 
Hi zusammen

Wiedermal bin ich dabei, meinen OpenFileFrame zu erweitern. In einem Popup-Menü hab ich ein Menuitem 'Neu', dem ich in einem Untermenu zwei Subitems verpasst habe: 'Verzeichnis' und Textdatei'. in ersterem habe ich per Doppelklick im OI die Clickprozedur erzeugt und diese mit 'Leben' befüllt. Die Kruxist nur: die Prozedur wird nicht aufgerufen.
Delphi-Quellcode:
procedure TOpenFileFrame.VerzeichniserstellenClick(Sender: TObject);
  var LParentNode: TTreeNode; LRealName: String;
begin
    ShowMessage('FSelectedNode := ' + FSelectedNode.Text +sLineBreak+
                'LRealName := ' + LRealName);
  if FSelectedNode <> nil then
  begin

    LParentNode := FSelectedNode.Parent;
    LRealName := PNameRec(FSelectedNode.Data)^.RealName;    //PNameRec(FSelectedNode.Data)^.RealName
    ShowMessage('FSelectedNode := ' + FSelectedNode.Text +sLineBreak+
                'LRealName := ' + LRealName);
//    TDirectory.CreateDirectory();
  end;
end;
FSelectedNode sollte den Treenode enthalten, über dem ich mit der rechten Maustaste geklickt habe. Das Showmessage ist hier am Anfang eigentlich nur so was wie ein Lückenbüsser; ich habe auch schon mal erlebt, dass die erste Zeile einer Methode aus unerklärlichem Grund übersprungen wurde. Auf der Zeile mit dem FSelectedNode hab ich einen Haltepunkt gesetzt, der auch aktiv ist.
Trotzdem geschieht rein gar nichts, wenn ich einen Eintrag des Treeviews rechts anklicke.
Wieso nicht, bzw. wie oder wo könnte ich den Fehler finden?

Gruss
Delbor

Uwe Raabe 26. Okt 2019 13:58

AW: Rechtsklick reagiert nicht
 
Wenn in deinem Windows die Maustasten nicht vertauscht sind, dann wird ein Click nur mit der linken Maustaste ausgelöst.

Einen Rechtsklick kannst du im Event OnContextPopup abfangen.

Delbor 26. Okt 2019 14:25

AW: Rechtsklick reagiert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Uwe Raabe

Den Threenode im OpenfileFrame, respektive im TVFilesExplorer klicke ich rechts an und im OnContextPopup zeige ich das Popup an:
Delphi-Quellcode:
procedure TOpenFileFrame.TVFilesExplorerContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
  var P: TPoint; X,Y: integer;
begin
    FReportlist.Add('----------------');
    FReportlist.Add('prozedur TVFilesExplorerContextPopup');
    FReportlist.Add('Button =(mbRight)-Block');
    X := MousePos.X;
    Y := MousePos.Y;
    P := ClientToScreen(Point(x,y));
    PopupMenu1.Popup(P.X, P.Y);
end;
Anhang 51746
Die einzelnen Einträge in diesem PopUp jedoch klicke ich mit der linken Maustaste an - im Falle des Wurzelverzeichnisses und des Zurücksetzens klappt das einwandfrei.
Ursprünglich waren 'Verzeichnis' und 'Textdatei' Untermenüs von 'Neu' - ich hab sie verschoben, weil ich erst vermutete, ich müsste dem Popup noch irgendwie mitteilen, dass es sich aktuell um Submenues handelt. Das hat nichts gebracht.
Auch den Namen löschen und Delphi einen neuen erzeugen lassen, war Fehlanzeige.

Gruss
Delbor

Dalai 26. Okt 2019 15:04

AW: Rechtsklick reagiert nicht
 
Ist denn die Methode VerzeichniserstellenClick dem OnClick-Ereignis des PopupMenu-Items zugeordnet?

Grüße
Dalai

Delbor 26. Okt 2019 15:23

AW: Rechtsklick reagiert nicht
 
Hi zusammen


Irgendwie läuft auf 'wunderliche Weise' alles wieder so, wie es sollte. Ich hatte das Popup aufgerufen, um die Funktion unter 'Wurzelverzeichnis' zu testen. Das funktionierte soweit, dass das Treevie gelöscht und das neue Wurzelverzeichnis angezeigt wurde. Dabei fror allerdings die Anwendung ein, so dass ich sie über den Taskmanager abschiessen musste.
Ein Anklicken und über 'zurücksetzen' den Originalzustandwieder herstellen, war nicht möglich.

Geändert hab ich nicht wirklich viel. Ausser dies:
Delphi-Quellcode:
procedure TOpenFileFrame.Zurcksetzen1Click(Sender: TObject);
begin
  if FileSearcher1.RootDir <> 'C:\' then
  begin
    TVFilesExplorer.Items.Clear;
//    FileSearcher1.RootDir := 'C:\'; // <<==
    DisplayAllFiles;
  end;
end;
Wieso ich das überhaupt auskommentiert hatte, kann ich nicht mehr nachvollziehen. Muss wohl echt spät gewesen sein...

Zitat:

Zitat von Dalai (Beitrag 1450307)
Ist denn die Methode VerzeichniserstellenClick dem OnClick-Ereignis des PopupMenu-Items zugeordnet?

Ja, war sie. ich hab sie auch per Klick im OI extra nochmal neu ausgewählt.

Momentan nicht wirklich nachvollziehen kann ich, wieso mir die Anwendung eingefroren ist. DisplayAllFiles ist aus der Oncreateprozedur extrahiert und sucht erstmal nach den diversen Laufwerken. Und dazu braucht FileSearcher1 natürlich ein Rootverzeichnis...

Gruss
Delbor

DeddyH 26. Okt 2019 15:55

AW: Rechtsklick reagiert nicht
 
Ich hoffe, Dir ist bewusst, dass die Komponente asynchron arbeitet. Das bedeutet, dass Dinge nicht unbedingt in der Reihenfolge ausgeführt werden, in der Du sie schreibst. Wenn Du also z.B. das Wurzel-Suchverzeichnis änderst, solltest Du vorher eine evtl. noch laufende Suche erst einmal abbrechen und warten, bis das auch geschehen ist. Es gibt entsprechende Ereignisse dafür.

Delbor 26. Okt 2019 16:29

AW: Rechtsklick reagiert nicht
 
Hi DeddyH

Zitat:

Zitat von DeddyH (Beitrag 1450309)
Ich hoffe, Dir ist bewusst, dass die Komponente asynchron arbeitet. Das bedeutet, dass Dinge nicht unbedingt in der Reihenfolge ausgeführt werden, in der Du sie schreibst. Wenn Du also z.B. das Wurzel-Suchverzeichnis änderst, solltest Du vorher eine evtl. noch laufende Suche erst einmal abbrechen und warten, bis das auch geschehen ist. Es gibt entsprechende Ereignisse dafür.

Ich gehe allerdings davon aus, dass die Suche abgeschlossen ist, wenn das Verzeichnis mit allen Unterverzeichnissen und allfälligen Dateien im Treeview angezeigt werden.

Gruss
Delbor

DeddyH 26. Okt 2019 16:57

AW: Rechtsklick reagiert nicht
 
Wenn die Suche beendet ist, wird ein evtl. zugewiesener Ereignishandler für OnExecuteComplete aufgerufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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