Zakum Geschrieben 17. Februar 2009 Teilen Geschrieben 17. Februar 2009 Hallo, ich arbeite gerade zum ersten Mal mit zwei Forms in einem Delphi-Projekt (war iwie nie von Nöten, bisher Oo) und bin da auf folgendes Problem gestossen: Mitten in einer Prozedur soll das zweite Formular escheinen, dort werden dann, während die "rufende Prozedur" schläft, einige Angaben gemacht und auf Festplatte gespeichert, dann darfs im ersten Formular/Unit weiter gehen, das diese Daten von Festplatte lädt und weiter verarbeitet (Oder kann ich die beiden irgendwie kommunizieren lassen und muss nicht auf Festplatte zwischen speichern?). Ich hab das wie folgt realisiert: filme_form.visible:=true; //zweites Formular erscheint main_form.Caption:='Pause'; While main_form.Caption='Pause' do Application.ProcessMessages; //wir warten, bis die Caption wieder geändert wird ... Und in der Unit des erscheinende Formulars passiert dann folgendes: ... main_form.Caption:='Aktiv'; filme_form.visible:=false; Was soll ich sagen... Es funktioniert. Nun höre ich aber schon im Geiste den Doktor über schlechten Programmierstil zettern. Naja, ganz im Ernst, das ist wirklich etwas übers Knie gebrochen. Weiß jemand, wie das schöner geht? Ohne Endlosschleife wäre ja zumindest nicht schlecht... Vielen Dank schon im Vorraus, Zakum Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
VaNaTiC Geschrieben 18. Februar 2009 Teilen Geschrieben 18. Februar 2009 Kein Problem: procedure Form1.OnButton1Click(Sender blablub); begin ... if Form2.ShowModal = mrOK then begin ... end; end; Form.Show öffnet nur das Fenster in den Vordergrund und kehrt sofort zurück. Bei Form.ShowModal dagegen bleibt die Ausführung dort stehen und öffnet das Fenster als modal (wie einen Dialog) und kehrt erst zurück, wenn ein Button, der einen gesetzten ModalResult hat gedrückt wurde, oder das Form mittels einer der diversen Methoden zum Closen ausgeführt wurde. Hinweise: 1) Wichtig ist einerseits genau zu wissen, wann Du einen Close und wann Du einen Hide im Form2 machen musst! Sonst knallts evtl beim zweiten Aufruf 2) Andererseits ist auch wichtig zu wissen, dass es einen Unterschied macht, ob das Formular2 bereits instanziiert wurde, ansonsten musst Du es vorher noch mittels Application.CreateForm(TForm2, Form2); erstellen. Siehe dazu in der Project.dpr: in der Quellcodeverwaltung -> Rechtsklick -> Quellcode anzeigen Wenn was nicht klappt einfach nochmal fragen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zakum Geschrieben 25. Februar 2009 Autor Teilen Geschrieben 25. Februar 2009 Vielen Dank, das klappt bisher sehr gut. Allerdings entsteht dabei ein ganz anders Problem, irgendwo im Restprogramm, wobei das natürlich ganz meine Sorge ist. Also nochmals danke schön, das ist ne sehr angenehme Funktion. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.