Таймер

FullKettle
Дата: 16.11.2007 16:58:32
Хочy написать программу для себя, которая через заданный интервал времени будет менять фон рабочего стола. Как лучше реализовать таймер? У меня сомнения по поводу рациональности использования в данном случае TTimer.
Obrazer
Дата: 16.11.2007 17:02:17
автор
У меня сомнения

Какие?
FullKettle
Дата: 16.11.2007 17:04:10
Obrazer
автор
У меня сомнения

Какие?

Таймер будет постоянно висет, тикать, так скать
Как вообще реализуются подобные вещи в виндовсе или в Job на MSSQL?
Obrazer
Дата: 16.11.2007 17:17:25
автор
Таймер будет постоянно висет, тикать, так скать

Ну и пусть тикает.... Тебе от этого хуже?
Поставь интервал большой (какой и требуется для смены картинки) и будет тикать мало.....
Warstone
Дата: 16.11.2007 17:37:20
program Switcher;

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

Procedure Change(ToWP:String);
const
 Desktop: TGuid='{75048700-EF1F-11D0-9888-006097DEACF9}';
var
 ActiveDeskTop:IActiveDesktop; 
begin
 ActiveDesktop:=CreateComObject(Desktop) as IActiveDesktop;
 ActiveDesktop.SetWallpaper(StringToOleStr(ToWP), 0); 
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL);
 end;
var
  sPath:String;
  SR:TSearchRec;
  iCnt, iCnt2,i3:Integer;
  SL:TStringList;
  TTW:Integer;
begin
  Randomize;
  Application.Initialize;
  Application.Run;
  SL:=TStringList.Create;

  sPath:=ParamStr(1);
  try
    TTW:=StrToInt(ParamStr(2));
  except
    TTW:=60;
  end;
  TTW:=TTW * 1000;
  if not DirectoryExists(ExtractFileDir(ParamStr(1))) then Exit;
  if FindFirst(sPath, faAnyFile - faDirectory, SR)=0 then
  iCnt:=0;
  repeat
    if ExtractFileExt(SR.Name)='.bmp' then
    begin
      Inc(iCnt);
      SL.Append(SR.Name);
    end;
  until FindNext(SR)<>0;
  FindClose(SR);
  if iCnt=0 then Exit;
  repeat
    iCnt2:=iCnt;
    if iCnt>1 then iCnt2:=Random(iCnt);
    sPath:=IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(1))) + SL.Strings[iCnt2];
    if not FileExists(sPath) then Break;
    Change(sPath);
    Sleep(TTW);
  until False;
end.
Лови. Вамописный. Пускать так:
C:\WP\Switcher.exe C:\WP\*.bmp 60
Где C:\WP\*.bmp - маска поиска воллпаперов
60 - кол-во в секундах между сменой воллпапера.
FullKettle
Дата: 16.11.2007 18:26:13
Warstone
program Switcher;

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

Procedure Change(ToWP:String);
const
 Desktop: TGuid='{75048700-EF1F-11D0-9888-006097DEACF9}';
var
 ActiveDeskTop:IActiveDesktop; 
begin
 ActiveDesktop:=CreateComObject(Desktop) as IActiveDesktop;
 ActiveDesktop.SetWallpaper(StringToOleStr(ToWP), 0); 
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL);
 end;
var
  sPath:String;
  SR:TSearchRec;
  iCnt, iCnt2,i3:Integer;
  SL:TStringList;
  TTW:Integer;
begin
  Randomize;
  Application.Initialize;
  Application.Run;
  SL:=TStringList.Create;

  sPath:=ParamStr(1);
  try
    TTW:=StrToInt(ParamStr(2));
  except
    TTW:=60;
  end;
  TTW:=TTW * 1000;
  if not DirectoryExists(ExtractFileDir(ParamStr(1))) then Exit;
  if FindFirst(sPath, faAnyFile - faDirectory, SR)=0 then
  iCnt:=0;
  repeat
    if ExtractFileExt(SR.Name)='.bmp' then
    begin
      Inc(iCnt);
      SL.Append(SR.Name);
    end;
  until FindNext(SR)<>0;
  FindClose(SR);
  if iCnt=0 then Exit;
  repeat
    iCnt2:=iCnt;
    if iCnt>1 then iCnt2:=Random(iCnt);
    sPath:=IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(1))) + SL.Strings[iCnt2];
    if not FileExists(sPath) then Break;
    Change(sPath);
    Sleep(TTW);
  until False;
end.
Лови. Вамописный. Пускать так:
C:\WP\Switcher.exe C:\WP\*.bmp 60
Где C:\WP\*.bmp - маска поиска воллпаперов
60 - кол-во в секундах между сменой воллпапера.

Благодарствую
FullKettle
Дата: 16.11.2007 18:26:43
Хм, а в чём основное отличие Sleep от Timer
Dimitry Sibiryakov
Дата: 19.11.2007 08:26:50

FullKettle
в чём основное отличие Sleep от Timer

Sleep полностью тормозит поток, исключая обработку сообщений. Timer
работает на сообщениях.

Posted via ActualForum NNTP Server 1.4

Obrazer
Дата: 19.11.2007 09:44:21
автор
Sleep полностью тормозит поток, исключая обработку сообщений. Timer
работает на сообщениях.

Что, в принципе, нормально для такого типа приложения.... Нафига тут sleep, Timer самое то.
Anatoly Podgoretsky
Дата: 19.11.2007 09:49:31
Нафига тут TTimer, sleep самое то, обычное консольное приложение, даже потоки не нужны.