AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?
Thema durchsuchen
Ansicht
Themen-Optionen

Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

Ein Thema von Rollo62 · begonnen am 1. Jul 2020 · letzter Beitrag vom 10. Jul 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.420 Beiträge
 
Delphi 12 Athens
 
#1

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:03
Ich denke mal, das wurde so implementiert, weil es auch in der VCL so ist. Dort ist es so, weil es eine Windows Control ist, welche sich so verhält. Und um es dem eingefleischten Delphi-Entwickler leichter zu machen, wurde das Verhalten so übernommen.

......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#2

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:08
Ja schon, könnte sein.
Aber gibt es dafür nicht irgendein übergeordnetes Konzept oder Design-Pattern ?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:31
Die FMX Checkbox ist ein denkbar schlechtes Beispiel, denn genau die ist bei den angesprochenen Events genau richtig:
- OnClick - wenn der Nutzer drauf klickt
- OnChange - wenn sich der Wert ändert, egal ob durch UI Interaktion oder Code
- OnExecute einer zugewiesenen TAction hängt sich an das OnClick

Dahingehend ist die VCL Checkbox eine Katastrophe, denn dort sind Anklicken und Wert ändern miteinander verwurschtelt und beides Triggert OnClick
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 1. Jul 2020 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#4

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 11:53
In der VCL wird beim MyCheckBox.Checked := True; sogar ein OnClick ausgelöst. (das arbeitet dort wie ein OnChange, was es nicht gibt)

Da wir eh alle Komponenten immer abgeleitet haben,
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen, wo bei Zuweisung kurz das Event abgehängt wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#5

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 12:48
- OnChange - wenn sich der Wert ändert, egal ob durch UI Interaktion oder Code
Ok, wenn man das getrennt sieht OnClick/OnChange könnte ein Schuh daraus werden.
Aber macht es überhaupt Sinn das Triggern durch den Code ?

Ist das jetzt Gut oder Schlecht das es triggert ?

..
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen
Ja genau, ich baue mir auch die passenden Properties ein
hier z.B.
Delphi-Quellcode:
  //1.
  Checkbox.IsChecked := xxx; // Standard, immer OnChange
  Checkbox.IsChecked_Quiet := xxx; // Neu: immer Silent
Weil ich dann immer diese doppelten Properties habe denke ich, sollte ich nicht so ändern:
Delphi-Quellcode:
  //2.
  Checkbox.IsChecked := xxx; // Geändert, immer Silent
  Checkbox.IsChecked_Notify := xxx; // Neu: immer OnChange (wie altes Verhalten)
Wohlgemerkt das ist jetzt nur ein Beispeil (Checkbox), das zieht sich aber durch alle Komponenten.
Macht es Sinn das für alle Komponenten anzupassen, so dass das Verhalten wie 2. ist ?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:01
In der VCL wird beim MyCheckBox.Checked := True; sogar ein OnClick ausgelöst. (das arbeitet dort wie ein OnChange, was es nicht gibt)

Da wir eh alle Komponenten immer abgeleitet haben,
konnen wir hier an zentraler Stelle ein CheckedNoClick einbauen, wo bei Zuweisung kurz das Event abgehängt wird.
Das kannst'e einfacher haben! TButtonControl , von dem z.B. TButton , TCheckBox und TRadioButton abgeleitet sind, hat ein protected Property ClicksDisabled , mit dem man das verhindern kann.
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.240 Beiträge
 
Delphi 12 Athens
 
#7

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:10
at ein protected Property ClicksDisabled , mit dem man das verhindern kann.
Das kenne ich auch, finde ich aber vom Verhalten/Bezeichnung her völlig Unintuitiv.

Deshalb möchte ich ja generell diese Events per code abschalten, was spräche dagegen ?
Umgekehrt, wenn ich was triggern möchte dann muss ich das bewusst tun.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:15
Als ich mal Controls erstellt habe, hatte ich die Properties normal mit Gettern (_get_Xyz) und Settern (_set_Xyz) incl. Benachrichtigungen erstellt und zusätzlich eine Methode SetXyz(Value...) bereitgestellt für stille Änderungen und Initialisierungen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:31
Das kenne ich auch, finde ich aber vom Verhalten/Bezeichnung her völlig Unintuitiv.
Immerhin ist derselbe Mechanismus, den auch eine TAction (genauer ein TButtonActionLink) einsetzt, um das Auslösen des Click-Event zu verhindern. Insofern sehe ich weder eine Notwendigkeit noch einen Vorteil darin, hier einen zusätzlichen Mechanismus einzusetzen.

Bei einer TCheckBox werden damit ja sowohl der OnChange- als auch der OnClick-Event verhindert.

Einfach das OnClick abhängen reicht aber auch nicht immer. Bei letzterem kann es sich ja auch um das OnExecute einer TAction handeln. Dann würde das temporäre entfernen des Events gar nichts bringen, da der ActionLink immer noch vorhanden ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#10

AW: Design Konzept/Pattern hinter TAction, Events, Controls mit Seiteneffekten ?

  Alt 1. Jul 2020, 13:24
Hey, das war doch nur ein Beispiel aus einem uralten Programm, welches noch Altlasten von vor 25 mitschleppt
und was auch über Tastatur bedienbar sein soll und, wo man von Userseite bei der Leertaste denoch das OnClick haben will, trots Delphi XE, DevExpress und ein paar Win10 im Win2000-Look.

Vielleicht vermutlich eventuell komm ich dieses ja mal dazu unser Programm auf 10.x zu migrieren.
73 EXE/DLL/BPL, 475 inkl. Fremdkomponenten und 557 eigene PAS ... da braucht es einfache zentrale Lösungen.
Vor paar Jahren hatte ich schonmal von D7 auf XE und ein Vorgänger von TurboPascal zu Delphi.
Und natürlich muß sich das Programm für die alten Hasen noch genauso mit Tastatur bedienen lassen, wie damals im DOS.
Auch neue Eingabefelder sollten den "eingeschleiften" Workflow nicht verändern, aber dennoch sollen zugleich auch aktuellere Gestaltungsmittel Einzug finden usw.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Jul 2020 um 13:33 Uhr)
  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 22:07 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