• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Scale một picture, vẽ đồ thị biểu diễn

Các thủ thuật về âm thanh, đồ họa, truyền thông đa phương tiện...
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Scale một picture, vẽ đồ thị biểu diễn

Gửi bàigửi bởi truongphu » T.Năm 20/05/2010 5:30 pm

Thủ thuật: Scale một picture, vẽ đồ thị biểu diễn
Tác giả: truongphu
Mô tả: Scale một picture, vẽ đồ thị biểu diễn


Lâu ngày đụng vẽ, mất hơn tiếng đồng hồ. Nhân câu hỏi bạn anhtuan1285

  1. Dim i As Long, CôngSuât(1 To 24) As Integer
  2.                 ' tang ban anhtuan1285 20/5/2010
  3. Private Sub ToaDo() ' Code truongphu
  4. 'Picture1.Cls
  5. Picture1.Scale (-1, 100)-(25, -2) ' x tu' -1 Ðê'n 25 y tu' 100 xuô'ng -2
  6.    Picture1.Line (0, 0)-(25, 0), vbBlack ' Draw X axis: x=0->25 y=0
  7.    For i = 0 To 25
  8.         Picture1.Line (i, -2)-(i, 0), vbBlack ' Ðánh dâ'u
  9.        ' môi i là môt nâ'c 1, chiê`u cao theo ti lê y tu'` -2-> 0
  10.    Next i
  11.     Picture1.Line (0, 100)-(0, 0), vbBlack ' Draw Y axis: x=0 y=100-> 0
  12.    For i = 0 To 100 Step 5 ' y Ðon vi lo'n nên step 5
  13.        Picture1.Line (-0.5, i)-(0, i), vbBlack
  14.      'môi i là nâ'c 5, chiê`u dái theo ti lê x tu' -0.5 -> 0
  15.        
  16.     Next i
  17. End Sub
  18.  
  19. Private Sub Command1_Click()
  20.     ToaDo
  21. End Sub
  22.  
  23. Private Sub Command2_Click()
  24.     DimAs Integer
  25.     For i = 0 To 24
  26.         TÐ = Int(Rnd * 30) + 70
  27.         If i > 0 Then
  28.             Picture1.Line (i, 0)-(i, TÐ), vbRed
  29.             CôngSuât(i) = TÐ
  30.         End If
  31.     Next
  32. End Sub
  33.  
  34. Private Sub Command3_Click()
  35.     For i = 2 To 24
  36.         Picture1.Line (i - 1, CôngSuât(i - 1))-(i, CôngSuât(i)), vbBlue
  37.     Next
  38. End Sub
  39.  
  40. Private Sub Form_Paint()
  41.     ' In trên form Toa Ðô truc Y
  42.    Me.CurrentX = 0
  43.     Me.CurrentY = Picture1.Top - 100
  44.     Me.Print "100 MW"
  45.     Me.CurrentY = Picture1.Top + 2700
  46.     Me.Print "  0 MW"
  47.     Me.CurrentY = Picture1.Top + 1350
  48.     Me.Print " 50 MW"
  49.     ' In trên Form Toa Ðô truc X
  50.    Me.CurrentX = Picture1.Left - 50
  51.     Me.CurrentY = Picture1.Top + 100 + Picture1.Height
  52.     Me.Print "Gio'`:"
  53.     Me.CurrentY = Picture1.Top + 100 + Picture1.Height
  54.     Me.CurrentX = Picture1.Left + 400
  55.     Me.Print 1
  56.     Me.CurrentY = Picture1.Top + 100 + Picture1.Height
  57.     Me.CurrentX = Picture1.Left + Picture1.Width - 350
  58.     Me.Print 24
  59.     Me.CurrentY = Picture1.Top + 100 + Picture1.Height
  60.     Me.CurrentX = Picture1.Left + 2800
  61.     Me.Print 12
  62. End Sub
  63.  

Ve~ Scale Picture & Line STANDARD.rar
(1.82 KiB) Đã tải 1350 lần


Hình chụp:
Tập tin đính kèm
untitled.JPG


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » CN 06/03/2011 10:04 am

Tình hình là bọn em đang làm đồ án tốt nghiệp - cơ khí chế tạo máy, bọn em dùng 2 cảm biến quang trong con chuột bi lấy tín hiệu ra máy tính. Thầy hướng dẫn yêu cầu viết ứng dụng trên VB6 làm sao cho khi có tín hiệu từ 2 cảm biến kia (tương tự như khi ta di chuột) thì icon chuột sẽ vẽ trên ứng dụng đường đồ thị (graph) theo 2 trục X, Y đồng thời hiển thị tọa độ tức thời của chuột. Đây là ứng dụng tương tự như vậy của khóa trước được save thành file .exe nên có thể chạy ngay mà không cần cài VB.
Hình ảnh
Sửa lần cuối bởi minhtubk vào ngày T.Ba 08/03/2011 10:32 pm với 1 lần sửa.

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » CN 06/03/2011 10:52 am

