| |

Visual-Basic EinsteigerRe: Mehrere Controls (Labels, Linien, Checkbox ..) per Maus markieren und verschiebe | |  | Autor: Dirk | Datum: 26.05.09 16:34 |
| Ich habe hier mal ein Beispiel, musst es dann noch anpassen. Du brauchst ein Form und auf dem Form 2 Labels (Label(0), Label(1)), das ist der Klasse CMultiSelect aber egal!
Leider flackern die Labels, vielleicht geht das ja noch zu verhindern ...
Code Form:
Option Explicit
Private m_MSelect As CMultiSelect
Private Sub Form_Load()
Set m_MSelect = New CMultiSelect
m_MSelect.Init Me, Label(0), Label(1)
End Sub Klasse CMultiSelect:
Option Explicit
Private Const gc_GridSpace As Long = 40
Private WithEvents m_Form As Form
Private m_Controls As Collection
Private m_Enabled As Boolean
'Save start coordinates of selection rectangle
Private m_StartX As Single
Private m_StartY As Single
'Save last position to whipe out old previous rectangle
Private m_OldX As Single
Private m_OldY As Single
Private m_NowX As Single
Private m_NowY As Single
Private m_Visible As Boolean
Private m_Area As Long
'-- oder evtl Collection mit Controls übergeben
Public Function Init(ByRef rForm As Form, ParamArray parControls())
Dim c
m_Enabled = False
m_Visible = False
Set m_Form = rForm
Set m_Controls = New Collection
For Each c In parControls
If TypeOf c Is Control Then
m_Controls.Add c
End If
Next c
End Function
Private Sub m_Form_MouseDown(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
'
m_StartX = X
m_StartY = Y
m_OldX = X
m_OldY = Y
m_Enabled = True
UnselectControls
End Sub
Private Sub m_Form_MouseMove(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
'
If m_Enabled Then
m_NowX = X
m_NowY = Y
If (Abs(m_OldX - X) > gc_GridSpace) Or _
(Abs(m_OldY - Y) > gc_GridSpace) Then
m_Visible = True
m_OldX = X
m_OldY = Y
m_Form.Refresh
End If
Else
m_Visible = False
End If
End Sub
Private Sub m_Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y _
As Single)
'
If m_Visible Then
m_Visible = False
SelectControls
m_Form.Refresh
End If
m_Enabled = False
End Sub
Private Sub m_Form_Paint()
If m_Enabled Then
Draw
End If
End Sub
Private Sub Draw()
Dim dStyle As Long
If m_Visible Then
dStyle = m_Form.DrawStyle
m_Form.DrawStyle = vbDash
m_Form.Line (m_StartX, m_StartY)-(m_NowX, m_NowY), vbRed, B
m_Form.DrawStyle = dStyle
End If
End Sub
Private Sub SelectControls()
Dim c As Control
On Error Resume Next
For Each c In m_Controls
Select Case True
Case TypeOf c Is Label
Dim l As Label
Set l = c
If m_StartX < l.Left Then
If m_NowX > l.Left + l.Width Then
If m_StartY < l.Top Then
If m_NowY > l.Top + l.Height Then
l.BackColor = vbRed
End If
End If
End If
End If
Case Else
End Select
Next c
End Sub
Private Sub UnselectControls()
Dim c As Control
On Error Resume Next
For Each c In m_Controls
c.BackColor = vbGrayed 'nur Beispiel
Next c
End Sub Gruß
Dirk
--
?Get it right the first time  |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|