کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

SWP_FRAMECHANGED



Const SWP_FRAMECHANGED=&H20



Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.



اعمال سبک یا استایل های قاب و چهارچوب جدید که با استفاده از تابع SetWindowLong تنظیم میشود .ارسال پیام WM_NCCALCSIZE به پنجره حتی اگر سایز پنجره تغییر نکند. اگر این flag مشخص نشود WM_NCCALCSIZE فقط زمانی ارسال می شود که سایز پنجره تغییر داده شود.


پس زمانیکه بخواهید از پیام WM_NCCALCSIZE برای محاسبه طول و عرض یا مختصات پنجره ای استفاده کنید در صورتیکه پنجره سایزش تغییر نمی کند از تابع SetWindowLong و استایل SWP_FRAMECHANGED استفاده می کنید که هگزار دسیمال آن 20 است و دسیمال برابر 14  ( 20 تقسیم بر 16 خارج تقسیم و مانده کنار هم قرار می گیرند اگر مانده بیشتر و خود 10 شد به ترتیب A تا F جایگزین مانده میشود ) 


Type RECT

Left As Long

Right As Long

Top As Long

Bottom As Long

End Type


Type WINDOWPOS

hwnd As Long 'LongPtr ( 64 bit )

hWndInsertAfter As Long 'LongPtr ( 64 bit )

x As Long ' Left 

y As Long ' Top

cx As Long ' Width in pixle

cy As Long ' Height in pixle

flags As Long

End Type


Type NCCALCSIZE_PARAMS

rgrc(3) As RECT

lppos As WINDOWPOS

END TYPE



the first rectangle contains the new coordinates of a window that has been moved or resized, that is, it is the proposed new window coordinates. The second contains the coordinates of the window before it was moved or resized. The third contains the coordinates of the window's client area before the window was moved or resized



در آرایه rgrc : ( حاوی اطلاعات زیر است ) 

اولین مستطیل حاوی مختصات پنجره جدید است که تغییر سایز یا جابجا شده ( Move )  ... مختصات جدید است 

دومین  مختصات پنجره قبل از تغییر سایز یا جابجایی است.

سومین  حاوی مختصات پنجره ناحیه Client قبل از تغییر سایز یا جابجا شدن است.


در پیام WM_NCCALCSIZE اگر wParam فالز باشد lParam به ساختار RECT اشاره می کند و اگر True باشد به ساختار NCCALCSIZE_PARAMS.



Dim ncc AS NCCALCSIZE_PARAMS

Debug.Print wParam

CopyMemory ncc,lParam,ByVal Len(ncc)

Debug.Print ncc.rgrc(1).Right

CopyMemory lParam,ncc,ByVal Len(ncc) 


پیام WM_SETFOCUS : 


پس از اینکه فوکوس صفحه کلید را به دست آورد ، این پیام به پنجره ارسال میشود و wParam حاوی هندلی به پنجره ای است که فوکوس کیبورد را از دست داده ( با Tab یا ماوس به کنترل دیگری می روید ) و lParam هم صفر است .


می توانید در این پیام با تابع SetFocus ، فوکِس یا فوکوس را به کنترل مورد نظر برده تا WM_NCCALCSIZE ارسال شود و بتوانید مختصات پنجره مورد نظر را بگیرید.












EM_SETMARGINS پیامی برای تنظیم حاشیه در EDIT BOX



تنظیم حاشیه در کنترل EDIT


 : wparam

EC_LEFTMARGIN=&H1

EC_RIGHTMARGIN=&H2

:  Msg

    EM_SETMARGINS=211 '&HD3

 

دسیمال 211 تبدیل به هگزا - ->> عدد دسیمال تقسیم بر 16 میشود 13 معادل آن D و حاصل تفریق عدد211 و حاصلضرب 13 در 16 میشود 3 .... نهایتا از کنار هم گذاشتن آنها D3 بدست می آید ، در  تابع زیر پارامتر هندل Et ذکر شده و منظور گرفتن هندل Edit است که با FindWindowEx انجام شده.


SendMessageA Et, 211, &H1, ByVal  25

       SendMessageA Et, 211, &H2, ByVal 65536 * 50



تست شده طبق شکل زیر که تمام تکست داخل EDIT BOX با Ctrl+A انتخاب شده در نتیجه مارجین یا حاشیه مشخص است . البته باید دید تغییر فونت چه تاثیری خواهد گذاشت .





SWP_FRAMECHANGED  0x0020


Applies new frame styles set using the SetWindowLongfunction. Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZEis sent only when the window's size is being changed.


SWP_FRAMECHANGED = &H20

Fully redraw the window in its new 

.position


SWP_FRAMECHANGED   Sends a WM_NCCALCSIZEmessage to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.



ارسال آیکون به باتن با پیام BM_SETIMAGE و تابع ارسال پیام به دیالوگ باکس و آیدی باتن که یک است.  image_icon=1 , un1=1 

CreatePen ساخت قلم برای ترسیم



HPEN CreatePen( int iStyle, int cWidth, COLORREF color );


()Edit::OnNcPaint

pDC=GetDC( ) ? GetWindowDC
GetWindowRect Edithwnd,Crect 
OffsetRect Crect,-rect.left,-rect.top
'Draw a single line around the outside
(brush=RGB( 255, 0, 0
FrameRect pDC,Crect,brush ReleaseDC hwnd,pDC


Const PS_SOLID = 0
Const PS_DASH = 1
Const PS_DOT = 2
Const PS_DASHDOT = 3
Const PS_DASHDOTDOT = 4
Const PS_NULL = 5
Const PS_INSIDEFRAME = 6



((hPen=CreatePen(PS_DASH,0,RGB(0,255, 0
(hOldPen=SelectObject(hDC,hPen
Ellipse hDC, 100, 150, 350, 300
SelectObject hDC, hOldPen
DeleteObject hPen




مورد زیر طبق شکل تست شده 


حتما در WndProc در پیام SHOWWINDOW تابع زیر اعمال گردد
SetWindowPos hwnd,0,0,0,0,0,SWP_FRAMECHANGED 

ساب کلاس کردن  کنترل  Edit 

Public Function SubClassEdit(ByVal hwnd As LongPtr, ByVal Msg As Long, ByVal wParam As LongPtr, _
                            ByVal lParam As LongPtr, ByVal uId As LongPtr, ByVal dwData As LongPtr) As Long
Dim nccsp As NCCALCSIZE_PARAMS
Select Case Msg

Case WM_NCPAINT
     (hdc = GetDC(hwnd
     Dim rClient As RECT
     GetClientRect hwnd, rClient
    ( hpen = CreatePen(ps_solid, 2, vbRed
    ( holdpen = SelectObject(hdc, hpen
     RoundRect hdc, rClient.Left - 2, rClient.Top - 2, rClient.right + 2, rClient.bottom + 2, 6, 6
     ReleaseDC hwnd, hdc
     DeleteObject holdpen
Case WM_DESTROY
      RemoveWindowSubclass hwnd, SubClassEdit, 0
      End Select
      
(SubClassEdit = DefSubclassProc(hwnd, Msg, wParam, ByVal lParam
                            
End Function


SWP_FRAMECHANGED 0x0020

Applies new frame styles set using the SetWindowLongfunction. Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZEis sent only when the window's size 
.is being changed