для поиска косяка применял метод комментирования всего лишнего, так и добрался до этого указателя 

 А для проверки запуска диалогa я специально весь код вырезал оттуда, чтоб чисто окно запустилось и все:
void __fastcall TForm::Button1Click(TObject *Sender)
{
 AnsiString fname; 
 if(OpenDialog1->Execute())
 {
   fname = OpenDialog1->FileName;
 }
}
Кстати, с SaveDialog тот же косяк происходит, при работающем потоке (когда там указатель) окно нельзя открыть - программа падает. Где-то поток не поделил память с этим окном 
