VB6 Помогите ламеру с PopUpMenu

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GluMORG6
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 19.03.2006 (Вс) 10:12
Откуда: Оттуда

VB6 Помогите ламеру с PopUpMenu

Сообщение GluMORG6 » 19.03.2006 (Вс) 10:25

:shaking: Вся проблема в том, что в моем коде PopUpMenu не работает. Я из сети содрал кучу примеров, как только не пробовал, но мой VB6 плюет на меня. И спотыкаясь, выдает мне “ошибку компиляции” именно в Private Sub Form_Load().
Я пробовал, создавал формы, которые скидывали иконку в TrayBar и у них вызывал меню, кликом без всяких проблем. Но только стоило этот код встроить в мое приложение, как снова Бэйсик начинает выдавать баги. Судя по всему проблема в том, что на самой форме не отображается меню, а почему не пойму? У формы свойство BorderStyle-1Fixsed Single, может быть по этой причине? Хотя сомневаюсь. Код моего приложения такой:

Пользуйтесь, блин, форматированием кода, а то будете получать замечания за неуважение к участникам форума.
Код: Выделить всё
Dim nid As NOTIFYICONDATA

Private Sub cmdShow_Click()
If Form1.Height = 1605 Then
    Form1.Height = 1050
Else
    Form1.Height = 1605
End If
    Form1.Width = 1290
If Text2.Visible = False Then
    Text2.Visible = True
Else
    Text2.Visible = False
End If
If Label1.Visible = False Then
    Label1.Visible = True
Else
    Label1.Visible = False
End If
End Sub

Private Sub Form_Load()
nid.cbSize = Len(nid)
nid.hWnd = Form1.hWnd
nid.uID = vbNull
nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
nid.uCallbackMessage = WM_MOUSEMOVE
nid.hIcon = Form1.Icon
nid.szTip = "Часы и календарь" & vbNullChar
Shell_NotifyIcon NIM_ADD, nid
Form1.Height = 1050
Form1.Width = 1290
  If App.PrevInstance = True Then
    MsgBox "Эй, эй, ну ты ЧЁ?! Ты ЧЁ?! Спишь ЧЁ ЛИ?!!!", 16, "Думай ЧЁ делаешь!"
   End
  End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
If MsgBox("А мона не. А?", vbYesNo, "Спать!") = vbYes Then
  Unload Me
  Set Form1 = Nothing
Else
  Cancel = 1
End If
End Sub

Private Sub Timer1_Timer()
Text1.Text = Time
End Sub

Private Sub Timer2_Timer()
Text2.Text = Date
xday = Weekday(Date, vbUseSystemDayOfWeek = vbSunday)
If xday = 7 Then
Label1.Caption = "Воскресенье"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbMonday)
ElseIf xday = 1 Then
Label1.Caption = "Понедельник"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbTuesday)
ElseIf xday = 2 Then
Label1.Caption = "Вторник"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbWednesday)
ElseIf xday = 3 Then
Label1.Caption = "Среда"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbThursday)
ElseIf xday = 4 Then
Label1.Caption = "Четверг"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbFriday)
ElseIf xday = 5 Then
Label1.Caption = "Пятница"
xday = Weekday(Date, vbUseSystemDayOfWeek = vbSaturday)
ElseIf xday = 6 Then
Label1.Caption = "Суббота"
End If
End Sub


Это код модуля:
Код: Выделить всё
Option Explicit

Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean 'Константы для добавления, удаления и модификации вашей икноки:
Public Const NIM_ADD = 0
Public Const NIM_MODIFY = 1
Public Const NIM_DELETE = 2
Public Const WM_MOUSEMOVE = &H200
Public Const NIF_MESSAGE = 1
Public Const NIF_ICON = 2
Public Const NIF_TIP = 4
Public Const WM_RBUTTONDOWN = &H204
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type


Моя проблема в том, что я кликом по иконке правой кнопки мыши не могу в трейбаре вызвать меню. Подскажите ламеру, где я торможу? Кому нетрудно, скиньте подсказку на мыло GluMORG6@yandex.ru. Заранее благодарю, Всех.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.03.2006 (Вс) 10:41

О господи...


GluMORG6
Прежде чем помещать иконку в трей, убедись, что ты имеешь представления о том языке, который ты для этого используешь.
GluMORG6 писал(а):xday = Weekday(Date, vbUseSystemDayOfWeek = vbMonday)

Шедевр.

Пока не прочитаешь достаточно книжек "VB6 для начинающих", чтобы понять, почему это шедевр, не начинай помещать иконку в трей. Не получится.
Последний раз редактировалось GSerg 19.03.2006 (Вс) 10:42, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GluMORG6
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 19.03.2006 (Вс) 10:12
Откуда: Оттуда

Сообщение GluMORG6 » 19.03.2006 (Вс) 10:42

Прошу прощения.

GluMORG6
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 19.03.2006 (Вс) 10:12
Откуда: Оттуда

Сообщение GluMORG6 » 19.03.2006 (Вс) 11:45

Огромное спасибо, за чуткость и понимание GSerg. То, что я в языке VB6 ламер (читай “лох”), я секрета не делал. Относительно литературы:
С. В. Глушаков А. С. Сурядный “Программирование на Visual Basic 6.0”
С. Браун “VISUAL BASIC 6 учебный курс”
Маркус Линке “VISUAL BASIC 5”
В. Г. Кузменко “VISUAL BASIC 6”.
Что же касается понимания представления о языке, я изучаю его примерно 5-6 недель, и мне конечно трудно судить (xday = Weekday(Date, vbUseSystemDayOfWeek = vbMonday)) является ли это шедевром, или как? Знаю точно только одно – в приложении этот код оказался единственно рабочим, при условии что EXEшник при установке на другие PC работал нормально, проверить же надо было.
Ну, а с иконкой в трее, пока не получается все. Но я сказал сделаю – значит сделаю

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.03.2006 (Вс) 13:32

GluMORG6 писал(а):Огромное спасибо, за чуткость и понимание GSerg.

Чуткость и понимание, во всё бОльших в последнее время количествах, проистекают из того, что уровень вопросов на форуме всё понижается и понижается. Уже спросили, что делает select case. Скоро спросят, что делает if..then. Я глубоко убеждён, что задавать вопросы на форуме следует после самостоятельного изучения подобных тем.

GluMORG6 писал(а):То, что я в языке VB6 ламер (читай “лох”), я секрета не делал.

Я не читаю "лох". Равно как отличаю "ламер" от "чайник". Это две большие разницы.

GluMORG6 писал(а):Относительно литературы:

Не видел, о качестве сказать не могу.

GluMORG6 писал(а):Что же касается понимания представления о языке, я изучаю его примерно 5-6 недель, и мне конечно трудно судить (xday = Weekday(Date, vbUseSystemDayOfWeek = vbMonday)) является ли это шедевром, или как?

Несомненно.
Этот код эквивалентен следующему: xday = Weekday(Date, 0 = 2)
А он, в свою очередь, равен xday = Weekday(Date, False)
False автоматически конвертируется в 0. Таким образом, все вызовы xday = Weekday(...) оказываются равны xday = Weekday(Date, 0). Что, несомненно, шедевр, учитывая архитектурность исходного варианта

GluMORG6 писал(а):Ну, а с иконкой в трее, пока не получается все. Но я сказал сделаю – значит сделаю

У нас на форуме есть славная кнопка Поиск.
Не следует путать её с гугловым поиском, который ниже. Она выше этого.
Там, в нашем поиске, если ввести ключевые слова типа "tray" или "трей", можно найти вообще всё, что как-то связано с треем.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GluMORG6
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 19.03.2006 (Вс) 10:12
Откуда: Оттуда

Сообщение GluMORG6 » 20.03.2006 (Пн) 19:54

GSerg спасибо, самое главное, за хороший стимулирующий пинок. В жизни всегда так, пока носом не ткнут, элементарного не увидишь. И вот результат, меню вызывается, никаких проблем. Спрашивается, из чего сделал проблему, были же примеры, стоило только разуть глаза и внимательно присмотреться. Это не я виноват, это быт задавил.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 20.03.2006 (Пн) 21:50

GSerg Спросили не что делает Select Case, а для чего там переменная, а Вы, как воспитанный человек вместо того, чтобы объяснить или (на худой конец) просто промолчать стали оскорблять людей менее образованных(на данный момент), чем Вы и ЗАБЫЛИ, что форум называется "для новичков". Если Вам так трудно, подберите на этот форум других модераторов.
Последний раз редактировалось kminas 01.04.2006 (Сб) 16:51, всего редактировалось 1 раз.
Константин

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 21.03.2006 (Вт) 13:19

kminas писал(а): Вы и ЗАБЫЛИ, что форум называется "для новичков". Если Вам так трудно, подберите на этот форум других модераторов.


Предлагаю добавить ещё один форум "для дурачков" :)
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 118

    TopList  
cron