ايران ويج

نسخه‌ی کامل: taskbar and screen
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4
مشكل منهنوز رفع نشده
آقا جان ميشه به تابع سيستم متريك طول و عرض صفحه ي قابل استفاده رو بدست آورد و حالا چطور بالا و سمت چپ اون رو بدست بيارم ؟
من ديگه خسته شدم از اين ويژال بيسيك !!!!
جون هر كي دوست داري كامل توضيح بده :!:
كل صفحه چي ؟ مانيتور
تو ما رو كچل كردي
اي بابا
نگاه كن عزيز ٬ شما Magnifier رو باز كن (از استارت منو و ...) ميبيني كه يه نواره به بالاي تصوير اضافه مي شه . حالا يه پنجره رو ماكسيمايز كن ٬ گوشه ي سمت چپ اون پنجره مي ره ميچسبه به سمت چپ تصوير بالاي تصوير ميره به پايين Magnifier ميچسبه و پايين پنجره به بالاي تسك بار.
پس اگه رزوليشن تصوير فرضا 1024*768 باشه سايز پنجره مطمعنا اين نيست
با تابع سيستم متريك ميشه اين سايز پنجره رو بدست آورد ٬ فرض كنيم 1024*700 ولي من نمي تونم بفهمم كه اين سايز بدست اومده چه وضعيتي در كل صفحه ( همون اندازه ي مانيتور) داره .
يه راه دارم ولي اگر از اين راه استفاده كنم آبروي برنامه نويسا ميره !!! فرمم رو ماكسيمايز كنم بعد گوشه هاي اون رو بدست بيارم و دوباره به حالت اول برگردونم ...
ترو خدا درك كنين ....
ها وفهميدم
اين تابع GetWindowPlacement خيلي قدرتش زياده
فكر كنم يه كارهايي برات بتونه بكنه

من هم روش فكر مي كنم
Iron_Fist نوشته است:ها وفهميدم
اين تابع GetWindowPlacement خيلي قدرتش زياده
فكر كنم يه كارهايي برات بتونه بكنه

من هم روش فكر مي كنم
تا اونجا كه مي دونم اين تابع چيز هايي رو كه ميخوام مشخص نمي كنه
ولي به نظر شما ميشه از مختصات آيكن ها و فاصله ي اون ها از دو طرف تصوير با سيستم متريك مختصات گوشه رو پيدا كرد ؟
راستي به نظر نمياد اين اينقدر سخت باشه ....
من يه سوالي اينجا برام پيش اومد
تو در واقع مي خواي مقدار فضاي مفيد مانيتور رو بدوني چقدر هست نه ؟
مقدار فضاي مفيد = كل فضاي مانيتور - { تسك بار +‌ پنجره چسبان (در صورت وجود ) }
Iron_Fist نوشته است:من يه سوالي اينجا برام پيش اومد
تو در واقع مي خواي مقدار فضاي مفيد مانيتور رو بدوني چقدر هست نه ؟
مقدار فضاي مفيد = كل فضاي مانيتور - { تسك بار +‌ پنجره چسبان (در صورت وجود ) }
نه فضاي مفيد رو كه راحت ميشه بدست آورد
من مختصات گوشه بالا- سمت چپ اين فضاي مفيد رو ميخوام
اصلا يه سوال ديگه : من اينقدر منظورم رو بد بيان كردم كه تا حالا نفهميدين من چي ميخوام ؟
نقل قول: من اينقدر منظورم رو بد بيان كردم كه تا حالا نفهميدين من چي ميخوام ؟
:roll:
نقل قول: فضاي مفيد رو كه راحت ميشه بدست آورد
خوب پس اگه مختصات فضاي مفيد رو بتوني بدست بياري كه اون
گوشش هم مي توني بدست بياري
با چي به دست مي آري ؟
Iron_Fist نوشته است:
نقل قول: من اينقدر منظورم رو بد بيان كردم كه تا حالا نفهميدين من چي ميخوام ؟
:roll:
نقل قول: فضاي مفيد رو كه راحت ميشه بدست آورد
خوب پس اگه مختصات فضاي مفيد رو بتوني بدست بياري كه اون
گوشش هم مي توني بدست بياري
با چي به دست مي آري ؟
:cry: :cry: :cry: :cry: :cry: :cry: :cry:
مساحت فضاي مفيد رو ميتونم راحت بدست بيارم نه مختصاتش رو ....
طول و عرض رو راحت بدست مي آرم ولي من دنبال گوشه هاي اين مساحت هستم ...
:think:
Iron_Fist نوشته است:با چي به دست مي آري ؟
با تابع GetSystemMetrics
یه نگاه بش بنداز شاید یه چیزی بدست آوردی
دوست من Blossom عزيز سلام

بنا به درخواست شما و با تلاش 5 ساعته كد زير رو نوشتم ! Biggrin اميدوارم مشكل حل بشه :wink:

کد:
Option Explicit
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetShellWindow Lib "user32" () As Long

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

'----------------------------------------------------------
Private Sub DrawWin()

Dim HwndShell, HwndBar, Temp As Long
Dim shellTr As RECT
Dim BaseBr As RECT
Dim Rtmp As RECT

BaseBr.Top = -1

HwndShell = GetShellWindow()
Temp = FindWindow("Shell_TrayWnd", vbNullString)
HwndBar = FindWindowEx(GetShellWindow, 0, "SHELLDLL_DefView", vbNullString)
HwndBar = FindWindowEx(HwndBar, 0, "SysListView32", vbNullString)

GetWindowRect HwndShell, shellTr
GetWindowRect HwndBar, BaseBr
GetWindowRect Temp, Rtmp

If Rtmp.Top = 0 Or BaseBr.Top <> -1 Then
    Me.Top = (BaseBr.Top) * 15
Else
    Me.Top = 0
End If

End Sub
'----------------------------------------------------------
Private Sub Form_Load()
    DrawWin
End Sub
'----------------------------------------------------------
Private Sub Timer1_Timer()
    DrawWin
End Sub

من تابع مورد نظر رو توي يه تايمر گذاشتم تا هر چند ثانيه يكبار تغييرات توي دسكتاپ رو چك كنه و پنجره رو تغيير مكان بده !
براي پيدا كردن نام كلاس هاي مرتبط با دسكتاپ و تسك بار مثل Shell_TrayWnd يا SHELLDLL_DefView من از يه كلك هايي استفاده كردم كه اگر دوست داشتي اونا رو واست ميگم و همينطور از از برنامه ++Spy كه رد كار ++C كار هاست و توي پك ويژوال استديو 6 هست ! :wink:
در واقع بيشتر وقتم صرف فهم كلاسهاي پنجره هاي مرتبط با دسكتاپ ويندوز شد اما خوب چيزهايي هم دستگيرم شد !! Biggrin

الباقي كار با شما :P
صفحه‌ها: 1 2 3 4