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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 14:26   #1
Epc
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 20
По умолчанию Присваивание значения через промежуток времени

Помогите пожалуйста, программирую всего пару недель и слишком плохо разбираюсь в этом.
У меня есть главная форма, в ней по нажатию на кнопку со стрелкой запускается время : число месяц и год.
Потом мне нужно зайти на форму7 : меню "Финансы"\ Биржа труда.
Там у меня есть едит1 и кнопка1. Причем едит1 в свойствах стоит значение: Text=0.
По нажатию на кнопку происходит генерация случайным образом числа, т.е. мы нажали на кнопку и появилось случайное число 12, при послед. нажатии на кнопку число больше не генерируется.
Дальше у меня не получается, надо чтобы после того как на главной форме прошел !!!!!!месяц!!! на форме 7, в поле едит1, должно автоматически вместо ранее сгенерированного числа 12 поставиться число 0, и тогда получается что на 0 можно снова генерировать случ. число.
Т.е Задача: Мне нужно чтобы заходя на форму 7 генерировалось сл.число, но генерировалось оно только раз в месяц!!!! т.е. пока не пройдет месяц на гл. форме, то на форме7 Button1.Enabled:=false.
Чтобы эту задачу решить я и придумала, что он проверяет прошел ли месяц и тогда присваивает значение =0, а раз =0 то Button1.Enabled:=true. и можно снова генерировать, помогите пожалуйста.
Вот текст. он выдает ошибку на 2 строчке где идет оператор while , то ему на 2 строчке or не нравится. помогите вообще разобраться. Я понимаю что так писать нельзя но не могу со своими знаниями ничего придумать

Код:
procedure TForm7.Button1Click(Sender: TObject);
begin

kolBezrab:= StrToFloat(Edit1.Text);
if kolBezrab=0 then
begin
Button1.Enabled:= true;
randomize;
kolBezrab:=random(20);
Edit1.Text:=FloatToStr(kolBezrab);
end;
{else
begin
Button1.Enabled:=false;
Day:=StrToInt(Form1.Panel1.Caption);
while
(if Mes=1 then if Day=32 then Button1.Enabled:= true)or
(if Mes=2 then if Day=29 then Button1.Enabled:= true)or
(if Mes=3 then if Day=32 then Button1.Enabled:= true) or
(if Mes=4 then if Day=31 then Button1.Enabled:= true) or
(if Mes=5 then if Day=32 then Button1.Enabled:= true) or
(if Mes=6 then if Day=31 then Button1.Enabled:= true)or
(if Mes=7 then if Day=32 then Button1.Enabled:= true) or
(if Mes=8 then if Day=32 then Button1.Enabled:= true) or
(if Mes=9 then if Day=31 then Button1.Enabled:= true) or
(if Mes=10 then if Day=32 then Button1.Enabled:= true) or
(if Mes=11 then if Day=31 then Button1.Enabled:= true) or
(if Mes=12 then if Day=32 then Button1.Enabled:= true);
do begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);
end;}

end;
end.
Вложения
Тип файла: rar BOLVANKA.rar (1.18 Мб, 7 просмотров)

Последний раз редактировалось Stilet; 04.11.2010 в 16:17.
Epc вне форума Ответить с цитированием
Старый 04.11.2010, 14:40   #2
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Я пока пытаюсь догнать смысл задачи, но ошибка в том, что в скобках после while должно стоять булевое выражение, то есть равное либо true либо false, а у тебя стоят условия.

Upd.
Попробуй написать вместо всего оператора while так:
Код:
case Mes of
1: if Day=32 then Button1.Enabled:= true;
2: if Day=29 then Button1.Enabled:= true;
3: if Day=32 then Button1.Enabled:= true;
4: if Day=31 then Button1.Enabled:= true;
5: if Day=32 then Button1.Enabled:= true;
6: if Day=31 then Button1.Enabled:= true;
7: if Day=32 then Button1.Enabled:= true;
8: if Day=32 then Button1.Enabled:= true;
9: if Day=31 then Button1.Enabled:= true;
10: if Day=32 then Button1.Enabled:= true;
11: if Day=31 then Button1.Enabled:= true;
12: if Day=32 then Button1.Enabled:= true;
end;

Последний раз редактировалось Риндера; 04.11.2010 в 14:48.
Риндера вне форума Ответить с цитированием
Старый 04.11.2010, 15:20   #3
Epc
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 20
По умолчанию

Не помогло, он вообще не видит.
Т.е. я захожу на форму7, нажимаю 1 раз кнопку, он генерирует случ. число. и больше нет, кроме этого при посл. нажатии кнопка зачерняется и на нее нельзя нажать из-за Button1.Enabled:=false;
я пробовала ее убирать, но даже после этого он ее не зачерняет но после того как прошел месяц он не присваивает полю едит1 =0 .

Не получилось

Происходит сл. захожу на форму7. нажимаю на кнопку, генер. число, после того как пройдет месяц при повторном нажатии на кнопку происходит ее зачернение и ничего не генерируется. пробовала убрать Button1.Enabled:=false; но после того как пройдет месяц, на кнопку нажать можно, но число все равно не генерируется. Помогите!!!!!!!!!!!!!

т.е. он после того как проходит месяц не присваивает полю едит1=0!!! Вот новый код

Код:
begin
 kolBezrab:= StrToFloat(Edit1.Text);
 if  kolBezrab=0 then
   begin
   Button1.Enabled:= true;
   randomize;
   kolBezrab:=random(20);
   Edit1.Text:=FloatToStr(kolBezrab);
   end
else
 begin
// Button1.Enabled:=false;
 Day:=StrToInt(Form1.Panel1.Caption);

 case Mes of
1: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true;end;
2: if Day=29 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
3: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);Button1.Enabled:= true;  end;
4: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
5: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
6: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
7: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
8: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
9: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
10: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
11: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
12: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);Button1.Enabled:= true; end;
end;
Может ли быть проблема в том что он не считывает какой сейчас месяц, я просто не знаю как это считать, потому что месяц ведь в буквах. Программирую недавно.
Кто -нибудь помогите чайнику.

Последний раз редактировалось Stilet; 04.11.2010 в 16:18.
Epc вне форума Ответить с цитированием
Старый 04.11.2010, 17:22   #4
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Вот тут есть у меня процедурка, как получить системное время, от секунд до года:
Код:
procedure SystemTime(Label1:TLabel;Label2:TLabel);
var lt:TSYSTEMTIME;
begin
GetLocalTime(lt);
Label1.Caption:=IntToStr(lt.wDay)+'.'+
                IntToStr(lt.wMonth)+'.'+
                IntToStr(lt.wYear);
Label2.Caption:=IntToStr(lt.wHour)+':'+
                IntToStr(lt.wMinute)+':'+
                IntToStr(lt.wSecond);
end;
Думаю, все ясно и без комментариев. Можешь посмотреть, какого формата получается lt.wMonth (но вроде число), и уже с ней оперировать.
Риндера вне форума Ответить с цитированием
Старый 04.11.2010, 17:40   #5
Epc
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 20
По умолчанию

К чему ее подключать эту процедуру, я правда программирую 2 неделю.
Я ее в объявлении процедур не описала, поэтоум на активацию формы поставить не могу.
А объявиь тоже не могу, он ошибку выдает
Epc вне форума Ответить с цитированием
Старый 04.11.2010, 17:51   #6
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Код:
procedure TForm7.Button1Click(Sender: TObject);
var lt:TSYSTEMTIME; // переменная, в которую запишем системное время
begin
GetLocalTime(lt); // собственно считывание системного времени
 kolBezrab:= StrToFloat(Edit1.Text);
 if  kolBezrab=0 then
   begin
   Button1.Enabled:= true;
   randomize;
   kolBezrab:=random(20);
   Edit1.Text:=FloatToStr(kolBezrab);
   end
else
 begin
// Button1.Enabled:=false;
 Day:=StrToInt(Form1.Panel1.Caption);

 case lt.wMonth of // заменила Mes на значение месяца из сис. времени
1: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true;end;
2: if Day=29 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
3: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);Button1.Enabled:= true;  end;
4: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
5: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
6: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
7: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
8: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
9: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
10: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
11: if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end;
12: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);Button1.Enabled:= true; end;
end;
Чтобы не писать 12 раз "begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);B utton1.Enabled:= true; end;" советую сделать так:
Найди где в самом начале программы перечислены все процедуры и допиши туда
Код:
procedure MyProc (Sender: TObject);
Далее перед твоей процедуркой Button1Click вставь

Код:
procedure TForm7.MyProc (Sender: TObject);
begin
kolBezrab:=0; 
Edit1.Text:=FloatToStr(kolBezrab);
Button1.Enabled:= true;
end;
А вместо этих длинных строк поставь
Код:
1: if Day=32 then MyProc(nil);

Последний раз редактировалось Риндера; 04.11.2010 в 17:57.
Риндера вне форума Ответить с цитированием
Старый 04.11.2010, 17:55   #7
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

так не короче
Код:
case lt.wMonth of // заменила Mes на значение месяца из сис. времени
1,3,5,7,8,10,12: if Day=32 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true;end;
2: if Day=29 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab); Button1.Enabled:= true; end
 else if Day=31 then begin kolBezrab:=0; Edit1.Text:=FloatToStr(kolBezrab);Button1.Enabled:= true;  end;
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 04.11.2010, 17:58   #8
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
так не короче
Можно и так.
Нам сейчас по идее не до красот и оптимизации кода, а лишь бы работало)
Риндера вне форума Ответить с цитированием
Старый 04.11.2010, 18:05   #9
Epc
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 20
По умолчанию

Спасибо, но не получается.
Я не поняла: я считала день Day:=StrToInt(Form1.Panel1.Caption) ;
Нужно ли мне теперь как то считать месяц lt.wMonth , если да то откуда с label1, но как.
То что вы вначале писали (в предыдущем сообщении), это ведь на главной форме должно быть, и тогда как это подключить, потому что у меня время задается через sleep, т.е. день и месяц проходят через sleep, по др. мне не надо.
У меня вообще задание, это сделать имитацию предприятия, в ней как раз время игрушечное, т.е. стадии производства в 2 дня напрмер, должно равняться 5 минутам, поэтому оно должно быть реализ-но через sleep.
Скорее всего я Вас плохо понимаю. что мне нужно сделать.
Epc вне форума Ответить с цитированием
Старый 04.11.2010, 18:06   #10
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Цитата:
Сообщение от Риндера Посмотреть сообщение
Можно и так.
Нам сейчас по идее не до красот и оптимизации кода, а лишь бы работало)
Очень нехороший подход

На мой взгляд все можно сделать так:
Код:
if (lt.wMonth in [1..12]) and (Day in [29..32]) then //Как это 32? Думаю имелось ввиду 31
begin
//тут что нужно пишем
end;
У вас же при любых условиях одни и те же действия.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение действия через промежуток времени chingiz Общие вопросы Delphi 37 03.10.2012 11:33
Обновление связей между файлами через заданный промежуток времени alleo Microsoft Office Excel 2 21.10.2010 13:39
Программа для воспроизведения тонового звука через промежуток времени Vl-sn Помощь студентам 9 12.03.2010 20:27
Промежуток времени в BottomAxis KuevProger Общие вопросы Delphi 4 05.06.2009 14:25
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25