请问各位高手,在PICTUREBOX控件里面动态添加LABEL控件,并底色为透明的怎么做?

wang7655 2005-12-22 12:19:30
各位高手:
我碰到如下一个问题:
我在窗体有一个PICTUREBOX控件,4个LABEL控件 现在当通过CommonDialog我选择一张照片填充到PICTUREBOX中是,发现4个LABEL控件看不见了

我利用查询语句,对LABEL给值,又可以看见了,但是下面有底色的,但是LABEL控件我放上去的时候已经设置为没有底色的,请问应该怎么处理?


这个问题已经困惑我好多天了,请问如何解决,谢谢!急用。。。。。
...全文
549 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang7655 2005-12-24
  • 打赏
  • 举报
回复
如果谁有打印照片效果比较好的例子,请发一份到wang7655@163.com谢谢!
wang7655 2005-12-24
  • 打赏
  • 举报
回复
但是我发现一个问题,就是图片打印出来的质量和直接把图片打印出来的效果不一样,要差很多,有办法处理吗?
vbman2003 2005-12-24
  • 打赏
  • 举报
回复
要想代码简单一点的话,可以不用label控件,加载图片后用,将要显示的内容print到图片上,然后用SavePicture保存一下,打印这个保存后的图片就OK了
rainstormmaster 2005-12-24
  • 打赏
  • 举报
回复
//哎,有其他办法吗?API不太怎么会,比较麻烦啊!

ShellExecute这个api函数很简单的,你先添加它声明(在窗体的 通用-声明 部分):
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

调用:
Dim mpic As StdPicture
Set mpic = CaptureActiveWindow(Me.picCanvas.hWnd)
dim mfile as string
mfile="e:\mc\mmttest.bmp"
savepicture mpic,mfile
ShellExecute me.hwnd,"print",mfile,vbnullstring,vbnullstring,1
wang7655 2005-12-24
  • 打赏
  • 举报
回复
哎,有其他办法吗?API不太怎么会,比较麻烦啊!
最好是有例子让我看看啊!
rainstormmaster 2005-12-24
  • 打赏
  • 举报
回复
//但是我发现一个问题,就是图片打印出来的质量和直接把图片打印出来的效果不一样,要差很多,有办法处理吗?

可以先把图片保存为bmp文件,然后用ShellExecute这个api函数打印bmp文件
wang7655 2005-12-23
  • 打赏
  • 举报
回复
而且,我需要把一部分文字加左上角,一部分加右下角
wang7655 2005-12-23
  • 打赏
  • 举报
回复
所以还需要各位高手给予详细的解答,谢谢!
wang7655 2005-12-23
  • 打赏
  • 举报
回复
可能我说的不明白:
第一、这个是选择图片的代码,如果说先在PICTUREBOX上放了2个LABEL控件,则重新选择图片以后,这2个LABEL控件就看不见了,里面文字也看不见了,当然BackStyle属性改为0是可以设置为透明的,但是重新选择图片以后,导致LABEL看不见。
这个是选择图片的代码:
Private Sub Command2_Click()
On Error GoTo Err_Handle
Dim filename As String
CommonDialog1.ShowOpen
filename = CommonDialog1.filename
If (Len(filename) > 0) Then
picCanvas.Picture = LoadPicture(CommonDialog1.filename)
picCanvas.PaintPicture picCanvas.Picture, 0, 0, picCanvas.ScaleWidth, picCanvas.ScaleHeight
End If
Exit Sub
Err_Handle:
MsgBox Err.Description
Exit Sub
End Sub

点一个BUTTON控件需要查询一些数据然后填写到LABEL控件中。。。但是,这样填写以后,LABEL控件出现在前面了,可是,突然发现LABEL控件的底色和照片的颜色有差别,好象是有点截取一点的样子。

我现在要求就是:怎么样在查询给值以后,让LABEL出来同时没有底色。

所以我想到动态添加LABEL,不知道怎么实现。。。

这个是查询然后给LABEL给值
Private Sub Command1_Click()
If Text1.Text = "" Then
MsgBox "请输入车号"
Exit Sub
End If
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
conn.Open Allconnect
SQL = "select * from 车辆表 where 车号='" & Text1.Text & "'"
rs.Open SQL, conn, 1, 3
If Not rs.EOF Then
Label2.Caption = "发:" & rs("发动机号码")
Label3.Caption = "车:" & rs("车架号码")
Else
MsgBox "没有找到相关信息!"
Exit Sub
End If
End Sub
rainstormmaster 2005-12-23
  • 打赏
  • 举报
