Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Вниз

Плавное появление формы   Найти похожие ветки 

 
VID   (2004-01-18 23:45) [0]

Хочется реализовать такую модную фишку (разумеется в >=Win2k).
Значит есть форма - пусть это будет класс от TForm с методом ShowFade; при вызове этого метода, форма (которая была до этого невидима), плавно появляется на экране, со всем своими содержимым (виз. компонентами)...

Как это сделать ( в смысле плавное появление) я нихрена не знаю... Но вот хочется) Кто знает как ? Ну или там может есть уже в природе компонент такой которые с любой формой может это чудо творить?


 
Einstein   (2004-01-18 23:51) [1]

Надо по таймеру изменять значение AlphaBlendValue


 
vid   (2004-01-19 00:00) [2]

Что за хрень такая ? я не нашёл даже упоминания этого слова в исходных текстах VCL и вообще нигде не нашёл...

delphi5


 
Palladin   (2004-01-19 00:05) [3]

оно в delphi6 присутсвует


 
Юрий Зотов   (2004-01-19 00:25) [4]

> VID © (18.01.04 23:45)

В D6 (и более поздних) под W2K (и более поздних) есть AlphaBlendValue.

То же самое можно сделать с помощью библиотеки FormRgn (есть на Королевстве). Она работает во всех Delphi и Windows.


 
vid   (2004-01-19 00:33) [5]

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


 
_none_   (2004-01-19 00:56) [6]

в onshow:
AnimateWindow(handle, 1000, AW_BLEND);


 
vid   (2004-01-19 02:08) [7]

to _none_... круто... не знал.. но вот юзать не получится: обратного процесса нет вроде (затухание)...

to Юрий Зотов: FormRgn что-то не понравился... куда лучше для поставленной задачи подходит

TOpacityForm

http://www.torry.net/vcl/forms/effects/opcform.zip


 
_none_   (2004-01-19 14:30) [8]

to [vid] в хелпе есть флажок для скрытия (я не пробовал).


 
easy   (2004-01-19 14:39) [9]


> обратного процесса нет вроде (затухание)...

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
AnimateWindow(handle, 1000, AW_BLEND or AW_HIDE);
end;


 
Style   (2004-01-19 14:40) [10]

2 _none_ ©
AnimateForm
В NT вывалилось с сообщением о том что в User32 такой функции не обнаружено :)


 
_none_   (2004-01-19 15:22) [11]

to [Style] разумеется... msdn гласит:
Minimum operating systems Included in Windows 98, Windows 2000


 
_none_   (2004-01-19 15:23) [12]

а еще есть компонент tpicshow - там 150 эффектов и есть демка появления формы с эффектом


 
VID   (2004-01-19 20:28) [13]

появился ряд вопросов связанных с AnimateWindow
1. Где этот help-файл, в котором описывается функция.
2. Что будет если я запущю прогу в которой в каком то месте в какой то момент вызываеться эта функция, на Windows98 ? Я понимаю, что фэйда не будет, но вопрос: прога вообще запустится, или же при запуске напишет что не найдена точка входа для функции "SetLayeredWindowAttributes" в user32.dll ?
3. Есть ли возможность определить затухла ли форма до конца, т.е. есть ли какое то событие или скорее всего wm_cообщение, которое будет отправлено окну, по факту полного затухания окна, когда его AlfaBlendValue станет равен 0, и функцию AnimateWindow завершит свою работу. (такой же вопрос относительно появления окна).

Просто дело в том что компонент, который я указал - работает безупречно, но есть одно но: в нём используется функция SetLayeredWindowAttributes из User32.dll, а в 98 виндах такой функции нет, и прога просто не стартует выдавая соотв. ошибку.

Можно конечно отказаться от использования компонента, тем более что ничего он особенного не делает, просто вызывает функцию SetLayeredWindowAttributes из User32.dll, тогда возникает вопрос, как так нужно хитро скомпилить программу, что бы проверка вхождения SetLayeredWindowAttributes в User32.dll производилась не при запуске программы, а именно в момент вызова моей функции (назовём её SetAlfa) которая в свою очередь и будет вызывать SetLayeredWindowAttributes ? И если функции SetLayeredWindowAttributes (либо какая то другая ошибка) то моя функция SetAlfa вернёт False;


 
Style   (2004-01-20 09:42) [14]

VID © (19.01.04 20:28) [13]
как так нужно хитро скомпилить программу, что бы проверка вхождения SetLayeredWindowAttributes в User32.dll производилась не при запуске программы, а именно в момент вызова моей функции (назовём её SetAlfa)

А нельзя ее динамически подгрузить?
как на счет LoadLibrary?


 
KSergey   (2004-01-20 10:19) [15]

А не проще ли просто платформу проверить и на тех платформах, где не поддерживается - не вызывать соотв. ф-цию. Вот и все.

> [6] _none_ © (19.01.04 00:56)
> [9] easy © (19.01.04 14:39)

Я пищал! ;) Сказка! ;)


 
NAlexey   (2004-01-20 10:45) [16]

Возможно два пути: известно что в Wn2k нет такой ф-ции, значит достаточно проверить платформу:
if Win32Platform = VER_PLATFORM_WIN32_NT then

или же при загрузке библиотеки проверять:


procedure SetAlphaBlendTransparent(WHandle: HWnd; Value: Byte);
var
User32: Cardinal;
SetLayeredWindowAttributes: function (hwnd: LongInt; crKey: byte;
bAlpha: byte; dwFlags: LongInt): LongInt; stdcall;
begin
User32 := LoadLibrary("USER32");
if User32 <> 0
then
try
SetLayeredWindowAttributes := GetProcAddress(User32, "SetLayeredWindowAttributes");
if @SetLayeredWindowAttributes <> nil
then
SetLayeredWindowAttributes(WHandle, 0, Value, LWA_ALPHA);
finally
FreeLibrary(User32);
end;
end;


 
_none_   (2004-01-20 14:30) [17]

to [VID]
мне лично animatewindow не понравился. советую TPicShow с

http://www.delphiarea.com/


 
VID   (2004-01-21 00:06) [18]

NAlexey © (20.01.04 10:45) [16]
Спасибо, я вообще то динамически библиотеки никогда не загружал, я вообще dll не использую в своих проектах (видимо недостаточно ещё профессионален), теперь вот знаю как )

_none_ © (20.01.04 14:30) [17]
Скачаю, пока билайн ещё предоставляет практически халявный инет )



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
1-29322
SeriousSam
2004-01-29 20:24
2004.02.10
Очень глупый вопрос: как сделать в программе еще одно окно?


3-29260
Korenb Grif
2004-01-17 19:32
2004.02.10
Dbgrid илил table


1-29309
rexelf
2004-01-30 10:57
2004.02.10
создание rar архива ???...


1-29470
Zilog
2004-01-30 13:18
2004.02.10
Как обработать событие, которого нет в Инспекторе Объектов?


1-29399
Ivolg
2004-01-31 14:02
2004.02.10
Gif анимация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский