Страница: 1 |
|
Вопрос: Текстовое поле и прозрачность формы.
|
Добавлено: 29.02.08 11:34
|
|
Автор вопроса: Яр
|
Всем здравствуйте!
Помогите, люди добрые, кто чем может, пожалуйста!
Проблема такая.
Есть две формы: 1) frm1 с кнопкой cmd1, текстовым полем txt1 (со свойством multiline=true - это важно!!!) и двумя таймерами; 2) frm2 с кнопкой cmd2. Есть модуль. Программные коды - ниже.
Так вот. При нажатии на cmd1 frm1 становится полупрозрачной и появляется frm2 . При нажатии на cmd2 frm2 исчезает, а frm1 становится обычной. При этом если начать вводить в txt1 многострочный текст (или если он там уже есть, то при прокрутке его колёсиком мыши), то программа начинает жутко тормозить.
В чём дело? Как это торможение побороть? Помогите.
Всем огромное спасибо.
Код формы 1.
Option Explicit
Dim T As Byte
Private Sub cmd1_Click()
T = 250
SetTransparent hwnd, T
tmrUnload.Enabled = True
frm2.Show 1
End Sub
Private Sub tmrLoad_Timer()
tmrUnload.Enabled = False
SetTransparent hwnd, T
If T = 250 Then
tmrLoad.Enabled = False
Else
T = T + 25
End If
End Sub
Private Sub tmrUnload_Timer()
tmrLoad.Enabled = False
SetTransparent hwnd, T
If T = 100 Then
tmrUnload.Enabled = False
Else
T = T - 25
End If
End Sub
Код формы 2.
Option Explicit
Private Sub cmd2_Click()
frm1.tmrLoad.Enabled = True
Unload Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
frm1.tmrLoad.Enabled = True
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set frm2 = Nothing
End Sub
Код модуля.
Option Explicit
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Const LWA_ALPHA = &H3
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000
Public Function SetTransparent(hwnd As Long, Layered As Byte) As Boolean
On Error GoTo 1
Dim Ret As Long
Ret = GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes hwnd, 1, Layered, LWA_ALPHA
SetTransparent = True
1 Exit Function
End Function
Ответить
|
Страница: 1 |
Поиск по форуму