กระทู้เก่าบอร์ด อ.Yeadram
1,254 5
URL.หัวข้อ /
URL
ขอคำสั่งดักจับห้ามสิ่งที่ไม่ใช่รูปภาพด้วยค่ะ
หนูได้สร้างฟอร์มโดยมีกรอบให้ใส่รูปภาพบุคคลแบบ oleopject ด้วย
ซึ่งไม่กังวลปัญหาเรื่องขนาดไฟล์จะบวม เพราะมันจะมีแค่ 3 เร็คคอร์ดเท่านั้นคือ
1.ข้อมูลประธาน+รูป
2.ข้อมูลรองประธานคนที่1+รูป
3.ข้อมูลรองประธานคนที่2+รูป
วิธีการใช้ก็คือ หนูให้ผู้ใช้ Copy รูปที่ต้องการไว้ก่อน จากนั้นก็มาคลิกที่ปุ่มเพื่อใส่รูป
ในกรอบ ที่ปุ่มดังกล่าวหนูเขียนคำสั่งนี้ไว้ค่ะ
DoCmd.RunCommand acCmdPaste
มันก็ใช้งานตอบสนองได้ดีพอได้ค่ะ แต่ก็ติดปัญหาตรงที่ บางครั้งผู้ใช้ไม่ได้ Copy รูปเอาไว้ แต่เกิดไป Copy สิ่งอื่น เช่น ข้อความ ค้างเอาไว้ในคลิบบอร์ด
ปัญหาก็คือเมื่อคลิกปุ่มใส่รูปมันจะ เกิด Error ขึ้นค่ะ
หนูจึงอยากหาวิธี ทำอย่างไรจะตรวจจับสิ่งที่ผู้ใช้ Copy เอาไว้ว่า ต้องเป็นรูปภาพเท่านั้น ผิดจากนี้ ให้แจ้งเตือน และยกเลิกไม่ Paste สิ่งนั้นลงไปค่ะ
ซึ่งไม่กังวลปัญหาเรื่องขนาดไฟล์จะบวม เพราะมันจะมีแค่ 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
2 @R14977
ผมไม่ได้ใช้โค้ดนี้นานแล้ว ใช้เป็นการระบุชื่อไฟล์ ไม่แน่ใจว่าจะใช้ได้หรือเปล่า ลองทำดูครับ
Me.ชื่อคอนโทรล.SourceDoc = "ชื่อพาธและไฟล์"
Me.ชื่อคอลโทรล.Action = acOLECreateEmbed
Me.ชื่อคอนโทรล.SourceDoc = "ชื่อพาธและไฟล์"
Me.ชื่อคอลโทรล.Action = acOLECreateEmbed
3 @R14978
แนะนำอย่าง อ.PichaiTC เขียนไว้ก็สะดวกดีครับ
เพิ่มเติมให้แล้วกัน (ถ้าต้องการความยุ่งยากมากขึ้น)
หากต้องการให้เตือนก่อนที่จะเกิด Error เลย เช่น เป็น Caption ของปุ่มเลย ใช้โค๊ดนี้ครับ
1. สร้าง Module ขึ้นใหม่ ใส่โค๊ดดังนี้:
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
อะไรประมาณนี้ครับ ปรับใช้ดู
เพิ่มเติมให้แล้วกัน (ถ้าต้องการความยุ่งยากมากขึ้น)
หากต้องการให้เตือนก่อนที่จะเกิด 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
สรุปตัวอย่าง:
(รูปแบบสำหรับพาธไฟล์)
Me.ชื่อคอนโทรล.SourceDoc = "ชื่อพาธและไฟล์"
Me.ชื่อคอลโทรล.Action = acOLECreateEmbed
(รูปแบบสำหรับ Clipboard)
Me.ชื่อคอนโทรล.SetFocus
RunCommand acCmdPaste
5 @R14992
เยี่ยมเลยค่ะอาจารย์
ขอขอบคุณอาจารย์ทั้งสามท่านนะคะ
-ตอนแรกก็ลองใช้แบบของอาจารย์ PichaiTC ก็สามารถแจ้งเตือนได้ตามต้องการ
-กรณีของอาจารย์สันติสุข หนูไม่เข้าใจตรง = "ชื่อพาธและไฟล์" จึงไม่ได้ทดสอบ
-ถัดมาก็ลองใช้แบบที่ยุ่งยากของอาจารย์ TTT ดู ผลออกมาแล้วชอบค่ะ
-สรุปคือ ขอเลือกใช้แบบของอาจารย์ TTT นะคะ
ขอขอบคุณอาจารย์ทั้งสามท่านอย่างยิ่งค่ะ
ขอขอบคุณอาจารย์ทั้งสามท่านนะคะ
-ตอนแรกก็ลองใช้แบบของอาจารย์ PichaiTC ก็สามารถแจ้งเตือนได้ตามต้องการ
-กรณีของอาจารย์สันติสุข หนูไม่เข้าใจตรง = "ชื่อพาธและไฟล์" จึงไม่ได้ทดสอบ
-ถัดมาก็ลองใช้แบบที่ยุ่งยากของอาจารย์ TTT ดู ผลออกมาแล้วชอบค่ะ
-สรุปคือ ขอเลือกใช้แบบของอาจารย์ TTT นะคะ
ขอขอบคุณอาจารย์ทั้งสามท่านอย่างยิ่งค่ะ
Time: 0.3639s
On Command1_Click()
On Error Goto ErrorHandle
Docmd.RunCommand acCmdPaste
Exit Sub
ErrorHandle:
MsgBox "Error", "ไม่สามารถวางรูปได้ กรุณาตรวจสอบ... Copy ใหม่"
End Sub