Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden? (https://www.delphipraxis.net/167207-gibt-es-eine-moeglichkeit-die-events-einer-form-kurz-zu-unterbinden.html)

Popov 18. Mär 2012 06:05

Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Ich hab einen kleinen Fehler gemacht der einen Rattenschwanz nach sich zieht.

Und zwar lade ich beim Start Einstellungen und setzte die Komponenten entsprechend. Einige davon mit OnChange Ereignis. Nur werden dadurch einige Prozeduren ausgelöst die wiederum bereits paar Einstellungen in der Ini überschreiben die noch nicht gesetzt wurden. Der Fehler ist klar und ich werde es schon richten; wird aber etwas dauern. Bis dahin muss ich etwas tricksen.

Gibt es eine Applicationsweite Methode die Events für eine bestimmte Dauer zu unterbinden? Ich weiß wie man es pro Komponente machen kann, ist aber aufwendiger.

Popov 18. Mär 2012 06:20

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Ok, hat sich fürs Erste erledigt. Ich speichere die Werte zuerst temporär und setzte sich über Variable.

Trotz dem würde mich die Frage pben interessieren, nur eben nicht mehr dringend.

mz23 18. Mär 2012 07:19

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Delphi-Quellcode:

private
   myFirstRun : boolean;


procedure TForm1.FormCreate(...
begin
myFirstRun:=True;
...
LoadMyValues;
...
myFirstRun:=False;
end;

procedure TForm1.anyComponentOnChange(...
begin
if myFirstRun then exit;
...
end;
Vielleicht sind die einfachsten Lösungen nicht immer
die Besten und Elegantesten - aber sie funktionieren :)

Schöne Grüße aus Nürnberg
Manfred

Perlsau 18. Mär 2012 07:51

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Zitat:

Zitat von Popov (Beitrag 1157134)
Ich hab einen kleinen Fehler gemacht der einen Rattenschwanz nach sich zieht.

Soll gelegentlich bei den besten Programmierern vorkommen. Ich hab mir angewöhnt, beim Start ein Flag zu setzen (Boolsche Variable StartModus := TRUE) und nachdem alle einmalig auszuführenden Proceduren und Funktionen abgearbeitet sind, das Flag auf FALSE zu setzen. Bei allen entsprechenden Prozeduren, die nur beim Start oder andersherum beim Start nicht ausgeführt werden sollen, heißt es dann gleich zu Beginn:
Delphi-Quellcode:
IF NOT StartModus THEN EXIT;

oder
Delphi-Quellcode:
IF StartModus THEN EXIT;

Furtbichler 18. Mär 2012 09:14

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Zitat:

Zitat von Perlsau (Beitrag 1157143)
...heißt es dann gleich zu Beginn:
...oder
Delphi-Quellcode:
IF StartModus THEN EXIT;

:gruebel: Wieso erinnert mich diese Lösung an den unmittelbar vor deinem Beitrag stehen Vorschlag?
Zitat:

Zitat von mz23 (Beitrag 1157142)
Delphi-Quellcode:
...
procedure TForm1.anyComponentOnChange(...
begin
  if myFirstRun then exit;
...


Perlsau 18. Mär 2012 09:18

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Zitat:

Zitat von Furtbichler (Beitrag 1157150)
Wieso erinnert mich diese Lösung an den unmittelbar vor deinem Beitrag stehen Vorschlag?

Na weil's dasselbe ist, nicht wahr? Hab ich nicht gelesen ...

Popov 18. Mär 2012 11:31

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Ja, das mit dem Flag ist auch eine Möglichkeit, da habt ihr Recht. Danke.

himitsu 18. Mär 2012 12:21

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Das Event abhängen wurde schon genannt?


Delphi-Quellcode:
IF StartModus THEN EXIT;
... schaut mal in den ComponentState ... dort wird sich was finden lassen. :angle:

Blup 19. Mär 2012 07:24

AW: Gibt es eine Möglichkeit die Events einer Form kurz zu unterbinden?
 
Auch eine Variante:
Delphi-Quellcode:
procedure SetEditText(AEdit: TEdit; const AValue: string);
var
  Event: TNotifyEvent;
begin
  with Edit do
  begin
    Event := OnChange;
    try
      OnChange := nil;
      Text := AValue;
    finally
      OnChange := Event;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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