sahar_sayyah
شنبه 28 دی 1392, 10:35 صبح
با عرض سلام
پروژه ای دارم که مختصات چندین نقطه را از پایگاه داده میخونه و اونها رو روی نمودارم تو فورم نمایش میده هر نقطه اسمی داره که میخوام با استفاده از tool tip نمایش داده بشه
مشکل من اینجاست که هر بار اجرا شدن برنامه تعداد نقاطم متغییره پس نمیتونم از لیبل یا picture استفاده کنم مگر اینکه با کد نویسی بتونم تعداد نقاطhت رو در هر با اجرا به دست بیارم و بعد با یه حلقه لیبل ها رو تولید کنم
1- آیا میشه با کد نویسی بر روی فورمم لیبل بندازم !؟
2- فعلا از PSet برای نمایش نقاطم استفاده کردم چطوری میتونم وقتی موس را روی نقطه نگه میدارم اسم نقطه نمایش داده شود؟
program2vb
شنبه 28 دی 1392, 16:51 عصر
سلام . خود شما سوال پرسیدین خودتون هم جوابشو دادین . شما وقتی از پایگاه داده مختصات رو میخونین میتونی تو همون مختصات یه لیبل یا هر چیز دیگه بدین که اونجا نشون بده . یا برای حرفه ای شدن کارتون میتونین از یه فرم جدید استفاده کنین . من اگه وقت کنم تا شب براتون یکی درس میکنم تو همین تاپیک قرار میدم .
pset(x,y)
از همین x , y میتونین لیبل رو ببرین اون نقطه و نمایش بدین
یا با استفاده از تابع move و یا با استفاده از left , top
برای مثال :
label1.top =y
label1.left =x-(label1.Width/2)
موفق و پیروز باشید در پناه خدا . یا علی
محمد فدوی
شنبه 28 دی 1392, 18:19 عصر
این پروژه فکر میکنم تاحدودی کمک کنه:
مثلاً نقاط ما شهرهایی هستن که مختصات و اسمشون رو می دونیم و میخوایم به کاربر نشونشون بدیم، کلاس City رو می سازیم:
''' Class Module: City.cls
Option Explicit
Private m_iX As Integer, m_iY As Integer
Private m_strName As String
Public Sub Init(ByVal cityX As Integer, ByVal cityY As Integer, ByVal cityName As String)
m_iX = cityX
m_iY = cityY
m_strName = cityName
End Sub
Public Property Get X() As Integer
X = m_iX
End Property
Public Property Get Y() As Integer
Y = m_iY
End Property
Public Property Get Name() As String
Name = m_strName
End Property
وبعد فرم اصلی رو می سازیم (روتین Form_MouseMove و بخش ساختن Label به صورت Dynamic در روتین Form_Initialize مهم ترین بخش های برنامه هستن):
''' Form: MainForm
Option Explicit
Private WithEvents lblTip As VB.Label
Private WithEvents picMap As VB.PictureBox
Private cities As New Collection
Private Function CreateCity(cityX As Integer, cityY As Integer, cityName As String) As City
Set CreateCity = New City
Call CreateCity.Init(cityX, cityY, cityName)
End Function
Private Sub RedrawCities()
Cls
Dim c As Variant
For Each c In cities
Circle (c.X, c.Y), 30, RGB(120, 120, 120)
Next c
End Sub
Private Sub Form_Initialize()
''' Customize Some Properties:
BorderStyle = vbFixedSingle
Width = 5700: Height = 6000
Caption = Empty
BackColor = vbWhite
MousePointer = vbCrosshair
''' Inilialize Custom ToolTip Label:
Set lblTip = Controls.Add("VB.Label", "lblTip", Me)
With lblTip
.BorderStyle = vbFixedSingle
.Appearance = False
.Alignment = vbCenter
.BackColor = vbYellow
.Move 0, 0, 735, 255
End With
''' Read Data From Database. For example:
With cities
.Add CreateCity(700, 800, "City A")
.Add CreateCity(4000, 1500, "City B")
.Add CreateCity(3000, 2200, "City C")
.Add CreateCity(4500, 3400, "City D")
End With
End Sub
Private Sub Form_Paint()
''' Show Cities
Call RedrawCities
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, mouseX As Single, mouseY As Single)
Caption = "(X, Y): " & mouseX & ", " & mouseY
Dim c As Variant
For Each c In cities
If (Abs(mouseX - c.X) < 30 And Abs(mouseY - c.Y) < 30) Then
lblTip.Move c.X - lblTip.Width, c.Y - lblTip.Height
lblTip.Caption = c.Name
lblTip.Visible = True
MousePointer = vbUpArrow
Exit Sub
End If
Next c
lblTip.Visible = False
MousePointer = vbCrosshair
End Sub
من تمام کارها رو توی کد انجام دادم که ببینی همه کارارو میشه توی کد انجام داد! برای پروژه ی خودت به کد خیلی کمتری نیاز داری.
موفق باشی.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.