Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

+15
TranDinhHuan (102C)
nguyenminhduong(102c)
votuanho_i92c
NguyenThiThanhTruc (102C)
MaiThePhuong (102C)
ngoman
nguyenthingoan (i92c)
vongocminhhoang (102C)
dinhbichngoc_102C
NGUYENVANMANH(102C)
NguyenVietHung (102C)
TruongThiMinhNgoc57(102C)
BuiQuocDung14 (102c)
TranVuLam(102C)
NguyenMinhNhuY(102C)
19 posters

Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  NguyenMinhNhuY(102C) 6/4/2011, 22:27

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;


namespace SendReceiveMessage
{
public partial class frmPhatAmVnVoice: Form
{
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hWnd, int Msg, string wParam, string IParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr PostMessage(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr GetMenu(IntPtr hWnd);

[DllImport("user32.dll")]
static extern IntPtr GetSubMenu(IntPtr hWnd, int Submenu);

[DllImport("user32.dll")]
static extern IntPtr GetMenuItemID(IntPtr hWnd, int SubmenuItem);

//Khai báo 2 h?ng (const)
const int WM_COMMAND = 0x0111;
const int WM_SETTEXT = 0xC;

public frmPhatAmVnVoice()
{
InitializeComponent();
}
private void but_phatam_Click(object sender, EventArgs e)
{
PronounceByVnVoice( txtbox.Text);
}


private void but_tac_Click(object sender, EventArgs e)
{
StopByVnVoice(txtbox.Text);
}

private void PronounceByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null,"Speaking VN"); //( tim cua so voi tieu de cho truoc)( intptr kieu nguyen 4 byte)
if (hApp == IntPtr.Zero) ( kiem tra bang 0 hay khong)
{
MessageBox.Show("Chua ch?y VnVoice");
return;
}
IntPtr hFrame = FindWindowEx(hApp, (int)IntPtr.Zero, "AfxFrameOrView42s", "");//( tim cua so mo rong: AfxFrameOrView42s( loai cua so): chuoi rong la tim cua so con cua thang trên và dua vào bien Hframe
IntPtr hRichEditBox = FindWindowEx(hFrame,(int)IntPtr.Zero,"RICHEDIT", "");//
Clipboard.Clear();// lam sach clipboard
SendMessageW(hRichEditBox, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalUni(strTCVN3));// goi thông di?p // Wm: thong di?p windows
PostMessage(hApp,WM_COMMAND,104,0);// goi thông di?p th?c hi?n l?nh
}
private void StopByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null, "Speaking VN");
if (hApp == IntPtr.Zero)
{
MessageBox.Show("Chua ch?y VnVoice");
return;
}
PostMessage(hApp,WM_COMMAND,105,0);
}

private void but_getid_Click(object sender, EventArgs e)
{
IntPtr hMainMenu, hSubMenu;
int iSubMenuIndex, iSubMenuItem, iMenuItemID;
iSubMenuIndex = 0;
iSubMenuItem = 0;
IntPtr hApp = FindWindow(null,"Speaking VN");
hMainMenu = GetMenu(hApp);
hSubMenu = GetSubMenu(hMainMenu, iSubMenuIndex);
iMenuItemID = (int)GetMenuItemID(hSubMenu, iSubMenuItem);
MessageBox.Show(iMenuItemID.ToString());
}

}
}
NguyenMinhNhuY(102C)
NguyenMinhNhuY(102C)

Tổng số bài gửi : 54
Join date : 16/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  TranVuLam(102C) 6/4/2011, 22:31

tks,bạn nhé,mình đang cần nè,copy vô test thử xem nào
TranVuLam(102C)
TranVuLam(102C)

Tổng số bài gửi : 127
Join date : 16/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  BuiQuocDung14 (102c) 6/4/2011, 22:37

bài này hay đó. lúc nãy mình cũng hiểu được ít mọi người tìm hiểu rồi cùng nhau học nha

BuiQuocDung14 (102c)

Tổng số bài gửi : 27
Join date : 17/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  TruongThiMinhNgoc57(102C) 7/4/2011, 08:13

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;


namespace SendReceiveMessage
{
public partial class frmPhatAmVnVoice: Form
{
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hWnd, int Msg, string wParam, string IParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr PostMessage(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr GetMenu(IntPtr hWnd);

[DllImport("user32.dll")]
static extern IntPtr GetSubMenu(IntPtr hWnd, int Submenu);

[DllImport("user32.dll")]
static extern IntPtr GetMenuItemID(IntPtr hWnd, int SubmenuItem);

//Khai báo 2 h?ng (const)
const int WM_COMMAND = 0x0111; // Thong diep window
const int WM_SETTEXT = 0xC; // hop soan thao van ban

public frmPhatAmVnVoice()
{
InitializeComponent();
}
private void but_phatam_Click(object sender, EventArgs e)
{
PronounceByVnVoice( txtbox.Text);
}


private void but_tac_Click(object sender, EventArgs e)
{
StopByVnVoice(txtbox.Text); // Hanh ngung doc van ban
}

private void PronounceByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null,"Speaking VN"); //tim cua so voi tieu de cho truoc ( intptr kieu nguyen 4 byte)
if (hApp == IntPtr.Zero) ( kiem tra bang 0 hay khong)
{
MessageBox.Show("Chua ch?y VnVoice");
return;
}
IntPtr hFrame = FindWindowEx(hApp, (int)IntPtr.Zero, "AfxFrameOrView42s", "");//( tim cua so mo rong: AfxFrameOrView42s( loai cua so): chuoi rong la tim cua so con cua thang trên và dua vào bien Hframe
IntPtr hRichEditBox = FindWindowEx(hFrame,(int)IntPtr.Zero,"RICHEDIT", "");//
Clipboard.Clear();// lam sach clipboard
SendMessageW(hRichEditBox, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalUni(strTCVN3));// gui chuoi ky tu TCVN3 vao hop soan thao WM_SETTEXT
PostMessage(hApp,WM_COMMAND,104,0);// gui thong diep thuc hien lenh doc van ban co ma dinh danh la 104 tu WM_SETTEXT
}
private void StopByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null, "Speaking VN");
if (hApp == IntPtr.Zero)
{
MessageBox.Show("Chua chay VnVoice");
return;
}
PostMessage(hApp,WM_COMMAND,105,0);
}

private void but_getid_Click(object sender, EventArgs e)
{
IntPtr hMainMenu, hSubMenu;
int iSubMenuIndex, iSubMenuItem, iMenuItemID; // lay chi muc thuc don va mau thuc don
iSubMenuIndex = 0; // lay chi so muc thuc don con
iSubMenuItem = 0; // lay mau thuc don con
IntPtr hApp = FindWindow(null,"Speaking VN");
hMainMenu = GetMenu(hApp); // lay danh sach thuc don dua vao bien hMainMenu.
hSubMenu = GetSubMenu(hMainMenu, iSubMenuIndex); // lay danh sach thuc don con dua vao bien hSubMenu.
iMenuItemID = (int)GetMenuItemID(hSubMenu, iSubMenuItem);
MessageBox.Show(iMenuItemID.ToString());
}

Mình bổ sung thêm 1 ít .có gì cần bổ sung chỉnh sửa nữa, nhờ các bạn lại tiếp tục cập nhật để tụi mình cùng hiểu đoạn code này nhé !

}
}
TruongThiMinhNgoc57(102C)
TruongThiMinhNgoc57(102C)

Tổng số bài gửi : 90
Join date : 17/02/2011
Đến từ : TPHCM

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  NguyenVietHung (102C) 7/4/2011, 13:34

NguyenMinhNhuY(102C) đã viết:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;


namespace SendReceiveMessage
{
public partial class frmPhatAmVnVoice: Form
{
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hWnd, int Msg, string wParam, string IParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32.dll")]
static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr PostMessage(IntPtr hWnd, int Msg, int wParam, int IParam);

[DllImport("user32.dll")]
static extern IntPtr GetMenu(IntPtr hWnd);

[DllImport("user32.dll")]
static extern IntPtr GetSubMenu(IntPtr hWnd, int Submenu);

[DllImport("user32.dll")]
static extern IntPtr GetMenuItemID(IntPtr hWnd, int SubmenuItem);

//Khai báo 2 h?ng (const)
const int WM_COMMAND = 0x0111;
const int WM_SETTEXT = 0xC;

public frmPhatAmVnVoice()
{
InitializeComponent();
}
private void but_phatam_Click(object sender, EventArgs e)
{
PronounceByVnVoice( txtbox.Text);
}


private void but_tac_Click(object sender, EventArgs e)
{
StopByVnVoice(txtbox.Text);
}

private void PronounceByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null,"Speaking VN"); //( tim cua so voi tieu de cho truoc)( intptr kieu nguyen 4 byte)
if (hApp == IntPtr.Zero) ( kiem tra bang 0 hay khong)
{
MessageBox.Show("Chua ch?y VnVoice");
return;
}
IntPtr hFrame = FindWindowEx(hApp, (int)IntPtr.Zero, "AfxFrameOrView42s", "");//( tim cua so mo rong: AfxFrameOrView42s( loai cua so): chuoi rong la tim cua so con cua thang trên và dua vào bien Hframe
IntPtr hRichEditBox = FindWindowEx(hFrame,(int)IntPtr.Zero,"RICHEDIT", "");//
Clipboard.Clear();// lam sach clipboard
SendMessageW(hRichEditBox, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalUni(strTCVN3));// goi thông di?p // Wm: thong di?p windows
PostMessage(hApp,WM_COMMAND,104,0);// goi thông di?p th?c hi?n l?nh
}
private void StopByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null, "Speaking VN");
if (hApp == IntPtr.Zero)
{
MessageBox.Show("Chua ch?y VnVoice");
return;
}
PostMessage(hApp,WM_COMMAND,105,0);
}

private void but_getid_Click(object sender, EventArgs e)
{
IntPtr hMainMenu, hSubMenu;
int iSubMenuIndex, iSubMenuItem, iMenuItemID;
iSubMenuIndex = 0;
iSubMenuItem = 0;
IntPtr hApp = FindWindow(null,"Speaking VN");
hMainMenu = GetMenu(hApp);
hSubMenu = GetSubMenu(hMainMenu, iSubMenuIndex);
iMenuItemID = (int)GetMenuItemID(hSubMenu, iSubMenuItem);
MessageBox.Show(iMenuItemID.ToString());
}

}
}

thanks bạn nhiều nhiều! đang tìm hiểu ???? Question

NguyenVietHung (102C)

Tổng số bài gửi : 48
Join date : 21/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  NGUYENVANMANH(102C) 7/4/2011, 15:20

Đoạn code chạy tốt nhưng không biết làm sao để đọc được đoạn văn bản dài.

NGUYENVANMANH(102C)

Tổng số bài gửi : 68
Join date : 23/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Code vnVoice.

Bài gửi  dinhbichngoc_102C 7/4/2011, 17:08

Cảm ơn các bạn nha! Mình cũng đang tìm cái này.

dinhbichngoc_102C

Tổng số bài gửi : 23
Join date : 23/02/2011
Age : 37
Đến từ : Quang ngai

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  vongocminhhoang (102C) 8/4/2011, 09:27

TruongThiMinhNgoc57(102C) đã viết:




private void StopByVnVoice(string strTCVN3)
{
IntPtr hApp = FindWindow(null, "Speaking VN");
if (hApp == IntPtr.Zero)
{
MessageBox.Show("Chua chay VnVoice");
return;
}
PostMessage(hApp,WM_COMMAND,105,0);
}

private void but_getid_Click(object sender, EventArgs e)
{
IntPtr hMainMenu, hSubMenu;
int iSubMenuIndex, iSubMenuItem, iMenuItemID; // lay chi muc thuc don va mau thuc don
iSubMenuIndex = 0; // lay chi so muc thuc don con
iSubMenuItem = 0; // lay mau thuc don con
IntPtr hApp = FindWindow(null,"Speaking VN");
hMainMenu = GetMenu(hApp); // lay danh sach thuc don dua vao bien hMainMenu.
hSubMenu = GetSubMenu(hMainMenu, iSubMenuIndex); // lay danh sach thuc don con dua vao bien hSubMenu.
iMenuItemID = (int)GetMenuItemID(hSubMenu, iSubMenuItem);
MessageBox.Show(iMenuItemID.ToString());
}

Mình bổ sung thêm 1 ít .có gì cần bổ sung chỉnh sửa nữa, nhờ các bạn lại tiếp tục cập nhật để tụi mình cùng hiểu đoạn code này nhé !

}
}
nếu bạn để iMenuItemID của menu stop là 105 thì nó không chạy được đâu, hôm trước thầy có nói rồi mà. bạn phải thay bằng 32792 thì mới chạy duọc, mình có viết được phần stop rồi đây

https://hedieuhanh.forumvi.com/t3084-topic#12468

vongocminhhoang (102C)

Tổng số bài gửi : 70
Join date : 17/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  nguyenthingoan (i92c) 8/4/2011, 16:46

Đoạn code đúng hay. Đi học ngồi nghe thầy giảng nên ko kịp chép bài. Có diễn đàn đúng tuyệt cú mèo luôn.

nguyenthingoan (i92c)

Tổng số bài gửi : 39
Join date : 16/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  ngoman 8/4/2011, 21:19

Cũng có thể là khi thi thầy cho 1 đoạn nhỏ trong đó rồi giải thích lại đó, Smile

ngoman

Tổng số bài gửi : 119
Join date : 08/11/2010
Đến từ : HCTH-I92C-09H1012064

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  MaiThePhuong (102C) 9/4/2011, 20:41

NGUYENVANMANH(102C) đã viết:Đoạn code chạy tốt nhưng không biết làm sao để đọc được đoạn văn bản dài.
nghe thầy giảng là chia ra từng đoạn nhỏ để làm, nhưng mình cũng chưa ngâm cứu ra nữa
MaiThePhuong (102C)
MaiThePhuong (102C)

Tổng số bài gửi : 80
Join date : 16/02/2011
Age : 34
Đến từ : Bình thuận

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  NguyenThiThanhTruc (102C) 10/4/2011, 21:44

Thanks các bạn...chúc các bạn thành công

NguyenThiThanhTruc (102C)

Tổng số bài gửi : 41
Join date : 17/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  votuanho_i92c 12/4/2011, 23:50

MaiThePhuong (102C) đã viết:
NGUYENVANMANH(102C) đã viết:Đoạn code chạy tốt nhưng không biết làm sao để đọc được đoạn văn bản dài.
nghe thầy giảng là chia ra từng đoạn nhỏ để làm, nhưng mình cũng chưa ngâm cứu ra nữa

Nếu bạn nào thành công trên file văn bản dài, nhớ share cho mình nhe, thanks các bạn


votuanho_i92c

Tổng số bài gửi : 32
Join date : 30/10/2010

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  nguyenminhduong(102c) 13/4/2011, 15:59

Đi học có chép code kèm theo những gì thầy giảng, nhưng cứ loạn cả lên, có các bạn up lên may quá. Cám ơn nhé.
nguyenminhduong(102c)
nguyenminhduong(102c)

Tổng số bài gửi : 53
Join date : 16/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  TranDinhHuan (102C) 13/4/2011, 16:16

Thank ban nhiu ha!
TranDinhHuan (102C)
TranDinhHuan (102C)

Tổng số bài gửi : 34
Join date : 17/02/2011
Age : 35

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  VoDucDacThong (I102C) 15/4/2011, 15:44

Có bạn nào làm cho vnvoice đọc được văn bản dài chưa, mình xem nhiều bài trong này rồi nhưng chưa thấy ai làm được. Thầy có gợi ý là chia văn bản ra thành nhiều đoạn nhỏ rồi đưa cho vnvoice đọc. Thằng vnvoice này mà có nút pause thì còn hay hơn nữa, STOP giống như là kết thúc luôn, click vào play lại đọc lại từ đầu. Chán!!!

VoDucDacThong (I102C)

Tổng số bài gửi : 92
Join date : 23/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  nguyenthingoan (i92c) 18/4/2011, 16:26

Thực ra mình chưa hiểu nhiều lắm về quá trình thực hiện của vnvoice hic. Vẫn đang trong tình trạng tìm hiểu quy trình thực hiện nà. hic

nguyenthingoan (i92c)

Tổng số bài gửi : 39
Join date : 16/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Cac ban nen giai thich code!

Bài gửi  huynhvanlau_I92C 18/4/2011, 17:33

cac ban nen thao luan them tung doan code co tinh nang gi nua!

huynhvanlau_I92C

Tổng số bài gửi : 67
Join date : 25/02/2011

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  DangVanTanh(I92C) 21/4/2011, 22:51

Cám ơn các bạn nhiều. may quá. code mình chép ở lớp thiếu nên copy vào chạy mà nó cứ báo lỗi.

Laughing Laughing Laughing Laughing
DangVanTanh(I92C)
DangVanTanh(I92C)

Tổng số bài gửi : 26
Join date : 15/02/2011
Age : 41
Đến từ : Hồ Chí Minh

http://www.webso1.com

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Cam on ban nhieu nha

Bài gửi  ngocyen_102c 21/4/2011, 23:47

Cam on ban nhieu nha.minh cung dang can code de hieu them ve bai hoc thay giang.
Thanks!

ngocyen_102c

Tổng số bài gửi : 37
Join date : 01/11/2010

Về Đầu Trang Go down

Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn Empty Re: Cùng nhau tìm hiểu lại code bài học hôm nay nhé các bạn

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết