• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Lát ảnh cho Form [tiled picture background]

Các thủ thuật về âm thanh, đồ họa, truyền thông đa phương tiện...
User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Lát ảnh cho Form [tiled picture background]

Postby clarkkent » Sat 28/03/2009 2:18 pm

Thủ thuật: Lát ảnh cho Form
Tác giả: sưu tầm
Mô tả: Lát ảnh cho Form[


Thêm vào 1 PictureBox, dán code vào và chạy thôi.

Code: Select all

  1. Option Explicit
  2. Private Type BITMAP
  3.     bmType As Long
  4.     bmWidth As Long
  5.     bmHeight As Long
  6.     bmWidthBytes As Long
  7.     bmPlanes As Integer
  8.     bmBitsPixel As Integer
  9.     bmBits As Long
  10. End Type
  11.  
  12. 'Each line below (started by "Private" word) have to be pasted as a single line
  13. Private Declare Function BitBlt Lib "gdi32.dll" (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
  14.  
  15. Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
  16.  
  17. Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
  18.  
  19. Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
  20.  
  21. Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
  22.  
  23. Private Declare Function GetObject Lib "gdi32.dll" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
  24.  
  25. Private Sub Form_Load()
  26.     'Hide Picture1 and define its properties
  27.     Picture1.Visible = False
  28.     Picture1.AutoRedraw = False
  29.     Picture1.AutoSize = True
  30.     'Define form properties to be equivalent
  31.     Form1.AutoRedraw = False
  32. End Sub
  33.  
  34. Private Sub Form_Paint()
  35.     'Define necessary variables
  36.     Dim Success As Long 'Result of API calls
  37.     Dim bmp As BITMAP 'BMP copied from Picture1
  38.     Dim srcDC As Long 'Source hDC
  39.     Dim hSrcPrevBmp As Long 'Destination hDC
  40.     Dim srcBmp As Long
  41.     Dim hSrcBmp As Long
  42.     Dim y As Long
  43.     Dim x As Long
  44.  
  45.     'Loads picture - it can be any supported format of picture box control
  46.     Picture1.Picture = LoadPicture("C:\WINDOWS\Gone Fishing.bmp") 'doi hinh khác o day
  47.     srcBmp = Picture1.Picture
  48.     Success = GetObject(srcBmp, Len(bmp), bmp)
  49.     srcDC = CreateCompatibleDC(Form1.hdc)
  50.     hSrcBmp = SelectObject(srcDC, srcBmp)
  51.  
  52.     'Copy source Bitmap over form many times are necessary to cover its area
  53.     For y = 0 To Form1.ScaleHeight Step bmp.bmHeight
  54.         For x = 0 To Form1.ScaleWidth Step bmp.bmWidth
  55.             'The follow line have to be in a single line
  56.             Success = BitBlt(Form1.hdc, x, y, bmp.bmWidth, bmp.bmHeight, srcDC, 0, 0, &HCC0020)
  57.         Next x
  58.     Next y
  59.  
  60.     'Delete used objetcs and DC
  61.     Success = DeleteObject(hSrcBmp)
  62.     Success = DeleteDC(srcDC)
  63. End Sub
  64.  
  65.  


• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: Lát ảnh cho Form [tiled picture background]

Postby vietteiv » Sun 29/03/2009 10:35 am

test thử thấy ok. nhưng các control lại che mất hình của form. làm cách nào để tất cả các control trên form ko che hình luôn, dạng transparent
lát ảnh cho form theo code trên thì thấy có dạng lặp lại hình trong picture. làm thế nào chỉ thể hiện 1 hình trong picture ấy nhưng phủ đầy chiều cao và chiều rộng của form luôn.

User avatar
DQHung
Guru
Guru
Posts: 576
Joined: Mon 12/02/2007 3:24 pm
Location: Rach Gia - Kien Giang
Been thanked: 40 times
Contact:

Re: Lát ảnh cho Form [tiled picture background]

Postby DQHung » Mon 13/04/2009 7:18 pm

vietteiv wrote:lát ảnh cho form theo code trên thì thấy có dạng lặp lại hình trong picture. làm thế nào chỉ thể hiện 1 hình trong picture ấy nhưng phủ đầy chiều cao và chiều rộng của form luôn.


Phủ đầy hình lên form còn đơn giản hơn là tile form nửa.Dùng hàm StretchBlt là OK, hình ít bị bể hạt.

Code: Select all

  1. Public Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long


Return to “[VB] Âm thanh và Đồ họa”

Who is online

Users browsing this forum: No registered users and 1 guest