PDA

View Full Version : تعيين مختصات يک کنترل در صفحه



ASedJavad
جمعه 03 مهر 1388, 23:28 عصر
سلام
چه طور ميشه مختصات يک کنترل (topو left اونو) نسبت به صفحه (Screen)‌نه نسبت به فرم و ... بدست بياريم.

MBG73
جمعه 03 مهر 1388, 23:52 عصر
بیا اینم کدش :



Private Sub Form_Load()
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
Label1 = Val(Command1.Left + Form1.Left) & " , " & Val(Command1.Top + Form1.Top)
End Sub


یک timer داره که یرای مشخص کردن مختصات هست ، یک label داره که برای نمایش مختصات هست و یک command داره که کنترلی است که قرار مختصاتشو بفهمیم .

ASedJavad
شنبه 04 مهر 1388, 15:08 عصر
ممنون
تا اينجاش رو خودم مي دونستم
ولي مشکل من دقيقا از همين جا شروع ميشه:

شما left و top فرمت رو رو صفر بذار.
left و top کامندت رو(يا هر کنترل ديگه)، رو هم صفر بذار.
حالا برنامه ات رو اجرا کن.
طبق برنامه شما ليبل1 عبارت "0,0" رو نشون مي ده در حالي که بديهيه که مختصات واقعي کنترل نسبت به صفحه، يه چيز ديگه است.

ASedJavad
دوشنبه 06 مهر 1388, 00:21 صبح
نمي دونم چه سريه که سوالايي که من تو اين سايت مي پرسم، غالبا به جواب مطلوب نمي رسن.
حالا يا سوالام خيلي سختن که بعيد مي دونم،
يا کسايي که تو اين سايت مي يان بلد نيستن، که اين هم بعيده،
يا کسي متوجه نميشه من چي ميگم، يا ...
بگذريم.

جواب اين سوال رو خودم پيدا کردم.
حالا اينجا مي ذارم شايد بدرد يکي ديگه هم خورد:

Private Declare Function ScreenToClient Lib "user32" (ByVal Hwnd As Long, _
lpPoint As POINTAPI) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Sub Command1_click()
Dim XY1 As POINTAPI
XY1.X = 0
XY1.Y = 0
ScreenToClient Command1.Hwnd, XY1
XY1.X = -XY1.X 'left of command1
XY1.Y = -XY1.Y 'top of command1
End Sub

البته مسلمه که اين تابع، مختصات رو به پيکسل ميده که ديگه تبديل اون به تويپ يا ... کار چنداني نداره.