首页
社区
课程
招聘
[求助]水纹特效的VB代码(利用Dll),盼那位朋友转成Delphi
发表于: 2005-2-2 09:46 8426

[求助]水纹特效的VB代码(利用Dll),盼那位朋友转成Delphi

2005-2-2 09:46
8426
Private Declare Function WaterInit Lib "waterdll.dll" (ByVal bitmap As Long) As Long
-----------------------
Private Declare Function WaterMouseAction Lib "waterdll.dll" (ByVal hdc As _
    Long, ByVal sx As Long, ByVal sy As Long, ByVal mx As Long, _
        ByVal my As Long, ByVal half As Long, ByVal deep As Long) As Long
-----------------------
Private Declare Function WaterTimer Lib "waterdll.dll" (ByVal hdc As Long, ByVal sx As _
    Long, ByVal sy As Long) As Long
-----------------------
Private Sub Form_Load()
    WaterInit Picture1.Picture.Handle
End Sub
-----------------------
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    WaterMouseAction Form1.hdc, 10, 10, X, Y, 60, 500
End Sub
-----------------------
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    WaterMouseAction Form1.hdc, 10, 10, X, Y, 5, 80
End Sub
-----------------------
Private Sub Timer1_Timer()
    WaterTimer Form1.hdc, 10, 10
End Sub


waterdll.dll可以到此下载:
http://down.soit.com.cn/development/linetools/13354.html

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个简单嘛,我不会delphi
但也应该能想到
首先声明三个waterdll.dll中的函数!
WaterInit
WaterMouseAction
WaterTimer

再调用这三个函数就行了啊!~
2005-2-2 13:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
3
function WaterInit(bitmap:THandle):Integer; stdcall;external 'waterdll.dll';

function WaterMouseAction(hdc:THandle;sx,sy,mx,my,half,deep:int64):Integer;stdcall;external 'waterdll.dll';

function WaterTimer(hdc:THandle;sx,sy:int64):Integer; stdcall;external 'waterdll.dll';
这三个声明有误?

Form1.hdc
在Delphi中怎么表示?
2005-2-2 13:35
0
雪    币: 191
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问 那个VB工程的密码是……?
2005-2-2 13:42
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
5
最初由 米娜 发布
请问 那个VB工程的密码是……?


那个vb工程?上面链接的例子没有加密码的。
2005-2-2 13:45
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
最初由 grx 发布
function WaterInit(bitmap:THandle):Integer; stdcall;external 'waterdll.dll';

function WaterMouseAction(hdc:THandle;sx,sy,mx,my,half,deep:int64):Integer;stdcall;external 'waterdll.dll';

function WaterTimer(hdc:THandle;sx,sy:int64):Integer; stdcall;external 'waterdll.dll';
........


Form1.hdc=Form1.Canvas.Handle
或Self.Canvas.Handle
Self(delphi)=Me(VB)
2005-2-2 14:16
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
7
delphi用api,import以下头文件就行。不用专门搞这样的声明。
laoqian在不?可以给你说说
2005-2-2 16:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
8
最初由 nbw 发布
delphi用api,import以下头文件就行。不用专门搞这样的声明。
laoqian在不?可以给你说说


谢了nbw兄!很期待laoqian的指点。
2005-2-2 16:48
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
最初由 grx 发布


谢了nbw兄!很期待laoqian的指点。


我测试了一下
还不错的效果
附上delphi改的程序
不过只能用bmp图片
可能是我选的图片控件的事附件:DelphiSmaple.rar
2005-2-2 16:57
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
最初由 nbw 发布
delphi用api,import以下头文件就行。不用专门搞这样的声明。
laoqian在不?可以给你说说


按照你说的没有成功
只得按照隐式调用的格式作了一便

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure Load(Sender: TObject);
    procedure MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function WaterInit(bitmap:Integer):Integer; stdcall; external 'waterdll.dll';
function WaterMouseAction(hdc:Integer; sx,sy,mx,my,half,deep:Integer):Integer; stdcall; external 'waterdll.dll';
function WaterTimer(hdc:Integer; sx,sy:Integer):Integer; stdcall; external 'waterdll.dll';
implementation

{$R *.dfm}

procedure TForm1.Load(Sender: TObject);
begin
WaterInit(image1.Picture.Bitmap.Handle);
end;

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
WaterMouseAction(form1.Canvas.Handle,10,10,X,Y,60,500);
end;

procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
   WaterMouseAction (form1.Canvas.Handle,10,10,X,Y,5,80);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
WaterTimer(form1.Canvas.Handle,10,10);
end;
end.

请指正
2005-2-2 17:01
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
11
larblue兄:
谢。
一个新的问题:在VB里鼠标移出窗体后水波纹还将继续,直到平静下来;
按着码在Delphi 7里,鼠标移出窗体后,水纹波动被中止,停在一种别扭的状态。
2005-2-2 17:17
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
最初由 grx 发布
larblue兄:
谢。


不客气
还有很多缺点不知道你发现没有
完全按照VB的写法
鼠标移出窗口后画面上的水波回静止
但是VB不会
相信是delphi的传递事件的时候的问题
希望大家能帮忙解决
2005-2-2 17:22
0
雪    币: 196
活跃值: (2229)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  WaterTimer(Form1.Canvas.Handle,10,10);
  SendMessage(Form1.Handle, WM_PAINT, 0, 0);
  //这样那鼠标离开后也没问题了
end;
2005-2-2 20:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
14
最初由 freecat 发布
procedure TForm1.Timer1Timer(Sender: TObject);
begin
WaterTimer(Form1.Canvas.Handle,10,10);
SendMessage(Form1.Handle, WM_PAINT, 0, 0);
//这样那鼠标离开后也没问题了
........


Perfect!
2005-2-2 20:56
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
最初由 freecat 发布
procedure TForm1.Timer1Timer(Sender: TObject);
begin
WaterTimer(Form1.Canvas.Handle,10,10);
SendMessage(Form1.Handle, WM_PAINT, 0, 0);
//这样那鼠标离开后也没问题了
........

另一种写法
将form1.Canvas.Handle 替换成 getdc(handle) 即可

造成上述现象的原因是
form1.Canvas.Handle 是属性值
getdc(handle)      是通过函数取值有返回值
2005-2-2 21:06
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
不能使用除bmp以外的图片
是因为image组件获取图片句柄我用的是
image1.Picture.Bitmap.Handle
所以只能用BMP
但是这是一个GDI对象
GDI支持对象到句柄的方法
请教大家怎么样能获得图片的文件句柄
或者用什么方法载入的图片支持GDI对象
THANK~~~~~~~~~
2005-2-3 09:40
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
17
这应该找firstrose问问,他研究过的!
2005-2-3 09:49
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
18
最初由 laoqian 发布
这应该找firstrose问问,他研究过的!


laoqian 也解决不了吗
2005-2-3 09:57
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
19
我很菜,呵呵,我只是破解,不太会编程。等firstrose来了,一定可以解决。别的不敢说,他可是delphi高手,几乎没他解决不了的。
2005-2-3 10:10
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
最初由 laoqian 发布
我很菜,呵呵,我只是破解,不太会编程。等firstrose来了,一定可以解决。别的不敢说,他可是delphi高手,几乎没他解决不了的。


呵呵
个个都说自己很菜
那我等岂不是要撞墙了
2005-2-3 10:42
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
grx
21
最初由 larblue 发布


呵呵
个个都说自己很菜
那我等岂不是要撞墙了
........


不能 ,你行的。
2005-2-3 11:00
0
雪    币: 176
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
22
最初由 grx 发布


不能 ,你行的。


说实话我不会delphi的
接过你的代码才看了几眼SDK
我一直是用BCB/VC/VB的
2005-2-3 11:05
0
游客
登录 | 注册 方可回帖
返回
//