Board logo

标题: 最近正在写了一个兵种控件,结果发现怎么搞都无法响应事件。 [打印本页]

作者: 阿尔法孝直    时间: 2006-10-11 12:51     标题: 最近正在写了一个兵种控件,结果发现怎么搞都无法响应事件。

详细内容请看#55的帖。

[ 本帖最后由 阿尔法孝直 于 2007-6-3 16:55 编辑 ]
作者: 司徒苍月    时间: 2006-10-11 12:57

直接呼叫 Win32 API sleep (n) 即可
n为毫秒

Public Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)

private sub taskwait()
dim i as long
i = n '自定义数值
call task1 '调第一个任务
sleep(i)
call task2 '掉第二个任务
end sub

[ 本帖最后由 司徒苍月 于 2006-10-11 13:01 编辑 ]
作者: 阿尔法孝直    时间: 2006-10-11 13:24

谢谢!已成功!
作者: 阿尔法孝直    时间: 2006-10-12 16:57

问题改了。要求将这段代码夹在语句1与语句2之间,使得程序执行完语句1之后,间隔指定的时间再执行语句2。如果在这段时间内单击鼠标、或者按指定的键(如回车),也执行语句2。

或者这样想,执行完语句1之后,给你一段时间,如果在这段时间内按了指定按键或单击鼠标,执行语句2;这段时间内没有按指定按键且没有单击鼠标,也执行语句2。
最好不使用计时器控件。

[ 本帖最后由 阿尔法孝直 于 2006-10-12 17:02 编辑 ]
作者: 司徒苍月    时间: 2006-10-12 17:10

用循环执行sleep(1000),这样循环几次就是几秒
enter的keyascii好像是13,那么取keyascii=13的时候跳出循环exit for即可,鼠标左键是0x1
举例
事件A
for i = 1 to 500
   if check1=true  then  'check1作为全局变量
       exit for
   end if
   sleep(1000)
next i
事件B
-----------------------------
将下面的代码放入Form_KeyPress事件中
if keyascii=0x1 or keyascii=13 then '13是回车,0x1是鼠标左键
    check1=true
else
    check1=false
end if

注:该窗体Form_KeyPress值必须为true

[ 本帖最后由 司徒苍月 于 2006-10-12 17:13 编辑 ]
作者: 阿尔法孝直    时间: 2006-10-12 19:48

错误

图片附件: error.JPG (2006-10-12 19:48, 37.82 K) / 该附件被下载次数 175
http://xycq.org.cn/forum/attachment.php?aid=23377


作者: 司徒苍月    时间: 2006-10-12 22:21

0x1换成vbKeyLButton
作者: 阿尔法孝直    时间: 2006-10-13 17:16

我在Form_KeyPress()事件中的End If 处设置断点,结果运行时单击鼠标,没有停下来。
作者: 阿尔法孝直    时间: 2006-10-13 20:08     标题: 即使用计时器控件,也不行。执行一下代码,发现time2的值总是0

Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private check1 As Boolean
Private time2 As Byte

Private Sub Form_Click()
check1 = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyAscii = 13 Then '13是回车,0x1是鼠标左键
    check1 = True
Else
    check1 = False
End If

End Sub

Private Sub Form_Load()
Me.Show
Timer1.Enabled=True
Timer1.Interval=10
time2 = 0
Print "00000000"
Do While Not check1
  Sleep (1000)
Loop
Print "11111111"
Do While Not check1
  Sleep (1000)
Loop
Print "22222222" '事件C
Do While Not check1
  Sleep (1000)
Loop
Print "33333333"
End Sub

Private Sub Timer1_Timer()
Static time1 As Byte
time1 = time1 + 1
time2 = time1
If time1 = 50 Then
  time1 = 0
  check1 = True
End If
End Sub
作者: 司徒苍月    时间: 2006-10-13 20:34

按指定键,光标在哪里呢?

这里有段,鼠标问题解决了

[Copy to clipboard]
CODE:
Dim check1 As Boolean
Dim check2 As Boolean
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
If check2 = True Then
    Exit Sub
End If
   
Call fun1

End Sub



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyAscii = 13 Then  '13是回车
    check1 = True
Else
    check1 = False
End If
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then  '13是回车
    check1 = True
Else
    check1 = False
End If
End Sub


Private Sub Form_Load()
check2 = False
End Sub
Private Sub fun1()
Dim i As Long
check2 = True
For i = 1 To 200
   If check1 = True Then 'check1作为全局变量
       Exit For
   End If
   Sleep (100)
   Debug.Print CStr(i)
Next i
check2 = False
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then '1是左键
    check1 = True
Else
    check1 = False
End If
End Sub


作者: 阿尔法孝直    时间: 2006-10-14 15:54     标题: 恐怕以下代码是最佳不过了(如果用计时器)

放上一个计时器控件,一个不可见的文本框控件(或一个不可见的标签控件也行),代码如下:

(没办法,为了模拟英杰传的弹出信息框,单击鼠标或等到一定时间信息框消失)

[ 本帖最后由 阿尔法孝直 于 2006-10-14 15:57 编辑 ]

图片附件: Code1.JPG (2006-10-14 15:54, 77.44 K) / 该附件被下载次数 173
http://xycq.org.cn/forum/attachment.php?aid=23512


作者: Maxwell    时间: 2006-10-19 12:01

为什么不想用Timer呢?我倒是想了个办法不用Timer,一会儿试试,能行贴上来。
作者: 阿尔法孝直    时间: 2006-10-25 12:36     标题: 加急!如何做出透明Frame控件?

不是让Frame看不见,而是让放在里面的透明Label控件显示在Progressbar的上面。

比如像曹操传中的生命条一样。

[ 本帖最后由 阿尔法孝直 于 2006-10-25 13:08 编辑 ]
作者: 阿尔法孝直    时间: 2006-10-25 19:52

标签在进度条上面,并且是透明的。

图片附件: [图] Prog.JPG (2006-10-25 19:52, 11.56 K) / 该附件被下载次数 150
http://xycq.org.cn/forum/attachment.php?aid=24165


作者: 司徒苍月    时间: 2006-10-25 20:07



QUOTE:
原帖由 阿尔法孝直 于 2006-10-25 12:36 发表
不是让Frame看不见,而是让放在里面的透明Label控件显示在Progressbar的上面。

比如像曹操传中的生命条一样。

光靠vb代码不行,好像要什么ocx吧- -
作者: shadewither    时间: 2006-10-25 21:46

ccz的做法是直接drawtext上去
作者: godhelpu    时间: 2006-10-26 17:06

是要求前景字体颜色随进度条变化吗?背景变深色,字体反白?
不是很明白楼主的需求,能说清楚点吗?
作者: Maxwell    时间: 2006-10-27 16:47

Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long

Public Const DT_CENTER = &H1
Public Const DT_VCENTER = &H4
Public Const DT_SINGLELINE = &H20
Public Const TRANSPARENT = 1

Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Sub ShowText(control As ProgressBar)
    Dim dc As Long
    Dim WndRect As RECT
    Dim OldBkMode As Long
   
    GetClientRect control.hwnd, WndRect
    dc = GetDC(control.hwnd)
    OldBkMode = SetBkMode(dc, TRANSPARENT)
    DrawText dc, "test", 4, WndRect, DT_CENTER + DT_VCENTER + DT_SINGLELINE
    SetBkMode dc, OldBkMode
End Sub

主要代码是这个样子的,再加上设置字体、颜色基本就可以了。
作者: 阿尔法孝直    时间: 2006-10-28 19:06

用什么软件可以制作VB6支持的48*48格式的ICO图标?我试了一些软件比如IconWorkShop、ApearIconMaker等,结果VB6都报“无效图片”。

这里有一个待测图片。

[ 本帖最后由 阿尔法孝直 于 2006-10-31 15:10 编辑 ]

