Е, моят проблем е следният:
Имам приложение Delphi 5, което по същество пренасям към Delphi 2010 (заменям старите компоненти с най-новите им версии, коригирам неизбежните проблеми с низовете Ansi/Unicode и т.н.) и се натъкнах на някакъв проблем.
При създаване на една от нашите форми се случва нарушение на достъпа. След като го прегледах, стигнах до заключението, че причината за това е, че един от сетерите, извикан в Create, се опитва да промени свойство на обект във формуляра, който все още не е създаден.
Намалих го малко, но кодът изглежда основно така:
В декларация на формуляр:
property EnGrpSndOption:boolean read fEnGrpSndOption write SetGrpSndOption;
Във формуляра Създаване:
EnGrpSndOption := false;
В изпълнение:
procedure Myform.SetGrpSndOption(const Value: boolean);
begin
fEnGrpSndOption := Value;
btGrpSnd.Visible := Value;
end;
Като хвърлих ShowMessage(BooltoStr(Assigned(btGrpSend), true)) точно преди btGrpSnd.Visible := Value, потвърдих, че проблемът е, че btGrpSnd все още не е създаден.
btGrpSend е LMDButton, но съм почти сигурен, че не е съвсем подходящ, тъй като дори още не е създаден.
Въпреки че осъзнавам, че вероятно трябва да присвоя стойност само след като потвърдя, че контролата е присвоена, това просто ще доведе до това, че стойността, зададена в create, не е зададена на действителната контрола.
Така че това, което искам да направя, е да намеря начин да се уверя, че всички контроли във формуляра са създадени ПРЕДИ моят Create да бъде стартиран.
Всяка помощ при извършването на това или информация относно това как Delphi създава формуляри ще бъде оценена. Работеше в Delphi 5, така че предполагам, че причината за това трябва да бъде спомената някъде сред списъците с промени между версиите. Delphi 2010 все пак е доста по-нов от Delphi 5.