Còn đây là code Move The Mouse và ứng dụng khóa trước (gồm file chạy exe và project)
http://www.mediafire.com/?ul1ils6dvbp4uhu
Sửa lần cuối bởi minhtubk vào ngày T.Ba 08/03/2011 10:33 pm với 1 lần sửa.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Mời viết ứng dụng vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Hai 07/03/2011 3:47 pm

minhtubk đã viết:dùng 2 cảm biến quang trong con chuột bi lấy tín hiệu ra máy tính. Thầy hướng dẫn yêu cầu viết ứng dụng trên VB6 làm sao cho khi có tín hiệu từ 2 cảm biến kia (tương tự như khi ta di chuột) thì icon chuột sẽ vẽ trên ứng dụng đường đồ thị theo 2 trục X, Y.


đồ thị thường yêu cầu diễn tả một hàm theo một biến nào đó, vd điện thế theo thời gian, góc lệch theo tốc độ quay...
còn lấy tín hiệu chuột (X,Y) biễu diễn trên trục tọa độ X,Y, đấy là vẽ bậy bạ trên bảng à?
code vẽ đường đi của chuột trên picture như sau:

  1. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2. Static LastX As Single, LastY As Single
  3. Picture1.Line (LastX, LastY)-(X, Y)
  4. LastX = X
  5. LastY = Y
  6. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Hai 07/03/2011 10:46 pm

Dạ cảm ơn bác đã chỉ bảo, nhưng không phải vẽ bậy bạ bác ạ ^^ bọn em làm đề tài đo mòn băng máy tiện. Tín hiệu trục Y sẽ hiển thị độ mòn (nhấp nhô) từ cảm biến gắn với đồng hồ so mòn, còn tín hiệu X sẽ tương ứng với quãng đường đo. Em vừa chạy thử code của bác, cũng gần giống đấy ạ, chỉ khác là không biết được tọa độ cụ thể X,Y và không điều chỉnh được tỉ lệ (thí dụ cần phóng to tỷ lệ Y lên vì y ra rất bé) thêm nữa là em cần code trên Graph chứ không phải Picturebox như thế, bác giúp e cái. Em là dân cơ khí cũng mới đọc về VB nên cũng chưa biết nhiều mấy.
Sửa lần cuối bởi minhtubk vào ngày T.Ba 08/03/2011 10:34 pm với 1 lần sửa.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Mời viết ứng dụng vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Ba 08/03/2011 9:34 am

minhtubk đã viết:Tín hiệu trục Y sẽ hiển thị độ mòn (nhấp nhô) từ cảm biến gắn với đồng hồ so mòn, còn tín hiệu X sẽ tương ứng với quãng đường đo. Em vừa chạy thử code của bác, cũng gần giống đấy ạ

vậy là tốt, bạn đã có code đường biểu diễn, quá đơn giản phải không?
minhtubk đã viết: tọa độ cụ thể X,Y và không điều chỉnh được tỉ lệ (thí dụ cần phóng to tỷ lệ Y lên vì y ra rất bé) thêm nữa là em cần code trên Graph chứ không phải Picturebox

Graph và tỉ lệ tọa độ càng dễ. bạn xem trong Box hướng dẫn hay Box thủ thuật, vẽ vào là xong.
(Nếu bạn thực hiện project, nên đổi tiêu đề và xóa dòng tiền, sẽ chuyển bài của bạn qua Box Trao đổi-Thảo luận, sẽ được hướng dẫn nhiều hơn khi hỏi)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Ba 08/03/2011 10:29 pm

truongphu đã viết:
minhtubk đã viết:Tín hiệu trục Y sẽ hiển thị độ mòn (nhấp nhô) từ cảm biến gắn với đồng hồ so mòn, còn tín hiệu X sẽ tương ứng với quãng đường đo. Em vừa chạy thử code của bác, cũng gần giống đấy ạ

vậy là tốt, bạn đã có code đường biểu diễn, quá đơn giản phải không?
minhtubk đã viết: tọa độ cụ thể X,Y và không điều chỉnh được tỉ lệ (thí dụ cần phóng to tỷ lệ Y lên vì y ra rất bé) thêm nữa là em cần code trên Graph chứ không phải Picturebox

Graph và tỉ lệ tọa độ càng dễ. bạn xem trong Box hướng dẫn hay Box thủ thuật, vẽ vào là xong.
(Nếu bạn thực hiện project, nên đổi tiêu đề và xóa dòng tiền, sẽ chuyển bài của bạn qua Box Trao đổi-Thảo luận, sẽ được hướng dẫn nhiều hơn khi hỏi)

Vâng, anh chuyển hộ em sang Box Trao đổi-Thảo luận vậy. Còn về code vẽ VB, em xem trong Box thủ thuật thấy chỉ có bài vẽ line...mà không có code vẽ trên graph, thêm nữa là code hiển thị tọa độ tức thời của chuột, rồi làm sao chỉ khi CmdStart_Click thì mới vẽ đồ thị theo tọa độ chuột...như giao diện cái mẫu kia ạ. Làm phiền anh tiếp vậy :)

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Tư 09/03/2011 8:32 am

minhtubk đã viết:mà không có code vẽ trên graph

* Đồ thị đơn giản có 2 trục X,Y. Lệnh Line vẽ việc nầy là cơ bản. Ngoài ra trên 2 trục ta có thể chia đơn vị và ghi mốc đơn vị, đã có nhiều bài kèm project, bạn cứ tìm
* Đồ thị phức tạp hơn: có thể kẻ thêm nhiều trục dọc và ngang-> thì cũng dùng lệnh Line. Ngoài ra đơn vị có thể theo thập phân hoặc logarit...

search (nâng cao) các từ: trục tọa độ, đồ thị, *truongphu

minhtubk đã viết: code hiển thị tọa độ tức thời của chuột

Đấy là 2 số single X và Y của code đã nêu trên

minhtubk đã viết:làm sao chỉ khi CmdStart_Click thì mới vẽ đồ thị theo tọa độ chuột

đặt một biến chung boolean
CmdStart_Click cho biến thành true
Sub Picture1_MouseMove: dòng đầu nêu: nếu biến trên là false thì exit sub ngay
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Sáu 11/03/2011 10:53 am

* Đồ thị đơn giản có 2 trục X,Y. Lệnh Line vẽ việc nầy là cơ bản. Ngoài ra trên 2 trục ta có thể chia đơn vị và ghi mốc đơn vị, đã có nhiều bài kèm project, bạn cứ tìm
* Đồ thị phức tạp hơn: có thể kẻ thêm nhiều trục dọc và ngang-> thì cũng dùng lệnh Line. Ngoài ra đơn vị có thể theo thập phân hoặc logarit...

search (nâng cao) các từ: trục tọa độ, đồ thị, *truongphu

Em đã search nhưng chỉ có vẽ line trên Picturebox thôi ạ, và lệnh trên graph nằm trong cú pháp này cơ ạ:
  1. Private Sub NTGraph1_CursorPosition(ByVal X As Double, ByVal Y As Double)
  2.  
  3. End Sub

Trong bài mẫu như ảnh bài đầu em post, họ có code như này:
  1. Option Explicit
  2. Private Pt As POINTAPI      'khai bao bien
  3. Private AxisX As Long
  4. Private AxisY As Long
  5. Private Xmin As Long
  6. Private Xmax As Long
  7. Private Ymin As Long
  8. Private Ymax As Long
  9. Private start90 As Long
  10. Private SmY As Long
  11.  
  12. Private Sub CmdStart_Click()                       'nut start (F1)
  13.    start90 = 90 * (AxisX / 462.857)         'ham tinh dong co
  14.    Dim xacnhan As Long
  15.     If Option1.Value = False And Option2.Value = False And Option3.Value = False Then
  16.     xacnhan = MsgBox("Please choose a loading capacity", vbOKOnly, "No loading capacity")
  17.     Call Draw         'set graph hien thi
  18.    Else
  19.    
  20.     If CmdStart.Caption = "Start (F1)" Then
  21.        Call start
  22.        tmrMouse.Enabled = True      'hien thi toa do chuot
  23.       s3.Visible = False
  24.        s2.Visible = False
  25.        Timer2.Enabled = False
  26.        ShowCursor False
  27.        CmdPause.Caption = "Pause (F2)"
  28.        If Option4.Value = True Then SetCursorPos start90, AxisY
  29.        If Option5.Value = True Then SetCursorPos 0, AxisY
  30.        CmdStart.Caption = "Stop (F1)"
  31.        'khai bao cong COM?
  32.       MSComm1.Output = Chr$(2)
  33.        
  34.     Else
  35.         Shape1.Visible = True
  36.        CmdReset_Click
  37.    End If
  38.    End If
  39. End Sub
  40.  
  41. Private Sub CmdPause_Click()
  42.            
  43.        If CmdPause.Caption = "Pause (F2)" Then
  44.           tmrMouse.Enabled = False
  45.           Timer3.Enabled = True
  46.           Shape2.Visible = False
  47.           Shape1.Visible = True
  48.           Shape3.Visible = True
  49.           Timer1.Enabled = False
  50.           s1.Visible = True
  51.           Timer2.Enabled = False
  52.           s3.Visible = False
  53.           ShowCursor True
  54.           CmdPause.Caption = "Resume (F2)"
  55.           'COM
  56.          MSComm1.Output = Chr$(4)
  57.        Else
  58.           tmrMouse.Enabled = True
  59.           Timer1.Enabled = True
  60.           Shape2.Visible = True
  61.           s2.Visible = False
  62.           ShowCursor False
  63.           CmdPause.Caption = "Pause (F2)"
  64.           'COM
  65.          MSComm1.Output = Chr$(2)
  66.        End If
  67. End Sub
  68.  
  69. Private Sub CmdReset_Click()
  70.     ShowCursor True             'hien thi icon chuot
  71.    Call Draw
  72.     Option3.Value = True
  73.     Option4.Value = True
  74.     tmrMouse.Enabled = False
  75.     Timer1.Enabled = False
  76.     s1.Visible = False
  77.     s2.Visible = False
  78.     Shape1.Visible = True
  79.     Shape2.Visible = True
  80.     Shape3.Visible = False
  81.     Timer2.Enabled = True
  82.     CmdPause.Caption = "Pause (F2)"
  83.     CmdStart.Caption = "Start (F1)"
  84.     Label5.Caption = 0
  85.     Label6.Caption = 0
  86.     'COM
  87.    MSComm1.Output = Chr$(6)
  88. End Sub
  89.  
  90. Private Sub cmdFull_click()
  91.     If Me.WindowState <> vbMaximized Then
  92.        Me.WindowState = vbMaximized
  93.     Else
  94.        Me.WindowState = vbNormal
  95.     End If
  96. End Sub
  97. Private Sub CmdExit_Click()
  98.    ShowCursor True
  99.    Call quit
  100. End Sub
  101.  
  102. Private Sub Form_Resize()                'resize theo ti le
  103.    Graph.Width = FrmMain.ScaleWidth / 1.14
  104.     Graph.Height = FrmMain.ScaleHeight / 1.03
  105. End Sub
  106.  
  107. Private Sub Form_Unload(hoi As Integer)
  108.     Call quit
  109. End Sub
  110.  
  111. Private Sub mnu10kg_Click()
  112.     Option2.Value = Not Option2.Value
  113. End Sub
  114.  
  115. Private Sub mnu15_Click()
  116.     Option3.Value = Not Option3.Value
  117. End Sub
  118.  
  119. Private Sub mnu5kg_Click()
  120.     Option1.Value = Not Option1.Value
  121. End Sub
  122.  
  123. Private Sub mnuas0_Click()
  124.     Option5.Value = Not Option5.Value
  125. End Sub
  126.  
  127. Private Sub mnuas90_Click()
  128.     Option4.Value = Not Option4.Value
  129. End Sub
  130.  
  131. Private Sub mnuGrid_Click()
  132.     ShowGrid_Click
  133. End Sub
  134.  
  135. Private Sub mnuStart_Click()
  136.     CmdStart_Click
  137. End Sub
  138.  
  139. Private Sub mnuPause_Click()
  140.     CmdPause_Click
  141. End Sub
  142.  
  143. Private Sub mnureset_Click()
  144.     CmdReset_Click
  145. End Sub
  146.  
  147. Private Sub mnuFull_Click()
  148.     cmdFull_click
  149. End Sub
  150.  
  151. Private Sub mnuExit_Click()
  152.     CmdExit_Click
  153. End Sub
  154.  
  155. Private Sub mnuabout_Click()
  156.     FrmAbout.Show
  157. End Sub
  158.  
  159. Private Sub Form_Load()
  160.     'Check if it has any previous version is running
  161.    If App.PrevInstance Then End
  162.     Me.WindowState = vbMaximized
  163.     'mouse signal
  164.    AxisX = Screen.Width / Screen.TwipsPerPixelX
  165.     AxisY = Screen.Height / Screen.TwipsPerPixelX - 1
  166.     SmY = 1
  167.     Call Draw
  168.     Option3.Value = True
  169.     Option4.Value = True
  170.     'COM
  171.    With MSComm1      'khai bao cong com? trong khi chuot noi qua cong PS/2
  172.        .Settings = "1200,n,8,1"
  173.         .RThreshold = 1
  174.         .SThreshold = 0
  175.         .InBufferSize = 1024
  176.         .OutBufferSize = 1024
  177.         .InputMode = comInputModeText
  178.         .ParityReplace = ""
  179.         .CommPort = 1
  180.         .PortOpen = True
  181.     End With
  182. End Sub
  183.  
  184. Private Sub Draw()        've truc toa do, so toa do cho graph
  185.    Xmin = 90
  186.     Xmax = 270
  187.     Ymin = -20
  188.     Ymax = 160
  189.   With Graph
  190.     .AxisColor = vbRed
  191.     .GridColor = RGB(0, 64, 64)
  192.     .ControlFrameColor = vbBlack
  193.     .PlotAreaColor = RGB(104, 131, 139)         'chon mau nen la mau den
  194.    .FrameStyle = Bitmap                         'chon khung la dang Flat
  195.    .SetRange Xmin, Xmax, Ymin, Ymax                    'dat vach chia
  196.    .XLabel = " Angle (deg)"                            'Dat tieu de cho truc X
  197.    .YLabel = "P (PSi)"                         'Dat tieu de cho truc Y
  198.    .XGridNumber = 12
  199.     .YGridNumber = 18
  200.     .ClearGraph                                 'Xoa tat ca cac do thi va cai dat do thi moi
  201.    .ElementLineColor = vbYellow                'chon mau cho duong do thi
  202.    .ElementWidth = 4
  203.    
  204.  End With
  205. End Sub
  206. Private Sub start()
  207.     s1.BorderColor = vbGreen
  208.     Timer1.Enabled = True
  209.     Shape1.Visible = False
  210.     Shape3.Visible = True
  211.     Shape2.Visible = True
  212. End Sub
  213. Private Sub Option1_Click()
  214.     With Graph
  215.         .SetRange Xmin, Xmax, -20, 160
  216.         .YGridNumber = 18
  217.         .Caption = " spindle's speed: 900 RPM"
  218.         .XLabel = "Angle (deg)"                            'Dat tieu de cho truc X
  219.        .YLabel = "P (PSi)"
  220.         .ElementLineColor = vbYellow
  221.         .ElementWidth = 4
  222.     End With
  223.     Ymax = 120
  224. End Sub
  225.  
  226. Private Sub Option2_Click()
  227.     With Graph
  228.         .SetRange Xmin, Xmax, -20, 160
  229.         .YGridNumber = 18
  230.         .Caption = " spindle's speed: 1350 RPM"
  231.         .XLabel = "Angle (deg) "                            'Dat tieu de cho truc X
  232.        .YLabel = "P (PSi)"
  233.         .ElementLineColor = vbYellow
  234.         .ElementWidth = 4
  235.     End With
  236.     Ymax = 140
  237. End Sub
  238.  
  239. Private Sub Option3_Click()
  240.     With Graph
  241.         .SetRange Xmin, Xmax, -20, 160
  242.         .YGridNumber = 18
  243.         .Caption = " spindle's speed: 2025 RPM"
  244.         .XLabel = "Angle (deg) "                            'Dat tieu de cho truc X
  245.        .YLabel = "P (PSi)"
  246.         .ElementLineColor = vbYellow
  247.         .ElementWidth = 4
  248.     End With
  249.     Ymax = 160
  250. End Sub
  251.  
  252. Private Sub Option4_Click()
  253.     Graph.XGridNumber = 12
  254.     Graph.SetRange 90, 270, -20, Ymax
  255.     Graph.XLabel = "Angle (deg) "                            'Dat tieu de cho truc X
  256.    Graph.YLabel = "P (PSi)"
  257.     Graph.ElementLineColor = vbYellow
  258.     Graph.ElementWidth = 4
  259.     Xmin = 90
  260.     Xmax = 270
  261. End Sub
  262.  
  263. Private Sub Option5_Click()
  264.     Graph.XGridNumber = 12
  265.     Graph.SetRange 0, 360, -20, Ymax
  266.     Graph.XLabel = "Angle (deg) "                            'Dat tieu de cho truc X
  267.    Graph.YLabel = "P (PSi)"
  268.     Graph.ElementLineColor = vbYellow
  269.     Graph.ElementWidth = 4
  270.     Xmin = 0
  271.     Xmax = 360
  272. End Sub
  273.  
  274. Private Sub ShowGrid_Click()
  275.     Graph.ShowGrid = Not Graph.ShowGrid
  276. End Sub
  277.  
  278. Private Sub Timer1_Timer()
  279.     s1.Visible = Not s1.Visible
  280. End Sub
  281.  
  282. Private Sub Timer2_Timer()
  283.     s3.Visible = Not s3.Visible
  284. End Sub
  285.  
  286. Private Sub Timer3_Timer()
  287.     s2.Visible = Not s2.Visible
  288. End Sub
  289.  
  290. Private Sub tmrMouse_Timer()
  291.     GetCursorPos Pt
  292.     Pt.Y = AxisY - Pt.Y
  293.     Label5.Caption = Pt.Y * 6.658 / SmY                     'lay toa do chuot tren graph ra 2 label?
  294.    Label6.Caption = Pt.X / (AxisX / 462.857)
  295.     Graph.PlotXY Pt.X / (AxisX / 462.857), Pt.Y * 6.658 / SmY, 0
  296. End Sub
  297.  
  298. Private Sub quit()
  299.     Dim hoi As Long
  300.     If MSComm1.PortOpen = True Then
  301.        MSComm1.PortOpen = False
  302.     End If
  303.     hoi = MsgBox("Are you sure to exit application?", vbYesNo, "Exit")
  304.         If hoi = vbYes Then
  305.            End
  306.            Else: hoi = 2
  307.         End If
  308. End Sub
  309.  

