Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Doppelclick bei Actions verhindern (https://www.delphipraxis.net/186804-doppelclick-bei-actions-verhindern.html)

Thomas Feichtner 1. Okt 2015 11:56

Doppelclick bei Actions verhindern
 
Hallo,

wie kann ich verhindern, dass der Anwender auf einen Menüpunkt (Action) einen doppelclick macht?

Zoot 1. Okt 2015 12:11

AW: Doppelclick bei Actions verhindern
 
Die Maus wegnehmen?

Sir Rufo 1. Okt 2015 12:25

AW: Doppelclick bei Actions verhindern
 
Zitat:

Zitat von Zoot (Beitrag 1317391)
Die Maus wegnehmen?

So hart? Man kann es doch erst mal mit Hypnose versuchen (beim Anwender und der Maus) :mrgreen:

Sherlock 1. Okt 2015 12:34

AW: Doppelclick bei Actions verhindern
 
Das geht doch gar nicht :gruebel: Das Menü geht schon beim ersten Click zu.

Sherlock

Uwe Raabe 1. Okt 2015 12:35

AW: Doppelclick bei Actions verhindern
 
Mehr Rum reichen? 8-)

Perlsau 1. Okt 2015 13:03

AW: Doppelclick bei Actions verhindern
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1317389)
Hallo, wie kann ich verhindern, dass der Anwender auf einen Menüpunkt (Action) einen doppelclick macht?

... oder anders ausgedrückt: Was ist der Hintergrund deiner Frage? Wieso möchtest du etwas vermeiden, was sowieso niemals eintritt – weil der zweite Klick auf denselben Menüpunkt das Menü wieder schließt?

baumina 1. Okt 2015 13:15

AW: Doppelclick bei Actions verhindern
 
Beim Klick auf einen Hauptmenü-Eintrag ohne Untermenü geht da gar nix zu. :stupid:

Thomas Feichtner 5. Okt 2015 08:09

AW: Doppelclick bei Actions verhindern
 
Hallo!

Ich hätte mal folgendes probiert:
Eine Ableitung der ActionList und mich reingehängt.
Das funktioniert aber nur so lange in einem OnExecute nicht wieder eine andere Action aufgerufen wird.


Delphi-Quellcode:
unit myActionList;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ActnList, IniFiles, Stdctrls, Menus;

type
  TmyActionList = class(TActionList)
  private
    { Private-Deklarationen }
    oAction: TCustomAction;
    FOnExecuteAction: TNotifyEvent;
    procedure OnActionExecute(Sender: TObject);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    function ExecuteAction(Action: TBasicAction): Boolean; override;
  published
    { Published-Deklarationen }
  end;

var
  oCallBackToMemLog : TCallBackEventToMemLog;

implementation

constructor TmyActionList.Create(AOwner: TComponent);
begin
  inherited;
  oAction := nil;
end;

function TmyActionList.ExecuteAction(Action: TBasicAction): Boolean;
begin
  if Action is TCustomAction then begin
    FOnExecuteAction := TCustomAction(Action).OnExecute;
    TCustomAction(Action).OnExecute := OnActionExecute;
    oAction := TCustomAction(Action);
    oAction.Enabled := False;
  end;
end;

procedure TmyActionList.OnActionExecute(Sender: TObject);
begin
  if Assigned(FOnExecuteAction) then begin
    FOnExecuteAction(Self);
  end;
  oAction.Enabled := True;
  TCustomAction(oAction).OnExecute := FOnExecuteAction;
end;

end.

baumina 5. Okt 2015 09:42

AW: Doppelclick bei Actions verhindern
 
... und gestern war Sonntag.

Kannst du mal bitte erklären was du warum machen willst und wobei du nun Probleme hast?

Thomas Feichtner 5. Okt 2015 10:04

AW: Doppelclick bei Actions verhindern
 
Ich habe im Hauptformular von DevExpress die TdxNavBar.
Bei den einzelnen Items hängt überall eine Action dahiner.
Nun möchte ich einen Doppelclick des Anwenders verhindern.
Wie soll es funktionieren?
Beim Click wird die Action disabled und anschlißend wieder enabled.
Nun möchte ich das nicht bei jedem OnClick ausführen sondern global verhindern -> Daher meine Ableitung der Actionlist.
Das funktioniert soweit auch. Jedoch wenn ich innerhalb eines OnExcute eine andere Action aufrufe komme ich nicht mehr auf die erste Action zurück.

Zoot 5. Okt 2015 10:16

AW: Doppelclick bei Actions verhindern
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1317686)
Ich habe im Hauptformular von DevExpress die TdxNavBar.
Bei den einzelnen Items hängt überall eine Action dahiner.
Nun möchte ich einen Doppelclick des Anwenders verhindern.

Erklär doch bitte mal den wirklichen Sinn.
Warum benutzt du eine Navbar, die man dann aber nicht anklicken darf?
Bzw. warum sind dort Actions hinterlegt, die dann aber nicht ausgeführt werden dürfen?

baumina 5. Okt 2015 10:23

AW: Doppelclick bei Actions verhindern
 
Wenn ich das richtig verstanden habe, soll die Aktion beim einfachen Klick ausgeführt werden. Danach ist das Element in der Navbar aktiv. Also musst du nur in der Aktion prüfen, ob das Element in der Navbar aktiv ist oder nicht und dementsprechend die Aktion ausführen oder nicht.

Thomas Feichtner 8. Okt 2015 08:07

AW: Doppelclick bei Actions verhindern
 
Hallo,

baumina hat es schon richtig verstanden.

Ich könnte für jede Action folgenden Code schreiben (siehe unten). Somit kann ich verhindern, dass durch schnelles mehrfaches clicken (Button, NavBar,...) die Action mehrfach aufgerufen wird, wenn das "Mach was" sehr lange dauert.


Es wäre einfach schön, wenn ich das nicht für jede Action das programmiern muss.

Delphi-Quellcode:
procedure TForm1.Action1Execute(Sender: TObject);
begin
  Action1.Enabled := False;
  ... -> Mach was
  Action1.Enabled := True;
end;

procedure TForm1.Action2Execute(Sender: TObject);
begin
  Action2.Enabled := False;
  ... -> Mach was
  Action2.Enabled := True;
end;

nahpets 8. Okt 2015 08:58

AW: Doppelclick bei Actions verhindern
 
Momentan rate ich mal ein bisserl.

Ginge dashier nicht?
Delphi-Quellcode:
procedure TmyActionList.OnActionExecute(Sender: TObject);
begin
  if Assigned(FOnExecuteAction) then begin
    if Sender is TAction then TAction(Sender).Enabled := False;
    FOnExecuteAction(Self);
    if Sender is TAction then TAction(Sender).Enabled := True;
  end;
end;


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