Form->ShowModal anzeigen - >Berechnungen > Form->Ausblenden



  • Hallo,

    in meinem Programm, wird etwas größeres Berechnet, wass Zeit kostet. In dieser Zeit möchte ich eine Form anzeigen. Wenn die Bearbeitung fertig ist, soll das Form automatisch verschwinden.

    Form->ShowModal();
    .. Führe Berechnungen durch.
    Form->Close();

    Leider zeigt der nur das Form an und rechnet erst weiter wenn ich das Form slebst schließe.

    Wie kann ich mein Problem dennoch lösen?

    Jens



  • Beim OnShow der anderen Form die Berechnungen durchführen!?



  • den Formstyle auf fsStayOnTop stellen vielleicht?

    ShowModal() ist ja genau dazu da, das Form MOdal anzuzeigen...

    -junix



  • ShowModal ist ja auch genau dafür da, um ein Fenster anzuzeigen, und solange die
    Anwendung anhalten, bis das Fenster wieder geschlossen ist. (Man siehe alle
    möglichen Fehlermeldungen, MessageBox...)... Für deinen Zweck würde ich einfach
    Form->Show(); nehmen...

    MfG Aoeke

    [edit]oh junix war schneller...[/edit]

    [ Dieser Beitrag wurde am 24.06.2003 um 18:31 Uhr von Aoeke editiert. ]



  • Wenn du ne Form mit ShowModal(); öffnest werden die Prozesse der Form aus der geöffnet wurde angehalten.

    Um die wieder anzuleihern musst du die geöffnete Form mit

    ModalResult=1;
    

    (oder irgendwas anderes nur ungleich NULL) wieder schliesen.



  • mrOk



  • Original erstellt von <=>:
    mrOk

    ??????

    Wieso

    So stehts in der Hilfe und so klappt es bestens.





  • Nimm statt onShow einfach onActivate, das vereinfacht das ganze *g*



  • hallo,

    wenn ein form modal angezeigt wird, wird die codeausführung genau an der stelle des modalen aufrufs solange angehalten, bis das modale fenster wieder geschlossen wird:

    MyForm->ShowModal();
    MyForm->Release();

    oder

    if (MyForm->ShowModal() == mrOk) //wenn mit ModalResult = mrOk geschlossen wird,
    ShowMessage("zu"); //geht die codeausführung hier weiter.
    MyForm->Release();

    solange ein modaler dialog bzw. fenster geöffnet ist, geht die codeausführung in diesem fenster weiter. so wäre es also von der theorie her so, das du die berechnung in der unit des modalen dialoges durchführst.

    wenn dies aber aus irgendwelchen gründen nicht geht, solltest du evtl. den von junix genannte möglichkeit ins auge fassen und den dialog normal mit show anzeigen aber mit FormStyle = fsStayOnTop;

    mfg
    murphysto



  • Was bringt denn fsStayOnTop? Was macht das genau?

    Denn sonst würde ich eher sagen onActivate, aber ich weiß ja net was stayontop genau bedeutet.



  • fsStayOnTop

    Das Formular bleibt immer im Vordergrund, es sei denn, bei anderen Fenstern ist FormStyle auch auf fsStayOnTop gesetzt. Wenn ein fsStayOnTop-Formular ein anderes fsStayOnTop-Formular aufruft, bleibt keines der beiden dauerhaft im Vordergrund.

    🙂



  • So etwas habe ich auch in einem Programm gemacht. Während einer längeren Berechnung mache ich ein neues Fenster auf, darin habe ich eine Progressbar, die ich dann in der Berechnung ab und an weitersteppe.

    [... in Form1 startet gerade die Berechnung ...] //Hauptfenster
    Form2->Show()        //Fenster mit Progressbar anzeigen
    Form2->ProgressBar1->StepBy(1);  //Progressbar wird initialisiert
    Form2->ProgressBar1->Position=0;
    Form2->ProgressBar1->Max=1000;
    Form2->ProgressBar1->StepIt();
    [...Berechnung in Form1 läuft weiter ...]
    Form2->ProgressBar1->StepIt();
    [...Berechnung läuft weiter ...]
    Form2->ProgressBar1->StepIt();
    [...Berechnung läuft weiter ...]
    Form2->ProgressBar1->StepIt();
    [...Berechnung ist jetzt fertig...]
    Form2->Close();
    

    Dazu musste ich in Form2 noch nicht mal fsStayOnTop einstellen. Wenn die Berechnung extrem Rechenzeit verlangt, kann nach der Initialisierung der Progressbar ein Refresh von Form2 helfen.

    mfG, Jens



  • Achso, immer im Vordergrund, dann würd ich immrnoch bei onActivate bleiben und fsStayOnTop verwenden.



  • Hallo??

    Mit ShowModal öffnen und mit ModelResult==1; wieder schließn.

    Auszug aus Hilfe:

    int __fastcall ShowModal(void);

    Beschreibung

    Mit ShowModal kann ein Formular modal angezeigt werden. Wenn ein Formular modal angezeigt wird, kann die Anwendung erst fortgesetzt werden, wenn das Formular geschlossen wurde.

    Um ein modales Formular zu schließen, setzen Sie seine Eigenschaft ModalResult auf einen Wert ungleich null.

    un dgenau das willst du doch, oder?


Anmelden zum Antworten