A
Kolumbus schrieb:
audacia schrieb:
[...]Allerdings fehlt in deinem Call-Stack der Aufruf von TForm::DoShow - sicher, daß du den Breakpoint richtig gesetzt hast? [...]
Entschuldigung, mein Fehler! Ich hatte den Call-Stack ermittelt, indem ich das Projekt gestartet und dann im BDS auf Pause geklickt habe... Hier der Call-Stack mit TForm::OldCreateOrder auf true (Variablen aus Initialisiererliste des Konstruktors nicht initialisiert) und Haltepunkt an der 1. Anweisung in der TForm::FormShow()-Methode:
Aufruf-Stack schrieb:
:00401C11 TFormMain::FormShow(this=:00C3ED60, Sender=:00C3ED60)
:0048B5A3 Forms::TCustomForm::DoShow(Self=:00C3ED60)
:0049017D Forms::TCustomForm::CMShowingChanged(Self=:00C3ED60, Message=:0012FAD0)
:004A5830 Controls::TControl::WndProc(Self=:00C3ED60, Message=:0012FAD0)
:004AA53A Controls::TWinControl::WndProc(Self=:00C3ED60, Message=:0012FAD0)
:0048C02A Forms::TCustomForm::WndProc(Self=:00C3ED60, Message=:0012FAD0)
:004A53DD Controls::TControl::Perform(Self=:00C3ED60, Msg=45081, WParam=0, LParam=0)
:004A9A69 Controls::TWinControl::UpdateShowing(Self=:00C3ED60)
:004A9AF6 Controls::TWinControl::UpdateControlState(Self=:00C3ED60)
:004AC926 Controls::TWinControl::CMVisibleChanged(Self=:00C3ED60, Message=:0012FD10)
:004A5830 Controls::TControl::WndProc(Self=:00C3ED60, Message=:0012FD10)
:004AA53A Controls::TWinControl::WndProc(Self=:00C3ED60, Message=:0012FD10)
:0048C02A Forms::TCustomForm::WndProc(Self=:00C3ED60, Message=:0012FD10)
:004A53DD Controls::TControl::Perform(Self=:00C3ED60, Msg=45067, WParam=1, LParam=0)
:004A3939 Controls::TControl::SetVisible(Self=:00C3ED60, Value=true)
:0048B91E Forms::TCustomForm::SetVisible(Self=:00C3ED60, Value=true)
:0048ABE2 Forms::TCustomForm::DoCreate(Self=:00C3ED60)
:0048A768 Forms::TCustomForm::Create(Self=:00C3ED60, AOwner=:00C64520, ...)
:00401B90 Forms::TForm::TForm(this=:00C3ED60, AOwner=:00C64520)
:00401A50 TFormMain::TFormMain(this=:00C3ED60, Owner=:00C64520)
:00495373 Forms::TApplication::CreateForm(Self=:00C64520, InstanceClass=:0052F250, Reference=:00543880)
:00401837 WinMain( =:00400000, =NULL, =:00141F19, =9)
:00524b73 ; __startup
Wenn ich das richtig sehe, kommt bei diesem Stack-Auszug das Show() vor dem Create()!?
Wie gehen wir jetzt vor, um dem Problem weiter auf den Grund zu gehen?
Offenbar wird der Aufruf von OnShow von TForm::DoCreate(), genauer gesagt von folgender Zeile in DoCreate() verursacht:
if fsVisible in FFormState then Visible := True;
Das fsVisible -Flag wird nur von TForm::SetVisible() gesetzt; das bedeutet vermutlich, daß irgendjemand vor der Konstruktion deines Formulares TForm::Visible auf true setzt oder TForm::Show() aufruft.
Du könntest einen Haltepunkt in TCustomForm::SetVisible() in Forms.pas setzen und von dort aus den Call-Stack analysieren.