Nhưng em không biết họ vẽ line trên graph bằng lệnh nào cả, chỉ thấy có call Draw ở From_load là để set Graph thôi.
Tập tin đính kèm
Project com standard.rar
Project mẫu
(127.3 KiB) Đã tải 405 lần

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Sáu 11/03/2011 11:04 am

Và trong cái project mẫu kia, khi debug lại báo lỗi ở From_load về khai báo MSComm1???
Còn dưới đây là file hoàn thiện .exe
Tập tin đính kèm
Project com standard.exe.rar
file hoàn thiện .exe
(29.14 KiB) Đã tải 328 lần

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Sáu 11/03/2011 7:03 pm

forum muốn bạn tự viết code, chổ nào lúng túng thì trao đổi, chứ không yêu cầu bạn gởi lên code hay exe của ai đó; thế thì hướng dẫn cho bạn chổ nào?
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Sáu 11/03/2011 9:45 pm

À vâng em quên, em gửi code và exe lên để cho anh dễ hình dung điều em muốn hỏi thôi. Em muốn hỏi để vẽ line trong NTGraph (chạy như trong project exe em gửi) thì ta dùng code nào? vì cái code anh gửi lần trước là vẽ line trong Picturebox không chạy được trong NTGraph:
  1. Private Sub NTGraph1_CursorPosition(ByVal X As Double, ByVal Y As Double)
  2.  
  3. End Sub

Và tại sao khi chạy debug code dưới đây thì VB lại báo lỗi khai báo MSComm1? vậy ta phải khai báo lại như nào?
  1. Private Sub Form_Load()
  2.     'Check if it has any previous version is running
  3.   If App.PrevInstance Then End
  4.     Me.WindowState = vbMaximized
  5.     'mouse signal
  6.   AxisX = Screen.Width / Screen.TwipsPerPixelX
  7.     AxisY = Screen.Height / Screen.TwipsPerPixelX - 1
  8.     SmY = 1
  9.     Call Draw
  10.     Option3.Value = True
  11.     Option4.Value = True
  12.     'COM
  13.   With MSComm1      
  14.        .Settings = "1200,n,8,1"
  15.         .RThreshold = 1
  16.         .SThreshold = 0
  17.         .InBufferSize = 1024
  18.         .OutBufferSize = 1024
  19.         .InputMode = comInputModeText
  20.         .ParityReplace = ""
  21.         .CommPort = 1
  22.         .PortOpen = True
  23.     End With
  24. End Sub

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Vẽ đồ thị trên theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Hai 14/03/2011 11:49 pm

Theo lời bác Phú em đã gần lập được project vẽ đồ thị theo tín hiệu của chuột trên PictureBox, nhưng ở đây lại có một số vấn đề em muốn hỏi bác Phú hay bạn nào biết là:
Đầu tiên là ảnh project em mới làm:

Hình ảnh

1. Làm sao để gán phím tắt (F1, F2, F3, F4) với các Command Button như hình ảnh trên? dùng code gì?

