ขอคำสั่งดักจับห้ามสิ่งที่ไม่ใช่รูปภาพด้วยค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 1,254   5
URL.หัวข้อ / URL
ขอคำสั่งดักจับห้ามสิ่งที่ไม่ใช่รูปภาพด้วยค่ะ

หนูได้สร้างฟอร์มโดยมีกรอบให้ใส่รูปภาพบุคคลแบบ oleopject ด้วย
ซึ่งไม่กังวลปัญหาเรื่องขนาดไฟล์จะบวม เพราะมันจะมีแค่ 3 เร็คคอร์ดเท่านั้นคือ
1.ข้อมูลประธาน+รูป
2.ข้อมูลรองประธานคนที่1+รูป
3.ข้อมูลรองประธานคนที่2+รูป

วิธีการใช้ก็คือ หนูให้ผู้ใช้ Copy รูปที่ต้องการไว้ก่อน จากนั้นก็มาคลิกที่ปุ่มเพื่อใส่รูป
ในกรอบ ที่ปุ่มดังกล่าวหนูเขียนคำสั่งนี้ไว้ค่ะ

DoCmd.RunCommand acCmdPaste

มันก็ใช้งานตอบสนองได้ดีพอได้ค่ะ แต่ก็ติดปัญหาตรงที่ บางครั้งผู้ใช้ไม่ได้ Copy รูปเอาไว้ แต่เกิดไป Copy สิ่งอื่น เช่น ข้อความ ค้างเอาไว้ในคลิบบอร์ด
ปัญหาก็คือเมื่อคลิกปุ่มใส่รูปมันจะ เกิด Error ขึ้นค่ะ
หนูจึงอยากหาวิธี ทำอย่างไรจะตรวจจับสิ่งที่ผู้ใช้ Copy เอาไว้ว่า ต้องเป็นรูปภาพเท่านั้น ผิดจากนี้ ให้แจ้งเตือน และยกเลิกไม่ Paste สิ่งนั้นลงไปค่ะ

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R14971
วาง code นี้ใน Event ของปุ่มครับ

On Command1_Click()
On Error Goto ErrorHandle

    Docmd.RunCommand acCmdPaste

    Exit Sub

ErrorHandle:
    MsgBox "Error", "ไม่สามารถวางรูปได้ กรุณาตรวจสอบ... Copy ใหม่"

End Sub
2 @R14977
ผมไม่ได้ใช้โค้ดนี้นานแล้ว ใช้เป็นการระบุชื่อไฟล์ ไม่แน่ใจว่าจะใช้ได้หรือเปล่า ลองทำดูครับ

Me.ชื่อคอนโทรล.SourceDoc = "ชื่อพาธและไฟล์"
Me.ชื่อคอลโทรล.Action = acOLECreateEmbed
3 @R14978
แนะนำอย่าง อ.PichaiTC เขียนไว้ก็สะดวกดีครับ
เพิ่มเติมให้แล้วกัน (ถ้าต้องการความยุ่งยากมากขึ้น)
หากต้องการให้เตือนก่อนที่จะเกิด Error เลย เช่น เป็น Caption ของปุ่มเลย ใช้โค๊ดนี้ครับ
1. สร้าง Module ขึ้นใหม่ ใส่โค๊ดดังนี้:
Option Explicit

Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long

Const CF_BITMAP = 2

Public Function Chk_Clipboard() As Boolean
    Dim RetClpB As Long, RetBmp As Long

    RetClpB = OpenClipboard(0&)

    If RetClpB <> 0 Then
        RetBmp = GetClipboardData(CF_BITMAP)
        If RetBmp <> 0 Then
             Chk_Clipboard = True
        Else
            Chk_Clipboard = False
        End If
    End If

    RetClpB = CloseClipboard
End Function


2. บนฟอร์มที่ปุ่ม Command1 ใน Event > On Mouse Move
If Chk_Clipboard Then
    If Me.Command1.Caption <> "Yes Bitmap" Then
        Me.Command1.Caption = "Yes Bitmap"
    End If
Else
    If Me.Command1.Caption <> "No! No!" Then
        Me.Command1.Caption = "No! No!"
    End If
End If

3. ส่วน Event > On Click ที่ปุ่ม Command1
If Me.Command1.Caption = "Yes Bitmap" Then
    DoCmd.RunCommand acCmdPaste
End If

อะไรประมาณนี้ครับ ปรับใช้ดู
4 @R14979
@ อ.สันติสุข โค๊ดใช้ได้เหมือนกันครับ

สรุปตัวอย่าง:
(รูปแบบสำหรับพาธไฟล์)
Me.ชื่อคอนโทรล.SourceDoc = "ชื่อพาธและไฟล์"
Me.ชื่อคอลโทรล.Action = acOLECreateEmbed

(รูปแบบสำหรับ Clipboard)
Me.ชื่อคอนโทรล.SetFocus
RunCommand acCmdPaste
5 @R14992
เยี่ยมเลยค่ะอาจารย์
ขอขอบคุณอาจารย์ทั้งสามท่านนะคะ

-ตอนแรกก็ลองใช้แบบของอาจารย์ PichaiTC ก็สามารถแจ้งเตือนได้ตามต้องการ
-กรณีของอาจารย์สันติสุข หนูไม่เข้าใจตรง = "ชื่อพาธและไฟล์" จึงไม่ได้ทดสอบ
-ถัดมาก็ลองใช้แบบที่ยุ่งยากของอาจารย์ TTT ดู ผลออกมาแล้วชอบค่ะ
-สรุปคือ ขอเลือกใช้แบบของอาจารย์ TTT นะคะ

ขอขอบคุณอาจารย์ทั้งสามท่านอย่างยิ่งค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3639s