Autor Beitrag
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Mi 19.10.05 11:49 
Hallo,

heute bin ich auf ein Problem gestoßen, das hat ich noch nie...

Ich habe ein Form das vom MainForm gleich am Anfang mit ShowModal aufgerufen wird. Auf dem Form ist ein Button mit der OnClick-Aktion "Close".
Das funktioniert auch, also das Form schliest sich und das MainForm macht weiter.

Wenn ich nun in dem zweiten Form im OnCreate oder OnActivate schon ein Close ausführe ignoriert der diesen Befehl einfach...

Wisst ihr woran das liegen könnte?!

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
jro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Mi 19.10.05 12:03 
Hi,

im OnCreate bzw. im OnActivate ist das Formular noch gar nicht sichtbar (onShow wird erst danach ausgeführt), darum kann das Form auch nicht geschlossen werden.

D.h. entweder du führst close im OnShow aus oder machst ein destroy. ;)

Gruß
Jaqueline
Chatfix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Mi 19.10.05 12:08 
Also im OnShow wird mein Close auch ignoriert.

Ein Destroy löst eine Exception aus.

Mir war aber so das ich Close schonmal im OnActivate hatte... Komisch komisch...

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 19.10.05 19:39 
Zwei Dinge:

Show und Hide (=Close, in groben Zügen) sind in OnCreate und OnDestroy verboten (Status-Konflikte; VCL ist Kacke ;-)) Daher das Problem:

Zwei Möglichkeiten:
1. Release
2. PostMessage(WM_CLOSE);

Ersteres weiß ich ATM nicht, ob es Probleme verursacht; sollte es aber eigentlich nicht.
Zweiteres wird Dir AUF JEDEN FALL die Form kurz anzeigen. Ein SendMessage funktioniert NICHT!

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 19.10.05 19:42 
Wieso erzeugst Du eine Form, um sie im OnCreate wieder schließen zu wollen? :gruebel: Führe die Abfragen, die zum Schließen führen, vorher aus und erstelle die Form gar nicht erst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 19.10.05 19:47 
user profile iconBenBE hat folgendes geschrieben:
Status-Konflikte; VCL ist Kacke ;-)

So. So. Ich denke eher, dass das ein Denkfehler von manchen ist. Wenn OnShow ausgeführt wird, dann wurde vorher ein Visible:=True, oder Show() ausgeführt. Warum sollte man es dann in OnShow verstecken wollen, wenn man es doch gerade anzeigen will?

Das einzige was mir an der VCL in diesem Zusammenhang abgeht, ist ein OnAfterShow Ereignis, in welchem man Autostart-Aktionen durchführen kann. Aber dem kann man sich mit OnPaint abhilfe schaffen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormPain(Sender: TObject);
begin
  OnPaint := nil// OnPaint nicht erneut ausführen
  // hier den Autostart-Code einfügen
end;

_________________
Ist Zeit wirklich Geld?
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Mi 19.10.05 20:20 
Schonmal mit "CanClose" abgefragt? Ich kann BenBE nur zustimmen. Ach ja,
3. SendMessage(self.Handle, WM_CLOSE, 00);

mfg matze

_________________
si tacuisses, philosophus mansisses.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 19.10.05 20:47 
Hallo,

OnAfterShow :?: :arrow:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
  private
  procedure WmAfterShow(var Msg: TMessage); message WM_USER + 300;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
  //...
  Showmessage('Abarbeitung von OnShow ist beendet');
end;

procedure TForm1.FormShow(Sender: TObject);

begin
  //...
  PostMessage(Self.Handle, WM_USER + 30000);
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Mi 19.10.05 23:27 
im onactivate geht close auf jeden fall.... hab ich schon getestet... aber die frage ist ja ob du beide forms closen willst oder nur die zweite form... wenn das komplette programm musste form1.close machen. ansonsten im onactivate geht es sicher... im oncreate nicht

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
Chatfix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Do 20.10.05 07:55 
Mir war eben auch so das Close im OnActivate geht, hier gehts allerdings nicht...

Nein ich will nur das zweite Fenster schliesen und ich habe es jetzt so gelöst wie Christian gesagt hat, ist zwar etwas umständlicher für mich aber geht.

Vielen Dank!

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Do 20.10.05 18:02 
welche delphi version benutzt du? bei meinem delphi 6 geht es im onactivate....

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
Chatfix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Do 20.10.05 23:34 
Delphi 7 und ich bin mir sicher das ich das auch schonmal gemacht habe...
Naja egal jeztt...

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce