ComboBox.ItemData property (Access) :
مثال زیر باز شدن گزارش با شرط خاصی مشخص شده، یک لیست MultiSelection است و چنانچه کاربر یک یا چند داده را انتخاب کند و باتن cmdOpenReport را بفشارد گزارش حاوی داده ها ی گرفته شده باز میشود.
expression.Column (Index, Row)
پراپرتی کالمن در آبجکت کمبو و لیست باکس که index اشاره به ستون مورد نظر دارد و Row هم اشاره به ردیف و از صفر شروع میشوند. فرضا شما میخواهید داده ستون دو و ردیف سوم را بگیرید.
.Column(1,2)
زمانیکه پراپرتی MultiSelect کنترل لیست باکس به None تنظیم شود فقط یک آیتم می تواند انتخاب شود و پراپرتی Selected می تواند به True تنظیم شود.وقتی پراپرتی MultiSelect کنترل لیست باکسی به Simple یا Extended تنظیم شود هر کدام یا تمام آیتم های انتخاب شده می تواند پراپرتی Selected برابر True خودش را داشته باشد. پس مشخص شد با Selected می توانید مشخص کنید کدام آیتم یا آیتم ها Select شده اگر True باشد انتخاب میشود و اگر به False تنظیم شود از حالت انتخاب در می آید.
لیست باکس چند انتخابی یا Multi-Selection باند شده به فیلدی همیشه دارای پراپرتی Value مساوی با Null است . می توان از پراپرتی Selected یا مجموعه ItemSelected برای بازیابی اطلاعات آیتم هایی که انتخاب شده اند ، استفاده نمود.
عبارت زیر پنجمین آیتم در لیست را انتخاب ( Select ) می نماید
نام کنترل لیست باکس در اینجا ListBox1 است
Me!Listbox1.Selected(4)=True
در فرم امکان ساخت کنترل کمبو باکسی که MultiSelection باشد ، نیست و فقط در جدول این پراپرتی برای فیلد از نوع کمبو باکس وجود دارد.
Type NCCALCSIZEPARAM
rgrc(3) As RECT
lpos As WINDOWPOS
End Type
lParam
If wParam is TRUE, lParam points to an NCCALCSIZE_PARAMS structure that contains information an application can use to calculate the new size and position of the client rectangle.
If wParam is FALSE, lParam points to a RECTstructure. On entry, the structure contains the proposed window rectangle for the window. On exit, the structure should contain the screen coordinates of the corresponding window client area
Function fnListSubClass(ByVal hwnd As LongPtr,ByVal msg As Long,ByVal wParam As LongPtr,ByVal lParam As LongPtr)
Select Case msg
case WM_NCCALCSIZE
CallWindowProc listboxProc,hwnd,msg, wParam, lParam
'what is doing???
RECT* pRect = (RECT*)lParam
pRect->left+=4;
pRect->top+=23;
pRect->bottom+=23;
return 0;
case WM_NCPAINT
hdc=GetDC(hwnd) GetClientRect hwnd,rect
SetRect rect,0,0,4, rect.bottom brush=LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BORDER))
newBrush=CreatePatternBrush(brush)
oldBrush=SelectObject(hdc, newBrush) FillRect hdc,rect,newBrush SelectObject hdc, oldBrush
DeleteObject newBrush
DeleteObject oldBrush
DeleteObject brush
UpdateWindow hwnd
ReleaseDC hwnd, hdc
Exit Function
fnListSubClass=CallWindowProc(listboxProc, hwnd
(msg, wParam, lParam,
((CreateSolidBrush(RGB(51,94,168,
((CreateSolidBrush(RGB(255,255,255,
We handle WM_NCCREATE
because we want to associate so data with the LISTBOX and make a minor modification to the LISTBOX style. Creating our data is a simple and store in the window properties.
We modify the style by adding the WS_HSCROLL
if the LISTBOX doesn't already have it. Without this style the horizontal scrollbar won't show no matter what we do.
Here we simply destroy our data structure and remove it from the window properties. Nothing exciting.
مثالی دیگر از مطالب به اشتراک گذاشته در سایت خارجی
فقط در CopyMemory سایز ۴۰ را به آرگومان سومش تخصیص دهید و از ByVal lParam استفاده کنید.
در مورد LB_GETTEXT :
The return value is the length of the string, in TCHARs, excluding the terminating null character. If wParam does not specify a valid index, the return value is LB_ERR.
If the list box has an owner-drawn style but not the LBS_HASSTRINGS style, the buffer pointed to by the lParam parameter receives the value associated with the item (the item
(data
Vb Uses Unicode For Text String hence delcare SendMessageW instead Of SendMessageA****
: Important Notes
Use -----> LBS_OWNERDRAWFIXED Or LBS_HASSTRINGS
use -----> SendMessageW, / TextoutW
To Add Item it is important to Use SendMessageA And Byval "Item" you want to add like
"SendMessageA hlist, &H180, 0, ByVal "FFF
case WM_DRAWITEM
Dim Buff As String * 255 ' important
GetClientRect pdis.hwndItem, pdis.rcItem
r = pdis.rcItem
l = SendMessageW(pdis.hwndItem, LB_GETTEXT, pdis.itemID, ByVal Buff
SendMessageA pdis.hwndItem, LB_GETITEMRECT, pdis.itemID, r
TextOutW pdis.hdc, r.Left, r.Top, ByVal Buff, l
"SendMessageA hlist, &H180, 0, ByVal "FFF
"SendMessageA hlist, &H180, 0, ByVal "HHT
"SendMessageA hlist, &H180, 0, ByVal "123E
"سلام" SendMessageA hlist, &H180, 0, ByVal
"حاجی"SendMessageA hlist, &H180, 0, ByVal
if pdis.itemid mod 2=. then SetTextColor Else SetTextColor
If pdis.itemAction = ODA_SELECT Then
( l = SendMessageW(pdis.hwndItem, LB_GETTEXT, pdis.itemID, ByVal Buff
SetWindowTextW hwnd, ByVal Buff
End If
Static OldRect
If pdis.itemAction = ODA_SELECT Then
( l = SendMessageW(pdis.hwndItem, LB_GETTEXT, pdis.itemID, ByVal Buff
SetWindowTextW hwnd, ByVal Buff
r.Left = r.Left + 15
(FillRect pdis.hdc, r, GetSysColorBrush(0
InvalidateRect pdis.hwndItem, OldRect, 1
OldRect = r
End If
%WS_CHILD Or %LBS_OWNERDRAWFIXED Or %LBS_MULTICOLUMN Or %LBS_NOTIFY Or %WS_TABSTOP Or %WS_HSCROLL, %WS_EX_CLIENTEDGE
vb Uses Unicode for text string so use SendMessageW instead Of SendMessageA Function
The list box has the LBS_OWNERDRAWFIXED and LBS_HASSTRINGS styles, in addition to the standard list box styles.
LBS_HASSTRINGS
LB_GETTEXT
The return value is the length of the string, in TCHARs, excluding the terminating
(null character ( hence buff+1
If the list box has an owner-drawn style but not the LBS_HASSTRINGS style, the buffer pointed to by the lParam parameter receives the value associated with the item the item data
Means Use Byval
If the list box has WS_HSCROLL style and you insert a string wider than the list box, send an LB_SETHORIZONTALEXTENT message to ensure the horizontal scroll bar appears.
Case WM_MEASUREITEM
Case WM_DRAWITEM
Dim pdis As DRAWITEMSTRUCT
Dim tm As TEXTMETRIC
Dim hDCMem As LongPtr
CopyMemory pdis, ByVal lParam, 40
Select Case pdis.itemAction
Case ODA_SELECT, ODA_DRAWENTIRE
Dim p As RECT
GetClientRect pdis.hwndItem, pdis.rcitem
BitBlt pdis.hdc
SetBkMode pdis.hdc, 0
SetTextColor pdis.hdc, vbRed
TextOutA pdis.hdc, pdis.rcitem.Left,pdis.rcitem.Top, buffer$, 5
CopyMemory lParam, pdis,40
End Select
گرفتن تعداد آیتم ها در لیست باکس
LB_GETCOUNT message
Gets the number of items in a list box
wParam,lParam
Not used; must be zero
Dim index As Integer
Dim textBuff As String
(textBuff = Space(255
(NumItems=SendMessage(hWndList,LB_GETCOUNT,0,0
index use GETCURSEL'
Gets the index of the currently selected item)'
(if any, in a single-selection list box'
SendMessageW hWndList, LB_GETTEXT,index, textBuff
MsgBox textBuff
docs.microsoft.com/enmeasureitemstruct
مثالی از کشیدن نقطه چین دور آیتم سلکت شده به زبان دیگر
if lpdis->itemState & ODS_SELECTED
* Set RECT coordinates to surround only the'
* bitmap.
rcBitmap.left=lpdis->rcItem.left
rcBitmap.top=lpdis->rcItem.top
rcBitmap.right=lpdis->rcItem.left+XBITMAP
rcBitmap.bottom=lpdis->rcItem.top + YBITMAP
* Draw a rectangle around bitmap to indicate'
* the selection.
DrawFocusRect lpdis->hDC, &rcBitmap
استفاده در مثال شکل بالا به زبان دیگر
Display the text associated with the item'
SendMessage lpdis->hwndItem
LB_GETTEXT,lpdis->itemID, (LPARAM) tchBuffer,
GetTextMetrics lpdis->hDC, &tm
GetClientRect lpdis.hwnditem,lpdis.rcItem'
-y=(lpdis->rcItem.bottom+lpdis->rcItem.top
tm.tmHeight) / 2
6+TextOutA lpdis->hDC,XBITMAP
(y,tchBuffer,len(tchBuffer,
SelectObject hdcMem, hbmpOld
DeleteDC hdcMem
The GetTextMetrics function fills the specified buffer with the metrics for the currently selected font
BOOL GetTextMetrics( HDC hdc, LPTEXTMETRIC lptm );
Parameters
hdc
A handle to the device context
lptm
A pointer to the TEXTMETRIC structure that receives the text metrics.
Type TEXTMETRICA
tmHeight As Long
tmWeight As Long
tmItalic As Long
tmMaxCharWidth As Long
tmUnderlined As Long
tmCharSet As Long
End Type
: case WM_MEASUREITEM
;lpmis = (LPMEASUREITEMSTRUCT) lParam
;lpmis->itemHeight=20
;return TRUE
(DrawEntire(LPDRAWITEMSTRUCT lpDStruct
;(CRect rect(lpDStruct->rcItem
;HDC dc =lpDStruct->hDC
;MYLISTITEM *a = (MYLISTITEM*)lpDStruct->itemData
TextOut(dc,rect.left+20,rect.top+2,a->title,strlen(a-
;((title<
;(SelectObject(dc,hOldFont
;(SelectObject(dc,oldpen
;(SelectObject(dc,oldbrush
;("strcpy(logFont.lfFaceName,"courier
;(hFont = CreateFontIndirect(&logFont
(hOldFont = (HFONT)SelectObject(dc,hFont
LongInt2Int wParam, iHw, iLW