附件: [待测图片] image1.rar (2006-10-28 19:06, 220 bytes) / 该附件被下载次数 145
http://xycq.org.cn/forum/attachment.php?aid=24316
作者: Maxwell    时间: 2006-10-30 12:57

ISO还是ICO?不应该不能用吧,要不试试用VC编辑图标。
作者: 阿尔法孝直    时间: 2006-10-31 15:10

不好意思打错了,是ICO。已改。
作者: 阿尔法孝直    时间: 2006-11-3 19:53

有谁帮我测一下啊
作者: Maxwell    时间: 2006-11-4 16:33

试试用VC编辑图标。
作者: 阿尔法孝直    时间: 2006-11-4 19:54

没学过VC。是Visual C++吗?
作者: 阿尔法孝直    时间: 2006-11-4 20:00

刚看了一下,好像不能编辑48x48的啊。
作者: Maxwell    时间: 2006-11-5 10:42

你确信VB支持48*48的图标吗?如果支持VC应该能编辑。我现在手里没有VB,有空我看看。
作者: 阿尔法孝直    时间: 2006-11-5 15:39

刚试过,VB6好像只支持32*32*16色的ICO
作者: 阿尔法孝直    时间: 2006-11-5 15:42

还有32*32*2色的Cur
作者: 阿尔法孝直    时间: 2006-11-7 19:37

好像VB1.0/3.0/.NET 2005支持48*48ICO,VB4.0/6.0不支持,谁能帮忙搞一下,如何制作VB6.0支持的48*48的ICO
作者: Maxwell    时间: 2006-11-8 09:03

icon

A graphical representation of an object or concept; commonly used to represent minimized applications in Microsoft Windows. An icon is a bitmap with a maximum size of 32 x 32 pixels. Icons have an .ico file name extension.

VS6的MSDN里的说法。

[ 本帖最后由 Maxwell 于 2006-11-8 09:05 编辑 ]
作者: Maxwell    时间: 2006-11-8 09:04

哪个地方能用到48*48的图标?bmp不行?
作者: Maxwell    时间: 2006-11-8 09:06

48*48的ICO哪儿能用到?bmp不行?
作者: 阿尔法孝直    时间: 2006-11-8 12:09

呵呵,最近我想用VB重写英杰传,想用类似孔明传的48*48的大单元格,但是兵在地图上,其他地方得是透明的,于是我就想到了图标。
作者: 阿尔法孝直    时间: 2006-11-8 12:11



QUOTE:
原帖由 Maxwell 于 2006-11-8 09:03 发表
icon

A graphical representation of an object or concept; commonly used to represent minimized applications in Microsoft Windows. An icon is a bitmap with a maximum size of 32 x 32 pixels. Icon ...

晕,果然只支持32*32的ICO......
作者: Maxwell    时间: 2006-11-9 12:58

费点事用bmp吧。
作者: 阿尔法孝直    时间: 2007-3-9 18:19

如何用VB获得某网页的最后修改日期、时间?
作者: 蜀★子龙    时间: 2007-3-11 14:36

我有一个想法就是制造出中文编程计算机语言,用中文和一些符号组合就可以编程,这样学起编程就简单多了!
作者: 阿尔法孝直    时间: 2007-4-6 13:04

我这里有两个48x48gif动画(ImageReady做的),不知道用什么VB控件可以播放,而且背景还是透明的。

图片附件: [正面] 01-00.gif (2007-4-6 13:04, 1.25 K) / 该附件被下载次数 108
http://xycq.org.cn/forum/attachment.php?aid=37586



图片附件: [背面] 01-01.gif (2007-4-6 13:04, 1.11 K) / 该附件被下载次数 113
http://xycq.org.cn/forum/attachment.php?aid=37587


作者: 司徒苍月    时间: 2007-4-6 14:22

WebBrowser控件
在Microsoft Internet Control里

方法
WebBrowser.Navigate 图片路径
作者: 阿尔法孝直    时间: 2007-4-6 19:06

我知道这种方法,但我的本意是要让gif动画放在另一个用放壁纸作背景的image控件上,且动画背景要透明。
作者: 阿尔法孝直    时间: 2007-4-6 19:08

