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

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

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

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

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

ویژگی SelHeight در بازگردانی تعداد رکوردهای انتخاب شده



مطلب زیر برای دوستانی ارائه شد که داکیومنت مورد نظر را طلب کرده بودند مبنی بر بازیابی اطلاعات فیلدها در رکوردهای انتخاب شده 



The SelHeight property returns a Long Integer value between 0 and the number of records in the datasheet or continuous form. The setting of this property specifies or returns the number of selected rows in the selection rectangle or the number of selected records in the continuous form.


طبق فرمایشات بالا این ویژگی مقدار Long integerc بین صفر و تعداد رکوردها در دیتا شیت یا فرم کانتینیوس را بر می گرداند یعنی چنانچه شما ردیف هایی را انتخاب کنید تعداد رکوردهای انتخابی را به شما اعلام می نماید ( Zero-base است و عدد صحیح ) 


برای بازیابی اطلاعات چه خواندن چه ویرایش یا کلا دستکاری یا manipulate می بایست به رکوردست دسترسی پیدا کنید چه از طریق شئ DAO یا ADO که سریعتر است . و از Move برای رفتن به اولین رکوردانتخابی استفاده بنمائید و سپس لوپ بزنید به همین راحتی .



















ایرج میرزا : 


بگـــــــو آن عـــــــارف عـــــــامی نمـــــــا راکـــه گـــم کـــردی تـــو ســـوراخ دعـــا را






بارکد Code 128



نماینده دوآتشه حامی طرح صیانت در توئیتی منتقدان و مخالفان این طرح را گرگ‌های مجازی و سگ‌های قلاده بلند خطاب کرد.




مروری بر نحوه ساخت بارکد خطی 128


Code_128



طراحی بارکد خطی نسبت به Qr Code آسانتر است و کسانیکه داکیونت مربوطه را مطالعه بنمایند می توانند در Report و با تابع line اقدام به کشیدن خطوط با وزن  مشخص بنمایند که دستگاه اسکنر بارکد قادر به شناسایی آن باشد برای ساخت Qr Code نظر خاصی ندارم کسانیکه به Matrix مسلط هستند فقط می توانند نسبت به ساخت طبق داکیومنت اقدام بنمایند ولی در اینجا Code 128 فقط بیان می شود.هر چقدر خطوط پررنگتر و از وزن قابل قبولی برخوردار باشد سریعتر خوانده میشود خطوط کمرنگ اسکنر را به اشتباه می اندازد پس زمان چاپ باید به این نکته دقت بنمائید. ( کمرنگی خطوط یا وزن غیر استاندارد مساویست با نتیجه اشتباه و دور از انتظار !!! ) 



بارکد خطی 128 هفت بخش دارد : 

منطقه آرام یا Quiet Zone که سفید است 

علامت شروع 

داده کد شده

علامت چک و بررسی

علامت پایان

میله نهایی یا Final Bar

منطقه آرام ... سفید است 

Check Symbol ازمانده  جمع وزنی تمام سمبل ها به 103 بدست می آید 


چنانچه به مطالب زیر یا مطالعه داکیونت آن در لینک یاد شده مسلط شوید با مداد می توانید بارکد خودتان را در برگه با زمینه سفید ترسیم کرده اسکنر را روی آن قرار داده و لذت ببرید !!!


شروع کار : 


کد 128 شامل 108 علامت است : 103 علامت داده ، 3 علامت شروع و 2 علامت پایان . هر علامت حاوی سه میله سیاه و سه فضای سفید با عرض های گوناگون می باشد. هر بار و فضای خالی یک تا چهار ماژول پهنا دارد، و علامت ها عرض های غیر قابل تغییر دارند : جمع عرض های سه میله سیاه و سفید 11 ماژول است.


داده کد شده ، شروع / پایان : 

