IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Напоминалка расписаний, нужна помощь с xml
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Набросал программку, с иксэмэлем ошибки какие-то. Не подскажете что это?
Да, ещё как звук проиграть в Delphi? Playsound не работает

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, inifiles, StdCtrls, Grids, Calendar, Mask, DBCtrls, DB, DBClient,
ExtCtrls;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBMemo1: TDBMemo;
MaskEdit1: TMaskEdit;
Calendar1: TCalendar;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
win: TIniFile;
pres: string;
begin
Win:= TIniFile.Create('win.ini');
Win.ReadString ('windows', 'run', pres);
IF pres<> application.ExeName then win.WriteString('windows', 'run', application.ExeName);
Win.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
ClientDataSet1.LoadFromFile('events.xml');
//IF ClientDataSet1.Eof= false then timer1.Enabled:= true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var NowDate, BDate: string;
begin
ClientDataSet1.First;
While not ClientDataSet1.Eof do
begin
NowDate:= DateTimeToStr(now);
BDate:= DateTimeToStr(ClientDataSet1.FieldByName('DateTime').AsDateTime);
Delete (NowDate, length(NowDate)-2, 2);
Delete (BDate, length(bdate)-2, 2);
IF NowDate = Bdate then
begin
//IF DBEdit3.Text<>'' then PlaySound (PCHar(DBEdit3.Text), SND_ASYNC, SND_NOWAIT);
IF DBEdit1.Text<>'' then WinExec (PCHar(DBEdit1.text),0); // PCHar не используй
form2.Memo1.Lines:= DBMemo1.Lines;
ClientDataSet1.Delete;
Form2.ShowModal;
end;
application.ProcessMessages;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.Insert;
Timer1.Enabled:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var full, date : string;
begin
date:= inttostr (calendar1.Day)+'.'+inttostr (calendar1.month)+'.'+inttostr (calendar1.year);
full:= date+' '+maskedit1.Text;
ClientDataSet1.FieldByName('DateTime').AsDateTime:= StrToDateTime(full);
ClientDataSet1.Post;
ClientDataSet1.SaveToFile('events.xml');
timer1.Enabled:= true;
end;

end.


Сообщение отредактировано: volvo -


Прикрепленные файлы
Прикрепленный файл  Склеротик.rar ( 3.16 килобайт ) Кол-во скачиваний: 92
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
с иксэмэлем ошибки какие-то
С каким XML-ем? У тебя с DataSet-ом ошибки. Ты ж пытаешься работать с закрытым DataSet-ом. Кстати, в Дельфи 2009 твой WinExec даже не скомпилируется.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


А как его открыть? Просто первый раз мудрю с ним, сказал с xml-ем потому что для меня это к нему относится
И почему не скомпилируется, может как-то переделать?

Сообщение отредактировано: striker -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Смотри:
во-первых, у тебя изначально файл XML - пустой, а таймер работает... Напрасно. Вот тебе и ошибка, пустой датасет, а ты хочешь перейти в его начало.
procedure TForm1.FormShow(Sender: TObject);
begin
ClientDataSet1.LoadFromFile('events.xml');
if not ClientDataSet1.Eof then timer1.Enabled := true; // все-таки надо это оставить
end;

причем в Object Inspector-е надо таймер отключить. Включаться он будет только, если в XML что-то было.

Второе. Сам обработчик таймера. Ты нигде не переходишь на следующую запись в датасете.
procedure TForm1.Timer1Timer(Sender: TObject);
var NowDate, BDate: string;
begin
ClientDataSet1.First;
while not ClientDataSet1.Eof do begin
NowDate:= DateTimeToStr(now);
BDate:= DateTimeToStr(ClientDataSet1.FieldByName('DateTime').AsDateTime);
Delete (NowDate, length(NowDate)-2, 2);
Delete (BDate, length(bdate)-2, 2);
IF NowDate = Bdate then begin
IF DBEdit1.Text<>'' then WinExec (pansichar(ansistring(DBEdit1.text)), SW_SHOW);
form2.Memo1.Lines:= DBMemo1.Lines;
ClientDataSet1.Delete;
Form2.ShowModal;
end;
ClientDataSet1.Next; // Вот это - забыл ...
application.ProcessMessages;
end;
end;
Кстати, посмотри внимательно, как оформляется WinExec... Именно в таком виде он сработает в Дельфи 2009. Ну, а начальный XML можешь взять там же, где взял этот код, у Александра Лозовского. Где-то на realcoding.net до сих пор валяется его архив...

Что касается PlaySound - то он прекрасно работает. Надо только подключить модуль MMSystem.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Спасибо.
Архива уже нет кажется smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Архива уже нет кажется
Есть, только не на realcoding... Вот прямая ссылка: ftp://ermak.cs.nstu.ru/metodic/makar/Tech...th_colltray.rar
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2020 7:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name