2. Khi chạy chương trình, ta di chuột sẽ vẽ line trên PictureBox. Dùng code gì dể hiện tọa độ tức thời của chuột (là 2 số single X, Y) trên 2 Label X,Y trong khung tọa độ?

3. Ở trên sau khi CmdStart vẽ hết khung tọa độ xong, em dùng CmdReset để xóa hết line trên PictureBox, nhưng khi nhấn CmdStart lại để vẽ lần 2 thì tọa độ chuột cuối của lần vẽ trước vẫn được nhớ và vẽ nối tiếp với tọa độ cuối đó. Làm sao để khi vẽ lại thì tọa dộ chuột được set 0 như ban đầu?
Tập tin đính kèm
Project.rar
(2.2 KiB) Đã tải 363 lần

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Ba 15/03/2011 8:13 am

minhtubk đã viết:em đã gần lập được project vẽ đồ thị theo tín hiệu của chuột trên PictureBox

thế chứ, tôi vẫn chờ bạn
minhtubk đã viết:1. Làm sao để gán phím tắt (F1, F2, F3, F4) với các Command Button như hình ảnh trên? dùng code gì?

  1. Private Sub Form_Load()
  2.     Me.KeyPreview = True
  3. End Sub
  4.  
  5. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  6.     If KeyCode = vbKeyF7 Then
  7.         Command1_Click
  8.     ElseIf KeyCode = vbKeyF8 Then
  9.         Command2_Click
  10.     ElseIf KeyCode = vbKeyF9 Then
  11.         Command3_Click
  12.     End If
  13. End Sub


minhtubk đã viết:ta di chuột sẽ vẽ line trên PictureBox. Dùng code gì dể hiện tọa độ tức thời của chuột

  1. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.     Label1.Caption = X
  3.     Label2.Caption = Y
  4. End Sub

Hãy nhớ cọng trừ các số X và Y theo đúng trục tọa độ quy định, vì X và Y là tọa độ trên Picture1 tính từ góc trên trái của picture1 là 0,0
minhtubk đã viết:Làm sao để khi vẽ lại thì tọa dộ chuột được set 0 như ban đầu?

  1. Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
  2.     ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, _
  3.     ByVal dwExtraInfo As Long)
  4. Const MOUSEEVENTF_MOVE = &H1: Const MOUSEEVENTF_ABSOLUTE = &H8000
  5. 'truongphu
  6. 'Viê't lai sub mouse_event cho dê~ dùng
  7. Sub MouseMove(ByVal xPixel As Long, ByVal yPixel As Long)
  8.     Dim cbuttons As Long, dwExtraInfo As Long
  9.     mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, _
  10.         xPixel, yPixel, cbuttons, dwExtraInfo
  11. End Sub
  12.  
  13. Private Sub Command3_Click()
  14.     MouseMove 10000, 20000
  15. End Sub
  16.  

Nhớ các thông số của sub mousemove là tọa độ màn hình, hãy tinh chỉnh cho đúng yêu cầu.

Chúc bạn hoàn thành tốt đề án
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Ba 15/03/2011 5:00 pm

  1. Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
  2.     ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, _
  3.     ByVal dwExtraInfo As Long)
  4. Const MOUSEEVENTF_MOVE = &H1: Const MOUSEEVENTF_ABSOLUTE = &H8000
  5. 'truongphu
  6. 'Viê't lai sub mouse_event cho dê~ dùng
  7. Sub MouseMove(ByVal xPixel As Long, ByVal yPixel As Long)
  8.     Dim cbuttons As Long, dwExtraInfo As Long
  9.     mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, _
  10.         xPixel, yPixel, cbuttons, dwExtraInfo
  11. End Sub
  12.  
  13. Private Sub Command3_Click()
  14.     MouseMove 10000, 20000
  15. End Sub

Thầy Phú ơi, em vẫn chưa hiểu và dùng được code này của thầy. Khi em pase vào thì báo lỗi
Hình ảnh
Em muốn hỏi là, ví dụ khi CmdStart_Click, em MouseMove về gốc tọa độ và bắt đầu vẽ đồ thị trên PictureBox như này chẳng hạn:

Hình ảnh

Sau đó em CmdReset_Click để xóa PictureBox, rồi lại CmdStart_Click để vẽ lại đồ thị, lúc đó PictureBox nó vẫn nhớ vị trí lần cuối con chuột và nối 1 đường thẳng chéo rồi mới vẽ đồ thị như này:

Hình ảnh

Em muốn hỏi làm sao để khi CmdReset_Click, CmdStart_Click và vẽ lại thì PictureBox nó không nhớ tọa độ chuột lần trước mà sẽ vẽ nối luôn với gốc tọa độ?

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Ba 15/03/2011 5:48 pm

