Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Как определить Handle Label-a? Добавлено: 31.12.06 16:58  

Автор вопроса:  Tur | ICQ: 201446364 
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

ret = GetWindowLong(Me.hwnd, GWL_USERDATA)

Это ничего не дает, возвращает 0.

Куда здесь вставить мое драгоценное имя Label1 ?

Ответить

  Ответы Всего ответов: 48  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 31.12.06 17:15
А его у него и нету
Это просто надпись на окне, на котором он лежит, уже был такой вопрос

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 31.12.06 17:17
Прошу прощения за дублпостинг, но
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

ret = GetWindowLong(Me.hwnd, GWL_USERDATA)
какая связь этого с вопросом?
Как ты хэндл определяешь?

Ответить

Номер ответа: 3
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #3 Добавлено: 31.12.06 18:09
В том то и дело, что таким образом его не определить. Я лишь показал что стоял перед стеной. Сейчас я думаю что видимо придется обращаться к функциям перечисляющим все дочерние окна и затем по имени определить хандел. А затем уже с мои планы входит просветлить на половину свой лабел:
SetLayeredWindowAttributes Me.hWnd, 0, 125, LWA_ALPHA 'параметр 125 обозначает степьнь прозрачности (от 0 до 255)

Только вот он может не просветлиться как и пикче, которая почему то т.о. не просветляется, т.е. не становится полу-прозрачной

Есть еще вариант: сделать с нуля свой лайбел. Создать окно, задать ему нужные свойства и события. Пока не решил через OCX это делать или иначе как?

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 31.12.06 19:21
Повторяю еще раз, у лэйбла нету хэндла. Он особенный. А поэтому
Сейчас я думаю что видимо придется обращаться к функциям перечисляющим все дочерние окна и затем по имени определить хандел. А затем уже с мои планы входит просветлить на половину свой лабел:
бесполезно

SetLayeredWindowAttributes Me.hWnd, 0, 125, LWA_ALPHA 'параметр 125 обозначает степьнь прозрачности (от 0 до 255)
А это работает только для окон верхнего уровня, то есть тоько для форм.
Поэтому и
пикче, которая почему то т.о. не просветляется, т.е. не становится полу-прозрачной


Опиши четко свою задачу

Есть еще вариант: сделать с нуля свой лайбел. Создать окно, задать ему нужные свойства и события. Пока не решил через OCX это делать или иначе как?
прозрачность для него тоже работать не будет по той же причине

Ответить

Номер ответа: 5
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #5 Добавлено: 31.12.06 20:38
Александр, с радостью опишу. Большое спасибо тебе за внимание. Мне нужен полу-прозрачное окно, которое бы я мог свободно (как обычный лайбел) двигать мышкой по форме. Обычный форм легко сделать полу-прозрачным и затем дочерним для моего основного, но я не смог решить задачу его свободного перемещения мышью.

Как это ты такое говоришь, что у лайбела нет хендла? Разве он, как и все остальное не окно?

Ответить

Номер ответа: 6
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #6
Добавлено: 31.12.06 20:52
Обычный форм легко сделать полу-прозрачным и затем дочерним для моего основного, но я не смог решить задачу его свободного перемещения мышью.
Давай лучше в эту сторону будем смотреть... реализ. свободное перемещение мышью гораздо проще :)
Используй getcursorpos в обработке события таймера
ИМХО все просто :)

Разве он, как и все остальное не окно?
Это я и пытаюсь сказать. Но даже если бы он был окном, то реализовать для него SetLayeredWindowAttributes не получилсь бы, так же, как и для пиктербокса

P.S> С новым годом!

Ответить

Номер ответа: 7
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #7 Добавлено: 31.12.06 21:10
Александр, и тебя с Новым годом!

Пробовал я без таймера и getcursorpos, но ничего там не получилось так же легко как и без дочернего форма. Все дело в дочерности, а не в том чтобы взять координаты мыши. Это со стороны может быть видится легким. А что нет такой функции, которая бы лабел полу-прозрачила? Я в vb6 сижу.

Ответить

Номер ответа: 8
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #8
Добавлено: 31.12.06 21:33
да нет :(, к сожалению, я сам искал для подобных целей... - но ничего не нашел

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

Ответить

Номер ответа: 9
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #9 Добавлено: 01.01.07 17:21
А мне и нужно только в рамках родительской перемещаться, я именно это и не смог. Мне нужно свободное и легкое перемещение, мне этим нужно двигать большой файл.

Вопрос можно было бы решить просто: сделать пикче полу-прозрачной. Вот и все! Хандел у нее есть, нужна только соответствующая API.

Ответить

Номер ответа: 10
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #10
Добавлено: 01.01.07 19:28
А мне и нужно только в рамках родительской перемещаться, я именно это и не смог. Мне нужно свободное и легкое перемещение, мне этим нужно двигать большой файл.
ну на VB6 можно только так: (быстрее не выйдет)

в Form1
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
        x As Long
        y As Long
End Type

Dim e As POINTAPI

Private Sub Command1_Click()
    Form2.Show
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Unload Form2
End Sub

Private Sub Timer1_Timer()
    GetCursorPos e
    Form2.Top = e.y * Screen.TwipsPerPixelY + 640
    Form2.Left = e.x * Screen.TwipsPerPixelX + 240
End Sub
В Form2:
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    ;(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    ;(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _
    ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
'clr-öâåòà
Private Const CLR_WHITE = &HFFFFFF
Private Const CLR_BLACK = &H0&

Private Sub Form_Load()
    ScaleMode = 3
    Dim ret As Long
    ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
    ret = ret Or WS_EX_LAYERED
    SetWindowLong Me.hWnd, GWL_EXSTYLE, ret
    SetLayeredWindowAttributes Me.hWnd, CLR_WHITE, 155, LWA_ALPHA
End Sub

Изучай на здоровье!

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 01.01.07 19:33
Вопрос можно было бы решить просто: сделать пикче полу-прозрачной. Вот и все! Хандел у нее есть, нужна только соответствующая API.
сколько раз повторять?
это работает только для окон верхнего уровня, то есть только для форм.
нет таких апи для пиктербокса

Ответить

Номер ответа: 12
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #12 Добавлено: 01.01.07 21:41
Александр, спасибо! В принципе вроде бы все ясно.
Вот эти три строчки не понял:
ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
ret = ret Or WS_EX_LAYERED
SetWindowLong Me.hWnd, GWL_EXSTYLE, ret
Что ты здесь делаешь?

Если добавишь во второй форм вот это:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

ret = SetParent(Form2.hwnd, Form1.hwnd)

то увидишь проблему: все дрожит и трепещет.

Неясно также для чего использовать GetCursorPos, кода есть Form_MouseDown и Form_MouseMove с текущей точкой.

"нет таких апи для пиктербокса" - Со мной янво что то не впорядке. Я спрашиваю себя: пикчебокс это окно или нет? И отвечаю: конечно окно. А если окно, то почему нельзя изменить некоторые его параметры? И не нахожу никакого оправдания этому нельзя. Т.е. я не могу себя убедить что Windows сделан так что это нельзя. Ведь нельзя должно быть только то что разрушает его работу, все остальное должно быть можно. Где я тут не прав?

Ответить

Номер ответа: 13
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #13 Добавлено: 01.01.07 22:42
А если окно, то почему нельзя изменить некоторые его параметры?
ну почему? можешь. И меняй скока хочешь. Тока к полупрозрачности это не относится

Ответить

Номер ответа: 14
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #14 Добавлено: 01.01.07 23:52
А почему так сделан Windows? Его что, намеренно так сделали чтобы исключить такую возможность? Если это так, то мягко говоря это странно. Кстати вот у лабела есть такое свойство BackStyle которое может принимать два значения 1 - полное отсутствие прозрачности и 0 - полная прозрачность, а ты говоришь, что легче на Луну слетать, чем добавить к лабелу полу-прозрачность. Если ты прав, то со мной катасрофа, я даже не могу понять что я не понимаю. Кому понадобилось вводить эти ограничения? Во имя чего? Ведь Windows искусственная система, это же не закон природы.

Ответить

Номер ответа: 15
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #15 Добавлено: 02.01.07 04:29
А почему так сделан Windows?

Нормально он сделан, скажи спасибо что хоть запускается.

Кстати вот у лабела есть такое свойство BackStyle которое может принимать два значения 1 - полное отсутствие прозрачности и 0 - полная прозрачность, а ты говоришь, что легче на Луну слетать, чем добавить к лабелу полу-прозрачность.

Видишь разнице между понятиями "полное отсутствие прозрачности", "полная прозрачность" и "полу-прозрачность"?

Кому понадобилось вводить эти ограничения?

Требования антимонопольного комитета Евросоюза.

Ведь Windows искусственная система, это же не закон природы.

Не ной. мажоры переходят на WPF чего и тебе советую.

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам