Страница: 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 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 278109632 Вопросов: 42 Ответов: 3949 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 29.02.08 11:51 |
Ну дык винде, видимо, трудно обрабатывать альфа-канал, вот она и тормозит |
Страница: 1 |
|