View Full Version : راست به چپ کردن ToolBar
mpmsoft
چهارشنبه 15 فروردین 1386, 14:09 عصر
سلام دوستان من چطوری این آبجکتو می تونم راست به چپش کنم
فوریه به خدا گیر کردم خفن
حامد مصافی
چهارشنبه 15 فروردین 1386, 15:01 عصر
ابتدا این کد ها رو در یک پیمانه کد درج کنید
Rem Hamed Masafi
Rem Ineed: No Module!
'##ModelId=43DEADE7000F
Const GWL_EXSTYLE = -20
'##ModelId=43DEADE70020
Const WS_EX_LAYOUTRTL = &H400000
'##ModelId=43DEADE7002E
Const WS_EX_NOINHERITLAYOUT = &H100000
'##ModelId=43DEADE7003E
Const RDW_INVALIDATE = &H1
'##ModelId=43DEADE603B9
Private Type RECT
'##ModelId=43DEADE603C8
Left As Long
'##ModelId=43DEADE603D8
Top As Long
'##ModelId=43DEADE603D9
Right As Long
'##ModelId=43DEADE70000
Bottom As Long
End Type
'##ModelId=43DEADE7004E
Private Declare Function RedrawWindow Lib "user32.dll" (ByVal hWnd As Long, lprcUpdate As RECT, ByVal hrgnUpdate As Long, ByVal fuRedraw As Long) As Long
'##ModelId=43DEADE7006E
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
'##ModelId=43DEADE7007F
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'##ModelId=43DEADE7009C
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'##ModelId=43DEADE700BB
Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
'##ModelId=43DEADE700CE
Private Sub RTLForm(hWnd As Long)
Dim OldLong As Long
Dim rc As RECT
OldLong = GetWindowLong(hWnd, GWL_EXSTYLE)
SetWindowLong hWnd, GWL_EXSTYLE, OldLong Or WS_EX_LAYOUTRTL Or WS_EX_NOINHERITLAYOUT
GetWindowRect hWnd, rc
RedrawWindow hWnd, rc, 0&, RDW_INVALIDATE
End Sub
'##ModelId=43DEADE700DB
Private Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
RTLForm hWnd
EnumChildProc = True
End Function
'##ModelId=43DEADE700FA
Public Sub RTLWindow(hWnd As Long, Optional GetAllChilds As Boolean = False)
RTLForm hWnd
If GetAllChilds Then EnumChildWindows hWnd, AddressOf EnumChildProc, ByVal 0&
End Sub
و به اینصورت از آن استفاده کنید:
Call RTLWindow(toolbar1.hwnd)
CodeMasterX
چهارشنبه 15 فروردین 1386, 22:48 عصر
ممنون لازمش داشتم!
CodeMasterX
پنج شنبه 16 فروردین 1386, 08:59 صبح
یک سوال از BlackDal:
من وقتی که از این کد استفاده می کنم کنترل ام RTL نمیشه:
Call RTLWindow(Toolbar1.hwnd)
ولی وقتی از این یکی استفاده می کنم درست میشه ولی دیگه دکمه هاش کار نمی کنند،مثل اینکه Disable شده باشن!:
Call RTLWindow(Toolbar1.hwnd , True)
مشکل کجاست ؟
حامد مصافی
پنج شنبه 16 فروردین 1386, 13:11 عصر
من همین الان تست کردم و مشکلی ندیدم
البته بهتون توصیه می کنم از نسخه 32 بیتی Common Controls استفاده کنید
CodeMasterX
دوشنبه 03 اردیبهشت 1386, 23:08 عصر
آقای مصافی من از نسخه 32 بیتی استفاده کردم ولی باز مشکل این رو دارم که اگر پارامتر دوم این تابع برابر با True پاس داده نشه اصلا هیچ تغییری اعمال نمیشه.و اگر هم این پارامتر رو پاس بدم تغییرات اعمال میشه ولی تمام دکمه های نوار ابزار قفل میشن ؟
مشکل چیه ؟!
vb341
دوشنبه 03 اردیبهشت 1386, 23:58 عصر
آقای مصافی منهم مشکل دارم . اگر امکانش هست تو یک نمونه برنامه با کدی که دادین تو همین پست آپلود کنین تا مشکل ما حل بشه . ممنون
S_VB.max
چهارشنبه 26 اردیبهشت 1386, 00:32 صبح
کسی تونسته این مشکل را برطرف کنه ؟
حامد مصافی
چهارشنبه 26 اردیبهشت 1386, 10:10 صبح
سلام
این هم مثال به همراه تصویر پیش نما
mpmsoft
چهارشنبه 26 اردیبهشت 1386, 17:06 عصر
من این کارو کردم و جواب گرفتم ولی من یه مشکله دیگه داشتم
اونم اینه که یه نگاه به آیکوناش بنداز ببین همرو بر عکس کرده
vb341
چهارشنبه 26 اردیبهشت 1386, 17:58 عصر
منم تست کردم . کلیه آیکونها رو برعکس نشون میده !!!
S_VB.max
چهارشنبه 26 اردیبهشت 1386, 19:05 عصر
وقتی کنترل راست به چپ میشه معلومه که آیکونها هم برعکس میشه
شما باید آیکونهای از قبل برعکس شده را به نوارابزار اضافه کنید تا در زمان اجرا درست نشون بده
CodeMasterX
چهارشنبه 26 اردیبهشت 1386, 20:28 عصر
ببینم دوست عزیز شما لقمه رو دور سرتون میچرخونید ؟
من با این روش مخالفم،گرچه جوابگو هست.ولی باید به فکر راه حلی باشیم که این مشکل رو نداشته باشه،یعنی آیکون ها رو به هم نریزه.
در ضمن،بر طبق گفته های قبلی من که 10000 بار تو سایت گفتم،وقتی کنترل های جدید تر و پیشرفته تر هستن چه نیازی به استفاده از کنترل های قدیمی هست ؟ این همه کنترل تولبار داریم روی نت،اصلا همین کنترل Payam.CommandBars که آقای پیام مرادی برامون رحمت کشیدن و گذاشتن.خیلی هم عالی هست و شماهای خوب و همچنین فارسی رو عم به خوبی پشتیبانی میکنه.
S_VB.max
چهارشنبه 26 اردیبهشت 1386, 22:53 عصر
من کاری به کنترلهای دیگه ندارم (می دونم اونا حجیم و با امکانات ویژه هستند) ، فقط یه راه حل برای رفع مشکل این کنترل آوردم
حامد مصافی
چهارشنبه 26 اردیبهشت 1386, 22:56 عصر
این کد با تغییر خصوصیات 16 بیت دوم (Extented) یک پنجره باعث میشه تا مقیاس های اندازه گیری روی فرم وارون بشن یعنی مبنای محاسبه Left از سمت راست پنجره خواهد بود. به همین دلیل آیکون ها برعکس نمایش داده میشن.
من خودم زمانی که با وی بی برنامه نویسی میکردم زیاد از این روش استفاده نکردم.
S_VB.max
چهارشنبه 26 اردیبهشت 1386, 23:39 عصر
اینا اضافه کنم جهت افزایش معلومات عمومی ، برای راست به چپ کردن این همه کد لازم نبود فقط کافیه دو تابع SetWindowLong و GetWindow را به برنامه اضافه کنید واین کد را در Form_Load بنویسید
SetWindowLong GetWindow(Toolbar1.hWnd, 5), -20, &H400000
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.