Глюки или НЕТ. Формы в VB 6.0

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

Глюки или НЕТ. Формы в VB 6.0

Сообщение mr. S » 29.05.2004 (Сб) 17:20

Помогите плииз, зделал прогу, код ниже:

Код формы 1:
Private Declare Sub ReleaseCapture Lib "user32" ()
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) _
As Long

' To MOVE the FORM
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim ReturnValue As Long
If Button = 1 Then
Call ReleaseCapture
ReturnValue = SendMessage(Form1.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub

' When FORM load, make some colors unvisible
Private Sub form_load()
AutoFormShape Form1, RGB(255, 0, 255)

Command1_Click()
form1.hide
form2.show
End Sub

Далее код *.BAS (обрезаю форму AutoFormShape по след. принципу):

Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Declare Sub ReleaseCapture Lib "user32" ()
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Public Const RGN_DIFF = 4
Public Const SC_CLICKMOVE = &HF012& ' This setting is not in your API viewer, not sure why.
' If you use SC_MOVE then the mouse moves to the title bar
' and then moves the form, which makes forms with no title bar
' to not work.
Public Const WM_SYSCOMMAND = &H112

Dim CurRgn, TempRgn As Long ' Region variables

Public Function AutoFormShape(bg As Form, transColor)
Dim X, Y As Integer

CurRgn = CreateRectRgn(0, 0, bg.Width / 15, bg.Height / 15)

While Y <= bg.Height / 15
While X <= bg.Width / 15
If GetPixel(bg.hdc, X, Y) = transColor Then
TempRgn = CreateRectRgn(X, Y, X + 1, Y + 1)
success = CombineRgn(CurRgn, CurRgn, TempRgn, RGN_DIFF)
DeleteObject (TempRgn)
End If
X = X + 1

Wend
Y = Y + 1
X = 0

Wend
success = SetWindowRgn(bg.hWnd, CurRgn, True)
DeleteObject (CurRgn)



End Function

Вот вопрос, почему на некоторых компах в форме 1 Command1 съезжает за форму и соотвтетсвенно не нажать на кнопку и не пройти джалее. На большенстве компах работат моя прога на УРА, а на единичных глючит. Command на форме в центре, сама форма в SenterScreen. Могит кто встречал такие глюки ? (системы на которых тестил 98,98SE,ME,2000,XP) Глюки приемущественно на 2000. Помогите глюки это или я че тов коде не так пишу ???
mr. Sergey (HSI)

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

Сообщение GSerg » 30.05.2004 (Вс) 4:01

Не всегда 15 твипов на пиксель.
Либо юзай screend.twipsperpixelx(y), либо поставь me.scalemode =vbpixels, после чего используй не width, а scalewidth.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.05.2004 (Вс) 14:15

screend.twipsperpixelx(y)

Screen.TwipsPerPixelX
Screen.TwipsPerPixelY
:roll:
Нет меня больше

mr. S
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 28.05.2004 (Пт) 22:56

Сообщение mr. S » 30.05.2004 (Вс) 19:44

Ребятааа, а дайте пример, а то пробывал всеравно ничего не получаеться, тестил весь день :( , как глючки были с формами так и остались :(
Могит есть другие вариатны с "обрезанием" форм ???


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

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

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

    TopList  
cron