View Full Version : حرفه ای: سوال- بدست آوردن مختصات یک شیع روی فرم
arman_Delta2002
چهارشنبه 29 آذر 1391, 11:24 صبح
سلام میخواستم بدونم ایا راحی هست که بشه مختصات قرار گیری یک شیع روی فرم رو بدست آورد
مختصات جایی که شیع در صفحه نمایش قرار داره نه جایی که روی فرمه!!!
مثلا top دکمه روی فرم برابر 40 ولی همین دکمه top اش در صفحه نمایش چنده؟
حالا یکم پیچیدش کنیم
فرمه یک فرم فرزنده و دارای پدر
حالا مختصات دکمه چنده؟
حالا موضوع رو پیچیده تر کنیم
این دکمه در داخل سلول های یک گرید تکرار شده!!! مختصات جاری اون در صفحه نمایش چیه؟
و یکم پیچیده تر یک پیکچر باکس داریم که داخل یک لایه در اکسترا گریده حالا مختصات اون چیه تو صفحه نمایش :قهقهه:
فکر کنم در آوردن این 2 عدد top وleft اون کار حضرت فیلم نیست :شیطان:
من که توش موندم :قهقهه: :گیج:
96915
مهرداد صفا
چهارشنبه 29 آذر 1391, 13:31 عصر
سلام
با استفاده از تابع GetWindowRect میتوانید مختصات کنترل را نسبت به صفحه به دست بیاورید.
یک متغیر از نوع Rect تعریف کنید، سپس هندل کنترل و متغیر را به تابع GetWindowRect بدهید تا بعد از اجرای تابع اندازه و مکان کنترل در متغیر ریخته شود:
'in the name of god
'صل الله عی محمد و آله
Public Class Form1
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Button1Rectangle As RECT
GetWindowRect(Button1.Handle, Button1Rectangle)
MsgBox(Button1Rectangle.Left & "," & Button1Rectangle.Top)
End Sub
End Class
arman_Delta2002
چهارشنبه 29 آذر 1391, 15:31 عصر
سلام
با استفاده از تابع GetWindowRect میتوانید مختصات کنترل را نسبت به صفحه به دست بیاورید.
یک متغیر از نوع Rect تعریف کنید، سپس هندل کنترل و متغیر را به تابع GetWindowRect بدهید تا بعد از اجرای تابع اندازه و مکان کنترل در متغیر ریخته شود:
'in the name of god
'صل الله عی محمد و آله
Public Class Form1
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Button1Rectangle As RECT
GetWindowRect(Button1.Handle, Button1Rectangle)
MsgBox(Button1Rectangle.Left & "," & Button1Rectangle.Top)
End Sub
End Class
مرسی ولی این روش واسه اشیاء ساده که هندل . system.IntPtr برمیگردونه کاربرد داره نه واسه اشیاءی که به صورت آرایه ای هستن و اصلا هندل ردیف دارن نه .Handle system.IntPtr
Saman_12
چهارشنبه 29 آذر 1391, 20:01 عصر
Dim ObjPFS As Point = Obj.PointToScreen(Point.Empty)
مهرداد صفا
چهارشنبه 29 آذر 1391, 22:26 عصر
مرسی ولی این روش واسه اشیاء ساده که هندل . system.IntPtr برمیگردونه کاربرد داره نه واسه اشیاءی که به صورت آرایه ای هستن و اصلا هندل ردیف دارن نه .Handle system.IntPtr
راهای زیادی برای این کار وجود دارد که یکی از ساده ترین و قوی ترین آنها به روش زیر می باشد:
'in the name of god
'صل الله علی محمد و آله
Public Class Form1
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
For I = 0 To 9
For j = 0 To 9
DataGridView1(I, j).Value = DataGridView1.AccessibilityObject.GetChild(I).GetC hild(j).Bounds.Top & "," & DataGridView1.AccessibilityObject.GetChild(I).GetC hild(j).Bounds.Left
Next
Next
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
DataGridView1.RowCount = 10
DataGridView1.Location = Point.Empty
DataGridView1.ColumnCount = 10
DataGridView1.Size = Me.Size
End Sub
Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged
On Error Resume Next
Form1_Activated(sender, Nothing)
End Sub
End Class
یک dataGridView 10 در 10 را با مختصات خانه هایش در رویداد Form_Activated مقدار دهید کردی.
فرم را حرکت دهید تا مختصات هر سلول در صفحه را ببینید.
فراموش نکنید کتابخانه accessibility را به پروژه اضافه کنید.
arman_Delta2002
پنج شنبه 30 آذر 1391, 10:01 صبح
راهای زیادی برای این کار وجود دارد که یکی از ساده ترین و قوی ترین آنها به روش زیر می باشد:
'in the name of god
'صل الله علی محمد و آله
Public Class Form1
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
For I = 0 To 9
For j = 0 To 9
DataGridView1(I, j).Value = DataGridView1.AccessibilityObject.GetChild(I).GetC hild(j).Bounds.Top & "," & DataGridView1.AccessibilityObject.GetChild(I).GetC hild(j).Bounds.Left
Next
Next
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
DataGridView1.RowCount = 10
DataGridView1.Location = Point.Empty
DataGridView1.ColumnCount = 10
DataGridView1.Size = Me.Size
End Sub
Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged
On Error Resume Next
Form1_Activated(sender, Nothing)
End Sub
End Class
یک dataGridView 10 در 10 را با مختصات خانه هایش در رویداد Form_Activated مقدار دهید کردی.
فرم را حرکت دهید تا مختصات هر سلول در صفحه را ببینید.
فراموش نکنید کتابخانه accessibility را به پروژه اضافه کنید.
توجه کرده باشید در عکس فوق یک گرید ویو نیست یک لایوت ویو هست که از dev نشعت گرفته شده ولی باز هم متشکرم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.