Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналоговые часы, которые со стрелочками ;) 
:(
    Опции темы
morpheuz
Дата 2.6.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Возникла проблема с этим. Цифровые часы написать легко. Не могу сделать стрелочные, перебрал многие исходники - не работают, вылазят ошибки. smile Помогите как это сделать.  Или покажите ссылку на РАБОЧИЙ исходник, пожалуйста.  
PM MAIL   Вверх
Akina
Дата 2.6.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Я не понял - ты хочешь вот так прямо готовые, что ли? нет? тогда в чем проблема? время получить? стрелки нарисовать?

 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Дмит
Дата 2.6.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

Репутация: 1
Всего: 9



Тут посмотри 
PM MAIL WWW   Вверх
morpheuz
Дата 3.6.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Мне не стрелочки нужны, не рисынки - а что бы линия премещалась, и циферблат... Но цифры на нем по ходу картинки- иначе же никак? И еще как сделать, что бы эта стрелочка перемежалась с реальынм временем, а не по кнопке старт... неи как связать эту линию-стрелку с таймером? 
PM MAIL   Вверх
morpheuz
Дата 4.6.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



никто не может дать нормальный исходник?smile я запарился писать их... smile а зачет послезавтра smile 
PM MAIL   Вверх
cardinal
Дата 4.6.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Voldemar2004
Дата 4.6.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Взято из книжки "VB Освой самостоятельно" (Никита Культин):
Код
Const R = 70            ' радиус циферблата часов
Const GRAD = 0.0174532  ' коэффициент пересчета угла
                        ' из градусов в радианы
Const PI = 3.14159265

Dim x0 As Integer, y0 As Integer    ' центр циферблата
Dim ahr As Integer                  ' положение стрелок (угол)
Dim amin As Integer
Dim asec As Integer

' инициализация формы
Private Sub Form_Initialize()
   Form1.Height = (Form1.Height - Form1.ScaleHeight) + _
                  (R + 10) * 2 * Screen.TwipsPerPixelY
   Form1.Width = (Form1.Width - Form1.ScaleWidth) + _
                 (R + 10) * 2 * Screen.TwipsPerPixelX
   ' Form1.Height - высота формы, включая заголовок и границы
   ' Form1.ScaleHeight - высота формы без заголовка и границ,
   ' аналогично для Form1.Width и Form1.ScaleWidth.
   ' (R + 10) * 2 умножается на Screen.TwipsPerPixelY,
   ' т. к. Form1.Height задается в твипах, а не в пикселях,
   ' аналогично для (R + 10) * 2 и Screen.TwipsPerPixelX.

   x0 = R + 10
   y0 = R + 10

   ' положение стрелок
   ahr = 90 - Hour(Time) * 30 - (Minute(Time) / 12) * 6
   amin = 90 - Minute(Time) * 6
   asec = 90 - Second(Time) * 6

   Timer1.Interval = 1000   ' период сигналов таймера - 1 сек
   Timer1.Enabled = True    ' запуск таймера
   Form1.ScaleMode = 3
End Sub

' процедура вычерчивает вектор заданной длины из точки (x0,y0)
Sub Vector(x0 As Integer, y0 As Integer, _
           a As Integer, l As Integer)
   ' x0, y0 - начало вектора
   ' a - угол между осью X и вектором
   ' l - длина вектора
   Dim x, y As Integer  ' координаты конца вектора

   x = Round(x0 + l * Cos(a * GRAD))
   y = Round(y0 - l * Sin(a * GRAD))
   Line (x0, y0)-(x, y)
End Sub

' процедура рисует стрелки
Sub DrawClock()
   ' шаг секундной и минутной стрелок 6 градусов,
   ' часовой - 30.

   ' стирание изображений стрелок
   Form1.DrawWidth = 3   ' задание толщины линии
   Form1.ForeColor = Form1.BackColor
   ' часовая стрелка
   Call Vector(x0, y0, ahr, R - 20)
   ' минутная стрелка
   Call Vector(x0, y0, amin, R - 15)
   ' секундная стрелка
   Call Vector(x0, y0, asec, R - 7)

   ' определение нового положения стрелок
   ahr = 90 - Hour(Time) * 30 - (Minute(Time) / 12) * 6
   amin = 90 - Minute(Time) * 6
   asec = 90 - Second(Time) * 6
  
   ' прорисовка стрелок на новом положении
   ' часовая стрелка
   Form1.DrawWidth = 3
   Form1.ForeColor = RGB(0, 0, 0)
   Call Vector(x0, y0, ahr, R - 20)
   ' минутная стрелка
   Form1.DrawWidth = 2
   Call Vector(x0, y0, amin, R - 15)
   ' секундная стрелка
   Form1.DrawWidth = 1
   Form1.ForeColor = RGB(200, 0, 0)
   Call Vector(x0, y0, asec, R - 7)
End Sub

' прорисовка циферблата и начальных стрелок
Private Sub Form_Paint()
   Dim x As Integer     ' координаты маркера
   Dim y As Integer     ' на циферблате
   Dim a As Integer     ' угол между осью X и
                        ' прямой (x0, y0) - (x, y)

   Form1.DrawWidth = 1
   Form1.ForeColor = RGB(0, 0, 0)

   a = 0    ' метки ставим от 3-х часов, против
            ' часовой стрелки

   ' циферблат
   While (a < 360)
      x = x0 + Round(R * Cos(a * 2 * PI / 360))
      y = x0 - Round(R * Sin(a * 2 * PI / 360))
      
      If (a Mod 30) = 0 Then
         Circle (x, y), 2
      Else: Circle (x, y), 1
      End If

      a = a + 6         ' 1 минута - 6 градусов
   Wend

   Call DrawClock
End Sub

' прорисовка текущих положений стрелок часов
Private Sub Timer1_Timer()
   Call DrawClock
End Sub


И вариант №2:
Код
Const R = 60            ' радиус циферблата часов
Const GRAD = 0.0174532  ' коэффициент пересчета угла
                        ' из градусов в радианы
Const PI = 3.14159265

Dim x0 As Integer, y0 As Integer    ' центр циферблата
Dim ahr As Integer                  ' положение стрелок (угол)
Dim amin As Integer
Dim asec As Integer

' инициализация формы
Private Sub Form_Initialize()
   Form1.Height = (Form1.Height - Form1.ScaleHeight) + _
                  (R + 30) * 2 * Screen.TwipsPerPixelY
   Form1.Width = (Form1.Width - Form1.ScaleWidth) + _
                 (R + 30) * 2 * Screen.TwipsPerPixelX

   x0 = R + 30
   y0 = R + 30

   ' положение стрелок
   ahr = 90 - Hour(Time) * 30 - (Minute(Time) / 12) * 6
   amin = 90 - Minute(Time) * 6
   asec = 90 - Second(Time) * 6

   Timer1.Interval = 1000   ' период сигналов таймера - 1 сек
   Timer1.Enabled = True    ' запуск таймера
   Form1.ScaleMode = 3
End Sub

' процедура вычерчивает вектор заданной длины из точки (x0,y0)
Sub Vector(x0 As Integer, y0 As Integer, _
           a As Integer, l As Integer)
   ' x0, y0 - начало вектора
   ' a - угол между осью X и вектором
   ' l - длина вектора
   Dim x, y As Integer  ' координаты конца вектора

   x = Round(x0 + l * Cos(a * GRAD))
   y = Round(y0 - l * Sin(a * GRAD))
   Line (x0, y0)-(x, y)
End Sub

' процедура рисует стрелки
Sub DrawClock()
   ' шаг секундной и минутной стрелок 6 градусов,
   ' часовой - 30.

   ' стирание изображений стрелок
   Form1.DrawWidth = 3   ' задание толщины линии
   Form1.ForeColor = Form1.BackColor
   ' часовая стрелка
   Call Vector(x0, y0, ahr, R - 20)
   ' минутная стрелка
   Call Vector(x0, y0, amin, R - 15)
   ' секундная стрелка
   Call Vector(x0, y0, asec, R - 7)

   ' определение нового положения стрелок
   ahr = 90 - Hour(Time) * 30 - (Minute(Time) / 12) * 6
   amin = 90 - Minute(Time) * 6
   asec = 90 - Second(Time) * 6
  
   ' прорисовка стрелок на новом положении
   ' часовая стрелка
   Form1.DrawWidth = 3
   Form1.ForeColor = RGB(0, 0, 0)
   Call Vector(x0, y0, ahr, R - 20)
   ' минутная стрелка
   Form1.DrawWidth = 2
   Call Vector(x0, y0, amin, R - 15)
   ' секундная стрелка
   Form1.DrawWidth = 1
   Form1.ForeColor = RGB(200, 0, 0)
   Call Vector(x0, y0, asec, R - 7)
End Sub

' прорисовка циферблата и начальных стрелок
Private Sub Form_Paint()
   Dim x As Integer     ' координаты маркера
   Dim y As Integer     ' на циферблате
   Dim a As Integer     ' угол между осью X и
                        ' прямой (x0, y0) - (x, y)
   Dim h As Integer     ' метка часовой риски

   Form1.DrawWidth = 1
   Form1.ForeColor = RGB(0, 0, 0)

   a = 0    ' метки ставим от 3-х часов, против
            ' часовой стрелки
   h = 3    ' угол 0 градусов - это 3 часа

   ' циферблат
   While (a < 360)
      x = x0 + Round(R * Cos(a * 2 * PI / 360))
      y = x0 - Round(R * Sin(a * 2 * PI / 360))
      
      If (a Mod 30) = 0 Then
         Circle (x, y), 2
         ' вывод цифр по большему радиусу
         CurrentX = x0 + Round((R + 15) * _
                    Cos(a * 2 * PI / 360)) - 7
         CurrentY = x0 - Round((R + 15) * _
                    Sin(a * 2 * PI / 360)) - 7
         Print h
         h = h - 1
         If h = 0 Then h = 12
      Else: Circle (x, y), 1
      End If
      
      a = a + 6         ' 1 минута - 6 градусов
   Wend
   
   Call DrawClock
End Sub

' прорисовка текущих положений стрелок часов
Private Sub Timer1_Timer()
   Call DrawClock
End Sub
На форме должен быть таймер. В общем-то идея проста - радиус-вектор бежит по окружности с интервалом в 1 с. 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.