Thầy cho em hỏi thêm là nếu em muốn lấy tọa độ giao điểm của đường line (đồ thị) trên với các đường X=0,5,10,15,20 tức là lấy tọa độ Y của đường Line ứng với X=0,5,10,15,20 ra các Label tương ứng:
Hình ảnh
thì dùng code như thế nào ạ? em dùng code như này thì chương trình báo lỗi:
  1.     If X = 0 Then Label9.Caption = Y
  2.     ElseIf X = 5 Then Label10.Caption = Y
  3.     ElseIf X = 10 Then Label11.Caption = Y
  4.     ElseIf X = 15 Then Label12.Caption = Y
  5.     ElseIf X = 20 Then Label13.Caption = Y
  6.     End If

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Ba 15/03/2011 8:20 pm

minhtubk đã viết:Khi em pase vào thì báo lỗi

Lẽ ra trả lời chậm môt tí để bạn có đủ thời gian nghiền ngẫm, chắc là "đối phó" đề án gấp quá rồi!

Paste vào lỗi là đương nhiên, vì đó là khai báo hàm API chung, phải đưa lên đầu (general)

minhtubk đã viết:nó vẫn nhớ vị trí lần cuối con chuột và nối 1 đường thẳng chéo rồi mới vẽ đồ thị như này:

Trong Sub Picture1_MouseMove, cho dòng code đầu tiên:

Mã: Chọn hết

If X =0 And Y =0 then LastX =0
If X =0 And Y =0 then LastY =0


minhtubk đã viết:tọa độ giao điểm của đường line (đồ thị) trên với các đường X=0,5,10,15,20

nếu đường biễu diễn của bạn theo một hàm số xác định thì quá dễ phải không? chỉ việc điền trị x vào là ra y.
Ở đây, chưa tiên liệu đường biểu diễn sẽ thế nào, nên đành thêm code như bạn viết, cũng thêm vào Sub Picture1_MouseMove
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Ba 15/03/2011 11:30 pm

Em làm như thế vẫn chưa được thầy ạ. Về "vị trí lần cuối con chuột và nối 1 đường thẳng chéo rồi mới vẽ đồ thị" và "tọa độ giao điểm của đường line (đồ thị) trên với các đường X=0,5,10,15,20 " Em làm như này:
  1. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2. If A = False Then Exit Sub
  3. Static LastX As Single, LastY As Single
  4. Picture1.Line (LastX, LastY)-(X, Y)
  5. If X =0 And Y =0 then LastX =0
  6. If X =0 And Y =0 then LastY =0
  7. LastX = X
  8. LastY = Y
  9. Label3.Caption = X
  10. Label5.Caption = Y
  11.     If X = 0 Then Label9.Caption = 0
  12.     If X = 5 Then Label10.Caption = Y
  13.     If X = 10 Then Label11.Caption = Y
  14.     If X = 15 Then Label12.Caption = Y
  15.     If X = 20 Then Label13.Caption = Y
  16. End Sub

Còn dưới đây là code và Project .exe thầy xem hộ em xem làm sao vẫn sai vậy?

minhtubk
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Tư 02/03/2011 1:07 pm

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi minhtubk » T.Ba 15/03/2011 11:32 pm

Còn dưới đây là code và Project .exe thầy xem hộ em xem làm sao vẫn sai vậy?
Tập tin đính kèm
Project.rar
(8.07 KiB) Đã tải 300 lần

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4751
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 508 time

Re: Tìm hiểu project vẽ đồ thị theo tín hiệu của chuột

Gửi bàigửi bởi truongphu » T.Tư 16/03/2011 4:48 pm

Tôi đã xem project của bạn
1- Các label không thể hiện được y do pixel quá nhỏ, vd x=5, bạn phải cho x trong khoảng thì mousemove mới bắt được vị trí nầy
2- trục tọa độ chưa chính xác: x tạm được, nhưng đơn vị là mm thì to quá, nên tăng từ 20 lên 200 thì hợp mm
y khó chịu hơn, bạn cho y=0 ở giữa nhưng các thông số trên biểu đồ không thể hiện; cần chỉnh lại y từ 100 đến -100
trục x (y=0) nên có màu khác vbred
3- nút thoát, theo thông lệ, nên dùng nút Esc
4- nút Pause nên có chức năng nhấn lần nữa thì chạy lại
5- start chưa đưa mouse về vị trí 0,0 của đồ thị
Nói chung là tiến bộ; điểm 6 :D
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Âm thanh và Đồ họa”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách