Visualizzazione dei risultati da 1 a 2 su 2

Discussione: classe Graphics

  1. #1

    classe Graphics

    Ciao,

    Qualche tempo ho avanzato lo stesso problema. Pensavo di aver risolto (grazie a Tas) costruendo un user control ad hoc, ma per una maniera o per l'altra mi ritrovo di nuovo fermo sul seguente problema, ovvero: ho un controllo (un usercontrol molto simile a una label per intenderci) che devo far 'scivolare' a destra e a sinistra su un'altro usercontrol (molto simile a un panle.. si ci ho preso gusto con questi user control) tramite questo codice:

    codice:
      Private Sub sposta_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    
          
            If e.Button = MouseButtons.Left Then
                sender.Left = sender.Left + (e.X - memx)
                sender.inizio = sender.Left
                sender.fine = sender.Left + sender.Width
                'qui dovrei disegnare le line con i punti sender.inizio, marginesuperiore di timetable 'e sender.inizio e margine inferiore di timetable.. lo stesso per sender.fine
    
    '.inizio e .fine sono delle proprieta del sender che è un usercontrol di nome slot
    
    
            End If
    
        End Sub

    Il tutto si svolge sull'ormai famoso usercontrol timetable, anch'esso simile a un panel. Inizialmente, come già detto su consiglio di Tas, avevo eliminato i controlli simili ai panel (da ora score) su cui far scivolare i controlli simili a label (da ora slot), e mi muovevo direttamente sul timtable. Per ragioni che qui ometto, non posso eliminare i score.. Ma ho necessita di disegnare sul timetable, in prossimità dell'inizio e della fine del controllo slot un linea che va dal margine superiore al margine inferiore del timetable.

    Ho provato a implementare il disegno direttamente nel codice del timetable, facendo poi fare un refresh continuo al codice.


    codice:
    
    Public Class timetable
        Public _numero_sale As Integer
        Dim _capienza As Int32
        Dim _formato As _format
        Enum _format
            f3d
            f35mm
            fdgt
        End Enum
        Dim _point As Integer
        Dim punti As New ArrayList
    
        Public Sub New()
            InitializeComponent()
        End Sub
    
    . . .
    
    
    Private Sub timetable_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            'disegna la timeline
            '...
            Dim p As New Pen(Brushes.Peru, 3)
            Dim y As Integer
            Static linebrush1 As New HatchBrush(HatchStyle.Percent05, Color.FromArgb(100, Color.Black), Color.Transparent)
            Static fontused As New Font("ww", 12, FontStyle.Bold)
            Static fontcap As New Font("ww", 7, FontStyle.Regular)
            Dim s As String, cap As String
            Dim orari() As String = {"11.00", "12.00", "13.00", "14.00", "15.00", "16.00", "17.00", "18.00", "19.00", "20.00", "21.00", "22.00", "23.00", "00.00", "01.00", "02.00", "03.00", "04.00"}
            Dim x As Integer
    
    
    
    
            'disegni le linee tratteggiate verticali
            p.DashStyle = DashStyle.DashDotDot
            For i = 100 To 1200
                e.Graphics.DrawLine(p, i, 0, i, Me.Height)
                i = (i + 60) - 1
            Next
            y = 20
            x = 120
    
            'disegno le etichette delle sale e i rettangoli
            For i = 0 To numero_sale - 1
                s = "SALA" & i + 1
                cap = "cap:" & capienza & " formato:" & formato
                e.Graphics.DrawString(s, fontused, Brushes.Black, 10, y)
                e.Graphics.DrawString(cap, fontcap, Brushes.Black, 10, y + 22)
                'questo fa i rettangoli label con i dati sala
                e.Graphics.DrawRectangle(Pens.Black, 5, y, 90, 40)
                y += 50
            Next
    
            For Each Str As String In orari
                'metto orari
                e.Graphics.DrawString(Str, fontcap, Brushes.Black, x, 5)
                x += 60
            Next
    
            For Each po As Integer In punti
                Dim point1 As New Point(point, 0)
                Dim point2 As New Point(point, Me.Height)
                e.Graphics.DrawLine(Pens.Black, point1, point2)
            Next
    
    
        End Sub
    Questo comporta che sembra di giocare a call of duty 4 su un 386 e riesco a disegnare solo un a riga (vorrei che le righe in prossimità dell'inizio e fine della slot si spostassero e si fermassero con la slot stessa: ora non ricordo se era cosi, ma vorrei gestire questo oggetto come pinnacle gestisce pezzi di filmato..) per volta, in relazione all'oggetto che sposto e rilascio per utlimo.

    Leggendo il totem ho capito che devo usare la classe graphics, ma come faccio ad adattarla alle mie esigenze?

    Avete qualche consiglio?

  2. #2
    Il titolo della discussione non è conforme al regolamento, mandami per favore un messaggio privato con la rettifica.
    Chi non cerca trova.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.