Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2010, 08:09   #1
samsung
 
Регистрация: 20.07.2009
Сообщений: 4
По умолчанию Вывод в Memo по Таймеру одной строкой

Всем форумчанам доброго времени суток.
Имеется прога по таймеру выполняет следующее: Если Contact замкнут (нет галочки), то поле Lamp загорается зеленым цветом. Если разомкнут (есть галочка), то поле Lamp загорается красным звучит сирена. Отключаем сирену Sound Off. Если Contact замкнут (нет галочки) чтобы его взвести жмем Lock.
При отключенной сирене кнопка Lock не активна. Есть поле с текущим временем и поле Memo где выводится информация: замкнут или же разомкнут контакт.Все пишится в файл Alarm_List.txt. Вопрос в следующем как сделать чтобы при замкнутом контате или разомкнутом в поле Memo и в файл Alarm_List выводилась одна строка. Т.е замкнулся контакт вышла строка ""16 Июль 2010 г. 00:21:51 замкнут"", далее разомкнулся контакт вышла строка ""16 Июль 2010 г. 00:21:55 разомкнут"". В моем же примере в поле Memo постоянно бегут строки о разомкнутом или замкнутом контакте. Исходник прилагаю разместить на c:\primer , а то не находит звук сирены. Вот текст исходника. Спасибо.
Можно на мыло alex_n_shtepa@mail.ru

Код:
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
     var
  s: string;
  z: string;
  F: TextFile;
begin
   panel2.Caption := timetostr(now);
  if CheckBox2.Checked = true then panel1.Color := clred;
  S := FormatDateTime('dddddd hh:nn:ss' , Now) + '  ' +  'разомкнут';  // Текущее время и состояние
   z := FormatDateTime('dddddd hh:nn:ss' , Now) + '  ' +  'замкнут';  // Текущее время  и состояние

             if  panel1.Color = clred then memo1.Lines.Add(s);


             if  panel1.Color = clgreen then memo1.Lines.Add(z);

         // Запись строки в лог-файл
 AssignFile(F, 'Alarm_List.txt');
  if not FileExists('Alarm_List.txt') then Rewrite(F) else Append(F);
  try
   if panel1.Color = clred then Writeln(F, S);
   if panel1.Color = clgreen then  Writeln(F, z);
  finally
    CloseFile(F);
  form1.MediaPlayer1.Open;
 if panel1.Color = clred then mediaplayer1.Play;  //Звучит сирена
end;
 end;
 procedure TForm1.Button1Click(Sender: TObject);
begin
    Timer1.Enabled := true;
     if CheckBox2.Checked = false then Panel1.Color := clgreen;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if Form1.CheckBox1.Checked then Timer1.Enabled := false else  Timer1.Enabled := true;
 if Form1.CheckBox1.Checked then Form1.Button1.Enabled := false else Form1.Button1.Enabled := true;
 if  Panel1.Color = clgreen then  Form1.CheckBox1.Checked := false;
 if CheckBox1.Checked = true then mediaplayer1.Stop;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
    panel1.Color := clred; //тест
end;
end.
Вложения
Тип файла: rar primer.rar (206.6 Кб, 12 просмотров)

Последний раз редактировалось Stilet; 16.07.2010 в 10:52.
samsung вне форума Ответить с цитированием
Старый 16.07.2010, 08:17   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Так, а зачем тут таймер? Выполняй это в отдельной процедуре.

add:

Вот чучуть поправил:

Код:
procedure TForm1.duo;
     var
  s: string;
  z: string;
  F: TextFile;

begin

  panel2.Caption := timetostr(now);
  if CheckBox2.Checked = true then panel1.Color := clred;


  S := FormatDateTime('dddddd hh:nn:ss' , Now) + '  ' +  'ðàçîìêíóò';  // Òåêóùåå âðåìÿ è ñîñòîÿíèå
  z := FormatDateTime('dddddd hh:nn:ss' , Now) + '  ' +  'çàìêíóò';  // Òåêóùåå âðåìÿ  è ñîñòîÿíèå

  if  panel1.Color = clred then memo1.Lines.Add(s);
  if  panel1.Color = clgreen then memo1.Lines.Add(z);




         // Çàïèñü ñòðîêè â ëîã-ôàéë
  AssignFile(F, 'Alarm_List.txt');
  if not FileExists('Alarm_List.txt') then Rewrite(F) else Append(F);
  try
   if panel1.Color = clred then Writeln(F, S);
   if panel1.Color = clgreen then  Writeln(F, z);

  finally
    CloseFile(F);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckBox2.Checked = false then
  begin
    Panel1.Color := clgreen;
    duo;
  end;
end;



procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if Form1.CheckBox1.Checked then Form1.Button1.Enabled := false else Form1.Button1.Enabled := true;
 if  Panel1.Color = clgreen then  Form1.CheckBox1.Checked := false;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    panel1.Color := clred; //òåñò
    duo;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  panel2.Caption := timetostr(now);
end;
остальное исправляй сам, а это куча лишних условий и т.д.

Последний раз редактировалось dr.Chas; 16.07.2010 в 08:31.
dr.Chas вне форума Ответить с цитированием
Старый 16.07.2010, 10:34   #3
samsung
 
Регистрация: 20.07.2009
Сообщений: 4
По умолчанию

нет так не пойдет.дело в том что Contact это датчик.И при его срабатывании нужно что бы сирена оставалась включенной и при появлении контакта не переходила опять в состояние замкнут(Lamp зеленый) пока не нажмем кнопку Lock. по таймеру идет опрос датчика. А в поле memo нужно однакратный вывод. Допустим разомкнут горит красный Lamp сирена воет запись в поле memo 16 Июль 2010 г. 11:18:02 разомкнут только один раз(если даже контакт замкнут всеравно горит красный и воет сирена пока не взведем кнопкой Lock)как только Lamp зеленый в поле memo должна отобразится одна строка 16 Июль 2010 г. 11:18:28 замкнут и так каждый раз, а в моем случае при замкнутом или разомкнутом контакте
строка в memo всегда обнавляется
samsung вне форума Ответить с цитированием
Старый 16.07.2010, 10:45   #4
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

...то поле Lamp загорается зеленым цветом....

гоню....

создай 2 переменные для цвета запоминай предыдущий цвет панелей, сравнивай - если неравны - делай запись
если равны - ничего
Non est culpa vin, sed culpa bibentis

Последний раз редактировалось Korben5E; 16.07.2010 в 10:48.
Korben5E вне форума Ответить с цитированием
Старый 16.07.2010, 12:08   #5
samsung
 
Регистрация: 20.07.2009
Сообщений: 4
По умолчанию

плиз реализовать сказанное в примере
samsung вне форума Ответить с цитированием
Старый 16.07.2010, 12:25   #6
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от samsung Посмотреть сообщение
плиз реализовать сказанное в примере
где-то в классе формы объявить
tmpColor : TColor;

if tmpColor <> panel1.Color then
begin
tmpColor := panel1.Color ;
if tmpColor = clRed then
S := 'разомкнут'
else
S := 'замкнут';
memo1.Lines.Add(FormatDateTime('ddd ddd hh:nn:ss' , Now) + ' ' + S)
end;
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать в memo строку за строкой используя изменения combobox? Человек_Борща Общие вопросы Delphi 3 11.04.2010 17:18
Язык Си. Записать в **а, адрес пременной одной строкой. Yaskovich Помощь студентам 3 06.03.2010 14:51
Вывод из консоли в Memo hotcooler17 Win Api 3 05.02.2010 20:51
Вывод в Memo Siluet Общие вопросы Delphi 18 17.04.2009 19:49
Вывод информации в Memo из файла. Фибер Оптик Общие вопросы Delphi 11 04.05.2007 00:13