VB程序员博客

VB程序开发

Archive for 01月, 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

我试过了,虽然没报错,但是有时候调用不到
不知道是哪里错了?

希望高手帮我解答下


各位大侠:

  前提:我有多台电脑在同一个局域网。其中只有一台电脑(A电脑)有共享文件,其他计算机都是访问该共享文件。其他电脑上不装任何第二方程序(不互相使用Winsock控件)。
  问题:我如何在A电脑上用VB编程实现当前有哪些电脑正连接在A电脑上?
  目标:要获取其他电脑的IP和用户名。

非常感谢,我需要的就是这个功能!

需要补充一点的就是:当对方已经退出共享目录,但还是会显示对方的信息。以上功能好像就是记录谁曾访问过共享文件,并非当前正在访问共享文件的计算机信息。如果要实现后者的功能又该如何做呢?


先定义了一个类模块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

啊,通过了!非常非常感谢大家!


电脑里有的网卡禁用中,有的网卡使用中.请问VB如何禁用所有的网卡?或者启用所有的网卡?

我在百度里没搜索到"超级绿豆""禁用",只有绿豆汤之类的,呵呵

找到了,请从这里下载:http://econet.zjgsu.edu.cn/cy_filesxxx/vbsrc/VBHDCtrl.rar
楼主可以结帖了 哇咔咔

看不懂哦,不知道怎么将 对网卡的操作 分离出来呀

http://topic.csdn.net/t/20030118/00/1370414.html


对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

同问啊  这样写的话  可以直接赋值了   

但是如果删除了文本里的东西  程序就出错了 


vb6是否有监视电源是直流还是交流的方法?acpi电源管理,vb6能吗?
我的笔记本设成电池3分钟就关机,但常常因为有些任务干挠而失灵,经常停电,我想用vb6 写个一停电(电源发生改变)就关机的程序,

帮顶……………………….

—————————————————–

游戏外挂交流群
55784213

帮顶……………………….

—————————————————–

游戏外挂交流群
55784213

引用于MSDN:
Sysinfo 控件
           

SysInfo 控件用来响应操作系统发送给所有应用程序的系统消息。于是应用程序在必要时就可适应操作系统的变化。

语法

SysInfo

说明

用 SysInfo 控件可监视操作系统信息,还可响应系统事件。该控件的特点如下所列:

与系统变化相关的事件(例如,DisplayChanged、TimeChanged 以及 SettingChanged 事件)。

电源状态事件及属性(例如,PowerSuspend、PowerResume 事件及 ACStatus 和 BatteryStatus 属性)。

Plug 和 Play 事件(例如,DeviceArrival 和 DeviceRemoveComplete 事件)。

操作系统属性(例如,OSVersion 和 WorkAreaHeight 属性)。


引用于MSDN:
ACStatus属性
     

返回一值,指示系统是否使用 AC 电源。

语法

object.ACStatus

object 所在处代表对象表达式,其值是“应用于”列表中的对象。

设置值

ACStatus 属性的设置值如下:

设置值 描述
0 系统未使用 AC 电源。
1 系统正在使用 AC 电源。
255 AC 电源状态未知。


引用Microsoft Sysinfo Control 6.0即可.

太好了谢谢你,你真行!


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
这应如何办谢谢!!!!!!!!


DataGridView中我修改某一个Cell的值后,没按回车(就是一直保持这种编辑状态),此时,我通过Button1点击将DataGridView各个Cell里的值保存到某一个文件,结果那个处于编辑状态下的Cell的值就保存不了。
请问有没有什么办法通过代码来解决?
说简单点就是代码来替代焦点在那个单元格编辑状态下时按回车

dgvSalaryItemSet是一DataGridView控件

要的就是DataGridView.EndEdit


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作為查詢條件!!!

怎么又沒人來了, 頂上去先!!!

把自己的帖子頂上去,望高手指點啊


要求:
1、只需要拦截本程序中浏览器控件发出的数据包,得到数据包内容即可
2、最好使用Hook Api的方法,raw socket的方法我试过了不好用,adsl拨号上网的电脑只能截到收到的包,而且不能指定线程;用代理的方法看过,要修改ie代理,会对用户造成影响,如果你有更好的办法也行
3、不使用第三方插件,可以是自己做的插件,要提供代码,不限语言种类。目前我就用的winpcap抓包,丢包严重,不能抓指定程序的包,而且安装也复杂

程序界面:
在窗体放一个浏览器控件,其他控件可以自己加,当浏览器控件中有数据包发出时用debug.print打印出数据包内容,16进制或文本格式都行

任务地址:http://prj.csdn.net/CodeAndProblemsInfo.aspx?pointid=107&Ck=Hv0dpKq308k