В том то и дело, что таким образом его не определить. Я лишь показал что стоял перед стеной. Сейчас я думаю что видимо придется обращаться к функциям перечисляющим все дочерние окна и затем по имени определить хандел. А затем уже с мои планы входит просветлить на половину свой лабел:
SetLayeredWindowAttributes Me.hWnd, 0, 125, LWA_ALPHA 'параметр 125 обозначает степьнь прозрачности (от 0 до 255)
Только вот он может не просветлиться как и пикче, которая почему то т.о. не просветляется, т.е. не становится полу-прозрачной
Есть еще вариант: сделать с нуля свой лайбел. Создать окно, задать ему нужные свойства и события. Пока не решил через OCX это делать или иначе как?
Повторяю еще раз, у лэйбла нету хэндла. Он особенный. А поэтому
Сейчас я думаю что видимо придется обращаться к функциям перечисляющим все дочерние окна и затем по имени определить хандел. А затем уже с мои планы входит просветлить на половину свой лабел:
бесполезно
SetLayeredWindowAttributes Me.hWnd, 0, 125, LWA_ALPHA 'параметр 125 обозначает степьнь прозрачности (от 0 до 255)
А это работает только для окон верхнего уровня, то есть тоько для форм.
Поэтому и
пикче, которая почему то т.о. не просветляется, т.е. не становится полу-прозрачной
Опиши четко свою задачу
Есть еще вариант: сделать с нуля свой лайбел. Создать окно, задать ему нужные свойства и события. Пока не решил через OCX это делать или иначе как?
прозрачность для него тоже работать не будет по той же причине
Александр, с радостью опишу. Большое спасибо тебе за внимание. Мне нужен полу-прозрачное окно, которое бы я мог свободно (как обычный лайбел) двигать мышкой по форме. Обычный форм легко сделать полу-прозрачным и затем дочерним для моего основного, но я не смог решить задачу его свободного перемещения мышью.
Как это ты такое говоришь, что у лайбела нет хендла? Разве он, как и все остальное не окно?
Обычный форм легко сделать полу-прозрачным и затем дочерним для моего основного, но я не смог решить задачу его свободного перемещения мышью.
Давай лучше в эту сторону будем смотреть... реализ. свободное перемещение мышью гораздо проще
Используй getcursorpos в обработке события таймера
ИМХО все просто
Разве он, как и все остальное не окно?
Это я и пытаюсь сказать. Но даже если бы он был окном, то реализовать для него SetLayeredWindowAttributes не получилсь бы, так же, как и для пиктербокса
Пробовал я без таймера и getcursorpos, но ничего там не получилось так же легко как и без дочернего форма. Все дело в дочерности, а не в том чтобы взять координаты мыши. Это со стороны может быть видится легким. А что нет такой функции, которая бы лабел полу-прозрачила? Я в vb6 сижу.
А мне и нужно только в рамках родительской перемещаться, я именно это и не смог. Мне нужно свободное и легкое перемещение, мне этим нужно двигать большой файл.
Вопрос можно было бы решить просто: сделать пикче полу-прозрачной. Вот и все! Хандел у нее есть, нужна только соответствующая API.
А мне и нужно только в рамках родительской перемещаться, я именно это и не смог. Мне нужно свободное и легкое перемещение, мне этим нужно двигать большой файл.
ну на 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 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
Александр, спасибо! В принципе вроде бы все ясно.
Вот эти три строчки не понял:
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 сделан так что это нельзя. Ведь нельзя должно быть только то что разрушает его работу, все остальное должно быть можно. Где я тут не прав?
А почему так сделан Windows? Его что, намеренно так сделали чтобы исключить такую возможность? Если это так, то мягко говоря это странно. Кстати вот у лабела есть такое свойство BackStyle которое может принимать два значения 1 - полное отсутствие прозрачности и 0 - полная прозрачность, а ты говоришь, что легче на Луну слетать, чем добавить к лабелу полу-прозрачность. Если ты прав, то со мной катасрофа, я даже не могу понять что я не понимаю. Кому понадобилось вводить эти ограничения? Во имя чего? Ведь Windows искусственная система, это же не закон природы.
Нормально он сделан, скажи спасибо что хоть запускается.
Кстати вот у лабела есть такое свойство BackStyle которое может принимать два значения 1 - полное отсутствие прозрачности и 0 - полная прозрачность, а ты говоришь, что легче на Луну слетать, чем добавить к лабелу полу-прозрачность.
Видишь разнице между понятиями "полное отсутствие прозрачности", "полная прозрачность" и "полу-прозрачность"?
Кому понадобилось вводить эти ограничения?
Требования антимонопольного комитета Евросоюза.
Ведь Windows искусственная система, это же не закон природы.
Не ной. мажоры переходят на WPF чего и тебе советую.