Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Win32 API | Delphi | ФОКУС-раствориться в воздухе.

Ответить
Настройки темы
Delphi - Win32 API | Delphi | ФОКУС-раствориться в воздухе.

Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Такая проблема. Нужно сделать на winapi, чтобы окно с картинкой (или картинка) расворялось в воздухе. После того, как растворится, появляется основное окно программы. Короче, это типо заставки получается. Знаю, как написать без winapi.
Вот
procedure ();
var i, cavb : 0..255;
begin
if AlphaBlend=False then
begin
AlphaBlendValue:=255;
AlphaBlend:=True;
end;
cavb:=AlphaBlendValue;
for i := cavb downto 0 do
begin
AlphaBlendValue := i;
Application.ProcessMessages;

end;

end;

-------
Mavlyudov


Отправлено: 00:34, 07-11-2005

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Насколько я знаю, такое вообще невозможно без GDI+.
Т.е. нужен windows XP.

Отправлено: 10:07, 07-11-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Достаточно Windows 2000.
Чтобы работало в windows 9x, NT4.0 и меньше, нужно ручками постараться:
Корпируешь содержимое экрана в память, суммируешь с картинкой и покадрово штампуешь обратно.
Чтобы работало при наличии DirectX 5 и выше, можно ручками не писать.

Отправлено: 13:26, 07-11-2005 | #3


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


А как насчет этого. Нельзя ли это и для winapi применить?

................
const
LWA_ALPHA = $00000002;
WS_EX_LAYERED = $00080000;

var
LayeredWndAttr:Pointer=@SetLayeredWindowAttributes;

procedure TForm1.FormCreate(Sender: TObject);
begin
I :=50; // Устанавлевает уровнь прозрачности от 0 до 100
LayeredWndAttr := GetProcAddress(GetModuleHandle('user32.dll'),'SetLayeredWindowAttributes');
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, RGB(0, 0, 0), Round(I * 255 div 100), LWA_ALPHA);
end;

-------
Mavlyudov


Отправлено: 00:08, 08-11-2005 | #4


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Хм, вон оно Вы как хотите...
Ну тогда (я, впрочем, могу ошибаться) есть два замечания:
1. Цвет, который станет "прозрачным", описывается у Вас RGB(0, 0, 0) - т.е. "чёрный". Остальные цвета не изменятся. Впрочем, прверить надо...
2. Всё это нужно делать не в FormCreate, а где-то ещё, потому что постоянно придётся апдейтить уже показанное окно путём вызова UpdateLayeredWindow.

Отправлено: 10:41, 08-11-2005 | #5


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Да, ты и не сможешь в Form.Create winapi пишешь.
Яс создал окно (Createwindow) и попробовал для него такую вещь вставить, которая выше написана. Не работает. Может кто знает почему.

-------
Mavlyudov


Отправлено: 11:48, 08-11-2005 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Какая винда? Которое место и какую ошибку выдаёт?

Отправлено: 10:18, 14-11-2005 | #7


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


pva, попробуй совместить Код для создания окна (с CreateWindow) и
вот это:

const
LWA_ALPHA = $00000002;
WS_EX_LAYERED = $00080000;

var
LayeredWndAttr:Pointer=@SetLayeredWindowAttributes;

procedure TForm1.FormCreate(Sender: TObject);
begin
I :=50; // Устанавлевает уровнь прозрачности от 0 до 100
LayeredWndAttr := GetProcAddress(GetModuleHandle('user32.dll'),'SetLayeredWindowAttributes');
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, RGB(0, 0, 0), Round(I * 255 div 100), LWA_ALPHA);
end;

-------
Mavlyudov


Отправлено: 17:18, 14-11-2005 | #8

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Сразу замечу:
1. Возможно SetWindowLong(..., GWL_EXSTYLE, ...) не сработает, т.к. не все стили можно менять после создания окна
Можно попробовать врезаться в CreateWndParams.
2. Round(...) здесь лишнее (какой смысл округлять целое число?)
Результаты принесу в пятницу

Отправлено: 13:24, 16-11-2005 | #9

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Всё работает (Windows XP Prof. SP1, Delphi4, P-IV 1600),
Правда пришлось немного переписать, чтобы компилятор принял.
Код: Выделить весь код
procedure TForm1.FormCreate(Sender: TObject);
type
   TLayeredWndAttr = function(hwnd:integer; color:integer; level:integer; mode:integer): Integer; stdcall;
const
   LWA_ALPHA = $2;
   WS_EX_LAYERED = $80000;
var
   LayeredWndAttr: TLayeredWndAttr;
   i : integer;
begin
   i := 50;
   LayeredWndAttr := GetProcAddress(GetModuleHandle('user32.dll'),
                  'SetLayeredWindowAttributes');

   SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
   LayeredWndAttr(HANDLE, RGB(0,0,0), i*255 div 100, LWA_ALPHA);
end;

Отправлено: 08:59, 18-11-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Win32 API | Delphi | ФОКУС-раствориться в воздухе.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Win32 API | Нужна помошь по API функциям! vasika_hk Программирование и базы данных 2 23-05-2006 09:51
Win32 API | Дозвон XCodeR Программирование и базы данных 5 08-04-2006 12:26
Delphi - Win32 API | Delphi | Странности с Winapi Timer Mavlyudov Программирование и базы данных 4 14-11-2005 10:10
Win32 API | Игры с DeferWindowPos pva Программирование и базы данных 2 22-03-2005 10:29
Win32 API | Неизвестные функции Savant Программирование и базы данных 9 02-03-2005 10:18




 
Переход