![]() |
Doppelclick bei Actions verhindern
Hallo,
wie kann ich verhindern, dass der Anwender auf einen Menüpunkt (Action) einen doppelclick macht? |
AW: Doppelclick bei Actions verhindern
Die Maus wegnehmen?
|
AW: Doppelclick bei Actions verhindern
Zitat:
|
AW: Doppelclick bei Actions verhindern
Das geht doch gar nicht :gruebel: Das Menü geht schon beim ersten Click zu.
Sherlock |
AW: Doppelclick bei Actions verhindern
Mehr Rum reichen? 8-)
|
AW: Doppelclick bei Actions verhindern
Zitat:
|
AW: Doppelclick bei Actions verhindern
Beim Klick auf einen Hauptmenü-Eintrag ohne Untermenü geht da gar nix zu. :stupid:
|
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. |
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? |
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. |
AW: Doppelclick bei Actions verhindern
Zitat:
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? |
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.
|
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; |
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