Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#11

AW: Windows Message bei Änderung?

  Alt 18. Mai 2015, 08:19
Natürlich speichere ich den Inhalt der diversen Felder und nicht die visuellen Komponenten.
Da hab ich mich wohl unklar ausgedrückt. Was ich wissen wollte: Gibt es eine Datenstruktur, z.B. einen Record, der die Inhalte der doch sehr unterschiedlichen Eingabe-Komponenten (EKs) aufnimmt? Wenn ja: wo wird der Inhalt der EKs in diesen übertragen? Wenn nicht: Wie speicherst du derart unterschiedliche Inhalte dieser EKs?

Die Verwendung des Onchange ist von der Programmierung her recht fehleranfällig: wenn ich ein neues Feld einführe und auf die Zuweisung des Onchange vergesse, oder wenn ich ein spezielles Onchange brauche und dort auf das inherited vergesse, dann merke ich den Fehler nicht leicht.
Klar, wenn man Fehler macht, indem man gegen das eigene Programmierkonzept verstößt ...

Mit der Methode, die ich verwende, brauche ich mich um nichts zu kümmern. Das Programm merkt auch bei neu eingeführten Komponenten ohne irgend eine Zusatzprogrammierung, wann sie geändert worden sind.
Welche Methode verwendest du denn? Ich hatte bislang den Eindruck, ein von dir gesuchtes Ereignis gäbe es nicht. Aber eigentlich suchst du ja tatsächlich OnChange, denn das ist genau das Ereignis, das augelöst wird, wenn der Inhalt bzw. Status einer EK verändert wird.

Weiter oben schreibst du noch etwas, was in mir den Eindruck verstärkt, dein Konzept sei zumindest noch mal zu überdenken:

Ich habe auf jedem Formular zwei Buttons für "abbrechen" und "speichern".
Solange am Formular keine Änderungen gemacht worden sind, ist nur der "speichern"-button enabled und hat als Caption "schliessen" statt "speichern".
Das verstehe ich jetzt nicht: Wieso ist der Button Speichern enabled, solange keine Änderungen gemacht wurden? Was gibt es davor denn zu speichern?

Sobald irgend welche Daten geändert worden sind (Text in einem Edit, Radiobutton-Status, checkbox-Status, egal was) werden beide Button aktiviert, und der User kann die Änderungen speichern oder mit "abbrechen" das Formular verlassen, ohne die Änderungen zu speichern.
Noch mehr Verwirrung: Was versteht du unter "Buttons werden aktiviert"? Etwa Enbled := True? Der Speicherbutton ist doch bereits enabled ...

Ich verwende jetzt einen Timer, der alle 200 Millisekunden alle Komponenten durchgeht und schaut, ob etwas geändert worden ist. Es gibt eine globale Message focuschanged, an die hatte ich die Prüfung vorher gehängt, aber das hat den Nachteil, dass der Button "Speichern" erst aktiviert wird, wenn der User die erste veränderte Komponente verlassen hat.
Das Verlassen einer Komponente ist doch kein Garant für eine Änderung ihres Inhaltes oder ihres Status. Außer deiner Befürchtung, daß du den Fehler nicht finden würdest, gibt es keinen Grund, nicht genau das dafür vorgesehene Ereignis zu verwenden. Und keine Sorge: Den Fehler findest du schon, spätestens nach diesem Thread hier hat sich das in deinem Langzeitgedächtnis eingegraben

Sobald ich dazukomme, leite ich mir eigene Komponenten ab, die jede Änderung melden, aber dazu fehlt mir jetzt die Zeit. Wenn es leicht ginge, hätte ich gerne den Timer rausgeschmissen, aber wenn ich mich dafür in ein Dutzend verschiedene Windows Messages hängen müsste, dann lasse ich es fürs erste so, wie es ist.
Alle Eingabe-Komponenten melden doch bereits, wenn ihre Inhalt bzw. ihr Status geändert wurde. Das Ereignis heißt OnChange. Du zäumst ein totes Pferd von hinten auf und ziehst damit die Kirche durch's Dorf, um's mal etwas überspitzt auszudrücken. Aber wie gesagt, du mußt selbst wissen, was du tust ...
  Mit Zitat antworten Zitat