Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Form.Hide Problem [noch nicht gelöst]
blackbirdXXX - Mi 30.07.03 17:15
Titel: Form.Hide Problem [noch nicht gelöst]
Ich habe 4 gleich große Formulare. Wenn ich zum nächsten "blättern" will mache ich das mit
Delphi-Quelltext
1: 2:
| Form1.Hide; Form2.Show; |
Seltsamerweise spuckt das Programm beim blättern vom 3. Formular auf das 4. Formular eine Fehlermeldung aus:
| Zitat: |
Debugger Excepion Notification
Project wizzard.exe raised exception class EInvalidOperation with message 'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or Run to continue.
[ OK ] [ Help ]
[ ] View CPU Windows
|
Terra23 - Mi 30.07.03 17:42
Warum machst du das eigentlich nicht mit ShowModal? Soweit ich weiß, kann man dann nicht zum vorherigen Fenster zurück, ohne das aktive zu schließen. :nixweiss:
blackbirdXXX - Mi 30.07.03 20:08
Aber ich will es ja verstecken damit ich zum nächsten kommen. Beispiel Installshield
StefanH - Do 31.07.03 13:45
Hallo!
Das hatte ich auch schon :wink:
Du hast irgend eine Schleife drin (also Zeigen - Verstecken ...), oder (wies bei mir war) du rufst es auf bevor es das Formular gibt.
Stefan
matze - Do 31.07.03 14:37
du darfst das nicht in einem onformcreate aufrufen, denn da sind möglicherweise die forms die du zeigen und verstecken wilst noch nicht created !
blackbirdXXX - Sa 02.08.03 06:54
Es gibt eine Schleife. Die zählt die Dateien durch die kopiert werden und vergrößert einen Balken.
Am Ende der Schleife steht:
Delphi-Quelltext
1: 2: 3: 4:
| sleep(1000); Application.ProcessMessages; step4.Hide; exitform.Show; |
Die Anweisung steht in der Form.Activate
Allerdings passiert das auch in der Form.Show nur das ich dort dann das Fenster nicht sehe und dann steht dort. Einfach:
Cannot change Visible in OnShow or OnHide.
Vielleicht liegt der Fehler da drinnen. Aber ich kann ihn nicht entdecken:
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119:
| procedure Tstep4.FormShow(Sender: TObject); var Quelldatei, Zieldatei, pfad, zv: string; i, max, fehler: Integer; begin left := form1.width div 2 - (width div 2); top := (form1.Height div 3) * 2; Application.ProcessMessages; pfad := ExtractFilePath(Application.ExeName); CreateDirectory(PChar(step2.Edit1.Text + '/'), nil ); zv := step2.Edit1.Text + '/';
CopyFile(PChar(pfad + 'LE.ex_'), PChar(zv + 'LE.exe'), true); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; CopyFile(PChar(pfad + 'help.ch_'), PChar(zv + 'help.chm'), true); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'template.htm'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; CreateDirectory(PChar(zv + 'settings/'), nil ); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; CreateDirectory(PChar(zv + 'samples/'), nil ); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.Clear; dl.Lines.SaveToFile(zv + 'settings/buttons.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.Clear; dl.Lines.SaveToFile(zv + 'settings/colors.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'settings/csselement.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.Clear; csstag.Lines.SaveToFile(zv + 'settings/csstag.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.Clear; dl.Lines.SaveToFile(zv + 'settings/fonts.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'settings/settings.ini'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; CopyFile(PChar(pfad + 'uninstall.ex_'), PChar(zv + 'uninstall.exe'), true); Application.ProcessMessages; dl.Lines.Clear; dl.Lines.SaveToFile(zv + 'samples/design1.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design2.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design3.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design4.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design5.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design6.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design7.css'); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages; dl.Lines.SaveToFile(zv + 'samples/design8.css'); CopyFile(PChar(pfad + 'indexfile.da_'), PChar(zv + 'visit www.active-4.com.url'), true); fortschritt.Width := fortschritt.Width + 10; Application.ProcessMessages;
CreateFolder(SpecialDirectory(CSIDL_Programs)+'Liquid Edit'); if step2.CheckBox2.Checked then CreateLink(zv + 'LE.exe',SpecialDirectory(CSIDL_Programs)+'Liquid Edit\Liquid Edit.lnk','Liquid Edit'); CreateLink(zv + 'Uninstall.exe',SpecialDirectory(CSIDL_Programs)+'Liquid Edit\Deinstallation.lnk','Deinstallation'); CreateLink(zv + 'visit www.active-4.com.url',SpecialDirectory(CSIDL_Programs)+'Liquid Edit\active-4.com.lnk','active-4.com'); if step2.CheckBox1.Checked then begin CreateLink(zv + 'LE.exe',SpecialDirectory(CSIDL_Desktopdirectory)+'Liquid Edit.lnk','Liquid Edit'); end;
speedbutton3.Visible := false; fortschritt.Width := 200; Application.ProcessMessages;
dl.Lines.Clear; dl.Lines.Add('//Liquid Edit Setup File'); dl.Lines.Add(step2.Edit1.Text); dl.Lines.Add(SpecialDirectory(CSIDL_Desktopdirectory)+'Liquid Edit.lnk'); dl.Lines.Add(SpecialDirectory(CSIDL_Programs)+'Liquid Edit'); dl.Lines.SaveToFile('C:/liquidedit.log');
sleep(1000); Application.ProcessMessages; step4.Hide; exitform.Show; end; |
PS.: Ich habe den Code etwas abgekürzt. Z.B.: Werden die Lienen der dl mit allen möglichen Werten gefüllt.
StefanH - Sa 02.08.03 11:15
Du darfst dass step4.Hide nicht aufrufen :?!?:
blackbirdXXX - Sa 02.08.03 19:54
Aber bei den anderen Formularen geht es auch!
Tryer - Sa 02.08.03 21:19
In TForm.OnShow gehts halt nicht, die Fehlermeldung ist wohl eindeutig.
Was spricht gegen eine Methode "Execute" wie man sie von diversen Dialogen kennt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TStep4.Execute; begin Show; Hide; end; |
Statt dann Step4.Show aufzurufen benutzt Du Step4.Execute, das hört sich sogar besser an :wink:
MfG,
Tryer
Raphael O. - Sa 02.08.03 21:38
du könntest auch im
exitformOnShow-Ereignis
step4.hide aufrufen ;) :?
Aya - Sa 02.08.03 21:58
Hi,
auch wenn das jetzt mal garnix mit dem Thema zu tun hat direkt.. *g*
Wenn ich das richtig verstehe möchtest du á la InstallShield mehrere Forms hintereinander packen, durch die man durchblättern kann, ja???
Dafür würde ich dir allerdings Frames emfephlen, nicht Forms... ist wesentlich leichter zu verwalten, und genau für diesen Zweck gemacht (Auch das InstallShield benutzt Frames ;) )
Au'revoir,
Aya~
blackbirdXXX - So 03.08.03 16:02
Stimmt. Frames wären besser nur leider verwende ich in diesem Fall Delphi3 Pro und da gibt es keine Frames.
Aber ich habe es auch mit
Delphi-Quelltext
1: 2: 3: 4:
| procedure Texitform.FormActivate(Sender: TObject); begin step4.Close; end; |
probiert aber der Fehler ist der selbe.
StefanH - So 17.08.03 20:23
du darfst deine Form nicht schließen, wenn sie gerade gezeigt wird...
barfuesser - Mo 18.08.03 09:25
Hi,
| blackbirdXXX hat folgendes geschrieben: |
| Stimmt. Frames wären besser nur leider verwende ich in diesem Fall Delphi3 Pro und da gibt es keine Frames. |
Dann nimm doch Panels, die Du über einander legst.
barfuesser
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!