回复
其实上面的代码和http://community.csdn.net/Expert/topic/4469/4469074.xml?temp=.9130365的代码基本相同,就是去掉了一些条件编译语句,另外封装了几个函数(过程)
rainstormmaster 2005-12-23
  • 打赏
  • 举报
回复
'续上
Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal _
LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc _
As Long) As Picture

Dim hDCMemory As Long
Dim hBmp As Long
Dim hBmpPrev As Long
Dim r As Long
Dim hDCSrc As Long
Dim hPal As Long
Dim hPalPrev As Long
Dim RasterCapsScrn As Long
Dim HasPaletteScrn As Long
Dim PaletteSizeScrn As Long
Dim LogPal As LOGPALETTE

If Client Then
hDCSrc = GetDC(hWndSrc)
Else
hDCSrc = GetWindowDC(hWndSrc)
End If

hDCMemory = CreateCompatibleDC(hDCSrc)
hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
hBmpPrev = SelectObject(hDCMemory, hBmp)

'获得屏幕属性
RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS)
HasPaletteScrn = RasterCapsScrn And RC_PALETTE
PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)

'如果屏幕对象有调色板则获得屏幕调色板
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
'建立屏幕调色板的拷贝
LogPal.palVersion = &H300
LogPal.palNumEntries = 256
r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
hPal = CreatePalette(LogPal)
'将新建立的调色板选如建立的内存绘图句柄中
hPalPrev = SelectPalette(hDCMemory, hPal, 0)
r = RealizePalette(hDCMemory)
End If

'拷贝图象
r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)

hBmp = SelectObject(hDCMemory, hBmpPrev)

If HasPaletteScrn And (PaletteSizeScrn = 256) Then
hPal = SelectPalette(hDCMemory, hPalPrev, 0)
End If

'释放资源
r = DeleteDC(hDCMemory)
r = ReleaseDC(hWndSrc, hDCSrc)

Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)
End Function
'capturescreen函数捕捉整个屏幕图象
Public Function CaptureScreen() As Picture
Dim hWndScreen As Long

'获得桌面的窗口句柄
hWndScreen = GetDesktopWindow()
Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, Screen.Width _
\ Screen.TwipsPerPixelX, Screen.Height \ Screen.TwipsPerPixelY)
End Function

Public Function CaptureActiveWindow(ByVal hWndActive As Long) As Picture
Dim r As Long
Dim RectActive As RECT
'hWndActive = GetForegroundWindow()
r = GetWindowRect(hWndActive, RectActive)
Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, _
RectActive.Right - RectActive.Left, RectActive.Bottom - RectActive.Top)
End Function

Public Sub PrintPictureToFitPage(Prn As Printer, Pic As StdPicture)
On Error GoTo Err_Handle
Const vbHiMetric As Integer = 8
Dim PicRatio As Double
Dim PrnWidth As Double
Dim PrnHeight As Double
Dim PrnRatio As Double
Dim PrnPicWidth As Double
Dim PrnPicHeight As Double

If Pic.Height >= Pic.Width Then
Prn.Orientation = vbPRORPortrait
Else
Prn.Orientation = vbPRORLandscape
End If

PicRatio = Pic.Width / Pic.Height

PrnWidth = Prn.ScaleX(Prn.ScaleWidth, Prn.ScaleMode, vbHiMetric)
PrnHeight = Prn.ScaleY(Prn.ScaleHeight, Prn.ScaleMode, vbHiMetric)
PrnRatio = PrnWidth / PrnHeight
If PicRatio >= PrnRatio Then
PrnPicWidth = Prn.ScaleX(PrnWidth, vbHiMetric, Prn.ScaleMode)
PrnPicHeight = Prn.ScaleY(PrnWidth / PicRatio, vbHiMetric, Prn.ScaleMode)
Else
PrnPicHeight = Prn.ScaleY(PrnHeight, vbHiMetric, Prn.ScaleMode)
PrnPicWidth = Prn.ScaleX(PrnHeight * PicRatio, vbHiMetric, Prn.ScaleMode)
End If
Prn.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeight
Exit Sub
Err_Handle:
MsgBox Err.Number
Exit Sub
End Sub


