PDA

View Full Version : مکان یابی



morteza_dehghan
چهارشنبه 25 تیر 1382, 19:00 عصر
سلام
من نیاز دارم تا محل قرار گرفتن شی مورد نظر را در صفحه پیدا کنم البته بدین صورت که مثلا من محل یک textbox را نیاز دارم و ان در یک frame قرار دارد طبیعی است که مختصات نقطه چپ و بالا آن شی را نسبت به frame خواهد داد ولی من این مختصات را نسبت به form می خواهم (محل شی مورد نظر نسبت به چپ و بالا form )را می خواهم :?:
البته ناگفته نماند که مثلا نگویید خوب چپ و بالا شی را به اضافه چپ و بالا frame کن مختصاتش بدست می آید :lol: چون امکان دارد مثلا خود این frame داخل چند frame تو در تو باشد :wink:
خیلی گفتم :!: امیدوارم که متوجه شده باشید :oops:
با تشکر

morteza_dehghan
شنبه 28 تیر 1382, 11:33 صبح
:cry: :cry: :cry:
بابا یکی هم به داد ما برسه :cry: :cry: :cry: :!: :!:

S.Azish
دوشنبه 30 تیر 1382, 14:01 عصر
شما می تونید برای حل این مشکل از یک تابع Recursive استفاده کنید



Option Explicit

Private Type Position
Left As Single
Top As Single
End Type

Private Sub Form_Load()
'
MsgBox GetPosition(Text1).Left
MsgBox GetPosition(Text1).Top
'
End Sub

Private Function GetPosition(objectTemp As Object) As Position
'
Dim tempPosition As Position
Dim tempContainerPosition As Position

If Not TypeOf objectTemp Is Form Then
tempPosition.Left = objectTemp.Left
tempPosition.Top = objectTemp.Top
If Not objectTemp.Container Is Nothing Then
tempContainerPosition = GetPosition(objectTemp.Container)
tempPosition.Left = tempPosition.Left + tempContainerPosition.Left
tempPosition.Top = tempPosition.Top + tempContainerPosition.Top
If TypeOf objectTemp.Container Is PictureBox Then
tempPosition.Left = tempPosition.Left + 30
tempPosition.Top = tempPosition.Top + 30
End If
End If
End If

GetPosition = tempPosition
'
End Function

A.Noor
سه شنبه 31 تیر 1382, 09:29 صبح
آقای آذیش سلام

خوشحالم که دوباره به این بخش آمدید و امیدوارم که در آینده هم از راهنمائیهای شما استفاده کنیم.
در مورد کد بالا ، در
tempContainerPosition = GetPosition(objectTemp.Container) از تابع بصورت بازگشتی استفاده شده . در وی بی محدودیتی برای استفاده از تابع بازگشتی داریم یا ؟ منظورم تعداد Call کردنها در زمان اجراست.

S.Azish
سه شنبه 31 تیر 1382, 13:04 عصر
در VB و یا اگر آشنا باشید در زبانهای دیگر, مفهومی به نام Stack وجود داره که مکانیست برای نگهداری مقادیر به صورت موقتی و معمولا سایزی برابر 2 یا 4 کیلو بایت داره که باز دوستانی که از دوران DOS خاطرشون باشه این مقدار رو میشه در config.sys عوض کرد. صدا کردن توابع Recursive در VB هم به مقدار Stack بستگی داره که معمولا چیزی حدود 5000 حلقه خواهد بود که باز هم بستگی به تعداد متغییر های استفاده شده در تابع دارد. زمانی که Stack پر بشه VB خطای Stack Overflow میده
http://www.developer.be/index.cfm/fuseaction/tutorialDetail/GroupID/147/tutorialName/PCAssemblyTutorialPreliminarylesson--LowLevelBasicConcepts.htm