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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2012, 16:52   #1
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Добрый день, программировал очень давно, еще в универе. Соответственно все забылось,но появилась необходимость написать сейчас программу.
Вкратце объясню задачу, очень надеясь на ваши советы.
В общем нужно вводить даты в форму эдит, и потом при открытии программы они там должны появляться и причем, если от заранее введенной даты до сегодняшнего числа меньше 14 дней, то форма эдит должна менять свой цвет на красный. Таких форм будет много. Надеюсь я понятно объяснил, то что хочу сделать.
Вопрос: правильно ли я думаю, что для организации этого нужно данные, введенные в формы эдит, сохранять в какой то файл, а потом при открытии программы они должны автоматически считаться из этого файла и сравниваться с сегодняшней датой?

В общем уже почти разобрался, но вот вопрос у меня. Вот исходник:
Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j :=0 to ComponentCount - 1 do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;
      d:=StrToDate((Components[j] as TEdit).Text);
      if d является датой,а не просто числом then
      begin
      If  d-date  < 14  then
(Components[j] as TEdit).color:=clRed else
  (Components[j] as TEdit).color:=clwindow;
  end;
    end;
  CloseFile(f);
end;
end;

Как описать условие,что переменная d является датой, а не просто числом? помогите пожалуйста,я этого не знаю((

Последний раз редактировалось Stilet; 08.09.2012 в 22:47.
tarasov_88 вне форума Ответить с цитированием
Старый 08.09.2012, 22:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Допустим так:
Код:
procedure TForm2.FormCreate(Sender: TObject);
var d:TDateTime;
begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j :=0 to ComponentCount - 1 do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;
     if TryStrToDate((Components[j] as TEdit).Text,d) 
       and (DaysBetween(d,date)< 14)  then
  (Components[j] as TEdit).color:=clRed else
  (Components[j] as TEdit).color:=clwindow;
  end;
    end;
  CloseFile(f);
end;
Требуется uses DateUtils;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2012, 23:02   #3
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

премного благодарен! но условие перестало выполняться корректно. если число больше сегодняшней даты, то edit не закрашивается в красный,а должен если разница меньше 14 дней.

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DateUtils;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Edit4: TEdit;
    Label4: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
   S: TStringList;
   GetStr: String;
    j:Byte;
    f:TextFile;
    H:string;
    d:Tdate;
implementation

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin

 S:=TStringList.Create;
 S.Add(edit1.Text);
 S.Add(edit2.Text);
 S.Add(edit3.Text);
 S.Add(edit4.Text);
 S.Add(edit5.Text);
 S.Add(edit6.Text);
 S.SaveToFile('SaveLoad.txt');
 S. Free
end;


procedure TForm2.FormCreate(Sender: TObject);
var d:TDateTime;
begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j :=0 to ComponentCount - 1 do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;

     if TryStrToDate((Components[j] as TEdit).Text,d)
       and (DaysBetween(d,date)> 14)  then
  (Components[j] as TEdit).color:=clRed else
  (Components[j] as TEdit).color:=clwindow;
  end;
CloseFile(f);
    end;
end.
Все, разобрался. Вместо
and (DaysBetween(d,date)< 14) then
поставил свое условие:
and (d - date <14) then
и все заработало))
Stilet, спасибо. Пойду спать наконец-то, а то утро уже скоро)

Осталось еще один вопрос решить... Как кнопку,с которой открывается форма с эдитами, окрасить в красный цвет, если хотя бы одна из форм Edit окрашенна в красный?

Последний раз редактировалось artemavd; 10.09.2012 в 10:19.
tarasov_88 вне форума Ответить с цитированием
Старый 08.09.2012, 23:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как кнопку,с которой открывается форма с эдитами, окрасить в красный цвет, если хотя бы одна из форм Edit окрашенна в красный?
Ну по Эдитам в цикле ты проходить умеешь
Одно только - кнопку бери нестандартную, а SpeedButton или типа того, которая позволяет на себе рисовать.
Стандартная если не ошибаюсь не позволяет этого.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2012, 10:34   #5
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну по Эдитам в цикле ты проходить умеешь
Одно только - кнопку бери нестандартную, а SpeedButton или типа того, которая позволяет на себе рисовать.
Стандартная если не ошибаюсь не позволяет этого.
Кнопку заменил на панель, но не могу пока понять,как сделать так, чтобы менялся цвет Panel1 главной формы. Если просто написать так,то выдает ошибки.
Код:
begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j :=0 to ComponentCount - 1 do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;

     if TryStrToDate((Components[j] as TEdit).Text,d)
       and (d - date <14)  then
       Tform1.panel1.color:=clRed
  (Components[j] as TEdit).color:=clRed else
  (Components[j] as TEdit).color:=clwindow;
  end;
  CloseFile(f);
    end;

Последний раз редактировалось Stilet; 09.09.2012 в 12:14.
tarasov_88 вне форума Ответить с цитированием
Старый 09.09.2012, 11:15   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

А зачем писать TForm1?
Для начала - главная форма доступна из класса Application (Application.MainForm), просто добавить ее модуль не получится - циклическая ссылка образуется
Так же циклом проходитесь по компонентам главной формы
Код:
for i:=0 to Application.MainForm.ComponentCount-1
и если находите нужную панель
Код:
if (Application.MainForm.Components[i].Name = 'Panel1') then
Меняете ее цвет
Код:
  (Application.MainForm.Components[i] as TPanel).Color:=clRed;
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 09.09.2012, 11:36   #7
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Zer0, Stilet спасибо за помощь! все заработало, буду заниматься оформлением теперь)

Блин, оказывается не все заработало!)
В общем, при загрузке из фала в editы получается смещение на один, т.е число которое должно быть в первом эдите появляется в последнем, а число со второго переходит в первый edit. Что поправить, подскажите?

Код:
procedure TForm2.FormCreate(Sender: TObject);
var d:TDateTime;
begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j := 0 to ComponentCount -1  do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;

     if TryStrToDate((Components[j] as TEdit).Text,d)
       and (d - date <= 14)  then
  (Components[j] as TEdit).color:=clRed else
  (Components[j] as TEdit).color:=clwindow;

  end;
   CloseFile(f);
   begin
  AssignFile(f, 'SaveLoad.txt');
  ReSet(f);
  for j :=0 to ComponentCount -1  do
    if Components[j] is TEdit then
    begin
      ReadLn(f, H);
      (Components[j] as TEdit).Text:=H;

     if TryStrToDate((Components[j] as TEdit).Text,d)
       and (d - date <= 14)  then
  for i:=0 to Application.MainForm.ComponentCount-1 do
  if (Application.MainForm.Components[i].Name = 'Panel1') then
  (Application.MainForm.Components[i] as TPanel).Color:=clRed;
   end;
   end;
  CloseFile(f);
    end;

Последний раз редактировалось tarasov_88; 10.09.2012 в 10:22.
tarasov_88 вне форума Ответить с цитированием
Старый 11.09.2012, 15:51   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

исходники проекта запакуйте в архив, архив прикрепите к сообщению на форуме. Тогда будет легче увидеть проблему и помочь Вам..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2012, 17:32   #9
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Вероятнее всего у вас порядок создания был такой - первый созданный Edit оказался последним
Самый простой вариант в таком случае - это переместить его в начало (визуально) и дать новые имена в соответствии с новым порядком
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 11.09.2012, 20:40   #10
tarasov_88
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
Вероятнее всего у вас порядок создания был такой - первый созданный Edit оказался последним
Самый простой вариант в таком случае - это переместить его в начало (визуально) и дать новые имена в соответствии с новым порядком
Именно так и сделал, Вы правы!
tarasov_88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение в файл .jpg image с наложенным текстом в Edit alllen Помощь студентам 3 20.08.2011 17:13
сохранение StringGrid в нетип. файл. Delphi PianeR Помощь студентам 0 31.01.2011 20:39
Как правильно организовать сохранение в файл delphi JK0 Помощь студентам 1 21.12.2010 21:14
Сохранение названия цвета в файл/Delphi Николай ПН Помощь студентам 0 29.04.2010 21:23
Сохранить DBGrid и Edit в файл (Delphi) Nair Помощь студентам 1 27.09.2008 09:38