giovedì 2 ottobre 2025

C# Windows Application realizzare una barra con scritta scorrevole in alto allo schermo in primo piano

 

testo scorrevole c#


In questi esempi di codice, vedremo come realizzare una barra, o meglio un testo posizionato in alto dello schermo, che scorre da destra a sinistra, con il testo che rimane in primo piano davanti ad ogni applicazione. Inoltre tramite la tecnica del Drag and Drop, seleziona e trascina, potremmo spostare la barra.

Il progetto è di tipo “Windows Application”, con il linguaggio di programmazione C# e la versione .Net 9

Dopo aver creato un nuovo progetto, seguendo queste caratteristiche, impostiamo a livello di class, delle variabili che saranno utilizzate nelle varie funzioni.

Le variabili permetteranno di gestire il testo, la formattazione ed il relativo spostamento.

Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

private string testoDaVisualizzare = "Questo è un testo che scorre in una barra con direzione da destra a sinistra.";

 private int posizioneTesto;

 private  Timer timer;

 private Font textFont = new Font("Segoe UI", 16, FontStyle.Bold);

 private SizeF textSize;

 

 private bool dragging = false;

 private Point dragCursorPoint;

 private Point dragFormPoint;



Negli eventi della form, in particolare nell’evento “OnPaint”, andremo a ridefinire l’aspetto grafico, ossia il testo, che dovrà essere spostato in base al tempo impostato nella classe Timer, e ridefinire graficamente il tutto.

Mentre gli eventi “OnMouseDown”, “OnMouseUp” e “OnMouseMove”, gestiamo lo spostamento del testo.

Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

protected override void OnPaint(PaintEventArgs e)

 {

     base.OnPaint(e);

     e.Graphics.DrawString(testoDaVisualizzare, textFont, Brushes.White, posizioneTesto, 5);

 }

 

 protected override void OnMouseDown(MouseEventArgs e)

 {

     if (e.Button == MouseButtons.Left)

     {

         dragging = true;

         dragCursorPoint = Cursor.Position;

         dragFormPoint = this.Location;

     }

     base.OnMouseDown(e);

 }

 

 protected override void OnMouseMove(MouseEventArgs e)

 {

     if (dragging)

     {

         Point diff = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));

         this.Location = Point.Add(dragFormPoint, new Size(diff));

     }

     base.OnMouseMove(e);

 }

 

 protected override void OnMouseUp(MouseEventArgs e)

 {

     if (e.Button == MouseButtons.Left)

     {

         dragging = false;

     }

     base.OnMouseUp(e);

 }


Siamo giunti alla fine della stesura del codice, non resta che scrivere il codice per gestire lo spostamento del testo ed aspetti di formattazione della form. Nel costruttore della form, impostiamo alcune proprietà della form. Per indicare l’aspetto, posizione ed altro. La formattazione del testo, e tramite la classe Timer, gestire lo spostamento del testo in base ad un certo numero di millisecondi.

Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

public Form1()

{

    InitializeComponent();

    // Calcola la dimensione del testo

    using (Graphics g = CreateGraphics())

    {

        textSize = g.MeasureString(testoDaVisualizzare, textFont);

    }

 

    //Setto proprietà della form per la posizione e formattazione

    this.FormBorderStyle = FormBorderStyle.None;

    this.TopMost = true;

    this.BackColor = Color.Black;

    this.ForeColor = Color.White;

    this.StartPosition = FormStartPosition.Manual;

    this.Location = new Point(0, 0);

    this.Size = new Size(Screen.PrimaryScreen.Bounds.Width, (int)textSize.Height + 10);

 

    //Applico uno sfondo trasparente

    this.BackColor = Color.Magenta; // colore da rendere trasparente

    this.TransparencyKey = Color.Magenta;

    this.DoubleBuffered = true;

 

    //Imposta posizione iniziale del testo

    posizioneTesto = this.Width;

 

    //Timer per animazione

    timer = new Timer();

    timer.Interval = 30; // velocità dello scorrimento

    timer.Tick += (s, e) =>

    {

        posizioneTesto -= 2;

        if (posizioneTesto < -textSize.Width)

            posizioneTesto = this.Width;

        this.Invalidate(); // forza il ridisegno

    };

    timer.Start();

}

 




Nessun commento: