Inhalt von Formular nach Aufruf nicht sichtbar
-
Hallo,
ich habe zwei Formulare.
Das Zweite wird vom ersten(Main) mit der Funktion show() sichtbargemacht.
Leider sind alle elemente aus dem zweiten Formular nicht mehr seichtbar.
Zweites Formular enthält ein TProgressBar Objekt, welches ständig aktuallisiert wird.
Warum sind die anderen Elemente wie Label nicht sichtbar?
-
Tja, ohne Code oder nähere Beschreibung ist das ein Ratespiel...
Dann rate ich mal als erster: Du gibst dem Formular keine Zeit die Komponenten darzustellen.
-
Ich steige mit ein und schliesse mich Joe_M voll an

-
void __fastcall TForm1::AddItemsToRestoreTree(void) { TTreeNode * RootNode; TTreeNode * NextNode; AnsiString asNextName; Form5->PB_TreeStatus->Position = 0; Form5->Show(); Form5->PB_TreeStatus->Max = TempFileList->Count; TV_SelectedRestoreFiles->Items->Clear(); if (true) { RootNode = TV_SelectedRestoreFiles->Items->Add(NULL, "Project"); for (int i = 0; i < TempFileList->Count; i++) { Form5->PB_TreeStatus->StepIt(); NextNode = RootNode; while(TempFileList->Strings[i] != EmptyStr) { asNextName = GetFolderString(TempFileList, i, NextNode); if (asNextName != EmptyStr) { if (CheckExistTree(NextNode, asNextName)) { NextNode = TV_SelectedRestoreFiles->Items->Item[iAbsolutIndex]; } else { NextNode = TV_SelectedRestoreFiles->Items->AddChild(NextNode,asNextName); } } } } } Form5->Close(); }
-
Na dann hatte ich ja recht.

Füge nach dem Form5->Show() ein Application->ProcessMessages() ein. Das sollte schon reichen.
-
Ey, danke.
Echt super.
-
Jepp, kann mich wieder anschliessen.
Frage: was soll die Abfrage if(true) bezwecken?
-
Was passiert denn genau bei diesem Aufruf?
Was verursacht die Fnuktion?
-
Die Abfrage if(true) ist ein Überbleibsel aus einem Test.
Das ist noch lange nicht der fertige Quelltext.

-
Gemüseburger schrieb:
Was passiert denn genau bei diesem Aufruf?
Was verursacht die Fnuktion?Ich dachte schon, Du fragst nicht... Das ProcessMessages() bewirkt eine Abarbeitung der Nachrichtenwarteschlange der Anwendung (TApplication).
Dies passiert normalerweise automatisch, wenn die Anwendung nichts zu tun hat.
Da Du aber innerhalb einer Funktion das Formular anzeigst und wieder unsichtbar machst und die Anwendung in dieser Zeit ausgelastet ist, wird keine automatische Abarbeitung der Nachrichtenwarteschlange durchgeführt und Du musst das an gebener Stelle selbst anschubsen.Vielleicht kann es jemand besser erklären...
-
Deine Erklärung ist schon sehr gut.
Danke, dass ist informativ und interessant.
Gut zu wissen für das weiter Codeing.
-
Gemüseburger schrieb:
Deine Erklärung ist schon sehr gut.
Schliesse mich an

Gemüseburger schrieb:
Gut zu wissen für das weiter Codeing.
Auf jeden Fall - ich brauch das auch öfter als mir lieb ist
