![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Помогите отловить баг... Вот программа, считает дни, месяцы и.т.д. до какого либо числа. Записывает это число в ini фаил, что бы потом при старте и нажатии кнопки Button1 число грузилось и начинался отсчет.
Дык вот, проблема в том, что в RAD 2007 у меня все нормально запускается, но после компиляции и запуска как самостоятельного приложения возникает Баг. 1. Запускаю прожку 2. Нажимаю Button2. (и попадаю в меню настроек) 3. Устнавливаю дату DateTimePicker1 4. Нажимаю "Сохранить" (Bitbtn1) 5. Закрываю настройки, нажимаю на главной форме Button1 и... Access violation at adress 0047AAA3 in module 'Project1.exe'. Read of adress 0000028C. Пытаюсь войти в настройки и... Access violation at adress 00000000. Read of adress 00000000. В дельфи все путем а вот в висте... В чем ошибка? Закрываю прожку, открываю снова... старт... все работает, дата сохранена... (на висте, а D2007 работает все и сразу) Unit1 - главная форма Unit2 - настройки Ах, да проверьте пожалуйста, у меня в Unit2.procedure TForm2.BitBtn1Click правильно прописано создание ini, если его еще нет? А сейчас я запостю такое, что вы меня всей толпой повестите. Вот код Unit1 Код:
И второго... Код:
И если не сложно, помогите вывести процедуру Timer1.Timer, ну отсчет, во внешнюю dll и вызвать ее из проги... а то сам я чуть с ума не сошел... Просто я хочу еще по другому время выводить, с перспективой обновления модулей... Заранее большое спасибо. Сжатый Последний раз редактировалось ZIP, 16.07.2008 в 22:48. |
#2
|
|||
|
|||
![]() Про первую проблему не могу ничего сказать.
Про создание ini файла могу. Код:
Не забывайте делать резервные копии Последний раз редактировалось san-46, 17.07.2008 в 01:09. |
#3
|
|||
|
|||
![]() RAD2007 ещё к сожлению сыроват. Сам столкнулся с аналогичной ошибкой. Попробуй тоже самое проделать в D7 или BSD2006
|
#4
|
||||
|
||||
![]() Во-первых надо правильно использовать конструкцию with Somthing do:
Так не надо! Код:
Надо так: Код:
Если просто объявить Free, то компилятор может отнести этот метод не к Data, а к Form1. Во-вторых, надо научиться пользоваться отладчиком. Если дан адрес по которому возникла ошибка, то можно посмотреть в какой строке кода это возникает. Также для этого можно использовать детальные map-файлы. В моей статье описано как это сделать. А сообщение Access violation at adress 00000000. Read of adress 00000000. Возникает при попытке обращения к несуществующему или неинициализированному объекту/переменной. Хорошо написанная программа не требует документации ICQ 9-184-668. |
#5
|
||||
|
||||
![]() Цитата:
Нет, так не пойдет. Во вложенности (между бегин..енд) процедуры, если встречаются одинаковые процедуры - от компонента и от компонент более высокого уровня - используется первая. Во-первых не очень понял, как ты закрываешь настройки нажимая на form1.Button1 - у тебя там Form2.show. Не понял так же, где у тебя открытие настроек по нажатию на Form1.Button2 - там нет показывания формы или у тебя настройки на панели? Настроены ли у тебя кнопки, BitBtn1 как модальные? Касательно настроек и Ацессов виолатионов. АцессВиолатион у тебя возникает (как мне видится), изза того, что когда ты запускаешь в Button1Click таймер, в нем лейблы ссылаются на Form2.DateTimePicker1.DateTime. Как я понимаю, форма у тебя тоже не показывается. И при закрытии такая байда возникает, потому что Таймер продолжает работать, когда объект формы уже уничтожен. Если чтото не так, тогда сорри ![]() Посмотри в коде самой программы (в юните, где он начинается с зарезервированного слова program <имя проги>). Имя проги - это имя проекта. Тоесть в файле проекта посмотри как у тебя создаются формы. Я так понимаю что создаются последовательно: Application.CreateForm(Form1,TForm1); Application.CreateForm(Form2,TForm2); Если так, то в Дельфи: Project->Options->Закладка Forms. В Auto-Create секции оставляешь только главную форму, все остальное переносишь вправо. Чтобы отобразить форму, по нажатию на кнопку делаешь так: var F2: TForm2; // глобальная переменная в рамках "этого" юнита Код:
|
#6
|
||||
|
||||
![]() Цитата:
Сжатый |
#7
|
|||
|
|||
![]() По поводу вывода таймера в ДЛЛ.
Выводить надо не таймер, а вывод информации. Т.е. должно быть что-то типа: Код:
|