Программирование
Веб программирование

Календарь на VB

 
 

Т.к. мне было лень делать календарь, я решил дать тебе задание. Сейчас я тебе скажу твою миссию. Ты должен сделать календарь, но не просто дешевый календарь, у которого кроме числа ни чего определяться не будет, а календарь, который будет определять месяц, число, год, день недели. Приступим:
На форму кинь 4 метки, и 1 Shape(фигура) - это будет рамка, у формы свойство BorderStyle сделай равным 0 - None, это для того чтоб убрать заголовок, и все остальное у формы, т.к. они нам не понадобятся. У тебя он должен получиться похожий на этот:

Исходник программы можешь скачать отсюда, там же разбирайся с кодом (в исходнике есть описание).


Есть вопросы? Спроси на нашем форуме!!
Тотен [07.01.2011 11:36]

Я не понял))

Будущий программист [27.03.2011 13:14]

огромное спасибо за учебник

антон [28.06.2011 14:11]

я как год выделять из функции date??))

антон [28.06.2011 14:14]

скачал исходник,
выдает кучу ошибок в логе написано
вот че:
Line 12: Class SHDocVwCtl.WebBrowser of control WB was not a loaded control class.
Line 18: The property name ExtentX in WB is invalid.
Line 19: The property name ExtentY in WB is invalid.
Line 20: The property name ViewMode in WB is invalid.
Line 21: The property name Offline in WB is invalid.
Line 22: The property name Silent in WB is invalid.
Line 23: The property name RegisterAsBrowser in WB is invalid.
Line 24: The property name RegisterAsDropTarget in WB is invalid.
Line 25: The property name AutoArrange in WB is invalid.
Line 26: The property name NoClientEdge in WB is invalid.
Line 27: The property name AlignLeft in WB is invalid.
Line 28: The property name NoWebView in WB is invalid.
Line 29: The property name HideFileNames in WB is invalid.
Line 30: The property name SingleClick in WB is invalid.
Line 31: The property name SingleSelection in WB is invalid.
Line 32: The property name NoFolders in WB is invalid.
Line 33: The property name Transparent in WB is invalid.
Line 34: The property name ViewID in WB is invalid.
Line 35: The property name Location in WB is invalid.

и ниче не работает))

adyg01 [09.08.2011 06:16]

Я сделал, кому нужны исходники обращайтесь baizet@spaces.ru . исходники с комментариями...

Иван [24.11.2011 19:56]

Сделал.... Частично. Исходник скачать смог, так что не выровнял надписи по центру

Иван Р [29.11.2011 05:55]

напишите код для календаря именно год

Ильдар [06.12.2011 18:54]

Спасибо за учебник по VB 6.0!
Чтобы выделить что-либо из даты, я использовал функцию MID! Например: Чтобы узнать число, нужно ввести: B = Mid(Date, 1, 2)
Сама дата выглядит вот так: 06.11.2011 и в переменную "B" с помощью "Mid" мы записываем число 06! (,1,2 - означает, что в переменной "B" нужно оставить два символа, начиная с первого - 06! Соответственно, для года будут цифры ,7,4)
У меня вопрос: Как сделать жёлтую рамочку? Так то повторить смог, а вот с рамкой повтора не получается!!!

алексей [06.12.2011 19:31]

line(10,20)-step(30,10),vbyellow,b
так получаеться?

Ильдар [06.12.2011 19:41]

Неа! И координаты менял первые на 100 и 200!
Ну ладно! Я так думаю, это дело будущих уроков!

алексей [06.12.2011 20:02]

возможно.
и я эти кординаты на писал для scalmode=6 милиметры я с ними прывык работать

АЛЕКСЕЙ [03.01.2012 22:09]

исходника нет. переместили пишет

Артур [12.02.2012 00:22]

Спасибо большое за урок, вс

NaRaN [13.04.2012 08:25]

ГДЕ ИСХОДНИК???!!!

NaRaN [13.04.2012 08:26]

Ау! Исходник! Ты где?!

Ришка [07.08.2012 14:44]

Исходник ;( аууууу

Ванюха [31.08.2012 14:52]

Сам написал без исходника. При загрузке формы все выдает, а как сделать чтобы он шел в реальном времени (то есть сменилась дата - и на нем тоже сменилась)? Пытался добавить таймер в форму, но ничего не вышло...

Edward [31.08.2012 14:57]

Ставь свой код в таймер с человеческим интервалом,в чём проблема то?

Ванюха [05.09.2012 11:06]

Как в таймер вставить ? В коде нет ссылок на таймер, календарь как на картинке делается без таймера. А как добавить таймер - не знаю, просто перетаскивание его в форму ничего не дает. Разве что попробовать сделать прогу типа "если 23 часа 59 мин 59 сек, то при следующей секунде перевести дату" ?

serg1980serg [15.09.2012 21:12]

Сделал не используя Len, Left, Mid
-------------------------------------
Dim Mesic 'переменная для месяца
Dim Chislo 'переменная для числа
Dim Den 'переменная для дня недели
Dim God 'переменная для года

Private Sub Form_Load()

Mesic = Month(Date)
Label1.Caption = Mesic
If Mesic = 1 Then Label1.Caption = "Январь"
If Mesic = 2 Then Label1.Caption = "Февраль"
If Mesic = 3 Then Label1.Caption = "Март"
If Mesic = 4 Then Label1.Caption = "Апрель"
If Mesic = 5 Then Label1.Caption = "Май"
If Mesic = 6 Then Label1.Caption = "Июнь"
If Mesic = 7 Then Label1.Caption = "Июль"
If Mesic = 8 Then Label1.Caption = "Август"
If Mesic = 9 Then Label1.Caption = "Сентябрь"
If Mesic = 10 Then Label1.Caption = "Октябрь"
If Mesic = 11 Then Label1.Caption = "Ноябрь"
If Mesic = 12 Then Label1.Caption = "Декабрь"

Chislo = Day(Date)
Label2.Caption = Chislo

Den = Weekday(Date, vbMonday)
If Den = 1 Then Label3.Caption = "Понедельник"
If Den = 2 Then Label3.Caption = "Вторник"
If Den = 3 Then Label3.Caption = "Среда"
If Den = 4 Then Label3.Caption = "Четверг"
If Den = 5 Then Label3.Caption = "Пятница"
If Den = 6 Then Label3.Caption = "Суббота"
If Den = 7 Then Label3.Caption = "Воскресенье"

God = Year(Date)
Label4.Caption = God

End Sub

Алексей(alex13sh) [15.09.2012 22:36]

serg1980serg, УУУЖАААСС!
во первых лучше использовать на данный момент select case mesic вместо if

во вторых можно ваще без условие используя простую функцию
Label3.Caption= Format$(Date, "dddd")
Label1.Caption = Format$(Date, "mmmm")

и вы ваще не умеете объявлять переменнык!!
Dim Mesic as long, Den as Long, Chislo as Long, God as Long
http://vbbook.ru/%20Visual%20Basic%206/visual-basic-sovetu/
или так
Dim Mesic&, Den&, Chislo&, God&
& равносильно as Long
http://vbbook.ru/visual-basic/obyavlenie-permennux-bez-as-tip-/

не в обиду но сразу заметно что вы учите язык около недели((

serg1980serg [15.09.2012 23:04]

Ну в данном случае я посчитал что можно переменные сделать как Variant. О том что можно сделать как Long я не забывал. Для такой маленькой программки не стал париться.
По поводу Format$ прикольный вариант.
А в отношении моих познаний языка... - как вводу глядели. По сему не имею обиды. :)

serg1980serg [15.09.2012 23:13]

Конечно так прога выглядит интересней:

Private Sub Form_Load()
Label1.Caption = Format$(Date, "mmmm")
Label2.Caption = Format$(Date, "dd")
Label3.Caption = Format$(Date, "dddd")
Label4.Caption = Format$(Date, "yyyy")
End Sub

Алексей(alex13sh) [15.09.2012 23:31]

ну и код гораздо меньше

а вот что насчёт select case ?? почему хотя бы им невоспользовались??

Алексей(alex13sh) [15.09.2012 23:32]

аа ещё если подумать на счёт скорости то формат не подойдёт тогда лучше как вы делали тока через select case так как он в 2-5 раз быстрее условие

serg1980serg [16.09.2012 00:18]

Что-то вроде этого?:

Dim Mesic As Long, Chislo As Long, Den As Long, God As Long

Private Sub Form_Load()

Mesic = Month(Date)
Select Case Mesic
Case 1
Label1.Caption = "Январь"
Case 2
Label1.Caption = "Февраль"
Case 3
Label1.Caption = "Март"
Case 4
Label1.Caption = "Апрель"
Case 5
Label1.Caption = "Май"
Case 6
Label1.Caption = "Июнь"
Case 7
Label1.Caption = "Июль"
Case 8
Label1.Caption = "Август"
Case 9
Label1.Caption = "Сентябрь"
Case 10
Label1.Caption = "Октябрь"
Case 11
Label1.Caption = "Ноябрь"
Case 12
Label1.Caption = "Декабрь"
End Select

Chislo = Day(Date)
Label2.Caption = Chislo

Den = Weekday(Date, vbMonday)
Select Case Den
Case 1
Label3.Caption = "Понедельник"
Case 2
Label3.Caption = "Вторник"
Case 3
Label3.Caption = "Среда"
Case 4
Label3.Caption = "Четверг"
Case 5
Label3.Caption = "Пятница"
Case 6
Label3.Caption = "Суббота"
Case 7
Label3.Caption = "Воскресенье"
End Select

God = Year(Date)
Label4.Caption = God

End Sub

serg1980serg [16.09.2012 00:20]

Однако интересно за счет чего Format$ медленнее чем Select Case...

serg1980serg [16.09.2012 00:25]

В сравнении с if then оно как-то само по себе понимается за счет чего Select Case быстрее: всё происходит внутри одной Select Case нежели в отдельных if then (если я конечно правильно мыслю). А вот с форматом не понятно.

Алексей(alex13sh) [16.09.2012 00:34]

serg1980serg, мыслишь правильно
а вот насчёт формата во первых в этой функции происходит анализ второй строковой перемнны -- анализ для принятие действии так как функция формат МНОЖЕСТВО действий может делать из за этого и медлительность

надеюсь ты знаешь почему пишем Format$ а не просто Format ??

serg1980serg [16.09.2012 00:37]

нет не знаю

Алексей(alex13sh) [16.09.2012 00:40]

да и лучше так делать
Select Case Den
Case 1: Label3.Caption = "Понедельник"
Case 2: Label3.Caption = "Вторник"
Case 3: Label3.Caption = "Среда"
Case 4: Label3.Caption = "Четверг"
Case 5: Label3.Caption = "Пятница"
Case 6: Label3.Caption = "Суббота"
Case 7: Label3.Caption = "Воскресенье"
End Select
так код меньше да и воспринимается чуть лучше . слево нумерация а справа название

да и ещё можно же заменить условие на массив т.к. в условие проверяется число а желаеммый вывод строка
например
Dim arrden(1 to 7) as sting
arr
den(1) = "Понедельник"
...
arrden(7) = "Воскресенье"
далее использовать
Den = Weekday(Date, vbMonday)
Label3.Caption = arr
den(den)
ВОТ и всё))
ты массивы учил??

serg1980serg [16.09.2012 00:42]

Пока нет.
Однако удивительно сколько решений для одного результата...

serg1980serg [16.09.2012 01:45]

Сделал с использованием массивов:

Dim Chislo, God As Long

Private Sub FormLoad()

Dim arr
Mesic(1 To 12) As String
arrMesic(1) = "Январь"
arr
Mesic(2) = "Февраль"
arrMesic(3) = "Март"
arr
Mesic(4) = "Апрель"
arrMesic(5) = "Май"
arr
Mesic(6) = "Июнь"
arrMesic(7) = "Июль"
arr
Mesic(8) = "Август"
arrMesic(9) = "Сентябрь"
arr
Mesic(10) = "Октябрь"
arrMesic(11) = "Ноябрь"
arr
Mesic(12) = "Декабрь"
Mesic = Month(Date)
Label1.Caption = arrMesic(Mesic)

Chislo = Day(Date)
Label2.Caption = Chislo

Dim arr
Den(1 To 7) As String
arrDen(1) = "Понедельник"
arr
Den(2) = "Вторник"
arrDen(3) = "Среда"
arr
Den(4) = "Четверг"
arrDen(5) = "Пятница"
arr
Den(6) = "Суббота"
arrDen(7) = "Воскресенье"
Den = Weekday(Date, vbMonday)
Label3.Caption = arr
Den(Den)

God = Year(Date)
Label4.Caption = God

End Sub

serg1980serg [16.09.2012 02:04]

В самом начале ошибка в объявлении переменных. Надо: Dim Mesic, Chislo, Den, God As Long

Сделал то я просто по твоему шаблону. Осталось понять логику.
1. Получается объявляю переменную arrMesic (она же массив) с двенадцатью ячейками, в каждой из которых есть данные (т.е. последующие строки кода). Это понятно.
2. Строка Mesic=Month(Date) вычисляет номер месяца (в данном случае - 9).
3. Потом в Label3.Caption передается значение массива arr
Mesic(Mesic) где Mesic = 9, т.е. получается arrMesic(9), а девятка равна "Сентябрь" согласно девятой ячейки массива, другими словами - arrMesic("Сентябрь").
Вроде пока писал хотел вопрос задать, а получается сам разобрался :)

serg1980serg [16.09.2012 02:14]

Интересно возможно ли как-то автоматизировать массив на предмет самостоятельного извлечения к примеру из Month(Date) Названия месяцев? Может не грамотно пишу, но желаемый результат я думаю понятен. Другими словами не заполнять самому массив, а сделать его самозаполняемым. Может как-то циклами это сделать. Хотя я до их изучения пока не дошел...

Алексей(alex13sh) [16.09.2012 09:16]

Dim Mesic, Chislo, Den, God As Long
Так НЕЛЬЗЯ это грубая ошибка!!

Я же кидал сылку
http://vbbook.ru//visual-basic-sovetu/

9 ЧИТАЙ!!

Алексей(alex13sh) [16.09.2012 09:48]


а вот насчёт само заполнение правельно мыслишь
ну вот код:
Private Sub FormLoad()
Dim arr
den$(1 To 7), i&, dt$
dt = "02.01.2000"
For i = 1 To 7 Step 1
arrden(i) = Format$(DateAdd("d", i, dt), "dddd")
MsgBox arr
den(i)
Next i
End Sub


хотел то прост алгоритм рассказать да и времени жалко((

Искандар [17.09.2012 09:33]

ГДЕ ИСХОДНИК?????????????????????????????????????????

Алексей(alex13sh) [17.09.2012 14:51]

Искандар, serg1980serg скоро выложит)) на эот урок на эту сылку то есть не в исходниках

Гость [17.09.2012 19:22]

Последний вариант:

Private Sub Form_Load()

Dim Den(1 To 7) As String, i As Long, dt As String
dt = "02.01.2000"
For i = 1 To 7 Step 1
Den(i) = Format$(DateAdd("d", i - 1, dt), "dddd")
Next i
Label3.Caption = Den(Weekday(Date))

Dim Mesic(1 To 12) As String
For i = 1 To 12 Step 1
Mesic(i) = Format$(DateAdd("m", i - 1, dt), "mmmm")
Next i
Label1.Caption = Mesic(Month(Date))

Chislo = Day(Date)
Label2.Caption = Chislo

God = Year(Date)
Label4.Caption = God

End Sub

serg1980serg [17.09.2012 19:25]

Забыл своё имя написать к выше указанному коду. Надо бы подправить наверно эту неприятность. Что-то типа отказа отправки комментариев если не заполнена графа "Имя".

abdulloh114 [31.05.2013 10:28]

Спасибо за все и подсказки в коментариях. ))))))))) очень радь

abdulloh114 [31.05.2013 10:30]

Может кто знает как сделать будильник????

alex13sh300 [31.05.2013 11:05]

таймер, текстБокс с конечным временим, обратный отсчёт, условие потом воспроизвести звук или музыку (Айпи SoundPlay(вроде))

Coolhacker770 [31.05.2013 15:52]

а также сериализация оставшегося (или прошедшего) времени, работа в фоне (без иконки на панели задач), автозагрузка и десериализация времени



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.