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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 11:53   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

попробуйте через http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
с флагом SPI_SETDESKWALLPAPER
но там говорять есть глюк что нельзя использовать слайдшоу из вне...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.05.2012, 16:46   #12
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

можно попробовать брать две картинки вторую превращать в PNG и уже с альфой накладывать на другую при этом уменьшать прозрачность и постоянно замещать картинки на раб. столе геморройно но есть какой-то выход)))) кстати должно и на XP заработать.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 12.05.2012, 16:49   #13
rokweb
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 18
По умолчанию

Пепел Феникса
Дык так и используется эта функция с этим параметром(в сообщении из моего первого поста) - нет анимации плавной смены обоев... Вопрос остается открытым.

dmitriegorovih
Мне кажется будет очень тормозно, если вообще будет работать.
rokweb вне форума Ответить с цитированием
Старый 13.05.2012, 09:35   #14
rokweb
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 18
По умолчанию

Вопрос всё еще актуален, есть ли у кого-либо еще идеи?
rokweb вне форума Ответить с цитированием
Старый 13.05.2012, 21:25   #15
rokweb
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 18
По умолчанию

Решил сделать, как написал в посте #8. Использую следующий код:
Показываю форму:
Код:
Form2.Show;
Форма имеет включенный Timer1 с интервалом 1. Вот код 2 юнита:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Timer1: TTimer;
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  Image1: TImage;

implementation

{$R *.dfm}

procedure ScreenShot(Bild: TBitMap);
 var
   c: TCanvas;
   r: TRect;
 begin
   c := TCanvas.Create;
   c.Handle := GetWindowDC(GetDesktopWindow);
   try
     r := Rect(0, 0, Screen.Width, Screen.Height);
     Bild.Width := Screen.Width;
     Bild.Height := Screen.Height;
     Bild.Canvas.CopyRect(r, c, r);
   finally
     ReleaseDC(0, c.Handle);
     c.Free;
   end;
 end;

procedure TForm2.FormShow(Sender: TObject);
begin
Image1 := TImage.Create(Form2);
Image1.Parent := Form2;
Image1.Align := AlClient;
ScreenShot(Image1.Picture.BitMap);
Form2.AlphaBlendValue := 255;
Form2.Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
Form2.AlphaBlendValue := Form2.AlphaBlendValue-5;
If Form2.AlphaBlendValue<=0 then
begin
Image1.Free;
Form2.Hide;
Form2.Timer1.Enabled := False;
End;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Form2.DoubleBuffered := True;
end;

end.
Проблема в том, что при смене изображения(как раз, когда появляется 2 форма со скрином на весь экран - изображение как бы соскаивает на предыдущий скрин... Видео с проблемой:

http://rghost.ru/38066732
http://narod.ru/disk/49072607001.e5e...Video.rar.html
http://dump.ru/file/5727475
rokweb вне форума Ответить с цитированием
Старый 13.05.2012, 22:32   #16
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Код:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
If Form2.AlphaBlendValue<=0 then
begin
Image1.Free;
Form2.Hide;
Form2.Timer1.Enabled := False;
End;
Form2.AlphaBlendValue := Form2.AlphaBlendValue-5;
end;
попробуй так, не надо делать что-бы AlphaBlendValue уходил в отрицательные числа
а вообще глюк в первой форме
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось dmitriegorovih; 13.05.2012 в 22:41.
dmitriegorovih вне форума Ответить с цитированием
Старый 13.05.2012, 22:46   #17
rokweb
Пользователь
 
Регистрация: 15.01.2010
Сообщений: 18
По умолчанию

dmitriegorovih
Спасибо за попытки помочь, но всё равно не помогло. Всё равно на 0,2-0,5 сек изображение "прыгает" на предыдущую картинку. В упор не понимаю в чем может быть проблема. Если есть еще какие-либо идеи - высказывайте, обязательно буду пробовать.
Кстати если убрать
Код:
Form2.DoubleBuffered := True;
Смена обоев моргает цветом формы(такое ощущение, что форма обновиться не успевает).

Нашел проблему:
Вот так работать, как мне требуется, не будет:
Код:
procedure TForm2.FormShow(Sender: TObject);
begin
ScreenShot(Form2.Image1.Picture.BitMap);
Form2.Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
If Form2.AlphaBlendValue<=0 then
begin
Form2.Image1.Picture := Nil;
Form2.Hide;
Form2.Timer1.Enabled := False;
Form2.AlphaBlendValue := 255;
End;
Form2.AlphaBlendValue := Form2.AlphaBlendValue-5;
end;
А вот так будет:

Код:
procedure TForm2.FormShow(Sender: TObject);
begin
ScreenShot(Form2.Image1.Picture.BitMap);
Form2.AlphaBlend := True;
Form2.Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
If Form2.AlphaBlendValue<=0 then
begin
Form2.Image1.Picture := Nil;
Form2.Hide;
Form2.Timer1.Enabled := False;
Form2.AlphaBlend := False;
Form2.AlphaBlendValue := 255;
End;
Form2.AlphaBlendValue := Form2.AlphaBlendValue-5;
end;
Т.е., как я понимаю, вся соль была в отключении и включении альфабленда формы. С вкл. и выкл. альфы - работает, без этого - не работает.

Тему прошу не закрывать, возможно будут еще вопросы. Спасибо за помощь!

Последний раз редактировалось rokweb; 13.05.2012 в 22:55.
rokweb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавная смена изображений hamsidJ JavaScript, Ajax 1 10.01.2012 23:11
Смена обоев для рабочего стола программно Windows 7 sanatik Операционные системы общие вопросы 2 26.04.2011 15:09
Jquare, плавная смена картинок Gorychev JavaScript, Ajax 1 25.08.2010 07:01
Плавная смена картинок dedyshka JavaScript, Ajax 1 21.03.2010 13:38
Смена обоев через папку? KWN, lnc Общие вопросы Delphi 1 25.02.2009 08:27