找回密码
 加入
搜索
查看: 19043|回复: 55

[图形处理] 【已解决】AU3能做出“鼠标划过水面”的动态效果么?(内详带图)

 火... [复制链接]
发表于 2010-8-9 14:17:34 | 显示全部楼层 |阅读模式
本帖最后由 KLU3K 于 2010-8-16 23:40 编辑

该效果是一个软件顶部的图片上带的效果,软件下载在这里:
http://www.hxlive.cn/archives/548/
如果懒得下载,那么我也做了抓图。如下:


方法见第二页,30楼

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 2金钱 +33 贡献 +2 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...
lynfr8 + 23 + 2 好问题!

查看全部评分

发表于 2010-8-9 19:48:16 | 显示全部楼层
没那么麻烦,不需要调用dll也可实现
思路:自己做个flash用Au3调用就行了(相关代码论坛找)
参考:
http://www.17flash8.net/teach/teachdetail.asp?/1124.html
发表于 2010-8-9 14:54:28 | 显示全部楼层
只知道调用了一个 waterctrl.dll
发表于 2010-8-9 15:37:21 | 显示全部楼层
对的,就是这个 waterctrl.dll
水纹插件!
发表于 2010-8-9 17:19:54 | 显示全部楼层
本帖最后由 republican 于 2010-8-11 17:08 编辑

回复 3# yiruirui

给个代码,可以参考着自行修改。
function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
     WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
//ParentWnd     放置特效窗口的父窗口句柄。
//Left          左位置
//Top           上位置
//Bmp           位图句柄。
//WaterRadius   水纹半径,会令到水纹看起来范围更广。
//WaterHeight   水纹高度,会令到水纹看起来更深。
//注意,水纹插件自动根据图片来设定高度和宽度,
//另外水纹底图必须是翻转的图片,显示的时候会翻转图片来显示。

function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
// 在 x,y 点产生半径为radius, 高度为height 的水纹。

function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
// 平伏所有水纹。

function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
//释放水纹插件

function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
//v2 新增,设置水纹插件的父句柄

var
  bmp: TBitmap;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('WizModernImage-Is.bmp');
  bmp := TBitmap.create;
  bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));

  enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then
  begin
    setwaterparent(WizardForm.WelcomePage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
  if CurPageID = wpFinished then
  begin
    setwaterparent(WizardForm.FinishedPage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
    flattenwater();
end;

procedure DeinitializeSetup();
begin
  disablewater();
  bmp.Free;
end;

评分

参与人数 1贡献 +3 收起 理由
lynfr8 + 3

查看全部评分

发表于 2010-8-9 17:54:19 | 显示全部楼层
用NSIS 、INNO实现过,AU3的就等待高手解决了。
 楼主| 发表于 2010-8-9 19:54:10 | 显示全部楼层
效果不一样,一个是纯代码实现。
一个是第三方实现。
而且flsh的明显感觉比较卡啊!
发表于 2010-8-10 08:14:03 | 显示全部楼层
谢谢楼上各位的分享!
发表于 2010-8-10 09:10:38 | 显示全部楼层
没那么麻烦,不需要调用dll也可实现
思路:自己做个flash用Au3调用就行了(相关代码论坛找)
参考:
lynfr8 发表于 2010-8-9 19:48



    卡确实是个问题....
发表于 2010-8-10 13:19:47 | 显示全部楼层
真漂亮哦,收下先
发表于 2010-8-11 09:38:05 | 显示全部楼层
回复 4# republican


    不错!感谢分享!
发表于 2010-8-11 10:10:30 | 显示全部楼层
回复 4# republican


    这要么是INNO,要么是pascal(delphi).不可能是VB.
发表于 2010-8-11 14:30:42 | 显示全部楼层
典型DELPHI吧呵呵
发表于 2010-8-11 14:48:29 | 显示全部楼层
回复 6# lynfr8


    我也想的是这样做。
发表于 2010-8-11 19:57:37 | 显示全部楼层
$t = _WinAPI_LoadImage(0,"E:\Documents and Settings\Hyperion\桌面\inno_waterctrl_v2\WizModernImage-Is.bmp",0,0,0,0x2010)
MsgBox(0, "", VarGetType($Form1))
$d = DllCall("waterctrl.dll", "int", "enablewater", "HWND", $Form1, "int", 0, "int", 0, "ptr", $t, "int", 3, "int", 50)
http://sky123.org/thread-33985-1-1.html 根据nsis的代码...改写失败...后面继续

评分

参与人数 2金钱 +52 贡献 +10 收起 理由
Duvet + 30 + 5 你也很厲害^^
lynfr8 + 22 + 5 虽然还差一步,也也很NB了!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 14:53 , Processed in 0.101209 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表