VB程序员博客
Archive for 01月, 2009
01 14th, 2009
我用picturebox的mousemove ousedown等做了动态按钮,里面加载的是图片
但问题是每一次触发上述事件便会将所需要的图片写入内存,这样一来的话内存就会变得很大很大……
有什么办法在一个事件被触发以后从内存中删除另一个事件所调用过的图片?
或者是将两张图片存放在内存固定位置然后调用?
不知道DLL是不是就能达到这个效果呢?
如果是DLL的话,我看了一个帖子,说的是
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapName As Long) As Long
Public Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal Hdc As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal Hdc As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal Hdc As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
'BitBmpID指示图片在资源文件中的ID.
'pichDc把DLL中的图形复制到一个和设备相关的对象里,必须带有Hdc属性
Public Function LoadDllPic(BitBmpID As Long, PichDc As Object)
Dim Loadll As Long, dcNow As Long, Bm As BITMAP, hOldBlt As Long
Dim LoadBlt As Long, Ret As Long
Loadll = LoadLibrary(App.Path & "BMPicture.dll") '载入动态链接库
LoadBlt = LoadBitmap(Loadll, BitBmpID) '载入图形
Ret = GetObject(LoadBlt, Len(Bm), Bm) '获得位图信息
dcNow = CreateCompatibleDC(PichDc.Hdc) '创建兼容DC
hOldBlt = SelectObject(dcNow, LoadBlt) '把位图选入设备场景中
BitBlt PichDc.Hdc, 0, 0, Bm.bmWidth, Bm.bmHeight, dcNow, 0, 0, vbSrcCopy '复制位图
DeleteObject SelectObject(dcNow, hOldBlt)
DeleteObject LoadBlt
DeleteObject Ret
DeleteDC dcNow
FreeLibrary Loadll '释放指定的动态链接库
PichDc.Refresh
End Function
调用时
LoadDllPic 159,me
我试过了,虽然没报错,但是有时候调用不到
不知道是哪里错了?
希望高手帮我解答下
01 14th, 2009
各位大侠:
前提:我有多台电脑在同一个局域网。其中只有一台电脑(A电脑)有共享文件,其他计算机都是访问该共享文件。其他电脑上不装任何第二方程序(不互相使用Winsock控件)。
问题:我如何在A电脑上用VB编程实现当前有哪些电脑正连接在A电脑上?
目标:要获取其他电脑的IP和用户名。
非常感谢,我需要的就是这个功能!
需要补充一点的就是:当对方已经退出共享目录,但还是会显示对方的信息。以上功能好像就是记录谁曾访问过共享文件,并非当前正在访问共享文件的计算机信息。如果要实现后者的功能又该如何做呢?
01 14th, 2009
先定义了一个类模块Lead
Public Conductor_Earth As Boolean '判别是导线还是地线
Public Name As String '导地线名称
'—-电线的相关参数———
Dim A As Double ' 电线的总截面积
Dim d As Double '电线的直径
Dim M As Double '电线质量
Dim E As Double '弹性系数
Dim af As Double '温度伸长系数
Dim tp As Double '拉断力
Dim F As Double '使用安全系数
Dim AV As Double '平均运行张力占拉断力的百分比
Dim n As Integer '导线分裂数
Dim Fm As Double '最大使用张力
Dim Fa As Double '平均运行应力
'—–比载—————–
Dim g1 As Double '自重力荷载
Dim g2 As Double '冰重力荷载
Dim g3 As Double '自重力加冰重力荷载
Dim g4 As Double '无冰时的风荷载
Dim g5 As Double '覆冰时的风荷载
Dim g6 As Double '无冰时的综合荷载
Dim g7 As Double '覆冰时的综合荷载
Dim wind_a As Double '风压系数
Dim Inequal_wind_a As Double '风压不均匀系数
Dim Figure_a As Double '体形系数
Dim ave_height As Double '电线平均高度
Dim Ge As Double '重力加速度
Dim Ice_thick As Double '定义冰厚
'–重力加速度
Public Property Get Gravity() As Variant
Gravity = Ge
End Property
Public Property Let Gravity(ByVal vNewGravity As Variant)
Ge = vNewGravity
End Property
'–冰厚
Public Property Get IceThick() As Variant
IceThick = Ice_thick
End Property
Public Property Let IceThick(ByVal vNewIceThick As Variant)
Ice_thick = vNewIceThick
End Property
'–截面积属性
Public Property Get SectionaArea() As Variant
SectionArea = A
End Property
Public Property Let SectionaArea(ByVal vNewSectionArea As Variant)
A = vNewSectionArea
End Property
'–直径属性
Public Property Get Diameter() As Variant
Diameter = d
End Property
Public Property Let Diameter(ByVal vNewDiameter As Variant)
d = vNewDiameter
End Property
'–单位质量属性
Public Property Get Mass() As Variant
Mass = M
End Property
Public Property Let Mass(ByVal vNewMass As Variant)
M = vNewMass
End Property
'–弹性系数属性
Public Property Get ElasticCoefficient() As Variant
ElasticCoefficient = E
End Property
Public Property Let ElasticCoefficient(ByVal vNewElasticCoefficient As Variant)
E = vNewElasticCoefficient
End Property
'–温度伸长系数
Public Property Get TemperatureElongate() As Variant
TemperatureElongate = af
End Property
Public Property Let TemperatureElongate(ByVal vNewTemperatureElongate As Variant)
af = vNewTemperatureElongate
End Property
(下面还有代码若干,省略)
然后在另外一个类模块OperationMode中,其中一个属性就是Lead变量。
Public Conductor_Earth As Boolean '判别是导线还是地线
Public Name As String '工况名称
Public Mark As String '用于工况排序
Public Jump As Boolean ' 是否被隔越
Public Lcrl As Double '临界档距下限
Public Lcrh As Double '临界档距上限
Dim te As Double ' 传递参数
Dim v As Double
Dim th As Double
Dim tp As Double
Dim tr As Double
Dim L As Lead
Dim ro As Double
'–线模块参量
Public Property Get Line() As Lead
Line = L
End Property
Public Property Let Line(ByVal vNewLine As Lead)
Set L = New Lead
L = vNewLine'——>这里报错!
End Property
(下面还有代码若干,省略)
调试的时候,报错:对象不支持这个属性或方法(错误 438)
在类模块中如何定义和使用自己做的类模块呢?
非常感谢了!
Set objHandleMenu = Nothing →Set objAA = Nothing
up
是放在这里吗?
Public Property Let Line(ByVal vNewLine As Lead)
Set L = CreateObject(Lead)
L = vNewLine
End Property
但是还是不对啊?
楼上能不能说具体一点到底是哪里有问题啊?
非常非常感谢!
这样还是有问题。
不明白究竟是怎么回事。可否再指点一下,非常感谢了!
还是这个在VB中没有办法实现啊?
要是这个都没有办法实现,那企不是太痛苦了啊?
lead 是一个类对象,要用set
Public Property Let Line(ByVal vNewLine As Lead)
'Set L = CreateObject(Lead)
set L = vNewLine
End Property
设置类变量要用set
Public Property Let Line(ByVal vNewLine As Lead)
Set L = New Lead
' L = vNewLine'——>这里报错!
'改成
Set L=vNewLine
End Property
啊,通过了!非常非常感谢大家!
01 14th, 2009
电脑里有的网卡禁用中,有的网卡使用中.请问VB如何禁用所有的网卡?或者启用所有的网卡?
我在百度里没搜索到"超级绿豆""禁用",只有绿豆汤之类的,呵呵
找到了,请从这里下载:http://econet.zjgsu.edu.cn/cy_filesxxx/vbsrc/VBHDCtrl.rar
楼主可以结帖了 哇咔咔
看不懂哦,不知道怎么将 对网卡的操作 分离出来呀
http://topic.csdn.net/t/20030118/00/1370414.html
01 13th, 2009
对IP Winsock1.RemoteHost = Text3.Text 这样赋值是可以 在窗口输192.128.0.XXX是可以的
但是对端口这样不行呢 Winsock1.LocalPort = Text4.Text Winsock1.RemotePort = Text4.Text 这样赋值就通不过 是语法有错吗 端口号是整数 比如3001 是不是就不能这样赋呢
应该怎么赋呢 我需在外面的Text上直接输端口号 求教
…
Private Sub Form_Load()
Dim my As String
Winsock1.Protocol = sckUDPProtocol
Winsock1.LocalPort = Text4.Text
Winsock1.RemotePort = Text4.Text
Winsock1.RemoteHost = Text3.Text
End Sub
Private Sub Text3_Change()
Winsock1.RemoteHost = Text3.Text
End Sub
Private Sub Text4_Change()
Winsock1.LocalPort = Text4.Text
Winsock1.RemotePort = Text4.Text
End
同问啊 这样写的话 可以直接赋值了
但是如果删除了文本里的东西 程序就出错了
01 13th, 2009
vb6是否有监视电源是直流还是交流的方法?acpi电源管理,vb6能吗?
我的笔记本设成电池3分钟就关机,但常常因为有些任务干挠而失灵,经常停电,我想用vb6 写个一停电(电源发生改变)就关机的程序,
帮顶……………………….
—————————————————–
游戏外挂交流群
55784213
帮顶……………………….
—————————————————–
游戏外挂交流群
55784213
引用Microsoft Sysinfo Control 6.0即可.
太好了谢谢你,你真行!
01 13th, 2009
Dim JMail
Set JMail = CreateObject("jmail.Message")
JMail.Charset = "gb2312"
JMail.Silent = False
JMail.MailServerUserName = "gnxu2009@163.com " 'Email帐号
JMail.MailServerPassWord = "++++++" 'Email密码
JMail.FromName = "gnxu2009@163.com" '发信人姓名
JMail.From = "gnxu2009@163.com " '发邮件地址地址
JMail.Subject = "来信了" '主题
JMail.AddRecipient "gnxu2009@163.com" '收信人地址
JMail.Body = Text1.Text & Text2.Text
JMail.Send ("mail.163.com") 'SMTP服务器,如smtp.sohu.com
Set JMail = Nothing
运行后提示:the message was undeliverable.All servers failed to receive the message
这应如何办谢谢!!!!!!!!
01 13th, 2009
DataGridView中我修改某一个Cell的值后,没按回车(就是一直保持这种编辑状态),此时,我通过Button1点击将DataGridView各个Cell里的值保存到某一个文件,结果那个处于编辑状态下的Cell的值就保存不了。
请问有没有什么办法通过代码来解决?
说简单点就是代码来替代焦点在那个单元格编辑状态下时按回车
dgvSalaryItemSet是一DataGridView控件
要的就是DataGridView.EndEdit
01 13th, 2009
Private Sub Form_Load()
Dim con As String
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strsql As String
con = "provider = msdaora.1;data source = tii;user id = eps ; password = eps; persist security info = true"
Set conn = New ADODB.Connection
conn.ConnectionString = con
conn.CursorLocation = adUseClient
conn.Open
Set rst = New ADODB.Recordset
strsql = "select * from ALNCS"
Set rst = conn.Execute(strsql)
ReDim arryData(rst.RecordCount)
For i = 1 To rst.RecordCount
DataCombo1.BoundColumn = rst!ALNC_NAME
DataCombo1.BoundText = (rst!ALNC_NAME)
DataCombo1.ListField = (rst!ALNC_ID)
rst.MoveNext
Next
End Sub
上面是我的代碼,我想做的是在datacombo裡面添加ALNC_NAME字段,然後在listfield裡面保存相對應的ALNC_ID,現在是能顯示出來了,但是只顯示最後一個數據,搞了N久都搞不懂是怎么回事,在調試的時候是看到FOR循環裡面的數值的確是在改變,但是在添加到DATACOMBO的時候爲什麽只有一個了呢??DATACOMBO有沒有像COMBOX的ADDITEM功能的啊????
難道CSDN里就沒人知道了么?暈死。一個人都不來
SET DataCombo1.DataSource = cnnrecord
DataCombo1.DataField = "sbbh"
SET DataCombo1.RowSource=cnnrecord
DataCombo1.ListField="sbbh"
创建一个简单的 DataCombo 应用程序
下面的示例使用 DataCombo 控件为 Northwind.mdb 示例数据库的 Titles 表创建一个数据输入界面。这个输入界面使用户可以输入新的产品,并通过提供一个包括所有供应商名称的查找表将这些新产品指定到已有的供应商。当用户在输入窗体中要输入供应商字段的值时,他们可以从一个列表框中选择一个供应商。当他们选定一个供应商后,该供应商的 SupplierID 字段值就复制到 Products 表的 SupplierID 字段。
要使用 DataCombo 控件来创建一个查找表
给 Northwind 数据库创建一个OLEDB 数据源。
如果还没有创建数据源,请按照“创建 Northwind 的OLEDB 数据源”中的步骤进行。
在Visual Basic 中创建一个新的标准的 EXE 工程。
如果“DataGrid”、“DataCombo”、或“ADO Data”控件不在“工具箱”中,则右键单击“工具箱”,然后使用“部件”对话框来添加控件。
添加一个 DataCombo 控件、两个 ADO Data 控件、以及一个 DataGrid 控件到窗体中。
在“属性”窗口中,如下表所示设置第一个数据控件 (Adodc1) 的属性。 属性 设置值
Name AdoDataSource
ConnectionString Northwind.udl
RecordSource Select * From Products;
Caption Products
在“属性”窗口中,如下表所示设置第二个数据控件 (Adodc2) 的属性。 属性 设置值
Name AdoRowSource
ConnectionString Northwind.udl
RecordSource Select CompanyName, SupplierID From Suppliers;
Caption Suppliers
Visible False
在“属性”窗口中,如下表所示设置 DataGrid 控件的属性。 属性 设置值
Name GrdProducts
DataSource AdoDataSource
Caption Products
在“属性”窗口中,如下表所示设置 DataCombo 控件的属性。 属性 设置值
Name DcbSuppliers
DataSource AdoDataSource
DataField SupplierID
RowSource AdoRowSource
ListField CompanyName
BoundColumn SupplierID
最后,将下述代码添加到该窗体的代码模块中:
Private Sub Form_Load()
' 在 DataGrid 控件中隐藏 SupplierID 字段,使用户
' 不会混淆到底该更改哪一个值。
grdProducts.Columns("SupplierID").Visible = False
End Sub
运行该工程。
可以通过单击可视的 ADO Data 控件上的箭头来浏览记录集。如果这样做,DataCombo 控件将更新和显示每一个产品的供应商的名称。如果要编辑 SupplierID 字段,则单击 DataCombo 控件的箭头来显示一个下拉列表,然后再单击一个不同的供应商,来改变写入到 SupplierID 字段的值。
你說的那種方法我在網上看到過,也我試過了,還是不行啊~~~我現在想的是在DATACOMBO1裡面只顯示ALNC_NAME,同時保存ALNC_NAME相對應的ALNC_ID,以便在以後的查詢中使用ALNC_ID作為查詢條件!!!
怎么又沒人來了, 頂上去先!!!
把自己的帖子頂上去,望高手指點啊
01 13th, 2009
要求:
1、只需要拦截本程序中浏览器控件发出的数据包,得到数据包内容即可
2、最好使用Hook Api的方法,raw socket的方法我试过了不好用,adsl拨号上网的电脑只能截到收到的包,而且不能指定线程;用代理的方法看过,要修改ie代理,会对用户造成影响,如果你有更好的办法也行
3、不使用第三方插件,可以是自己做的插件,要提供代码,不限语言种类。目前我就用的winpcap抓包,丢包严重,不能抓指定程序的包,而且安装也复杂
程序界面:
在窗体放一个浏览器控件,其他控件可以自己加,当浏览器控件中有数据包发出时用debug.print打印出数据包内容,16进制或文本格式都行
任务地址:http://prj.csdn.net/CodeAndProblemsInfo.aspx?pointid=107&Ck=Hv0dpKq308k