Форум: "Потрепаться";
Текущий архив: 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.008 c