MSChart

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

MSChart

Сообщение KPEATOP » 17.07.2008 (Чт) 9:20

Щелкая мышкой по оси Х выполняется событие Private Sub MSChart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
При этом я получаю значения Х, Y в твипах для оси Х. Как определить автоматически (без щелчка мышкой) значение Y в твипах для оси Х графика MSChart ?
Вечность пахнет нефтью

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.07.2008 (Чт) 9:37

Mouse_Move? Нэ?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 9:53

Mouse_Move - это в смысле я навожу мышкой на ось X и получаю координаты Х и Y в твипах ? Это то же самое что если бы я щелкнул мышкой по оси X. Я имел ввиду ничего не делая определить координату Y в твипах оси X. Например при загрузке формы , где уже установлен MSChart
Вечность пахнет нефтью

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.07.2008 (Чт) 10:04

KPEATOP
Как определить координаты в MSChart при загрузке формы. Ну, при загрузке формы - это Form_Load. А определить какие координаты ты хочешь?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 12:18

я хочу определить координату Y оси Х, такую же как если бы я щелкнул мышкой по оси Х и выполнилось бы событие Private Sub MSChart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single), в котором Y - моя искомая координата или бы навел на ось Х мышкой и выполнилось бы событие Private Sub MSChart1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single), где Y - та же самая искомая координата. Но мне нужно, определить эту координату (расположение оси Х на графике MSChart1 в твипах) без каких либо событий. Теперь вроде должно быть понятно.
Вечность пахнет нефтью

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 12:18

я хочу определить координату Y оси Х, такую же как если бы я щелкнул мышкой по оси Х и выполнилось бы событие Private Sub MSChart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single), в котором Y - моя искомая координата или бы навел на ось Х мышкой и выполнилось бы событие Private Sub MSChart1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single), где Y - та же самая искомая координата. Но мне нужно, определить эту координату (расположение оси Х на графике MSChart1 в твипах) без каких либо событий. Теперь вроде должно быть понятно.
Вечность пахнет нефтью

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 17.07.2008 (Чт) 13:24

Неужели нет способа , чтоб не двигая мышью и не кликая мышью, определить координаты X и Y ???
Вечность пахнет нефтью

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 18.07.2008 (Пт) 8:55

Таймером? Нэ?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.07.2008 (Пт) 9:19

Можно взять координату х посередине чарта, у нижней части и прочесать столбик пикселей вверх с помощью TwipsToChartPart пока не найдешь ось.
Лучший способ понять что-то самому — объяснить это другому.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 18.07.2008 (Пт) 9:54

попробую конечно. Только я не совсем понимаю метод TwipsToChartPart
Antonariy, объясни вкратце, если сможешь принцип действия TwipsToChartPart, я примерно представляю, хотя не очень.
А вообще мысль хорошая, буду ковырять, спасиб.
Но , если сможешь объяснить, объясни, плиззз
Вечность пахнет нефтью

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.07.2008 (Пт) 9:57

Передаешь в него координаты, переменную, остальные параметры можно забить нулями.
В переменную возвращается тип области, находящейся под координатами.
Лучший способ понять что-то самому — объяснить это другому.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 18.07.2008 (Пт) 10:30

Вот так вот сделал, вроде правильно, но у меня условие никогда не выполняется, т.е. Part никогда не равно VtChPartTypeAxis
Попробовал распечатал чему равно Part на всем протяжении цикла.
У меня MSChart1.Height=5775, при распечатке выдало, что до 248 Part =0 , потом до 5528=4 и потом до конца опять 0. Я не понял, а где же ось Х (Part =9) ???

Dim i As Integer, mAxisX_Y0 As Single
Dim Part%, Series%, DataPoint%
Dim X As Single, Y As Single

For i = 1 To MSChart1.Height
MSChart1.TwipsToChartPart MSChart1.Width / 2, i, Part, 0, 0, 0, 0
If Part = VtChPartTypeAxis Then
mAxisX_Y0 = Y
End If
Next i
Вечность пахнет нефтью

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.07.2008 (Пт) 10:58

Попробовал распечатал чему равно Part на всем протяжении цикла.
Попробуй проверить так:
Код: Выделить всё
Private Sub MSChart1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim part As Integer
    MSChart1.TwipsToChartPart CLng(X), CLng(Y), part, 0, 0, 0, 0
    Debug.Print X, Y, part
End Sub

Я не понял, а где же ось Х (Part =9) ???
Может она у тебя невидима? Выложи форму.

И запускай цикл снизу, For i = MSChart1.Height. Во-первых быстрее, во-вторых, если у тебя есть еще горизонтальные оси, отмечающие значения по оси Y, то в твоем цикле первой найдется верхняя.
Лучший способ понять что-то самому — объяснить это другому.

KPEATOP
Бывалый
Бывалый
 
Сообщения: 291
Зарегистрирован: 02.12.2002 (Пн) 16:33
Откуда: Russia

Сообщение KPEATOP » 18.07.2008 (Пт) 12:26

Попробовал с событием MouseMove - все получается. Но мне нужно без событий определить, чтоб ничего не делать. Попробовал цикл в обратную сторону сделать

Private Sub Form_Load()
Dim i As Integer, part As Integer, n As Integer

For i = MSChart1.Height To 1 Step -1
MSChart1.TwipsToChartPart CLng(MSChart1.Width / 2), CLng(i), part, 0, 0, 0, 0
If part = VtChPartTypeAxis Then
n= i
End If
Next i
end sub

у меня опять получается до 248 part=0, потом до 5528 part=4 и потом опять 0. Не пойму. Форму выложу. У меня там при загрузке формы, к примеру, нужно узнать координату Y.
Вложения
График.rar
(3.41 Кб) Скачиваний: 36
Вечность пахнет нефтью

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.07.2008 (Пт) 13:57

У меня все работает
Код: Выделить всё
Private Sub Form_DblClick()
Dim part As Integer
    For Y = ScaleY(MSChart1.Height, vbTwips, vbPixels) To 1 Step -1
        MSChart1.TwipsToChartPart MSChart1.Width / 2, ScaleY(Y, vbPixels, vbTwips), part, 0, 0, 0, 0
        If part = VtChPartTypeAxis Then
            MsgBox part
        End If
    Next
End Sub

Scale для того, чтобы не проверять по 15 раз один и тот же пиксель.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 57

    TopList