ยินดีต้อนรับแขกผู้มาเยือน กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?
 
Please Login!

ผู้เขียน หัวข้อ: ขอแนวคิดการสร้างโปรแกรมในรูปแบบนี้หน่อยนะครับ  (อ่าน 2685 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
คือผมเองตั้งที่จะทำโปรแกรม Karaoke ขึ้นมาใช้งานเลยลองศึกษาหาข้อมูล
ทั้งไทยและเทศจนตอนนี้โปรแกรมเองก็ค่อยๆเดินหน้าไปเลยๆแต่ก็ยังไม่ใช่ที่ต้องการและยังขาดสิ่งสำคัญ
ในโปรแกรมอยู่หลายจุด เหอะเหอะ เลยอยากจะมาขอคำแนะนำจากท่านทั้งหลายหน่อยนะครับ
พอดีเจอโปรแกรมตามร้าน Karaoke เขามีรูปแบบการแสดงผล แบบนี้


คือหน้าทางคอมที่ให้ผู้ใช้ใช้งานในการเลือกเพลงนั้น 
จะมี หน้าจอของการแสดง Video เพลงที่เล่นอยู่ด้วยไปพร้อมกับ จอทางTV ที่ต่อการแสดงผลออกไปด้วย
 ลองทำมาได้แค่แสดงผลได้อันเดียว สองอันทำไม่ได้ ซะที ครับ


ผมใช้ Picturebox ในการแสดงผล Video ผ่านทาง Function mciSendString Lib "winmm.dll" ครับ
 เลยอยากทราบว่าพอจะทำให้ การแสดงผลผ่าน Picturebox ทำแบบในรูปได้หรือเปล่าครับ

และอีกข้อที่ผมยังทำไม่ได้เลย คือการ ตัดเสียงครับ ไม่ทราบว่าพอจะแนะนำให้ได้ หรือเปล่าครับ
 ตัดแบบ Karaoke ที่แยก เสียงร้องออกได้ และกดให้เสียงร้องกลับมาได้
อันนี้ พยายามหามานานล่ะครับ ยังไม่เจอที่ต้องการเลย

ผมใช้โปรแกรม Visual Basic 2010 ผ่านทาง .Net ครับ
ปล. เว็บนี้ผมเจอนานล่ะแต่สมัครไม่ได้เพราะปิดการรับสมัครไว้ ตอนนั้นเจอ
 ท่านหนึ่งที่ผมรู้สึกประทับใจมากท่าน sak2005 ที่ให้ความรู้และแนวทางหลายๆอย่าง จนตอนนี้ผมสมัครได้แล้วรู้สึกดีใจมากที่จะได้
 มาขอคำแนะนำหรือแนวทางจากท่านทั้งหลายในเว็บนี้ หวังว่าท่าน sak2005 คงจะเข้ามาดูและช่วยแนะนำผมบางนะครับ
ครับพระคุณทุกท่านไว้ ณ ที่นี้ด้วยนะครับ
Coolfirmed by (1)สมาชิก:
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2012, 19:11:49 โดย hunterhoo »

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
ที่ปรึกษาของท่าน คือ ทุกๆคนที่มีความรู้ความสามารถ ไม่ใช่ผมคนเดียว ขอบคุณในความประทับใจของท่าน

ช่วยๆกันตอบนะครับ ไม่ใช่รอคำตอบจากผมเท่านั้น
Coolfirmed by (2)สมาชิก:
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
ที่ปรึกษาของท่าน คือ ทุกๆคนที่มีความรู้ความสามารถ ไม่ใช่ผมคนเดียว ขอบคุณในความประทับใจของท่าน

ช่วยๆกันตอบนะครับ ไม่ใช่รอคำตอบจากผมเท่านั้น

 |n1:| 
ไหนๆก็ไหนแล้ว ท่านครับ Code นี้ผมใช้ ในการทำให้แสดงผลแบบสองจอ อยู่แต่ผมอยากทราบว่ามันมี
 วิธีการกำหนดให้แสดงผลแบบ 2 จอ แบบอื่นไหมครับ เพราะผมอยากใช้ต่อออกทีวีด้วย แค่อยากให้ออกไปเฉพาะส่วน เช่น pictureBox ที่ใช้เล่น Video อย่างเดียว โดยไม่ผ่านทาง Form ได้ไหมครับ ประมาณนี้ครับ  |n11:|
โค๊ด: [Select]
Public Class test
Public Sub test_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim screen As Screen       
        screen = screen.AllScreens(1)       
        Form1.StartPosition = FormStartPosition.Manual       
        Form1.Location = screen.Bounds.Location + New Point(100, 100)
        Form1.WindowState = FormWindowState.Maximized
        Form1.Show()
        Me.Select()

Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 08 สิงหาคม 2012, 21:58:56 โดย hunterhoo »

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
PictureBox มีไว้ใช้แสดงผล Graphic Image ไม่สามารถแสดงผล Video ได้
เพราะไม่ซัพพอร์ท Type แต่อาจใช้แสดงผลตัวอักษรเนื้อร้องได้ (Draw Image)
ถ้าต้องการแสดงผล Video ต้องใช้ Media Player (Com.net) หรือ อื่นๆที่ซัพพอร์ท Video Type (สกุลไฟล์)
----------------------------------------------------------------------------------------------------------------
Download: Karaoke Cafe โปรดรอ..

Example: On TV
โค๊ด: [Select]
Public Class Form1
    Private fLeft, fTop, fWidth, fHeight As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        fLeft = My.Computer.Screen.WorkingArea.X
        fTop = My.Computer.Screen.WorkingArea.Y
        fWidth = My.Computer.Screen.WorkingArea.Width
        fHeight = My.Computer.Screen.WorkingArea.Height
        Me.Bounds = New Rectangle(fLeft - 20, fTop - 30, fWidth + 50, fHeight + 50)
        'Label1.Location = New Point(fLeft + 945, fTop + 280)
        Label1.Location = New Point(fLeft + 945, fTop + 40)
        AxWindowsMediaPlayer1.Bounds = New Rectangle(fLeft + 715, fTop + 20, fWidth / 3 - 50, fHeight / 3 + 35)
        AxWindowsMediaPlayer1.Location = New Point(fLeft + 715, fTop - 220)
    End Sub
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
        OpenFileDialog1.FileName = Nothing
        OpenFileDialog1.Filter = "Media File(*.mp3;*.dat)|*.mp3;*.dat|All File(*.*)|*.*"
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim mediaFile As String = OpenFileDialog1.FileName
            AxWindowsMediaPlayer1.URL = mediaFile
            OpenFileDialog1.FileName = Nothing
            AxWindowsMediaPlayer1.Bounds = New Rectangle(fLeft + 715, fTop + 20, fWidth / 3 - 50, fHeight / 3 + 35)
            Label1.Location = New Point(fLeft + 945, fTop + 280)
        End If
    End Sub
    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        ContextMenuStrip1.Items.Clear()
        ContextMenuStrip1.Items.Add("Exit")
        e.Cancel = False
    End Sub
    Private Sub ContextMenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
        If e.ClickedItem.Text = "Exit" Then
            Me.Close()
        End If
    End Sub
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
        Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
        e.Graphics.DrawString("RightClick to quit", TextFont, TextBrush, 300, 300)
        TextFont.Dispose()
        TextBrush.Dispose()
    End Sub
End Class



Coolfirmed by (1)สมาชิก:
« แก้ไขครั้งสุดท้าย: 09 สิงหาคม 2012, 18:23:19 โดย sak2005 »
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
PictureBox มีไว้ใช้แสดงผล Graphic Image ไม่สามารถแสดงผล Video ได้
เพราะไม่ซัพพอร์ท Type แต่อาจใช้แสดงผลตัวอักษรเนื้อร้องได้ (Draw Image)
ถ้าต้องการแสดงผล Video ต้องใช้ Media Player (Com.net) หรือ อื่นๆที่ซัพพอร์ท Video Type (สกุลไฟล์)
----------------------------------------------------------------------------------------------------------------
Download: Karaoke Cafe โปรดรอ..

Example: On TV
โค๊ด: [Select]
Public Class Form1
    Private fLeft, fTop, fWidth, fHeight As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        fLeft = My.Computer.Screen.WorkingArea.X
        fTop = My.Computer.Screen.WorkingArea.Y
        fWidth = My.Computer.Screen.WorkingArea.Width
        fHeight = My.Computer.Screen.WorkingArea.Height
        Me.Bounds = New Rectangle(fLeft - 20, fTop - 30, fWidth + 50, fHeight + 50)
        'Label1.Location = New Point(fLeft + 945, fTop + 280)
        Label1.Location = New Point(fLeft + 945, fTop + 40)
        AxWindowsMediaPlayer1.Bounds = New Rectangle(fLeft + 715, fTop + 20, fWidth / 3 - 50, fHeight / 3 + 35)
        AxWindowsMediaPlayer1.Location = New Point(fLeft + 715, fTop - 220)
    End Sub
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
        OpenFileDialog1.FileName = Nothing
        OpenFileDialog1.Filter = "Media File(*.mp3;*.dat)|*.mp3;*.dat|All File(*.*)|*.*"
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim mediaFile As String = OpenFileDialog1.FileName
            AxWindowsMediaPlayer1.URL = mediaFile
            OpenFileDialog1.FileName = Nothing
            AxWindowsMediaPlayer1.Bounds = New Rectangle(fLeft + 715, fTop + 20, fWidth / 3 - 50, fHeight / 3 + 35)
            Label1.Location = New Point(fLeft + 945, fTop + 280)
        End If
    End Sub
    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        ContextMenuStrip1.Items.Clear()
        ContextMenuStrip1.Items.Add("Exit")
        e.Cancel = False
    End Sub
    Private Sub ContextMenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
        If e.ClickedItem.Text = "Exit" Then
            Me.Close()
        End If
    End Sub
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
        Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
        e.Graphics.DrawString("RightClick to quit", TextFont, TextBrush, 300, 300)
        TextFont.Dispose()
        TextBrush.Dispose()
    End Sub
End Class




|n4:| ขอบคุณครับกลับแนวทางนี้ ผมจะลองนำไปเป็นแนวทางในการพัฒนาโปรแกรมต่อไปครับ

ปล.พอจะมีวิธีตัดเสียงแบบไม่ให้มันออกข้างเดียวหรือเปล่าครับ ลองใช้ Bass.dll แต่ งง มากครับ ค่อยจะเข้าใจในโครงสร้างเท่าไหร่เลย เหอะเหอะ
Coolfirmed by (1)สมาชิก:

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
เข้าใจว่า BASS.dll ถูกเขียนขึ้นด้วยภาษา C++ ซึ่งจะไม่สามารถถอดรหัสไฟล์ได้

เลยไม่รู้ว่าเขียนขึ้นด้วยพื้นฐานคำสั่งใดของวินโดว์

ก็ได้แต่เรียกใช้งานฟังก์ชั่นคำสั่งที่เขียนไว้ให้ใช้เท่านั้น

ถ้าเขียนหรือสร้างไฟล์ dll ด้วยภาษา VB.net หรือ C# จะสามารถถอดรหัสไฟล์ได้
Coolfirmed by (1)สมาชิก:
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
เข้าใจว่า BASS.dll ถูกเขียนขึ้นด้วยภาษา C++ ซึ่งจะไม่สามารถถอดรหัสไฟล์ได้

เลยไม่รู้ว่าเขียนขึ้นด้วยพื้นฐานคำสั่งใดของวินโดว์

ก็ได้แต่เรียกใช้งานฟังก์ชั่นคำสั่งที่เขียนไว้ให้ใช้เท่านั้น

ถ้าเขียนหรือสร้างไฟล์ dll ด้วยภาษา VB.net หรือ C# จะสามารถถอดรหัสไฟล์ได้

และระหว่าง libZPlay.dll SDK 2.02 อันไหนน่าจะรองรับการใช้งาน EQ ได้มากกว่ากันครับ เพราะผมไม่แน่ใจในติดตั้ง เขาว่าให้ทำแบบนี้ ไม่ค่อยแตกฉานในภาษาอังกฤษ แน่ยังไม่แน่ใจว่าที่ทำมันถูกหรือเปล่า มันควรจะมีขั้นตอนแบบไหนบางครับ

เขาบอกว่าให้ทำแบบนี้ ผมลองทำตามเขาแล้วแต่ยังติดใจลึกๆว่าทำถูกหรือเปล่า ถ้าได้คำแนะนำเป็นภาษาไทยคงจะมั่นใจกว่านี้ว่าถูกหรือผิด เหอะเหอะ สงสัยมากโดยเฉพาะ ข้อ 3 ,5 ,6

อ้างถึง
=======================================================================
=======================================================================

How to use libZPlay with Visual Basic .NET

=======================================================================
=======================================================================

1. Add libZPlay.vb to your solution/project.

   Add->Existing Item... ->libZPlay.vb

=======================================================================


2. Add reference to System.Drawing if not included yet.
   
   Add Reference-> .NET ->System.Drawing

=======================================================================


3. Include libZPlay namespace into your source code

   Imports MyApplication.libZPlay

=======================================================================


4. Create ZPlay class.

   Dim player As New ZPlay()

=======================================================================


5. Open file.

   If player.OpenFile("test.mp3", TStreamFormat.sfAutodetect) = False Then
     '' error
   End If

=======================================================================


6. Start playing

   player.StartPlayback()

=======================================================================


7. At the end destroy ZPlay class (by garbage collector or manually).


=======================================================================
NOTE:
=======================================================================

You must distribute libzplay.dll with your application.
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
1. เขาบอกว่าให้นำคำสั่งที่เขียนเป็น Class.vb ไว้แล้ว เข้ามาใน Project (Form Application) ของท่านที่กำลังเริ่มต้นสร้าง

หมายถึง ให้ท่านสร้างฟอร์มขึ้นมาก่อน จากนั้นให้ท่านนำเข้าหรือติดตั้ง Class.vb ที่เขียนเตรียมไว้แล้วเข้าไป (ไม่ใช่สร้างคลาสใหม่)

2. ถ้าใน Referents ไม่มีคำสั่ง System Drawing ก็ให้นำคำสั่งนี้ออกมาใช้งาน

3. ที่หัว Class Form ให้อ้างคำสั่ง  Imports MyApplication.libZPlay ด้วย

ไม่งั้น จะไม่สามารถเชื่อมต่อคำสั่งระหว่าง ClassForm และ ClassLip ได้

4 ,5, 6. เขียนคำสั่งเรียกใช้งาน ClassLip

อย่าลืมนำไฟล์ Dll เข้าไปวางไว้ใน debug folder ด้วยนะครับ หรือ referents ได้ก็ referents เข้าไป
Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 10 สิงหาคม 2012, 21:12:48 โดย sak2005 »
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
1. เขาบอกว่าให้นำคำสั่งที่เขียนเป็น Class.vb ไว้แล้ว เข้ามาใน Project (Form Application) ของท่านที่กำลังเริ่มต้นสร้าง

หมายถึง ให้ท่านสร้างฟอร์มขึ้นมาก่อน จากนั้นให้ท่านนำเข้าหรือติดตั้ง Class.vb ที่เขียนเตรียมไว้แล้วเข้าไป (ไม่ใช่สร้างคลาสใหม่)

2. ถ้าใน Referents ไม่มีคำสั่ง System Drawing ก็ให้นำคำสั่งนี้ออกมาใช้งาน

3. ที่หัว Class Form ให้อ้างคำสั่ง  Imports MyApplication.libZPlay ด้วย

ไม่งั้น จะไม่สามารถเชื่อมต่อคำสั่งระหว่าง ClassForm และ ClassLip ได้

4 ,5, 6. เขียนคำสั่งเรียกใช้งาน ClassLip

อย่าลืมนำไฟล์ Dll เข้าไปวางไว้ใน debug folder ด้วยนะครับ หรือ referents ได้ก็ referents เข้าไป

ขอบพระคุณครับ แสดงว่ามาถูกทาง นึกว่าจะหลงเข้าป่าเข้าดงไปซะอีก อิอิ

ปล.ยังรอคำชี้แนะที่เหลือ ต่ออยู่นะครับ อิอิ
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
เท่าที่เห็น เขามักจะเขียน Class.vb เรียกใช้งาน ไฟล์ wmp.dll ที่อยู่ใน System32 ออกมาใช้งาน

ถ้าท่านรู้โครงสร้างคำสั่งที่อยู่ในไฟล์  wmp.dll ท่านจะสามารถสร้างโปรแกรม เลียนแบบอินเทอร์เฟส Windows Media Player ได้สบาย

เสียดายที่โปรแกรม Media Player ต่างๆ มักเขียนขึ้นด้วยภาษา C# ซึ่งค่อนข้างเขียนและทำความเข้าใจยาก

เวลาที่ผม Decompile เป็น VB.net มักจะมี Error! ให้ต้องแก้ไขมากมาย แก้ได้บ้าง ไม่ได้บ้าง
Coolfirmed by (0)สมาชิก:
 
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
เท่าที่เห็น เขามักจะเขียน Class.vb เรียกใช้งาน ไฟล์ wmp.dll ที่อยู่ใน System32 ออกมาใช้งาน

ถ้าท่านรู้โครงสร้างคำสั่งที่อยู่ในไฟล์  wmp.dll ท่านจะสามารถสร้างโปรแกรม เลียนแบบอินเทอร์เฟส Windows Media Player ได้สบาย

เสียดายที่โปรแกรม Media Player ต่างๆ มักเขียนขึ้นด้วยภาษา C# ซึ่งค่อนข้างเขียนและทำความเข้าใจยาก

เวลาที่ผม Decompile เป็น VB.net มักจะมี Error! ให้ต้องแก้ไขมากมาย แก้ได้บ้าง ไม่ได้บ้าง

แม้แต่ .net ด้วยกันเองก็ยังเจอปัญหาเรื่อง เวอร์ชัน ของรุ่น และเครื่องเข้ามาทำให้ปวดหัวได้หลายครั้งเลยครับ  |n8:|
แต่ก็น่าแปลกทั้งที่โครงสร้างใกล้กัน แต่ทำไมไม่ชอบ C# ก็ไม่รู้หลายครั้ง ที่ถูกถามว่าทำไมไม่เลือกพัฒนา C# จนทุกวันนี้ผมก็ยังไม่มีคำตอบในเรื่องนี้เลย เหอะเหอะ :f2:
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
อันนี้ผมถอดรหัสไฟล์ WMPLib.dll นำฟังก์ชั่นคำสั่งออกมาใช้บางส่วน
และใช้เวลาเขียนออกมาเป็นโปรแกรมสำหรับฟังเพลง ในเวลาไม่นานนัก
ท่านลองนำไปศึกษาดู ติดขัดตรงไหนก็โฟสท์ถาม

WMP Player
โค๊ด: [Select]
Public Class Form1
    Private button1 As New System.Windows.Forms.Button
    Private button2 As New System.Windows.Forms.Button
    Private button3 As New System.Windows.Forms.Button
    Private fdlg As New System.Windows.Forms.OpenFileDialog
    Private label1 As New System.Windows.Forms.Label
    Private label2 As New System.Windows.Forms.Label
    Private label3 As New System.Windows.Forms.Label
    Private label4 As New System.Windows.Forms.Label
    Private label5 As New System.Windows.Forms.Label
    Private media As New WMPLib.WindowsMediaPlayer
    Private timer1 As New System.Windows.Forms.Timer
    Private fileName As String
    Public Sub New()
        InitializeComponent()
        Me.CenterToScreen()
        Me.Size = New Size(300, 170)
        Me.Text = "WMP Player"
        Me.MaximizeBox = False
        Me.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
        button1.Text = "Open"
        button2.Text = "Pause"
        button3.Text = "Stop"
        button1.Cursor = Cursors.Hand
        button2.Cursor = Cursors.Hand
        button3.Cursor = Cursors.Hand
        label1.Text = "00:00"
        label2.Text = "00:00"
        label3.Text = "No Song"
        label4.Text = "Stopped"
        label5.Text = "0%"
        button1.Location = New System.Drawing.Point(27, 100)
        button2.Location = New System.Drawing.Point(107, 100)
        button3.Location = New System.Drawing.Point(187, 100)
        label1.Location = New System.Drawing.Point(30, 10)
        label2.Location = New System.Drawing.Point(225, 10)
        label3.Location = New System.Drawing.Point(90, 43)
        label4.Location = New System.Drawing.Point(110, 68)
        label5.Location = New System.Drawing.Point(130, 10)
        Me.Controls.AddRange(New Control() _
                            {button1, button2, button3, _
                             label1, label2, label3, label4, label5})
        AddHandler button1.Click, AddressOf Button1_Click
        AddHandler Button2.Click, AddressOf Button2_Click
        AddHandler button3.Click, AddressOf Button3_Click
        AddHandler timer1.Tick, AddressOf Timer1_Tick
        timer1.Enabled = False
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Button2.Text = "Resume" Then Button2.Text = "Pause"
        LoadPlaySound()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        SoundPause()
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If button2.Text = "Resume" Then button2.Text = "Pause"
        SoundStop()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        label1.Text = media.currentMedia.durationString
        label2.Text = media.controls.currentPositionString
        label5.Text = Math.Round((media.controls.currentPosition / media.currentMedia.duration) * 100, 0) & "%"
        Select Case media.playState
            Case WMPLib.WMPPlayState.wmppsPlaying
                label4.Text = "Playing.."
            Case WMPLib.WMPPlayState.wmppsPaused
                label4.Text = "Paused"
            Case WMPLib.WMPPlayState.wmppsStopped
                label2.Text = "00:00"
                label4.Text = "Song end"
                label5.Text = "0%"
        End Select
    End Sub
    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If timer1.Enabled = True Then timer1.Enabled = False
        media.close()
    End Sub
    Public Sub LoadPlaySound()
        Select Case button1.Text
            Case "Open"
                fdlg.FileName = ""
                fdlg.Filter = "Media Files(*.mp3;*.wav)|*.mp3;*.wav|All files(*.*)|*.*"
                If fdlg.ShowDialog = Windows.Forms.DialogResult.OK Then
                    fileName = fdlg.FileName
                    button1.Text = "Play"
                    label3.Text = My.Computer.FileSystem.GetName(fileName)
                Else
                    If fileName = Nothing Then Exit Sub
                    button1.Text = "Play"
                End If
            Case "Play"
                media.URL = fileName
                timer1.Enabled = True
        End Select
    End Sub
   Public Sub SoundPause()
        Select Case button2.Text
            Case "Pause"
                If media.playState = WMPLib.WMPPlayState.wmppsPlaying Then
                    media.controls.pause()
                    button2.Text = "Resume"
                End If
            Case "Resume"
                If media.playState = WMPLib.WMPPlayState.wmppsPaused Then
                    media.controls.play()
                    button2.Text = "Pause"
                End If
        End Select
    End Sub
    Public Sub SoundStop()
        Select Case media.playState
            Case WMPLib.WMPPlayState.wmppsPaused
                label2.Text = "00:00"
                label4.Text = "Stopped"
                label5.Text = "0%"
                button1.Text = "Open"
                timer1.Enabled = False
            Case WMPLib.WMPPlayState.wmppsPlaying
                media.controls.stop()
                label2.Text = "00:00"
                label4.Text = "Stopped"
                label5.Text = "0%"
                button1.Text = "Open"
                timer1.Enabled = False
            Case WMPLib.WMPPlayState.wmppsStopped
                If label4.Text = "Stopped" Then
                    label2.Text = "00:00"
                    label5.Text = "0%"
                    timer1.Enabled = False
                End If
        End Select
    End Sub
End Class
Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 29 เมษายน 2013, 14:29:31 โดย sak2005 »
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
อันนี้ผมถอดรหัสไฟล์ WMPLib.dll นำฟังก์ชั่นคำสั่งออกมาใช้บางส่วน
และใช้เวลาเขียนออกมาเป็นโปรแกรมสำหรับฟังเพลง ในเวลาไม่นานนัก
ท่านลองนำไปศึกษาดู ติดขัดตรงไหนก็โฟสท์ถาม

WMP Player
โค๊ด: [Select]
Public Class Form1
    Private button1 As New System.Windows.Forms.Button
    Private button2 As New System.Windows.Forms.Button
    Private button3 As New System.Windows.Forms.Button
    Private fdlg As New System.Windows.Forms.OpenFileDialog
    Private label1 As New System.Windows.Forms.Label
    Private label2 As New System.Windows.Forms.Label
    Private label3 As New System.Windows.Forms.Label
    Private label4 As New System.Windows.Forms.Label
    Private label5 As New System.Windows.Forms.Label
    Private media As New WMPLib.WindowsMediaPlayer
    Private timer1 As New System.Windows.Forms.Timer
    Private fileName As String
    Public Sub New()
        InitializeComponent()
        Me.CenterToScreen()
        Me.Size = New Size(300, 170)
        Me.Text = "WMP Player"
        Me.MaximizeBox = False
        Me.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
        button1.Text = "Open"
        button2.Text = "Pause"
        button3.Text = "Stop"
        button1.Cursor = Cursors.Hand
        button2.Cursor = Cursors.Hand
        button3.Cursor = Cursors.Hand
        label1.Text = "00:00"
        label2.Text = "00:00"
        label3.Text = "No Song"
        label4.Text = "Stopped"
        label5.Text = "0%"
        button1.Location = New System.Drawing.Point(27, 100)
        button2.Location = New System.Drawing.Point(107, 100)
        button3.Location = New System.Drawing.Point(187, 100)
        label1.Location = New System.Drawing.Point(30, 10)
        label2.Location = New System.Drawing.Point(225, 10)
        label3.Location = New System.Drawing.Point(90, 43)
        label4.Location = New System.Drawing.Point(110, 68)
        label5.Location = New System.Drawing.Point(130, 10)
        Me.Controls.AddRange(New Control() _
                            {button1, button2, button3, _
                             label1, label2, label3, label4, label5})
        AddHandler button1.Click, AddressOf Button1_Click
        AddHandler Button2.Click, AddressOf Button2_Click
        AddHandler button3.Click, AddressOf Button3_Click
        AddHandler timer1.Tick, AddressOf Timer1_Tick
        timer1.Enabled = False
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Button2.Text = "Resume" Then Button2.Text = "Pause"
        LoadPlaySound()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        SoundPause()
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If button2.Text = "Resume" Then button2.Text = "Pause"
        SoundStop()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        label1.Text = media.currentMedia.durationString
        label2.Text = media.controls.currentPositionString
        label5.Text = Math.Round((media.controls.currentPosition / media.currentMedia.duration) * 100, 0) & "%"
        Select Case media.playState
            Case WMPLib.WMPPlayState.wmppsPlaying
                label4.Text = "Playing.."
            Case WMPLib.WMPPlayState.wmppsPaused
                label4.Text = "Paused"
            Case WMPLib.WMPPlayState.wmppsStopped
                label2.Text = "00:00"
                label4.Text = "Song end"
                label5.Text = "0%"
        End Select
    End Sub
    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If timer1.Enabled = True Then timer1.Enabled = False
        media.close()
    End Sub
    Public Sub LoadPlaySound()
        Select Case button1.Text
            Case "Open"
                fdlg.FileName = ""
                fdlg.Filter = "Media Files(*.mp3;*.wav)|*.mp3;*.wav|All files(*.*)|*.*"
                If fdlg.ShowDialog = Windows.Forms.DialogResult.OK Then
                    fileName = fdlg.FileName
                    button1.Text = "Play"
                    label3.Text = My.Computer.FileSystem.GetName(fileName)
                End If
            Case "Play"
                media.URL = fileName
                timer1.Enabled = True
        End Select
    End Sub
   Public Sub SoundPause()
        Select Case button2.Text
            Case "Pause"
                If media.playState = WMPLib.WMPPlayState.wmppsPlaying Then
                    media.controls.pause()
                    button2.Text = "Resume"
                End If
            Case "Resume"
                If media.playState = WMPLib.WMPPlayState.wmppsPaused Then
                    media.controls.play()
                    button2.Text = "Pause"
                End If
        End Select
    End Sub
    Public Sub SoundStop()
        Select Case media.playState
            Case WMPLib.WMPPlayState.wmppsPaused
                label2.Text = "00:00"
                label4.Text = "Stopped"
                label5.Text = "0%"
                button1.Text = "Open"
                timer1.Enabled = False
            Case WMPLib.WMPPlayState.wmppsPlaying
                media.controls.stop()
                label2.Text = "00:00"
                label4.Text = "Stopped"
                label5.Text = "0%"
                button1.Text = "Open"
                timer1.Enabled = False
            Case WMPLib.WMPPlayState.wmppsStopped
                If label4.Text = "Stopped" Then
                    label2.Text = "00:00"
                    label5.Text = "0%"
                    timer1.Enabled = False
                End If
        End Select
    End Sub
End Class

 :c3: ขอบพระคุณครับ ผมจะลองเอาไปปรับใช้ดูครับ ดีใจที่มีคนช่วยให้คำอธิบายเป็นประโยชน์มากๆครับ
Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
เดี๋ยวจะถอดรหัสไฟล์สกุล *.exe หาสกิน template สวยๆมาฝาก ตอนนี้อยู่ในระหว่างการทดลองถอด-ประกอบชิ้นส่วนต่างๆ
Coolfirmed by (0)สมาชิก:
 
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
เดี๋ยวจะถอดรหัสไฟล์สกุล *.exe หาสกิน template สวยๆมาฝาก ตอนนี้อยู่ในระหว่างการทดลองถอด-ประกอบชิ้นส่วนต่างๆ

:d1: ถอด ประกอบรถชัดๆเลยงานนี้  อิอิ ผมเองเคยลองใช้พวกโปรแกรม VB RezQ โปรแกรมดู code .exe อะไรประมาณนี้ล่ะครับ แต่ไม่รู้เรื่องเอาซะเลยครับ งง มากไม่รู้ว่าที่ได้มามันคืออะไร
ได้ form ได้ โครงสร้างนั้นโน้นนี้แต่แต่ Code ที่ได้ เหมือนไม่ใช่ภาษา vb เอาซะเลย เหอะเหอะ ใช้เกือบได้บอกขาดนั้นเดียวว่าขาดนี้ รันได้ทำงานได้บ้างไม่ได้บ้าง เหอะเหอะ

Coolfirmed by (0)สมาชิก:
 

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
เดี๋ยวจะถอดรหัสไฟล์สกุล *.exe หาสกิน template สวยๆมาฝาก ตอนนี้อยู่ในระหว่างการทดลองถอด-ประกอบชิ้นส่วนต่างๆ

:d1: ถอด ประกอบรถชัดๆเลยงานนี้  อิอิ ผมเองเคยลองใช้พวกโปรแกรม VB RezQ โปรแกรมดู code .exe อะไรประมาณนี้ล่ะครับ แต่ไม่รู้เรื่องเอาซะเลยครับ งง มากไม่รู้ว่าที่ได้มามันคืออะไร
ได้ form ได้ โครงสร้างนั้นโน้นนี้แต่แต่ Code ที่ได้ เหมือนไม่ใช่ภาษา vb เอาซะเลย เหอะเหอะ ใช้เกือบได้บอกขาดนั้นเดียวว่าขาดนี้ รันได้ทำงานได้บ้างไม่ได้บ้าง เหอะเหอะ



จะอาศัยสกินอย่างเดียวนำมาประกอบกับโปรแกรมโปรเจ็กต์เพื่อให้เกิดความสวยงามอย่างเดียวไม่ได้

บางครั้งก็ต้องมีการวาดกราฟฟิกและลงสีด้วย (Image Graphic Paint) ซึ่งต้องเขียนต้องดีไซด์ด้วยการเขียนคำสั่งด้วยตนเอง

มาลองดูตัวอย่างการเขียนตัวอักษร ระหว่าง แบบวิธีธรรมดาและแบบกราฟฟิก

ผมจะพยายามเขียน SourceCode สร้างฟอร์ม และ Object Components ด้วยตนเอง

จะทำให้ง่ายต่อการใช้งาน SourceCode ไม่ต้องเจอกับ Error! บ่อยๆตอนรันทดสอบ

โค๊ด: [Select]
Public Class Form1
    Private lbl1 As New System.Windows.Forms.Label
    Public Sub New()
        InitializeComponent()
        Me.CenterToScreen()
        lbl1.Text = "Normal Label"
        lbl1.Font = New Font("Arial", 24)
        lbl1.ForeColor = Color.Blue
        lbl1.Bounds = New Rectangle(40, 50, 100, 30)
        lbl1.AutoSize = True
        Me.Controls.Add(lbl1)
        AddHandler Me.Paint, AddressOf Form1_Paint
    End Sub
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim drawString As [String] = "Graphic Label"
        Dim drawFont As New Font("Arial", 24)
        Dim drawBrush As New SolidBrush(Color.Blue)
        Dim x As Single = 40.0F
        Dim y As Single = 150.0F
        e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y)
    End Sub
End Class

 

 
Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 12 สิงหาคม 2012, 09:26:42 โดย sak2005 »
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
EQ ปรับแต่งเสียง แบบนี้ใช้ได้ไม๊

Coolfirmed by (1)สมาชิก:
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
EQ ปรับแต่งเสียง แบบนี้ใช้ได้ไม๊



ได้ครับ โครงสร้างมันประมาณนี้ล่ะครับ ที่สำคัญไม่ว่าแบบไหนขอให้มี Code ตัวอย่างหรือโครงสร้างให้ผมได้ศึกษาต่อ  |n4:| ผมขอรับไว้ทุกความรู้ที่ท่านส่งให้เลยครับผม ขอบพระคุณที่คอยให้คำแนะนำและคำปรึกษาครับ
ปล.ประมาณนี้ล่ะครับที่ผมตั้งใจไว้ในส่วนของ EQ ขาดแค่แทบแสดงจังหวะเท่านั้นละครับ  :e2: เลยแวะเก็บรูป EQ มาฝากให้ได้ชมด้วยครับ



Coolfirmed by (0)สมาชิก:
 
« แก้ไขครั้งสุดท้าย: 13 สิงหาคม 2012, 13:44:04 โดย hunterhoo »

ออฟไลน์ sak2005

  • สมาชิกกิตติมศักดิ์
  • *
  • โพสต์: 1,933
  • คูลเฟิร์ม: 7823
  • zula: 3651.75
  • เพศ: ชาย
    • ดูรายละเอียด
  • OS: WindowsBrowser: Firefox
  • ตำแหน่ง:ครูผู้ให้

  • ล็อคอิน @ วันนี้ เวลา 04:44:51