هر علامت در بارکد شامل سه میله و سه فضای خالی است . هر میله یا فضا 1 تا 4 واحد پهنا دارد ، جمع عرض های میله ها باید زوج باشند ( 4 ، 6 یا 8 واحد ) ، جمع عرض  فضاها باید فرد باشند ( 3 ، 5 یا 7 واحد )  و جمع کل 11 واحد برای هر علامت است ، برای مثال کد کردن کاراکتر اسکی 0 می تواند بعنوان 10011101100 دیده شود ( view ) ( در جدول لینک مربوطه کد صفر و یکی برای هر کاراکتر داده شده ) ... عدد 1 یک میله است و 0 یک فضا ، عدد یک اگر تک باشد نازکترین میله ( از نظر عرض ) در بارکد است . سه تا یک پشت سرهم نشان می دهد که میله سه برابر ضخیم تر از عدد یک تکی است.


بارکد خطی کد 128 سه مدل دارد A تا C که C حروف هم بزرگ و هم کوچک انگلیسی  را هم شامل می شود برای مثال زیر در جدول لینک بالا از  مدل یا ایندکس A برای محاسبه Check Sum استفاده شده.  

PJJ123C

در محاسبه Check Sum کد شروع دارد که عدد 103 در نظر گرفته شده و بعد موقعیت هر کاراکتر در رشته PJJ123C در عدد دسیمال کاراکتر ضرب شده فرضا موقعیت کاراکتر C در رشته PJJ123C هفت است یا هفتمین کاراکتر در نتیجه عدد 7 در دسیمال کاراکتر  ( 35 ) ضرب شده و عدد 245=35×7 بدست آمده. ( در جداول ببینید کد هگزا و دسیمال هر کاراکتر داده شده می توانید جدول را به جداول اکسس اضافه کنید و با Dlookup دسیمال هر کدام را بگیرید و در پوزیشن یا موقعیت کاراکتر در رشته ضرب کنید  ... در آخر 103 باضافه اعداد بدست آمده باهم جمع می شوند و بر 103 تقسیم خواهند شد عدد باقیمانده میشود Check Sum که در ستون دسیمال عدد مورد نظر ملاحظه می شود در دو ستون آخر این عدد کد ( صفر و یک ) و ضخامت هر میله چه یک که سیاه است و چه 0 که فًای خالی یا سفید است مشخص شده ( در بالا گفته شد 3 تا عدد 1 پشت سرهم در باینری کاراکتر یعنی نسبت به عدد 1 تکی سه برابر ضخامتش بیشتر است )


C : Hex=23 

2×16^1+3×16^0=2×16+3×1=32+3=35(Decimal)

البته در اکسس تابع Decimal احتمال زیاد وجود دارد نیازی به محاسبات توسط شما نیست !!!

حروف a تا f در هگزا معرف اعداد 10 تا 15  است

Hex ( 3f ) =3×16^(1)+15×16^(0)=63 ( Dec )

اگر بخواهید تک تک کاراکترها را در نظر بگیرید طول بارکدتون زیاد میشه ، در نتیجه اگر رشته مورد نظرتون فقط عددی باشد می توانید دو تا دوتا در نظر بگیرید و اگر تک افتاد همان عدد جداگانه در نظر گرفته شود فرضا 

27895023457824045

27 89 50 23 45 78 24 04  5 

و از FNCx استفاده می شود که طول بارکد کمتر از زمانی شود که کاراکتر ها بصورت تکی در نظر گرفته می شود ترکیبی از عدد و حرف در این بارکد خطی قوانین مخصوص به خود را دارد که باید مطالعه شود


شرح تصویر بالا ،  بارکد خطی Wikipedia : ( کد B شامل حروف کوچک و بزرگ ) 

1-Quiet Zone : Min 10x Wide
2-Start B (104 )  211214
3-Encode Data
4- Calc Check Sum  : 
 1×104+1×55+2×73+3×75+4×73+5×80+6×69+7×68+8×73+9×65=3281 
مانده تقسیم  3281/103 می شود 88
88 in table : 421211
5-Stop Pattern : 2331112
6-Quiet Zone

برای تعیین ضخامت پهنای میله های سیاه و سفید ( اولین میله توپُر یا Bar در هر مرحله سیاه است و یک درمیان سفید ) به جدول مراجعه شد برای فقط اعداد از Code C استفاده شود ... چنانچه رشته شامل اعداد و حروف باشد حتما حروف در اول یا وسط یا آخر در نظر گرفته شود تا طبق FNC1 رویه یکسانی تولید شود اگر حروف پراکنده باشد چندین تابع برای تولید یک بارکد باید استفاده کنید.


سن 43 سالگی : 



کلید خوردن عملیات پرچم دروغین توسط زِلنسکی : 


عملیات پرچم دروغین (به انگلیسیFalse flag operations) به عملیاتهایی گفته می‌شود که توسط نهادهای نظامی، شبه نظامی، اطلاعاتی یا سیاسی به گونه‌ای انجام می‌شود که این تصور به وجود آید که گروه‌ها یا کشورهای دیگری این عملیاتها را انجام داده‌اند.[۱] برای مثال استفاده نیروهای یک طرف درگیر در جنگ از پرچم و لباس نظامی طرف مقابل برای حمله و قتل ‌عام ساکنین یک روستا و سپس متهم کردن آن طرف به انجام این کشتار نمونه‌ای از عملیات پرچم دروغین محسوب می‌شود. هدف از انجام عملیات پرچم دروغین مخفی نگه داشتن هویت مرتکبین اصلی یا بدنام کردن طرف مقابل و ایجاد بهانه‌ای برای حمله به او است.




سریال «نرگس» به تهیه کنندگی مهران مهام در سال ۱۳۸۵ پخش شد،نقش اصلی این سریال را پوپک گلدره بازی می‌کرد که در اواسط بازی، بر اثر تصادف با اتومبیل به کما رفته و پس از ۸ ماه درگذشت. نقش او را ستاره اسکندری ادامه داد.

«بی همگان» اخرین هنرنمایی زهره فکور را ثبت خواهد کرد.






TitleBar



ابعاد باتن ها در کپشن با تابع 

getsystemmetrics





Type CaptionButton
uCmd As Long ' command to send when clicked(WM_COMMAND)
nRightBorder As Integer ' Pixels between this button and buttons to the right
hBmp As HBITMAP ' Bitmap to display
fPressed As Boolean ' Is the button pressed in or out?
End Type



Type CustomCaption
buttons(MAX_TITLE_BUTTONS) As CaptionButton
nNumButtons As Integer
fMouseDown As Boolean
wpOldProc As LongPtr
iActiveButton  As Integer
End Type


WM_NCPAINT : 


Dim hrgn As LongPtr,temprgn As LongPtr
Dim rc As RECT
GetWindowRect hWnd,rc
If wParam=1 Then 
hrgn=CreateRectRgnIndirect(rc)
Else
hrgn=wParam
End if
For i=1 To ctp.nNumButtons


'A value of TRUE results in window-relative coordintes (from the top-left of the window). A value of FALSE results in screen coordinates.


GetButtonRect ctp,hwnd,i,rc,False ' in screen coord
temprgn=CreateRectRgnIndirect(rc)
CombineRgn hrgn,hrgn,temprgn,RGN_XOR
DeleteObject temprgn
Next



Dim hDc As LongPtr
hDc=GetWindowDc(hWnd)
For i=1 To ctp.nNumButtons
GetButtonRect ctp,hWnd,i,rc,True
if ctp.buttons(i).fPressed Then
DrawFrameControl hdc,rcbtn,DFC_BUTTON,DFCS_BUTTONPUSH+DFCS_PUSHED
Else
DrawFramControl hdc,rcbtn,DFC_BUTTON,DFCS_BUTTONPUSH
End If 
Next
ReleaseDc hDc
if wParam=1 Then DeleteObject hrgn


WM_SETTEXT , WM_NCACTIVATE :



dwStyle=GetWindowLongPtr(hWnd,GWL_STYLE)
SetWindowLongPtr hWnd,GWL_STYLE,dwStyle And WS_VISIBLE
ret=CallWindowProc( ctp.wpOldProc,hWnd,Msg,wParam,lParam)
SetWindowLongPtr hWnd,GWL_STYLE,dwStyle
Caption_NcPaint(hWnd,(HRGN) 1)


WM_NCLBUTTONDOWN : 


Dim i As Integer
Dim rc As RECT
Dim pt AS POINTAPI
'Mouse Coordinate
pt.x=Loword lParam
pt.y=Hiword lParam 
For i=1 To ctp.nNumButtons
' Get Screen Coordinate of each button
GetButtonRect ctp,hWnd,i,rc,False
InflateRect rc,0,2
if PtInRect(rc,pt) Then
ctp.iActiveButton=i
ctp.buttons(i).fPressed=True
ctp.fMouseDown=True
SetCapture hWnd
RedrawCaption hWnd
End if
winProc=0
Next




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


Function  GetWinRect(hWnd) 

Dim rc As RECT

Dim p1 As POINTAPI,p2 As POINTAPI

GetClientRect hWnd,rc

With rc

p1.x=rc.Left : p2.x=rc.Right

p1.y=rc.Top : p2.y=rc.Bottom

ScreenToClient hWnd,p1

ScreenToClient hWnd,p2

.Left=p1.x : .Right=p2.x

.Top=p1.y : .Bottom=p2.y

End With

GetWinRect=rc

End Function




























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 ارسال شود و بتوانید مختصات پنجره مورد نظر را بگیرید.












ساختار TBADDBITMAP یا اضافه کردن تصویر با پسوند bmp به ToolBar



داکیومنت زیر اضافه کردن فایل bmp به باتن در Toolbar 


commctrl-tbaddbitmap


Type TBADDBITMAP

hInst As Long

nID As Long

End Type


hInst=GetWindowLongPtr(hWnd,GWL_HINSTANCE[-6])


nID="AddressOfFile"



این ساختار با TB_ADDBITMAP استفاده می شود که lParam یک نشانگر به TBADDBITMAP و wParam تعدادتصاویر bmp است منتهی قبل از اینکار باید پیام TB_BUTTONSTRUCTSIZE ارسال شود( wParam سایز ساختار TBBUTTON به بایت است و lParam باید صفر باشد )


Type TBBUTTON

iBitmap As Long

idCommand As Long

fsState As Byte

fsStyle As Byte

dwData As LongPtr

End Type



toolbar-button-states



Declare PtrSafe Function CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any,Source As Any,ByVal Length As Long)


Declare PtrSafe Function ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (Destination As Any,ByVal Length As Long)





۸ اسفند 1400 : عباس عبدی خطاب به مسئولان سیاست خارجی: رئیس جمهور اوکراین روی حمایت غرب حساب کرد و باخت؛ شما هم روی حمایت چین و روسیه حساب نکنید... البته آقای عبدی روسیه و چین ابرقدرت را با اوکراینی که هر کشوری قدرت حمله  و گرفتن آن را دارند ، مقایسه می کند !!!





9 اسفند 1400 : 




طبق گزارش تایمز 400 شبه نظامی واگنر در کی یف مستقر شده تا رئیس جمهور و 23 شخصیت دیگر دولتی را ترور کنند.

هدف آنها تلاش برای استقرار دولت دست نشانده در اوکراین با ترور مردان دولتی در اوکراین است.

شبه نظامیان واگنر یا همان ارتش مستاجری واگنر، توسط الیگارش معروف یوگنی پریگوژین، متحد دولت، ملقب به آشپز پوتین اداره می‌شوند.










































[;database;path&name;pwd=].[tbl1]


خانواده های ولائی



۶ اسفند 1400 : 


عضو شورای مرکزی موتلفه:خانواده‌های ولایی باید با لبیک به رهبری و فرزند آوری، دشمن را ناامید کنند


چون روسیه به خوبی از قبل می دانست در صورت موفقیت مذاکرات وین، احیای برجام و لغو تحریم ها ایران می تواند در کمترین زمان به پتانسیل بالایی برای صادرات نفت و گاز به اروپا و دیگر کشورها بدل شود. لذا مسکو عملاً سعی کرد مذاکرات وین را از طرف جمهوری اسلامی ایران به دست بگیرد. در این بین متاسفانه و صد افسوس دولت رئیسی و باقری کنی هم به طور کامل مدیریت مذاکرات را به روس ها سپردند تا عملا فضای مناسبی برای کرملین شکل بگیرد که اهداف و منافع خود را در وین پیش ببرد و نتیجه آن این است که تا امروز برجام و مذاکرات وین به نتیجه نرسید تا این مذاکرات به عنوان یک کارت برنده در اختیار روسیه قرار بگیرد. از دیروز پنج شنبه هم که پوتین جنگ در اوکراین را آغاز کرد یقین بدانید که کرملین نگاه دیگری به مذاکرات وین خواهد داشت.