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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2009, 23:24   #1
V@mpir
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 54
По умолчанию Выключение компьютера через определенное время

Вот решил написать незамысловатую программку, служащую для того что бы отключать компьютер через определенное время. Но столкнулся с некой проблемой. При попытке компиляции вылетает ошибка.
В чем дело не могу понять. Сразу хочу отметить, что код самописный (это заметно))) и хотелось бы его оставить (основу) таким же. Если можно то желательно что бы проблема была указан в данном коде, а не был предложен другой, возможно даже и лучший, и более удобный вариант программы.

Цитата:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n,u,i,o,r,y,t:integer;
b,c,v:boolean;
begin
b:=(edit1.Text='');
c:=(edit2.Text='');
v:=(edit3.Text='');
u:=strtoint(edit1.Text);
i:=strtoint(edit2.Text);
o:=strtoint(edit3.Text);
if b then
u:=0;
if c then
i:=0;
if v then
o:=0;
r:=u*60*60*1000;
y:=i*60*1000;
t:=o*1000;
n:=r+y+t;
timer1.Enabled:=true;
timer1.Interval:=n;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ShellExecute(handle, nil,'shutdown',' -s -t 00','', SW_SHOWNORMAL);
end;

end.
Заранее спасибо!
V@mpir вне форума Ответить с цитированием
Старый 27.06.2009, 23:28   #2
NuMeR
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

ShellExecute(handle, 'OPEN',...)
и нужно заменить
Код:
u:=strtoint(edit1.Text);
i:=strtoint(edit2.Text);
o:=strtoint(edit3.Text);
if b then
u:=0;
if c then
i:=0;
if v then
o:=0;
на
Код:
if b then
u:=0 else u:=strtoint(edit1.Text);
if c then 
i:=0 else i:=strtoint(edit2.Text);
if v then
o:=0 else o:=strtoint(edit3.Text);
p.s.в параметры лучше добавить -f

Последний раз редактировалось NuMeR; 27.06.2009 в 23:33.
NuMeR вне форума Ответить с цитированием
Старый 27.06.2009, 23:39   #3
V@mpir
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 54
По умолчанию

Хм.. я сделал как ты порекомендовал эффект - нуль. А вот на счет это точно можно было не беспокоиться
Цитата:
ShellExecute(handle, nil,'shutdown',' -s -t 00','', SW_SHOWNORMAL);
тут всё верно было так как , если пробывать без задаваемых параметров времени ( то есть напрямую через батон) она работает "На ура" - комп вырубается моментально.


NuMeR, Не каких изменений та жа трабла.

Тогда действительно она могла возникать из-за того, что приходилось "робел" переводить в цифру , но теперь я поменял местами, но результат тот же.

ЗЫ Ошибку нужно искать, где то в моменте с пробелами, так как, если заполнить все поля (цифрами), то ошибка не вылетает.

Последний раз редактировалось V@mpir; 28.06.2009 в 00:06.
V@mpir вне форума Ответить с цитированием
Старый 27.06.2009, 23:57   #4
NuMeR
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

а хотябы что-нибудь изменилось или все осталось так же как и было? ошибка возникала из-за попытки перевода в число строки '', которая числом не является, мой код должен был исправить эту ошибку
NuMeR вне форума Ответить с цитированием
Старый 28.06.2009, 00:06   #5
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

О боже... не надо так реализовывать!
Щас погоди, я напишу...
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 28.06.2009, 00:13   #6
NuMeR
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

V@mpir, возможно вы успели прочитать мое сообщение с неправильным вариантом, которое я отредактировал, то, что там сейчас должно работать
NuMeR вне форума Ответить с цитированием
Старый 28.06.2009, 00:26   #7
V@mpir
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 54
По умолчанию

Всё! Точно не заметил что ты правил пост. Спасибо!
V@mpir вне форума Ответить с цитированием
Старый 28.06.2009, 00:33   #8
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Лучше погляди моё вложение.. Твой алгоритм ядовит!
Неплохобы ещё пару проверок добавить к коду....

Код:
var
  Form1: TForm1;
  T : Integer;
implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Begin
Try
  T := StrToInt(Edit1.Text) * 3600 + StrToInt(Edit2.Text) * 60 + StrToInt(Edit3.Text);
  Timer1.Enabled := True;
Except
  ShowMessage('Произошла ошибка. Проверте правильность даных в Едитах.');
End;
End;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := IntToStr(T Div 3600) + ':'
                + IntToStr(T Div 60 - (T Div 3600)*60) + ':'
                + IntToStr(T - (T Div 60)*60);
If T < 0 Then
  Begin
    ShowMessage('Выключаем компьютер');
    Timer1.Enabled := False;
  End;
T := T - 1;
end;

end.
Вложения
Тип файла: rar Timer.rar (3.1 Кб, 31 просмотров)
Вавел из ГМТУ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выключение компьютера Delphi Vladya Помощь студентам 5 10.02.2009 14:24
Выключение компьютера aesoem Общие вопросы Delphi 2 03.07.2008 16:50
выключение, перезагрузка компьютера ATL Win Api 4 16.05.2007 01:57
Включение-выключение компьютера с помощью Delphi BLACK_KOT Помощь студентам 6 01.05.2007 09:55
выключение компьютера Svop Общие вопросы Delphi 23 18.12.2006 22:57