Probleme mit zur laufzeit erstellten Labels
-
Na ich weiß ja nichtmal was du meinst, ich meine ich mach das bisher immer so und bei mir ist nie irgendwie etwas doppelt gelaufen. Und zur Sicherheit kann man ja ne Bool-variable nehmen.
-
Ganz einfach: Du solltest darauf hinweisen, dass OnActivate bei jedem mal, wenn das Fenster den Fokus erhält neu ausgeführt wird.
-junix
-
Ahso, ok, mom....
Hinweis: onActivate reagiert immer dan, wenn das Fenster den Fokus bekommt!
Mal im Ernst, wo ist jetzt dein Problem? -nimm einfach wie ich sagte ne Bool-variable.
-
hallo,
@junix: das ist falsch. bei mdi-anwendungen mag OnActivate jedes mal wenn das fenster den focus erhält ausgeführt werden, nicht aber bei "normalen" sdi anwendungen. bei den sdi-anwendungen tritt OnActivate nur dann auf, wenn von einem fenster der selben anwendung der fokus auf das fenster mit OnActivate gesetzt wird, nicht aber, wenn zwischen fenstern anderer anwendungen der fokus gestzt wird. so tritt OnActivate also lange nicht so oft auf als man denkt, und wenn die anwendung nur ein fenster hat, tritt OnActivate einmal, nämlich nach dem startvorgang auf...
mfg
murph
-
Hallo,
erst mal schonmal danke für die rege beteiligung.
Ich habe auch schon einiges ausprobiert, aber es klappt einfach nicht. Was ich mir vorstellen kann, das den zur entwicklungszeit erstellten Label noch irgendwo irgende eine zuweisung gemacht wird, die ich nicht kenne (eine Zuweisung wie z.B. Label->Parent = this) und die ich demzufolge auch nicht zugewiesen hab. Nur alle Funktionen und propertys ausprobieren ist sehr umständlich...
ich hoffe das bals eine Lösung gefunden wird.
-
hallo,
warum reicht es dir eigentlich nicht aus, die label-instanzen unsichtbar zu machen? in der art:
void __fastcall TForm1::ClickLabel(TObject* Sender) { dynamic_cast<TLabel*>(Sender)->Visible = false; }
warum es bei einer freigabe durch den destructor zu einer zugriffsverletzung kommt ist mir momentan noch nicht ganz klar, mal sehen...
mfg
murph
-
Wobei dein Code äusserst ungeschickt ist, murph... betrachte mal genau die Rückgabewert-Definition von dynamic_cast...
-junix
-
@KeinBenutzerName
Ich verstehe nicht, wo noch dein Probemm ist? Benutze anstatt von OnCreate OnActivate, wie oben beschrieben. Oder meine Lösung um Labels zu löschen. Was passt dir da nicht?
-
Ich hab das Ganze mal schnell bei mir nachgestellt. delete im OnClick wirft auch hier ne Exception. Das liegt wohl daran, daß nach dem Aufruf des Destruktors des TLabel ein TControl::DoMouseUp angesprungen wird und genau da krachts dann auch, das TLabel hat sich ja vorher "aufgelöst" :). Hab nicht weiter nachgeforscht und das delete ins MouseUp bzw. MouseDown Ereignis plaziert und da funktionierts dann auch ohne Probs.
-
hallo,
@KeinBenutzerName: ja, warum verwendest du nicht das gebilde von xqgene, funktioniert doch perfekt?
mfg
murph