Помогите отловить баг... Вот программа, считает дни, месяцы и.т.д. до какого либо числа. Записывает это число в 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
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, jpeg, DateUtils, Unit2, IniFiles;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Label8: TLabel;
Image3: TImage;
Panel1: TPanel;
GroupBox2: TGroupBox;
Label1: TLabel;
GroupBox3: TGroupBox;
Label2: TLabel;
GroupBox4: TGroupBox;
Label3: TLabel;
GroupBox5: TGroupBox;
Label4: TLabel;
GroupBox6: TGroupBox;
Label5: TLabel;
GroupBox7: TGroupBox;
Label6: TLabel;
GroupBox8: TGroupBox;
Label7: TLabel;
PopupMenu1: TPopupMenu;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Label9: TLabel;
Label10: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
WaitMonth: word;
WaitWeek: word;
WaitDay: word;
Mill: integer;
Data: TIniFile;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
FName: string;
begin
Fname := ExtractFilePath(Application.ExeName) + 'data.ini';
Data := TIniFile.Create(FName);
if FileExists(FName) then
with TIniFile.Create(FName) do
begin
Form2.DateTimePicker1.DateTime := StrToDate(Data.ReadString('TmeSet', '1', ''));
Free;
end;
Timer1.Enabled := true;
Button2.Visible := false;
Panel1.Visible := true;
Button1.Visible := false;
Label10.Caption := DateToStr(Form2.DateTimePicker1.DateTime)
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := intToStr(MonthsBetween(Now, Form2.DateTimePicker1.DateTime));
Label2.Caption := IntToStr(WeeksBetween(Now, Form2.DateTimePicker1.DateTime));
Label3.Caption := IntToStr(DaysBetween(Now, Form2.DateTimePicker1.DateTime));
Label4.Caption := IntToStr(HoursBetween(Now, Form2.DateTimePicker1.DateTime));
Label5.Caption := IntToStr(MinutesBetween(Now,Form2.DateTimePicker1.DateTime));
Label6.Caption := IntToStr(SecondsBetween(Now, Form2.DateTimePicker1.DateTime));
Label7.Caption := IntTostr(YearsBetween(now, Form2.DateTimePicker1.DateTime));
end;
end.
И второго...
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls, Buttons, ComCtrls, ExtCtrls;
type
TForm2 = class(TForm)
GroupBox1: TGroupBox;
BitBtn1: TBitBtn;
DateTimePicker1: TDateTimePicker;
RadioGroup1: TRadioGroup;
GroupBox2: TGroupBox;
CheckBox1: TCheckBox;
Edit1: TEdit;
procedure BitBtn1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
Data: TIniFile;
implementation
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
var
FName: string;
begin
Fname := ExtractFilePath(Application.ExeName) + 'data.ini';
Data := TIniFile.Create(FName);
if FileExists(FName) then
with TIniFile.Create(FName) do
begin
Data.WriteString('TmeSet', '1', DateToStr(DateTimePicker1.DateTime));
Free;
end
else
Data.WriteString('TmeSet', '1', DateToStr(DateTimePicker1.DateTime));
end;
procedure TForm2.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
Edit1.Enabled := true;
end
else
Edit1.Enabled := false;
end;
end.
И если не сложно, помогите вывести процедуру Timer1.Timer, ну отсчет, во внешнюю dll и вызвать ее из проги... а то сам я чуть с ума не сошел... Просто я хочу еще по другому время выводить, с перспективой обновления модулей...
Заранее большое спасибо.