Перетаскивание окна+прозрачность

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Mongoose
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 29.03.2004 (Пн) 17:03
Откуда: Московский зоопарк

Перетаскивание окна+прозрачность

Сообщение Mongoose » 28.02.2008 (Чт) 14:35

Добрый день, у меня два вопроса:
1) Как грамотно сделать перетаскивание окна мышью за любой его участок?
2) В шестом васике когда-то давно делал форму невосприимчивой к событиям, то есть окно находилось поверх всех, но события мыши передавались тому окну, что было ниже. Делал это с помощью задания стиля окна через API, исходники утеряны... Не подскажете?
I Wish I Had An Angel For One Moment Of Love.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.02.2008 (Чт) 15:22

1. Например так:
Код: Выделить всё
Private b_Down As Boolean
Private oldPoint As Point
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    b_Down = True
    oldPoint = e.Location       
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    If b_Down Then
        Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
    End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
    If b_Down Then
        Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
        b_Down = False
    End If
End Sub

2. Где-то было, воспользуйся Поиском
Весь мир матрица, а мы в нем потоки байтов!

Mongoose
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 29.03.2004 (Пн) 17:03
Откуда: Московский зоопарк

Сообщение Mongoose » 29.02.2008 (Пт) 15:20

Код находится в форме в функции вызываемой извне
Код: Выделить всё
        Dim j As Integer ', i As Integer
        j = 0
        Dim g As System.Drawing.Graphics
        g = Me.CreateGraphics()
        For i = 1 To count
            While ssss(j).key = ""
                j = j + 1
            End While
            Select Case ssss(j).state
                Case MyStates.attention
                    g.DrawImage(Global.MyWin.My.Resources.warn.ToBitmap, New Point(4, 2 + (i - 1) * 20))
                Case MyStates.failure
                    g.DrawImage(Global.MyWin.My.Resources.red.ToBitmap, New Point(4, 2 + (i - 1) * 20))
                Case MyStates.success
                    g.DrawImage(Global.MyWin.My.Resources.green.ToBitmap, New Point(4, 2 + (i - 1) * 20))
            End Select
            g.DrawString(ssss(j).text, Me.Font, Brushes.Black, 20, 2 + (i - 1) * 20)
            j = j + 1
        Next
        g.DrawRectangle(Pens.Aqua, New Rectangle(0, 0, g.VisibleClipBounds.Width - 1, g.VisibleClipBounds.Height - 1))

На форме ничего не рисуется, в чём проблема, не подскажете?
I Wish I Had An Angel For One Moment Of Love.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.02.2008 (Пт) 15:40

Mongoose писал(а):Код находится в форме в функции вызываемой извне
Код: Выделить всё
g = Me.CreateGraphics()

На форме ничего не рисуется, в чём проблема, не подскажете?

Не тут ли собака покопалась? Т.е. для той ли формы ты создешь Graphics?
Весь мир матрица, а мы в нем потоки байтов!

Mongoose
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 29.03.2004 (Пн) 17:03
Откуда: Московский зоопарк

Сообщение Mongoose » 29.02.2008 (Пт) 15:43

Объявление функции из которой представлен код:
Код: Выделить всё
Public Function modify(ByVal State As MyStates, ByVal text As String, ByVal key As String) As String

me это ссылка на экземпляр объекта метод которого исполняется, разве нет?
Соответственно на той форме метод которой я вызываю я и жду изменений, а их нет
I Wish I Had An Angel For One Moment Of Love.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.02.2008 (Пт) 15:57

Если бы ты вызвал функцию, находящуюся в классе (в данном случае в форме), то me как раз бы и указывал бы на данный экземпляр класса (формы), а ты вызываешь внешнюю функцию, для которой me отнюдь не твоя форма
Весь мир матрица, а мы в нем потоки байтов!

Mongoose
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 29.03.2004 (Пн) 17:03
Откуда: Московский зоопарк

Сообщение Mongoose » 29.02.2008 (Пт) 16:02

Я наверное не очень понятно выразился, но метод modify находится в классе
Код: Выделить всё
Public Class frmState
...
    Public Function modify(ByVal State As MyStates, ByVal text As String, ByVal key As String) As String
...
        Dim j As Integer ', i As Integer
        j = 0
        Dim g As System.Drawing.Graphics
        g = Me.CreateGraphics()
        For i = 1 To count
            While ssss(j).key = ""
                j = j + 1
            End While
            Select Case ssss(j).state
                Case MyStates.attention
                    g.DrawImage(Global.MyWin.My.Resources.warn.ToBitmap, New Point(4, 2 + (i - 1) * 20))
                Case MyStates.failure
                    g.DrawImage(Global.MyWin.My.Resources.red.ToBitmap, New Point(4, 2 + (i - 1) * 20))
                Case MyStates.success
                    g.DrawImage(Global.MyWin.My.Resources.green.ToBitmap, New Point(4, 2 + (i - 1) * 20))
            End Select
            g.DrawString(ssss(j).text, Me.Font, Brushes.Black, 20, 2 + (i - 1) * 20)
            j = j + 1
        Next
        g.DrawRectangle(Pens.Aqua, New Rectangle(0, 0, g.VisibleClipBounds.Width - 1, g.VisibleClipBounds.Height - 1))
        'g.Dispose()
        'e.DrawImage(Me.BackgroundImage, New Point(0, 0))
        Return key
    End Function
End Class

И я вызываю этот метод с другой формы. При этом frmState уже загружена и отображается.

Добавил в конец этой функции me.visible=true и в результате в верхнем левом углу экрана появляется ещё один экземпляр формы, но уже не реагирующий на события, зато перерисовывающийся :-\
I Wish I Had An Angel For One Moment Of Love.

Mongoose
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 29.03.2004 (Пн) 17:03
Откуда: Московский зоопарк

Сообщение Mongoose » 29.02.2008 (Пт) 16:36

Разобрался... Во всём виновата многопоточность и отсутствие внимания :-\
I Wish I Had An Angel For One Moment Of Love.


Вернуться в Visual Basic .NET

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

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

    TopList