Private Sub Command1_Click()
On Error GoTo Err_Handle
Dim filename As String
Me.CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNExplorer
Me.CommonDialog1.Filter = "bitmap file(*.bmp)|*.bmp|JPEG file(*.jpg)|*.jpg"
Me.CommonDialog1.ShowOpen
filename = Me.CommonDialog1.filename
If (Len(filename) > 0) Then
picCanvas.Picture = LoadPicture(CommonDialog1.filename)
picCanvas.PaintPicture picCanvas.Picture, 0, 0, picCanvas.ScaleWidth, picCanvas.ScaleHeight
'Set picCanvas.Picture = picCanvas.Image
End If
Exit Sub
Err_Handle:
MsgBox Err.Description
Exit Sub

End Sub

Private Sub Command2_Click()
Dim mpic As StdPicture
Set mpic = CaptureActiveWindow(Me.picCanvas.hWnd)
'适应页面打印
PrintPictureToFitPage Printer, mpic
'想没有缩放的话用下面的语句打印
'Printer.PaintPicture mpic, 0, 0
Printer.EndDoc
End Sub

Private Sub Form_Load()
Me.Label1.BackStyle = 0
Me.picCanvas.AutoRedraw = True
Me.Command1.Caption = "请选择图片"
Me.Command2.Caption = "打印"
End Sub
rainstormmaster 2005-12-23
  • 打赏
  • 举报
回复
'窗体上2个按钮,一个picturebox(名为: picCanvas),picturebox中有1个标签

Option Explicit
Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type

Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(255) As PALETTEENTRY
End Type

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Private Const RASTERCAPS As Long = 38
Private Const RC_PALETTE As Long = &H100
Private Const SIZEPALETTE As Long = 104

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

Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _
ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal _
iCapabilitiy As Long) As Long
Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _
ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries _
As PALETTEENTRY) As Long
Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) _
As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject _
As Long) As Long
Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As _
Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop _
As Long) As Long
Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function GetForegroundWindow Lib "USER32" () As Long
Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette _
As Long, ByVal bForceBackground As Long) As Long
Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long
Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As _
RECT) As Long
Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As _
Long) As Long
Private Declare Function GetDesktopWindow Lib "USER32" () As Long

Private Type PicBmp
Size As Long
Type As Long
hBmp As Long
hPal As Long
Reserved As Long
End Type

Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As _
PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long

Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
Dim r As Long

Dim Pic As PicBmp
Dim IPic As IPicture
Dim IID_IDispatch As GUID

'填充IDispatch界面
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With

'填充Pic
With Pic
.Size = Len(Pic) ' Pic结构长度
.Type = vbPicTypeBitmap ' 图象类型
.hBmp = hBmp ' 位图句柄
.hPal = hPal ' 调色板句柄
End With

'建立Picture图象
r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)

'返回Picture对象
Set CreateBitmapPicture = IPic
End Function

苍狼传说 2005-12-23
  • 打赏
  • 举报
回复
你不要把Label控件放在图片框里,等你要打印的时候再把标签的文字画到图片框上,这样实际上你打印的就是一张完整的图片了。
wang7655 2005-12-23
  • 打赏
  • 举报
回复
也就是说打印的时候,只有图片,没有LABEL里面的文字了,我主要想实现打印的是可以把照片和文字一起打印,而且文字在照片上面的!
wang7655 2005-12-23
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0)
按照你说的方法,我这里是可以没有底色了,但是我打印的时候LABEL上面就没有东西了啊
wang7655 2005-12-23
  • 打赏
  • 举报
回复
哦,我按照你说的去做的看看,看是否可以!谢谢了!
wang7655 2005-12-23
  • 打赏
  • 举报
回复
各位高手给予解答啊!如果分不够,可以再开帖子

谢谢!
wang7655 2005-12-23
  • 打赏
  • 举报
回复
看过了,但是感觉比较复杂,而且我也没有弄出来,是否有其他的办法,另外。。。。是否可以发一份例子给我!
proer9988 2005-12-23
  • 打赏
  • 举报
回复
看看这里:
http://community.csdn.net/Expert/topic/4469/4469074.xml?temp=.9130365
wang7655 2005-12-23
  • 打赏
  • 举报
回复
我现在看见的图片和文字都是按照我想的样子来显示的,文字在图片上面,而且底色也没有了,但是不知道怎么样来把我看见的东西打印出来!
加载更多回复(7)

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