就像战棋游戏一样。
作者: 司徒苍月    时间: 2007-4-6 23:31



QUOTE:
原帖由 阿尔法孝直 于 2007-4-6 19:06 发表
我知道这种方法,但我的本意是要让gif动画放在另一个用放壁纸作背景的image控件上,且动画背景要透明。

试试用anigif.ocx,不过我没找到破解版,所以无法尝试。。。。。。。。
作者: 阿尔法孝直    时间: 2007-4-7 12:33

哈哈,问题解决了,谢谢了。

我下了一个没注册版,自己破解汉化的,我把它发上来

附件: [AniGIF控件] AniGIF.rar (2007-4-7 12:33, 60.62 K) / 该附件被下载次数 131
http://xycq.org.cn/forum/attachment.php?aid=37697
作者: timiil    时间: 2007-4-9 22:48

NNN年没碰VB6了,记得要播放GIF的话,可以有几个商业的ActiveX控件,www.componentsource.com里边可以搜一下,看中了如果没有Crack,就自己动手吧:)

BTW,用VB做SLG? 会不会辛苦一点? 可以利用的资源比较少,起点会比较痛苦哦;

目前C#和Java都有非常成熟的,开源的战棋游戏引擎,现在有空在看一个C#的,老外做的,包括引擎,MapEditor,脚本Editor都有,一直也在更新,实现效果大约有如《大战略》(老外比较喜欢6角形的战棋?:)
作者: 阿尔法孝直    时间: 2007-4-12 13:00

还有,如何在运行时用代码改变anigif里的图片?我试着用anigif.gif=FileName,anigif.gif=loadpicture(FileName),都不行。

另外,如何用anigif调用imagelist?

[ 本帖最后由 阿尔法孝直 于 2007-4-12 13:04 编辑 ]
作者: 阿尔法孝直    时间: 2007-4-13 11:55

没人知道吗?
作者: Maxwell    时间: 2007-4-13 13:31

它的手册里没有说?这个东西没用过,不好说。
作者: Maxwell    时间: 2007-4-13 13:31

它的手册里没有说?这个东西没用过,不好说。
作者: 阿尔法孝直    时间: 2007-4-13 13:36

我没有anigif手册啊
作者: 阿尔法孝直    时间: 2007-4-14 15:25

如何让用户控件背景属性调用Imagelist控件?
作者: 阿尔法孝直    时间: 2007-4-18 12:06

就是让用户控件多一个ImageList属性,该属性的值直接指向ImageList控件。(没人知道吗?)
作者: 阿尔法孝直    时间: 2007-4-19 11:44

没人知道






吗???????????
作者: Maxwell    时间: 2007-4-21 21:48

不难实现吧,你是打算自己写控件吗?
作者: 阿尔法孝直    时间: 2007-4-22 10:05


作者: 阿尔法孝直    时间: 2007-6-2 21:51

最近写了一个兵种控件(未完) ,结果发现怎么搞都无法响应事件。怎么办?谁能帮我改一下代码?谢谢。

[ 本帖最后由 阿尔法孝直 于 2007-6-2 21:55 编辑 ]

附件: [兵种控件] Sold1.part01.rar (2007-6-2 21:51, 292.97 K) / 该附件被下载次数 87
http://xycq.org.cn/forum/attachment.php?aid=41218

附件: Sold1.part02.rar (2007-6-2 21:53, 292.97 K) / 该附件被下载次数 96
http://xycq.org.cn/forum/attachment.php?aid=41219

附件: Sold1.part03.rar (2007-6-2 21:55, 292.97 K) / 该附件被下载次数 82
http://xycq.org.cn/forum/attachment.php?aid=41220

附件: Sold1.part04.rar (2007-6-2 21:55, 211.02 K) / 该附件被下载次数 81
http://xycq.org.cn/forum/attachment.php?aid=41221
作者: 阿尔法孝直    时间: 2007-6-4 12:45

没人知道吗??????????????




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0