เปิดฟอร์มเริ่มต้นแล้วให้ minimize windows
กระทู้เก่าบอร์ด อ.Yeadram

 2,863   8
URL.หัวข้อ / URL
เปิดฟอร์มเริ่มต้นแล้วให้ minimize windows

หนูสร้างฟอร์มเริ่มต้นเอาไว้ขณะเริ่มเปิดโปรแกรม
หากนำโปรแกรมไปเก็บอยู่ในโฟลเดอร์ ก็จะต้องเปิดเข้าโฟลเดอร์นั้นก่อน จากนั้นจึงเปิดโปรแกรม

ปัญหาก็คือ เมื่อเปิดโปรแกรมแล้ว หน้าต่างของฟอร์มเริ่มต้น มันจะไปแอบอยู่หลังหน้าต่างของโฟลเดอร์ ต้อง minimize หน้าต่างโฟลเดอร์จึงจะเห็นหน้าต่างฟอร์มเริ่มต้น บางครั้งผู้ใช้เข้าใจผิด คิดว่าโปแรมยังไม่ได้เปิด จึงเปิดซ้ำเข้าไปอีก เป็นเช่นนี้อยู่บ่อยๆ

เบื้องต้น หนูแก้ปัญหาโดยทำชอร์ตคัดไฟล์โปรแกรมไปไว้ที่เดสค์ท็อป จะได้ไม่ต้องเปิดโฟลเดอร์ แต่ก็อาจเจอปัญหาอีก หากผู้ใช้ย้ายโปรแกรมไปอยู่โฟลเดอร์อื่น ก็ต้องทำชอร์ตคัดกันใหม่

หนูจึงอยากได้วิธีว่า เมื่อเปิดโปรแกรมแล้ว ให้มันสั่ง Minimize หน้าต่างโฟลเดอร์ไปด้วย แต่ก็ยังให้สามารถ Restore หน้าต่างโฟลเดอร์กลับมาใช้ได้หากต้องการ

ขอรบกวนอาจารย์ด้วยนะคะ

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

1 @R15386
เพิ่มเติมค่ะ

ที่ event ขณะเปิดฟอร์มเริ่มต้น
หนูใส่คำสั่ง DoCmd.RunCommand acCmdAppMinimize
เพื่อต้องการให้ย่อหน้าต่าง Access ลงไป
แล้วตั้งค่าฟอร์มให้เป็นแบบ "ผุดขัน" เพื่อให้โชว์เฉพาะหน้าต่างฟอร์ม ลอยอยู่อย่างเดียว โดยไม่มีหน้าต่าง Access อยู่ข้างหลัง
2 @R15388
ปกติเวลาเราเปิดโปรแกรมจาก Windows Explorer โปรแกรมนั้นจะอยู่ในลำดับหน้าสุด ถ้าเปิดโปรแกรมอื่นที่ไม่ใช่ Access โปรแกรมนั้นจะมีปัญหาเหมือนกันหรือไม่ ถ้ามี ปัญหาคงเป็นที่ตัว Windows Explorer หรือไม่ก็ระบบ Windows เอง แนะนำให้หาโปรแกรมพวก "Always On Top" มาลง แล้วกำหนดให้ Windows Explorer เป็น On Top แล้วก็ยกเลิกไม่ให้ On Top อีกที แล้วลองดูว่าเมื่อเรียกโปรแกรม Access ตามวิธีเดิม ยังจะเกิดปัญหาอีกหรือไม่
3 @R15389
คุณมาลี ขอเมลหน่อย จะส่งตัวอย่างไปให้ดู ไม่รู้ว่าใช่แบบที่บอกปล่าว
4 @R15396
เรียน อ.สันติสุข
หากไม่ใช้คำสั่ง DoCmd.RunCommand acCmdAppMinimize เพื่อยุบหน้าต่าง Access ปัญหาดังกล่าวก็ไม่เกิดค่ะ คือเมื่อเปิดแล้วมันก็จะอยู่หน้าสุดตามปกติ
แต่หากใช้คำสั่ง DoCmd.RunCommand acCmdAppMinimize เพื่อจะให้เฉพาะฟอร์มเริ่มต้น มันลอยอยู่โดดๆ ก็จะเกิดอาการดังกล่าวค่ะ (ได้อย่างเสียอย่าง)
หนูจึงอยากหาวิธียุบหน้าต่าง Explorer ลงไปพร้อมกับหน้าต่าง Access ด้วย

หากไม่สามารถทำได้ งั้นขอเป็นวิธี เขียนคำสั่งให้สร้างชอร์ตคัตโปรแกรมไปที่เดสก์ท็อป ก็ได้ค่ะ

เรียน อ. Un
e-mail หนู = sumaleeku@hotmail.com ค่ะ
5 @R15398
ลองวิธีนี้ครับ เพื่อซ่อนวินโดว์หลักของตัว Access เอง ใช้ parameter SW_HIDE นะครับ http://www.thai-access.com/yeadram_view.php?topic_id=62
6 @R15399
เรียน อ.สันติสุข
หนูตามเข้าไปดูแล้ว ยังไม่ทราบวิธีนำไปใช้ค่ะ
แต่ก็ได้ข้อสังเกตมาใหม่คือ
การที่ฟอร์อมเริ่มต้นมันไม่อยู่ข้างหน้าสุด เพราะขณะนั้นฟอร์มมันไม่แอ็คทีฟ
เพราะหากเราไปคลิกที่ฟอร์ม มันก็จะเด้งมาอยู่ข้างหน้าได้ทันที
อาจเป็นผลจากคำสั่ง DoCmd.RunCommand acCmdAppMinimize หรือเปล่าคะ
ขอคำแนะนำด้วยค่ะอาจารย์
7 @R15401
อื่ม! เพิ่งรู้เหมือนกันว่ามีเทคนิคแบบนี้ด้วย ขอบคุณครับ
ตอบคำถามนะครับ
- ผมลองทำตามวิธีที่คุณบอก เป็นอย่างที่ว่าจริงครับคือ หน้าต่าง Pop Up มันจะไม่ Active ขึ้นมาอยู่หน้าสุดของหน้าต่างตัวอื่น เพราะจริงๆแล้วหน้าต่างตัวที่ Active นั้นเป็นหน้าต่างของ MS Access ซึ่งได้ย่อยลงใน Task Bar ไปแล้ว ทำให้เวลาเรียกเปิดไฟล์ Pop Up จะแอบอยู่ด้านหลังหน้าต่างอื่นๆเสมอ
- วิธีแก้ ลองใช้การ Call API แบบ On Top ดูครับ
1. สร้าง Module ใหม่ (หรือจริงๆ เขียนในฟอร์มเลยก็ได้ ถ้าไม่ต้องการให้กำหนดเป็น Public) ดังนี้:
'----------------Declarations Section----------------
Option Explicit
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1

Public Sub On_Top(ByVal lhWnd As Long)
SetWindowPos lhWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub

Public Sub NotOn_Top(ByVal lhWnd As Long)
SetWindowPos lhWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub


2. ที่ฟอร์ม Event > On Open:
Private Sub Form_Open(Cancel As Integer)
    DoCmd.RunCommand acCmdAppMinimize ' โค๊ดที่คุณใช้อยู่
    On_Top (Application.hWndAccessApp)
End Sub


3. พื้นที่ฟอร์ม(Detail) Event > On Paint: สำหรับการยกเลิก On Top เมื่อหน้าต่าง Active ขี้นมาหน้าสุดแล้ว
Private Sub Detail_Paint()
    NotOn_Top (Application.hWndAccessApp)
End Sub


ประมาณนี้ลองดูครับ
ส่วนเรื่องสร้าง Shortcut ผมเคยตอบคุณไปแล้วนะครับ ดูที่นี่ครับ
http://www.thai-access.com/yeadram_view.php?topic_id=2614
8 @R15404
ขอขอบคุณในทุกความช่วยเหลือจากอาจารย์ทุกท่านนะคะ
ตลอดจนไฟล์ตัวอย่างของ อ.Un หนูได้รับแล้วค่ะ

เรื่องการสร้างชอร์ตคัตที่ อ. TTT เคยตอบไว้เมื่อนานมาแล้วนั้น
พอดีช่วงนั้นหนูยังทำไม่สำเร็จ แล้วงานมันมากก็เลยหยุดพักไว้ก่อน
จนกระทั่งลืมไปเลย เดี๋ยวจะขอกลับไปลองทำดูใหม่ คราวนี้น่าจะได้ล่ะ

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