AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Actions verwenden - Pre- und Post-Action

Ein Thema von mm1256 · begonnen am 5. Jul 2015 · letzter Beitrag vom 6. Jul 2015
Antwort Antwort
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Actions verwenden - Pre- und Post-Action

  Alt 5. Jul 2015, 19:03
Hallo,

bin mir nicht sicher, ob hier der richtige Platz ist, darum bitte an die Mods, ggf. verschieben.

Ich habe folgendes Problem: Es geht um eine Anwendung mit mehreren Fenstern. Jedes Fenster hat ein Mainmenu und Buttons. Den Menü-Einträgen und Buttons ist größtenteils eine Action zugewiesen. Die TActionlist befindet sich in einem separaten Datenmodul, das von allen Fenstern verwendet wird. Soweit so gut.

Nun muss ich aber manchmal wenn eine Action ausgeführt wird, vorher und nachher am Formular Änderungen vornehmen, z.B. Button's disablen, damit die Funktion/Action nicht rekursiv aufgerufen wird. Ich müsste also praktisch vor und nach dem Ausführen der Action etwas ausführen.

Hat man daran nicht gedacht? Oder geht das, und ich seh den Wald vor Bäumen nicht?
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#2

AW: Actions verwenden - Pre- und Post-Action

  Alt 5. Jul 2015, 19:24
z.B. Button's disablen, damit die Funktion/Action nicht rekursiv aufgerufen wird.
Das kann eigentlich nur dann vorkommen, wenn du in deinem Code Application.ProcessMessages aufrufst (was man ja nicht tun soll). Andernfalls wird der Event-Handler der Action als Antwort auf eine Message ausgeführt (Tastendruck, Mausklick oder so) und kann somit nicht von der Bearbeitung einer anderen Message unterbrochen werden.

Also stellt sich zunächst die Frage, warum du während des Events ünerhaupt einen Button disablen willst. Vielleicht, weil der Event zulange braucht under Benutzer aus Frust immer wieder auf den Button klickt?

Je nach Anwendungsfall gibt es da verschiedene Ansätze. Ein Wunsch nach einem Pre- und Post-Action-Event ist m.W. bisher noch nicht aufgetaucht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.159 Beiträge
 
Delphi 12 Athens
 
#3

AW: Actions verwenden - Pre- und Post-Action

  Alt 5. Jul 2015, 22:29
Hallo mm1256,

wenn du meinst das während des Events Componenteneigenschaften geändert werden,
und dabei werden neue Actions getriggert, so das etwas rekursiv oder anders falsch läuft.

Man kann ja die OnChange Events vor solchen Veränderungen
kurz abklemmen (OnChange := nil),
Werte, z.B. Text ändern,
und danach wieder anklemmen (OnChange := oldEvent.
Wenn das nur ein einzelnes Problem betrifft.

Aber vielleicht wäre es sauberer wenn du vielleicht ein MultiEvent-System von Spring4D anschaust, ob das evtl. deine Probleme löst.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Actions verwenden - Pre- und Post-Action

  Alt 5. Jul 2015, 22:53
Siehe mein Tutorial http://www.delphipraxis.net/185749-f...-callback.html da mache ich genau das
Delphi-Quellcode:
procedure TFoo.BarActionExecute( Sender: TObject );
begin
  TAction(Sender).Enabled := False;
  FService.DoSomething(
    procedure ( AResult: TBar; AException: Exception )
    begin
      // Verarbeitung der Rückgabe
      TAction(Sender).Enabled := true;
    end );
end;
Alle Buttons, die mit dieser Action verbunden sind, folgen der Enabled Eigenschaft.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Actions verwenden - Pre- und Post-Action

  Alt 6. Jul 2015, 10:17
Hallo,

erst mal vielen Dank für eure Antworten.

Der Tipp von Sir Rufo löst das Problem teilweise, d.h. bei einigen Actions passt das prima.

Bei anderen Actions die gegeneinander verriegelt werden müssen und länger dauern können (z.B. alle Aktionen die Änderungen am Datenbestand vornehmen wie Daten-Import, Daten-Export...) wird es problematischer. Ich hab mich nun dazu entschlossen, die Actions im Public-Bereich der TActions zu deklarieren und entsprechend zu verwenden. Erscheint mir momentan der brauchbarste Kompromiss zu sein.

Das ursächliche Problem hier ist - wie Uwe schon richtig vermutet hat - das "Verbotene". In dem Fall bei der Fortschritt-Anzeige.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Actions verwenden - Pre- und Post-Action

  Alt 6. Jul 2015, 11:58
Hmmm, jede Action hat ein OnUpdate Event und dort kann man z.B. die Eigenschaften der Action verändern (dafür ist der Event da).

Und genau dort stellt man dann die Abhängigkeiten zwischen den Actions her. Einfach ein paar Flags die beim Starten einer Action gesetzt werden und dann im OnUpdate die Enabled Eigenschaft der jeweiligen Action setzen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:01 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