whiles_
26-08-2006, 11:00
Ciao a tutti :) ,
ho un problema con uno script win32 in JScript. In pratica lo script è questo (l'ho messo come php perchè la sintassi più o meno è quella):
var WM_USER = 0x400;
var EM_SETCHARFORMAT = WM_USER + 68;
var SCF_ALL = 0x4;
var SCF_SELECTION = 0x1;
var CFM_UNDERLINE = 0x4;
var CFM_FACE = 0x20000000;
var CFM_BOLD = 0x1;
var CFM_CHARSET = 0x8000000;
var CFM_UNDERLINE = 0x4;
var CFE_BOLD = 0x1;
var CFE_UNDERLINE = 0x4;
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditstructures/charformat.asp
var charFormat = Interop.Allocate(90);
charFormat.WriteDWORD(0, charFormat.Size); //cbSize
charFormat.WriteDWORD(4, CFM_BOLD); //dwMask
charFormat.WriteDWORD(8, CFE_BOLD); //dwEffects
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_setcharformat.asp
var ret = Wnd.SendControlMessage("rchNick", EM_SETCHARFORMAT, SCF_SELECTION, charFormat.DataPtr);
Debug.Trace("Ret: " + ret);
}
Il compito dello script è far diventare grassetto il testo selezionato nella RichBox chiamata "rchNick". Wnd sarebbe la finestra contenente la RichBox. Prima di tutto lo script memorizza le varie costanti per le API, poi alloca lo spazio (Interlop.Allocate) per la struttura CHARFORMAT (descritta in MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditstructures/charformat.asp)) e poi manda il messaggio (EM_SETCHARFORMAT (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_setcharformat.asp) al controllo tramite Window.SendControlMessage(IdControllo,IdMessaggio,WParam,Lparam).
CharFormat.DataPtr restituisce appunto un puntatore alla struttura già definita precedentemente. Ora, il problema è che non riesco a risalire all'errore che mi genera, SendControlMessage restituisce solo 0, GetLastError restituisce 0, e quindi la chiamata non funziona. Cosa c'è che non va? Ho sbagliato a definire la struttura? O cosa?
(se c'è bisogno di ulteriori informazioni io sono qua :D )
grazie infinite :)
ho un problema con uno script win32 in JScript. In pratica lo script è questo (l'ho messo come php perchè la sintassi più o meno è quella):
var WM_USER = 0x400;
var EM_SETCHARFORMAT = WM_USER + 68;
var SCF_ALL = 0x4;
var SCF_SELECTION = 0x1;
var CFM_UNDERLINE = 0x4;
var CFM_FACE = 0x20000000;
var CFM_BOLD = 0x1;
var CFM_CHARSET = 0x8000000;
var CFM_UNDERLINE = 0x4;
var CFE_BOLD = 0x1;
var CFE_UNDERLINE = 0x4;
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditstructures/charformat.asp
var charFormat = Interop.Allocate(90);
charFormat.WriteDWORD(0, charFormat.Size); //cbSize
charFormat.WriteDWORD(4, CFM_BOLD); //dwMask
charFormat.WriteDWORD(8, CFE_BOLD); //dwEffects
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_setcharformat.asp
var ret = Wnd.SendControlMessage("rchNick", EM_SETCHARFORMAT, SCF_SELECTION, charFormat.DataPtr);
Debug.Trace("Ret: " + ret);
}
Il compito dello script è far diventare grassetto il testo selezionato nella RichBox chiamata "rchNick". Wnd sarebbe la finestra contenente la RichBox. Prima di tutto lo script memorizza le varie costanti per le API, poi alloca lo spazio (Interlop.Allocate) per la struttura CHARFORMAT (descritta in MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditstructures/charformat.asp)) e poi manda il messaggio (EM_SETCHARFORMAT (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_setcharformat.asp) al controllo tramite Window.SendControlMessage(IdControllo,IdMessaggio,WParam,Lparam).
CharFormat.DataPtr restituisce appunto un puntatore alla struttura già definita precedentemente. Ora, il problema è che non riesco a risalire all'errore che mi genera, SendControlMessage restituisce solo 0, GetLastError restituisce 0, e quindi la chiamata non funziona. Cosa c'è che non va? Ho sbagliato a definire la struttura? O cosa?
(se c'è bisogno di ulteriori informazioni io sono qua :D )
grazie infinite :)