Autor Beitrag
OlliWausD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Fr 10.12.04 09:49 
hi Leutz

ich hab hier n kleines Problem:

In einem Edit-Feld führe ich eine kleine Funktion aus, welche sich im "ONExit" befindet. Quasi beim Verlassen des Feldes wird etwas ausgeführt.

Das Problem ist jedoch:
Schließe Ich das Formular über einen Button verlässt der Focus das Editfeld.
"OnExit" wird ausgeführt und das Formular wird anschließend geschlossen.
Alles Korrekt !!
Schließe ich das Formular jedoch über das X (oben Rechts in der Menüleiste) wird zuerst das Formular geschlossen und erst danach die Funktion "OnExit" ausgeführt, da der Focus beim Click auf das X immernoch im Edit-Feld ist.
Der Crash ist Perfekt !!

Hat jemand dieses Problem auch schon mal gehabt, und wenn ja, wie löse ich das???
Im OnClose des Formulars "Edit1OnExit" ausführen ist ja auch nicht gerade das Wahre, bzw. die Funktion hat hier ja eigentlich auch nix zu suchen, da sie beim normalen Schließen dann 2x ausgeführt wird !

Hat jemand ne Idee?

mfg

OlliW

_________________
Take it easy
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Fr 10.12.04 10:12 
OlliWausD hat folgendes geschrieben:
Schließe ich das Formular jedoch über das X (oben Rechts in der Menüleiste) wird zuerst das Formular geschlossen und erst danach die Funktion "OnExit" ausgeführt, da der Focus beim Click auf das X immernoch im Edit-Feld ist.

Hab das jetzt mal unter Windowx XP SP2 mit Delphi 7 und unter Windows 95B mit Delphi 3 ausprobiert. Leider kann ich das nicht bestätigen.
Hab Haltepunkte gesetzt und das OnExit Ereginis wird beim Schließen über "X" nicht ausgelöst.

_________________
Ciao, Sprint.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Fr 10.12.04 12:14 
Auch unter NT4.0 und Delphi7 läuft alles korrekt.
OlliWausD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Fr 10.12.04 13:33 
also ich benutze Delphi 5 Professional (Gleich mal Profil erweitern :) )
und Win 2000/XP

hm.... liegts an der Delphi-Version??

hier mal ein einfacher Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  showmessage('ONClose');
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Showmessage('OnExit');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;


Beim Click auf dem Button kommt zuerst "ONExit" und dann "OnClose"
Beim Click auf dem X kommt zuerst "OnClose" und dann nix mehr !!!

Irgendwie is des Buggi. Is des bei euch auch so??

mfg

Olli

_________________
Take it easy
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Fr 10.12.04 14:08 
Verzeih', aber bist du etwas durcheinander? :?

Jetzt beschreibst du es ja völlig anders als in deinem Eingangsposting.
Zitat:
Beim Click auf dem Button kommt zuerst "ONExit" und dann "OnClose"
Beim Click auf dem X kommt zuerst "OnClose" und dann nix mehr !!!


So, wie du es jetzt beschreibst, ist es doch korrekt.

Anm.: Mal abgesehen davon, dass er beim Click auf den Button bei mir Schwierigkeiten hat, beide Showmessage nacheinander anzuzeigen. Aber das hat wohl eher damit zu tun, dass er die Anwendung nicht korrekt schließen kann, wenn eine Showmessage gerade angezeigt wird.

Mach mal anstelle der Showmessage('EXIT') einfach ein Beep rein. Dann kannst du hören, wann er OnExit aufruft.

:?:
OlliWausD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Mo 13.12.04 11:20 
IngoD7 hat folgendes geschrieben:

So, wie du es jetzt beschreibst, ist es doch korrekt.


Meiner Meinung nach ist das Falsch !

Denn wenn ich auf den Button klicke, wird erst das Editfeld verlassen --> "OnExit" und anschließend die Close-Routine ausgeführt "OnClose"

Aber beim X Verlässt der Focus nicht das Edit-Feld, sondern das Formular wird sofort geschlossen und die "OnExit"-Routine wird nicht mehr ausgeführt.

Auf Deutsch: Je nachdem wie der Kunde arbeitet kommen unterschiedliche Ergebnisse heraus, da die "OnExit"-Routine nur ausgeführt wird, wenn man über den Button schließt.

Und dass is meiner Meinung nach Schwachsinn !!
Is das jetzt bei euch auch so, oder hab ich ein Problem mit meiner Entwicklungsumgebung??

mfg

Olli W

_________________
Take it easy
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 13.12.04 11:32 
Wenn du das Fenster über das X verliert das Edit nicht den Focus und daher wird auch nicht das OnExit-Ereignis ausgelöst. Was du machen kannst: du kannst im OnClose manuell das OnExit-Ereignis aufrufen - falls du nur auf das Schließen über das X reagieren willst kannst du auch die WM_SYSCOMMAND-Message abfangen, auf SC_CLOSE testen und dann das OnExit-Ereignis aufrufen...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mo 13.12.04 11:32 
OlliWausD hat folgendes geschrieben:
Is das jetzt bei euch auch so, oder hab ich ein Problem mit meiner Entwicklungsumgebung??

Hab ich schon in meinem Posting geschrieben!

Wenn du das OnExit Ereignis von einem Control brauchst (wenn X gedrückt wird), dann schreib doch einfach eine Routine, die diese dann aufruft.

_________________
Ciao, Sprint.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 13.12.04 11:37 
OlliWausD hat folgendes geschrieben:
Und dass is meiner Meinung nach Schwachsinn !!
Is das jetzt bei euch auch so, oder hab ich ein Problem mit meiner Entwicklungsumgebung??

Meiner Meinung nach ist das kein Schwachsinn.

Und dass es bei uns auch so ist, wurde hier bereits mehrfach bestätigt.
OlliWausD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Mo 13.12.04 14:31 
hm.....

Wenn ich die "OnExit" methode im "OnClose" aufrufe, wird sie aber, beim klick auf dem Button 2x ausgeführt, was auch wieder nicht Sinn der Sache ist.

Motzi hat folgendes geschrieben:
falls du nur auf das Schließen über das X reagieren willst kannst du auch die WM_SYSCOMMAND-Message abfangen, auf SC_CLOSE testen und dann das OnExit-Ereignis aufrufen...


wow, kannst du mir das genauer erklären???
Sagt mir so nichts!

mfg

OlliW

_________________
Take it easy
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 13.12.04 14:52 
Die Forumssuche hätte dich unter anderem zu diesem Thread geführt ;)
www.delphi-forum.de/...wmsyscommand+scclose

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mo 13.12.04 14:56 
Baue in FormClose einfach ein:
ausblenden Delphi-Quelltext
1:
if Edit1.Focused then Edit1Exit(Sender);					
OlliWausD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Mi 15.12.04 11:22 
ok Jungs, danke.

ich schaus mir mal an

mfg

OlliW

_________________
Take it easy
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mi 15.12.04 11:39 
OlliWausD hat folgendes geschrieben:
ok Jungs, danke.
ich schaus mir mal an
Hä? Was genau schaust du dir mal an?

Ich will mich ja nicht aufdrängen, aber nur so aus Interesse:
Was spricht gegen meine einfache Lösung aus meinem vorherigen Posting?
OlliWausD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Mi 15.12.04 15:54 
IngoD7 hat folgendes geschrieben:
OlliWausD hat folgendes geschrieben:
ok Jungs, danke.
ich schaus mir mal an
Hä? Was genau schaust du dir mal an?

Ich will mich ja nicht aufdrängen, aber nur so aus Interesse:
Was spricht gegen meine einfache Lösung aus meinem vorherigen Posting?


Nichts Ingo, im Prinzip hätt ich da auch drauf kommen können/müssen.
Hab das auch schon eingebaut. ;P

Aber die WM_SYSCOMMAND-Message interessiert mich doch sehr.
Da hat wieder einer mein Interesse geweckt, hehe

mfg

OlliW

_________________
Take it easy