โค๊ด EQ ที่มีผู้เขียนไว้ หาได้ไม่ยาก แต่ยากตรงที่นำมาโมใหม่ มักจะเกิด Error!

กำลังคิดอยู่ว่า ทำอย่างไร ที่จะทำให้ผู้เรียนรู้เขียนคำสั่งกันได้ง่ายๆ

กำลังรวบรวมข้อมูลคำสั่งต่างๆเขียนออกมาเป็นฟังก์ชั่น ซึ่งจะทำให้ง่ายต่อการศึกษาและใช้งาน
Coolfirmed by (1)สมาชิก:
จำเป็นต้องใช้ FlashPlayer

คำคม: เมื่อเวลาเปลี่ยน.. ทุกอย่างเปลี่ยน..

ออฟไลน์ hunterhoo

  • นักเรียนประถม
  • *
  • โพสต์: 46
  • คูลเฟิร์ม: 66
  • zula: 33
  • เพศ: ชาย
    • ดูรายละเอียด
    • พรรคมาร
  • OS: WindowsBrowser: Chrome

  • ล็อคอิน @ 27 เมษายน 2013, 10:12:20
โค๊ด EQ ที่มีผู้เขียนไว้ หาได้ไม่ยาก แต่ยากตรงที่นำมาโมใหม่ มักจะเกิด Error!

กำลังคิดอยู่ว่า ทำอย่างไร ที่จะทำให้ผู้เรียนรู้เขียนคำสั่งกันได้ง่ายๆ

กำลังรวบรวมข้อมูลคำสั่งต่างๆเขียนออกมาเป็นฟังก์ชั่น ซึ่งจะทำให้ง่ายต่อการศึกษาและใช้งาน

ขอบพระคุณมากครับ ผมเองก็กำลังฝึกและพัฒนาตัวเองให้เกิดความแตกฉานในการใช้และการคิด ยิ่งได้คำปรึกษาแบบนี้ ยิ่งทำให้ผมรู้สึกสนุกมากเลยครับในการเขียนและฝึก
Coolfirmed by (0)สมาชิก: