private-bool-Variable wird falsch initialisiert
-
Verdammt, rhetorisch falsch geschrieben... los, Akari!
-
Hallo
Der [spelling]-Tag kann automatisch den einbezogenen Text in Bezug auf Rechtschreibung korrigieren... aber der ist noch im Beta-Status
bis bald
akari
-
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 ; __startupWenn 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?audacia schrieb:
[...] zumal man in C++Builder OnCreate() und OnDestroy() ohnehin nicht benutzen sollte.
Genau, das mache ich auch nicht; das habt ihr mir schon ganz zu Anfang beigebracht =>
(klick' den Smilie)
@_DocShoe_: Danke für die Erklärung. Solch' umständliche Schweinereien mache ich beim Programmieren (noch) nicht... Mir reichen weniger komplizierte Konstrukte, um mich selbst zu verwirren...
akari schrieb:
Der [spelling]-Tag kann automatisch den einbezogenen Text in Bezug auf Rechtschreibung korrigieren... aber der ist noch im Beta-Status
[spelling]-Tag
Erkennt der auch Dialekte? Die deutsche Sprache wird ja schließlich von vielerlei fiesen Mutationen heimgesucht...
-
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 ; __startupWenn 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.