Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: [Vấn đề khi tạo form có hình dạng tùy biến]

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    0

    Mặc định [Vấn đề khi tạo form có hình dạng tùy biến]

    Khi tạo mottj form có hình dạng tùy biến, làm thế nào để khi ta click vào "phần khuyết" của form thì focus trả về những app nào sau nó?

    Chằng hạn một form có hình tròn và bị lủng 1 lỗ ở giữa, khi ta click vào cái lỗ đó thì chương trình đằng sau của nó nhận focus?

    Các bạn chỉ dùm! Thanks

  2. #2
    No Avatar
    nhannguyenbt Khách

    Em cũng có làm cái này,mà lúc thì Ok lúc thì không. Tức là dùng ảnh gif có Transp... những chỗ khuyết. Sau đó set background form là màu gì đó (thường là lightcyan) và Transpar...color là màu trùng với màu trên là được.
    Còn một cách nữa là dùng Window API để xóa những phần không dùng của form. Lần sau em sẽ pót code lên

  3. #3
    No Avatar
    nhannguyenbt Khách

    Giao diện máy tính là tập hợp các điểm ảnh (pixel), được sắp xếp như một ma trận mà ta gọi là pixel, giao diện của các ứng dụng VB cũng vậy. Thuật toán ở đây là duyệt qua tất cả các cột và các hàng ma trận pixel của form, gặp điểm ảnh nào có màu trùng với màu cần xoá thì ta làm cho nó trong suốt, cuối cùng, khi kết thúc việc duyệt này ta được hình ảnh tạo bởi các điểm ảnh mà ta không xoá, đó chính là giao diện mong muốn.



    Một cách để đơn giản hoá dữ liệu màu của các điểm ảnh ta muốn xoá là gán cho chúng cùng một màu, với điều kiện màu này không trùng hoặc trùng với một số ít điểm ảnh mà ta không muốn xoá. Việc lấy màu của các điểm ảnh trong VB được giao cho hàm API GetPixel đảm nhận. Còn để gán màu, ta dùng Photoshop. Ở đây tôi sẽ làm từng bước cho một ví dụ cụ thể, bạn có thể làm tương tự với giao diện mà mình mong muốn.

    Ví dụ này, tôi sẽ tạo ứng dụng VB giao diện là skin của Windows Media Player.

    Đầu tiên, bạn mở chương trình Window Media Player (WMP), ở đây tôi dùng phiên bản 10. Chọn một skin tuỳ ý.



    - Nhấn chuột phải lên màn hình desktop, chọn Properties. Trong hộp thoại Dislay Properties chọn thẻ Desktop, trong mục Background chọn None (bạn nên thiết lập hình nền của màn hình Desktop là None để sau này dễ cắt ảnh trong Photoshop).

    - Với cửa sổ WMP ở trên cùng, ấn tổ hợp Alt+PrintScreen để chụp cửa sổ WMP.

    - Mở Photoshop. Tạo một file mới và paste hình vừa chụp vào.

    - Dùng công cụ Magic Wand Tool (W) và Seclection Tool để chọn hình giao diện WMP. Xoá màu nền đi, chỉ giữ lại hình hình máy phát nhạc.

    - Chọn công cụ Paint Bucket Tool. Vào menu Window/Color. Bảng Color cho ta thiết lập màu theo kiểu RGB, do màu tím xuất hiện ít trong hình máy nghe nhạc nên trong bảng Color ta thiết lập ba giá trị R,G,B lần lượt là 255,0,255 (màu tím). (Yêu cầu bạn phải nhập giá trị số vào, nếu bạn chỉnh bằng tay sẽ có sai số làm ảnh hưởng kết quả sau này).


    - Bây giờ bạn lưu nó lại dưới định dạng bitmap (*.BMP).

    - Mở chương trình VB 6.0, tạo một dự án Standard EXE. Trong bảng thuộc tính của Form1 ta thiết lập:

    * Name: bg

    * Autoredraw: True

    * BorderStyle: 0-None

    * Pictures: Ảnh bạn vừa lưu

    - Bạn hãy co giãn form sao cho càng khít với hình skin càng tốt.

    - Thêm một module vào chương trình, trong module khai báo như sau:

    Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

    Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

    Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long,

    ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

    Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long,

    ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode

    As Long) As Long

    Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long)



    As Long

    Public Const RGN_DiFF = 4

    Dim CurRgn, TempRgn As Long

    Public Function AutoFormShape(bg As Form, transColor)

    Dim X, Y As integer

    Tạo vùng cơ sở cho cửa sổ hiện hành

    CurRgn = CreateRectRgn(0, 0, bg.ScaleWidth, bg.ScaleHeight)

    Đi qua từn cột các diểm ảnh trên form

    While Y <= bg.ScaleHeight

    Đi qua từng hàng các điểm ảnh trên form

    While X <= bg.ScaleWidth

    Nếu màu của điểm ảnh trùng với màu ta chọn làm trong suốt thì

    if GetPixel(bg.hdc, X, Y) = transColor Then

    Tạo vùng điểm ảnh tạm thời cho các điểm ảnh này

    TempRgn = CreateRectRgn(X, Y, X + 1, Y + 1)

    Kết hợp diểm ảnh tạm thời và vùng cơ sở ở trên. Dùng hằng số RGN_DiFF = 4 để loại bỏ các điểm ảnh. Bằng cách này sẽ làm cho điểm ảnh này trong suốt

    CombineRgn CurRgn, CurRgn, TempRgn, RGN_DiFF

    Giải phóng tài nguyên hệ thống cấp cho vùng tạm

    DeleteObject (TempRgn)

    End if

    X = X + 1

    Wend

    Y = Y + 1

    X = 0

    Wend

    Thiết lập vùng cửa sổ cho Window

    SetWindowRgn bg.hwnd, CurRgn, True

    Xoá tài nguyên hệ thống cấp cho biến CurRgn

    DeleteObject (CurRgn)

    End Function

    Trong thủ tục Form_Load ta nhập lệnh sau:

    Private Sub Form_Load()

    AutoFormShape Me, RGB(255, 0, 255)

    // Đây là màu thiết lập trong Photoshop

    Me.Show 1

    End Sub




    Đây là bài trên PC world, nó viết bằng VB6, có thể chuyển sang C# hay VB.NET j đó một cách dễ dàng mà

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    0

    Thanks! Đã làm được...

Các đề tài tương tự

  1. Graphic cÁCH Tạo sơ đồ toà nhà có thể tùy biến?
    Gửi bởi motsach89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 23-07-2012, 04:40 PM
  2. tùy biến url đa ngôn ngữ trong asp.net
    Gửi bởi trungqn trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 25-02-2012, 03:42 PM
  3. Graphic Cách tùy biến giao diện Winform tùy thuộc vào nhóm người dùng
    Gửi bởi dailuong trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 19-12-2011, 08:43 PM
  4. Tùy biến thanh tiêu đề form trong C#
    Gửi bởi havuanhle_uel trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 27-05-2011, 08:58 AM
  5. Tạo form có hình dạng tùy biến trong lập trình C#
    Gửi bởi dvbooks trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 25-04-2011, 12:23 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn