AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Event wenn enabled/disabled wird

Ein Thema von Getox · begonnen am 28. Okt 2016 · letzter Beitrag vom 7. Nov 2016
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

AW: Event wenn enabled/disabled wird

  Alt 28. Okt 2016, 14:04
Ich habe verschiedenste Editfelder. Hinter diesen liegt ein Shape mit rotem Rahmen, der im onCreate durch eine Funktion erstellt und positioniert wird. Dieser Rahmen dient als Pflichtfeldmarkierung und wird jeweils im onChange Event eingeblendet oder ausgeblendet, wofür auch eine globale Funktion zuständig ist, welche dort aufgerufen wird. Die Pflichtfeldmarkierung soll jetzt aber auch ausgeschaltet werden, wenn das dazu gehörige Feld deaktiviert wird oder halt eingeschaltet werden, wenn das Feld aktiviert wird. Ich darf aber auch keine Komponenten ableiten.

Das ist eine gegebene Situation und ich muss das jetzt mit möglichst geringem Aufwand bewerkstelligen. Es wäre halt ein mords Aufwand alle Stellen zu suchen wo solche Felder aktiviert oder deaktiviert werden.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Event wenn enabled/disabled wird

  Alt 28. Okt 2016, 14:43
Der geringste Aufwand wäre wohl - soweit ich das bis hierher einschätze - die globale Funktion nochmal aufzurufen und dabei neben der Wert-Validitätsprüfung noch auf aControl.Enabled zu prüfen.

Die Frage ist, wie man diesen erneuten Aufruf triggert.
Vielleicht einfach in einem Timer auf Änderungen prüfen?

Du könntest die betreffenden Controls in einer Liste sammeln und beim nächsten mal prüfen, ob deren Enabled sich geändert hat.

Es ist halt nicht so ganz einfach, der VCL eine solche Funktionalität nachträglich zu verpassen, ohne Controls abzuleiten.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#3

AW: Event wenn enabled/disabled wird

  Alt 28. Okt 2016, 15:01
Es ist halt nicht so ganz einfach, der VCL eine solche Funktionalität nachträglich zu verpassen, ohne Controls abzuleiten.
So wie himitsu schon zeigte, kann man sich schon in entsprechende TObjectMethode einklinken. Wie man das macht sieht man hier:
http://blog.barrkel.com/2010/09/virt...erception.html
Das hat nur den Pferdefuß, dass das dann u.a. alle Methodenaufrufe abfägt und nicht nur die TControl.SetEnabled.
Da man sich aber zur Laufzeit erst einklinkt sollte man sich den Zeitpunkt gut auswählen an dem man das Startet
und vielleicht kann man sich eine Liste der betroffenen TControls schon vorher zusammenstellen und prüfen.

Geändert von Bambini (28. Okt 2016 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#4

AW: Event wenn enabled/disabled wird

  Alt 28. Okt 2016, 16:40
Zitat:
Ich habe verschiedenste Editfelder. Hinter diesen liegt ein Shape mit rotem Rahmen, der im onCreate durch eine Funktion erstellt und positioniert wird. Dieser Rahmen dient als Pflichtfeldmarkierung und wird jeweils im onChange Event eingeblendet oder ausgeblendet, wofür auch eine globale Funktion zuständig ist, welche dort aufgerufen wird. Die Pflichtfeldmarkierung soll jetzt aber auch ausgeschaltet werden, wenn das dazu gehörige Feld deaktiviert wird oder halt eingeschaltet werden, wenn das Feld aktiviert wird. Ich darf aber auch keine Komponenten ableiten.
So etwas oin der Art habe ich auch gemacht und benutze es auch erfolgreich.

Bei mir ist es jedoch sehr viel einfacher. Bei dir würde ich vorschlagen, einfach eine Prozedur zu schreiben, welcher du den Namen des Edits übergibst. Die rufst du dann im OnChange jedes Edits mit Rahmen auf.
Anhand des Namens des Edits kannst du dann den für das Edit zuständigen Rahmen finden. Das setzt aber eine ordentliche Benennung der Edits und der Rahmen voraus.

Immer dieser ständige Ableiten von Komponenten und hin und her. Warum so verdammt kompliziert (aber richtig, keine Frage), wenn es auch einfach und funktionabel geht?

Also etwa so

Delphi-Quellcode:
Edit OnChange
begin
 MacheDiesUndDasInDiesemEdit;

 PflichtFeld(EditX);
end;

procedure PflichtFeld(DeinEdit: TEdit);
begin
 // Selbstverständlich mit Überprüfungen, ob es den Rahmen auch gibt usw
 (DeinForm.FindComponent(DeinEdit.Name + '_Rahmen') as TShape).Enabled := true/false;
end;
Wie gesagt. Ich verwende auch soetwas nur komplett automatisiert und sehr sehr viel einfacher.

Geändert von Jim Carrey (28. Okt 2016 um 16:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:27 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