CookieRevised
Elite Member
    

Posts: 15497 Reputation: 173
– / / 
Joined: Jul 2003
Status: Away
|
RE: [REQU] Patchou PlusWnd::Combo_GetItemText not exist why?
code: function cb_GetItem(w,d,n){
var CB_GETCOUNT = 0x146
var CB_GETLBTEXT = 0x148
var CB_GETLBTEXTLEN = 0x149
var t = w.SendControlMessage(d,CB_GETCOUNT, 0, 0)
//Debug.Trace("Total= " +t)
for(var i=0; i < t; i++) {
var length = w.SendControlMessage(d, CB_GETLBTEXTLEN, i, 0)
var Data = Interop.Allocate((length * 2) + 2)
if (i == n) {
Interop.Call("user32", "SendMessageW", w.GetControlHandle , CB_GETLBTEXT, i, Data);
//w.SendControlMessage(d,CB_GETLBTEXT,i,Data) not work
return Data.ReadString(0)
}
}
}
- You don't need the loop.
- Inside the loop you don't need to check if the index is the same as the parameter
- w.SendControlMessage(d,CB_GETLBTEXT,i,Data) does not work because you need to give a pointer to the Data object, not the object itself: w.SendControlMessage(d,CB_GETLBTEXT,i,Data.DataPtr)
The above code can be done way shorter and much faster: code: function Combo_GetItemText2(pPlusWnd, sControlId, nItemIdx) {
if (nItemIdx >= 0 && nItemIdx <= pPlusWnd.Combo_GetCount(sControlId)) {
var nLength = pPlusWnd.SendControlMessage(sControlId, 0x149 /* CB_GETLBTEXTLEN */, nItemIdx, 0);
var Buffer = Interop.Allocate(nLength * 2 + 2);
pPlusWnd.SendControlMessage(sControlId, 0x148 /* CB_GETLBTEXT */, nItemIdx, Buffer.DataPtr);
return Buffer.ReadString(0)
} else {
return ''
}
}
And this can be made even more shorter and faster: code: function Combo_GetItemText(pPlusWnd, sControlId, nItemIdx) {
var hControl = pPlusWnd.GetControlHandle(sControlId);
var nLength = Interop.Call("User32", "SendMessageW", hControl, 0x149 /* CB_GETLBTEXTLEN */, nItemIdx, 0);
var Buffer = Interop.Allocate(nLength * 2 + 3);
Interop.Call("User32", "SendMessageW", hControl, 0x148 /* CB_GETLBTEXT */, nItemIdx, Buffer.DataPtr);
return Buffer.ReadString(0);
}
quote: Originally posted by Flash
its possible this waycode: cb_GetItem(ww,"cbc",0) -> ww.cb_GetItem("cbc",0)
??
no
-------------------------------------------------------------------------------------------
PS: please do not make double posts. Double posting is posting more than once in a short time while nobody else made a reply. Read the forum rules.
This post was edited on 06-29-2007 at 12:06 AM by CookieRevised.
.-= A 'frrrrrrrituurrr' for Wacky =-.
|
|