نمایش نتایج 1 تا 18 از 18

نام تاپیک: مختصات کلیک بر روی فرم

  1. #1
    کاربر دائمی آواتار mehdi58
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    Utopia
    پست
    450

    مختصات کلیک بر روی فرم

    با سلام
    من می خوام با کلیک بر روی هر نقطه از فرم مختصات X اون رو بدست بیارم ( برای انجام این کار مشکلی ندارم )اما در قسمتهایی که روی فرم کنترلی وجود داشته باشه این کار انجام نمی شه .
    آیا این کار اصلا شدنی است ؟
    آیا روش دیگه ای هم وجود داره ؟
    متشکرم

  2. #2
    باید توی رویداد کلیک کنترل هم کد بزنی مثل
    PrivateSubButton1_MouseClick(ByValsenderAsObject, ByValeAsSystem.Windows.Forms.MouseEventArgs) HandlesButton1.MouseClick
    MessageBox.Show(e.Location.X)
    MessageBox.Show(e.Location.Y)
    EndSub

  3. #3
    کاربر دائمی آواتار mehdi58
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    Utopia
    پست
    450
    به خاطر پاسخگویی متشکرم
    اما اگه کنترل مورد نظر از نوع ShockwaveFlash Object بود چی ؟
    چطوری میشه فهمید که کجای اون کنترل کلیک شده ؟
    متشکرم

  4. #4
    فرق نداره توی رویداد کلیک هرچی میخوای بنویسید

  5. #5
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    نقل قول نوشته شده توسط Business Analyst مشاهده تاپیک
    باید توی رویداد کلیک کنترل هم کد بزنی مثل
    PrivateSubButton1_MouseClick(ByValsenderAsObject, ByValeAsSystem.Windows.Forms.MouseEventArgs) HandlesButton1.MouseClick
    MessageBox.Show(e.Location.X)
    MessageBox.Show(e.Location.Y)
    EndSub
    سلام
    در ویژوال بیسیک هنگامی که شما روی کنترلی کلیک می کنید،
    ByVal
    e As System.EventArgs
    ارسال می شه که اطلاعاتی در مورد مختصات بهتون نمی ده.
    البته تاجایی که من یاد گرفتم. حالا شاید یه جورایی بشه این کار رو کرد نمی دونم.

    اما برای به دست آوردن مختصات ماوس، باید از توابع api استفاده کنید.

    DeclareFunction GetCursorPos Lib"user32" (ByRef lpPonit As POINTAPI) As Int32


    شما باید یه ورودی که به صورت زیر تعریف می شه بهش بدید.


    Structure POINTAPI
    Dim x As Int32
    Dim y As Int32
    EndStructure



    حالا هر جایی که می خواید مختصات رو به دست بیارید، حتی اگه خارج از محدوده فرمتون باشه از کد زیر بهره بگیرید

    Dim pp As POINTAPI
    GetCursorPos(pp)
    MsgBox(pp.x)
    MsgBox(pp.y)






  6. #6
    چرا اینقدر دردهسر!؟
    وقتی میشه توی یه رویداد با 2 خط کد حلش کرد لزومی نداره
    البته بستگی داره جسارت نباشه
    ممنون

  7. #7
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    نقل قول نوشته شده توسط Business Analyst مشاهده تاپیک
    چرا اینقدر دردهسر!؟
    وقتی میشه توی یه رویداد با 2 خط کد حلش کرد لزومی نداره
    البته بستگی داره جسارت نباشه
    ممنون
    دوست من، نمی دونم شما به ورژنی از وی بی کار می کنید. اما توی 2003 و 2005 ، هنگامی که شما رویداد کلیک رو تعریف می کنید به صورت زیر هست.


    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


    دقت کنید، نوع پارامتر e به صورت System.EventArgs تعریف می شه. که در این صورت هیچ گونه اطلاعاتی در مورد محل و مختصات ماوس به این تابع ارسال نمی شه. در عوض در mousempve شما پارامتر ورودی رو به صورت
    ByVal e As System.Windows.Forms.MouseEventArgs
    دریافت میکنید. شما در روال mousemove می تونید مختصات ماوس رو دریافت کنید.
    تازه این یه قسمت مشکل هست. فرض کنید روی فرم شما بیش از 20 تا کنترل متفاوت ریخته. شما باید برای روال mouse move تمام کنترلهات این رو تعریف کنی. حالا مهم نیست به چه روشی تعریف میکنی، اما باید این رو تو کت سیستم بکنی که چه کاری رو انجام بدی
    اما با استفاده از توابع api این مشکل رو دیگه نداری. کافیه هر جای برنامه که می خوای، حالا توی روال کلیک باشه یا توی یه تایمر، مختصات ماوس رو بر می گردونی. اینجوری کد نویسی کمتری می خواد.
    البته این توضیح رو هم بدم که api که نوشتم، مختصات ماوس در کل صفحه نمایش رو بر می گردونه، حتی اگه خارج از فرم شما باشه. پس به دست آورن مختصات ماوس رو فرم، به عهده خود برنامه نویسه.

  8. #8
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    تازه این یه قسمت مشکل هست. فرض کنید روی فرم شما بیش از 20 تا کنترل متفاوت ریخته. شما باید برای روال mouse move تمام کنترلهات این رو تعریف کنی. حالا مهم نیست به چه روشی تعریف میکنی، اما باید این رو تو کت سیستم بکنی که چه کاری رو انجام بدی
    ئوست عزیز برای تمام 20 کنترل هم می توان یک تابع نوشت

    اما با استفاده از توابع api این مشکل رو دیگه نداری. کافیه هر جای برنامه که می خوای، حالا توی روال کلیک باشه یا توی یه تایمر، مختصات ماوس رو بر می گردونی. اینجوری کد نویسی کمتری می خواد.
    البته این توضیح رو هم بدم که api که نوشتم، مختصات ماوس در کل صفحه نمایش رو بر می گردونه، حتی اگه خارج از فرم شما باشه. پس به دست آورن مختصات ماوس رو فرم، به عهده خود برنامه نویسه.
    با دستور Control.MousePosition می توانید در هرجا از برنامه موقعیت موس را بدست اوری حتی اگر موس بیرون باشد

  9. #9
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    سلام غفوری جان. من هم عرض کردم، "مهم نیست به چه روشی تعریف می کنی."
    روشی control.mouseposition رو هم فکر می کنم که توی framework 2 اضافه شده باشه؟ ممنونم. این رو من بلد نبودم.

  10. #10
    کاربر دائمی آواتار mehdi58
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    Utopia
    پست
    450
    نقل قول نوشته شده توسط Business Analyst مشاهده تاپیک
    چرا اینقدر دردهسر!؟
    وقتی میشه توی یه رویداد با 2 خط کد حلش کرد لزومی نداره
    البته بستگی داره جسارت نباشه
    ممنون

    دوست عزیز کنترل ShockwaveFlash Object رویدادی برای این کار نداره !!!

  11. #11
    کاربر دائمی آواتار mehdi58
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    Utopia
    پست
    450
    نقل قول نوشته شده توسط ghafoori مشاهده تاپیک
    با دستور Control.MousePosition می توانید در هرجا از برنامه موقعیت موس را بدست اوری حتی اگر موس بیرون باشد
    دوست عزیز این دستور توی VB.NET 2003 و کلیک روی برخی از کنترلها مثل ShockwaveFlash Object جواب نمی ده .

  12. #12
    کاربر دائمی آواتار mehdi58
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    Utopia
    پست
    450
    نقل قول نوشته شده توسط saeed_rezaei مشاهده تاپیک
    سلام
    در ویژوال بیسیک هنگامی که شما روی کنترلی کلیک می کنید،
    ByVal
    e As System.EventArgs
    ارسال می شه که اطلاعاتی در مورد مختصات بهتون نمی ده.
    البته تاجایی که من یاد گرفتم. حالا شاید یه جورایی بشه این کار رو کرد نمی دونم.

    اما برای به دست آوردن مختصات ماوس، باید از توابع api استفاده کنید.

    DeclareFunction GetCursorPos Lib"user32" (ByRef lpPonit As POINTAPI) As Int32


    شما باید یه ورودی که به صورت زیر تعریف می شه بهش بدید.


    Structure POINTAPI
    Dim x As Int32
    Dim y As Int32
    EndStructure



    حالا هر جایی که می خواید مختصات رو به دست بیارید، حتی اگه خارج از محدوده فرمتون باشه از کد زیر بهره بگیرید

    Dim pp As POINTAPI
    GetCursorPos(pp)
    MsgBox(pp.x)
    MsgBox(pp.y)
    دوست عزیز به خاطر پاسخگویی متشکرم اما من نتونستم از روش شما استفاده کنم .
    امکانش هست که نمونه ای رو ضمیمه کنین ( البته توی VB.NET 2003 )

  13. #13
    نقل قول نوشته شده توسط ghafoori مشاهده تاپیک
    ئوست عزیز برای تمام 20 کنترل هم می توان یک تابع نوشت


    با دستور Control.MousePosition می توانید در هرجا از برنامه موقعیت موس را بدست اوری حتی اگر موس بیرون باشد
    اقای غفوری این کد روی شوکویو فلش کار نمیکنه!

  14. #14
    نقل قول نوشته شده توسط saeed_rezaei مشاهده تاپیک
    سلام
    در ویژوال بیسیک هنگامی که شما روی کنترلی کلیک می کنید،
    ByVal e As System.EventArgs
    ارسال می شه که اطلاعاتی در مورد مختصات بهتون نمی ده.
    البته تاجایی که من یاد گرفتم. حالا شاید یه جورایی بشه این کار رو کرد نمی دونم.

    اما برای به دست آوردن مختصات ماوس، باید از توابع api استفاده کنید.

    DeclareFunction GetCursorPos Lib"user32" (ByRef lpPonit As POINTAPI) As Int32


    شما باید یه ورودی که به صورت زیر تعریف می شه بهش بدید.


    Structure POINTAPI
    Dim x As Int32
    Dim y As Int32
    EndStructure



    حالا هر جایی که می خواید مختصات رو به دست بیارید، حتی اگه خارج از محدوده فرمتون باشه از کد زیر بهره بگیرید

    Dim pp As POINTAPI
    GetCursorPos(pp)
    MsgBox(pp.x)
    MsgBox(pp.y)
    دوست عزیز کد شما هم مثل بنده و جناب غفوری برای شوکویو کار نمیکنه!

  15. #15
    نقل قول نوشته شده توسط saeed_rezaei مشاهده تاپیک
    سلام
    در ویژوال بیسیک هنگامی که شما روی کنترلی کلیک می کنید،
    ByVal e As System.EventArgs
    ارسال می شه که اطلاعاتی در مورد مختصات بهتون نمی ده.
    البته تاجایی که من یاد گرفتم. حالا شاید یه جورایی بشه این کار رو کرد نمی دونم.

    اما برای به دست آوردن مختصات ماوس، باید از توابع api استفاده کنید.

    DeclareFunction GetCursorPos Lib"user32" (ByRef lpPonit As POINTAPI) As Int32


    شما باید یه ورودی که به صورت زیر تعریف می شه بهش بدید.


    Structure POINTAPI
    Dim x As Int32
    Dim y As Int32
    EndStructure



    حالا هر جایی که می خواید مختصات رو به دست بیارید، حتی اگه خارج از محدوده فرمتون باشه از کد زیر بهره بگیرید

    Dim pp As POINTAPI
    GetCursorPos(pp)
    MsgBox(pp.x)
    MsgBox(pp.y)
    این کد هم مثل مال بندخ و ]قای غفوری کار نمیکنه

  16. #16
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    سلام دوستان
    حالا که دارم این پست رو می زنم، خونه هستم، 2003 ندارم. مثالی که واستون می زنم با 2005 هست.
    اما همین رو توی اداره با 2003 نوشتم. کار می کنه. فعلا هم توی یکی از برنامه هام استفاده می شه.
    این هم نمونه:
    فایل های ضمیمه فایل های ضمیمه

  17. #17
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    کدی که ازش توی برنامه استفاده کردم:

    PublicClass Form1

    Structure POINTAPI
    Dim x As Int32
    Dim y As Int32
    EndStructure

    DeclareFunction GetCursorPos Lib"user32" (ByRef lpPonit As POINTAPI) As Int32

    PrivateSub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim pp As POINTAPI
    GetCursorPos(pp)
    txt_x.Text = pp.x
    txt_y.Text = pp.y
    EndSub
    EndClass

  18. #18
    کاربر دائمی آواتار amirsajjadi
    تاریخ عضویت
    آبان 1385
    محل زندگی
    خراسان رضوی - سبزوار
    سن
    35
    پست
    871
    با سلام
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Timer1.Interval = 50
    Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If MouseButtons = Windows.Forms.MouseButtons.Left Then
    Me.Text = MousePosition.ToString
    End If
    End Sub


    فقط این کد یک مشکل کوچیکی که داره اینه که در تمام صفحه ی کاری ویندوز کار میکنه که با کمی تغییر میشه اون رو درست کرد

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •