Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-03-2010, 21:47   #1
calo182
Member
 
Iscritto dal: Mar 2010
Messaggi: 38
[C#] Form Personalizzata

Salve a tutti!
Questa è la prima discussione che inserisco in questo forum e ne approfitto per salutare e ringraziare chiunque mi risponderà.
Vorrei creare una form con gli angoli smussati...piu o meno come quelli di una tessera...sanitaria...del codice fiscale...
So benissimo che non è una cosa facile...ma se fosse possibile avere una breve guida, o un codice gia compilato e funzionate ve ne sarei infinitamente grato...
Utilizzo C# e le mie conoscenze sono quelli di un ragazzo di quarta informatici...
Vi ringrazio anticipatamente!
Aspetto fiducioso...
calo182 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 22:33   #2
atragon
Senior Member
 
L'Avatar di atragon
 
Iscritto dal: Sep 2000
Messaggi: 886
http://bytes.com/topic/c-sharp/answe...ounded-corners
__________________

1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. Learn Falcon language sul sito ufficiale e sul mio
RIP NBA3D
atragon è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 23:02   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da atragon Guarda i messaggi
Chiamare API da C# per una cosa come questa ?
"CreateRoundRectRgn" ?

E non mi piace nemmeno il consiglio di quel tizio : override di OnPaint ?!
Ma no, basta disegnarla una volta sola, la Form, alla sua creazione.

Codice:
Io risolverei così :

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Disegna();
        }

        //Selezione e mouse
        private bool selezione = false;
        private int eXSel = 0;
        private int eYSel = 0;

        private void Disegna()
        {
            int rectArcoWidth = 60;
            int rectArcoHeight = 60;
            System.Drawing.Drawing2D.GraphicsPath contorno = new System.Drawing.Drawing2D.GraphicsPath();

            Graphics G = this.CreateGraphics();
            contorno.StartFigure();
            contorno.AddLine(rectArcoWidth / 2, 0, this.Width - rectArcoWidth / 2, 0);
            contorno.AddArc(this.Width - rectArcoWidth, 0, rectArcoWidth, rectArcoHeight, -90, 90);
            contorno.AddLine(this.Width, rectArcoHeight / 2, this.Width, this.Height - rectArcoHeight / 2);
            contorno.AddArc(this.Width - rectArcoWidth, this.Height - rectArcoHeight, rectArcoWidth, rectArcoHeight, 0, 90);
            contorno.AddLine(this.Width - rectArcoWidth / 2, this.Height, rectArcoWidth / 2, this.Height);
            contorno.AddArc(0, this.Height - rectArcoHeight, rectArcoWidth, rectArcoHeight, 90, 90);
            contorno.AddLine(0, this.Height - rectArcoHeight / 2, 0, rectArcoHeight / 2);
            contorno.AddArc(0, 0, rectArcoWidth, rectArcoHeight, 180, 90);
            contorno.CloseFigure();
            Region R = new Region (new Rectangle(0, 0, this.Width , this.Height));
            R.Intersect(contorno);
            this.Region = R;
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            this.selezione = true;
            eXSel = e.X;
            eYSel = e.Y;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.selezione==true) 
            {
                this.Left -= (this.eXSel - e.X);
                this.Top -= (this.eYSel - e.Y);
            }
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            this.selezione = false;
        }
    }
1. Posso ottenere archi di curvatura anche ellittici, giocando con i due valori rectArcoWidth e rectArcoHeight. Unico requisito è avere la Form con FormBorderStyle = None. Il resto lo fa tutto il codice.

2. C'ho già messo il codice per spostarla con il mouse.

3. A quanto sono bravo.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2010, 18:55   #4
calo182
Member
 
Iscritto dal: Mar 2010
Messaggi: 38
No no!
Ma che bravo!
Tu sei un grande!
Grazie 1000, veramente MarcoGG grazie cosi
Chiaramente anche a atragon per la disponibilità!
Veramento non potevo chiedere di meglio!
calo182 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2010, 19:19   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da calo182 Guarda i messaggi
No no!
Ma che bravo!
Tu sei un grande!
Grazie 1000, veramente MarcoGG grazie cosi
Chiaramente anche a atragon per la disponibilità!
Veramento non potevo chiedere di meglio!
Piccola auto-correzione su svista dovuta a fretta ( e all'ora tarda ) sul mio precedente post :
nel metodo Disegna() la riga di codice :
Codice:
Graphics G = this.CreateGraphics();
può tranquillamente essere eliminata.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2010, 19:39   #6
calo182
Member
 
Iscritto dal: Mar 2010
Messaggi: 38
grazie ancora!
calo182 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2010, 20:17   #7
atragon
Senior Member
 
L'Avatar di atragon
 
Iscritto dal: Sep 2000
Messaggi: 886
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Chiamare API da C# per una cosa come questa ?
"CreateRoundRectRgn" ?

E non mi piace nemmeno il consiglio di quel tizio : override di OnPaint ?!
Ma no, basta disegnarla una volta sola, la Form, alla sua creazione.

Codice:
Io risolverei così :

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Disegna();
        }

        //Selezione e mouse
        private bool selezione = false;
        private int eXSel = 0;
        private int eYSel = 0;

        private void Disegna()
        {
            int rectArcoWidth = 60;
            int rectArcoHeight = 60;
            System.Drawing.Drawing2D.GraphicsPath contorno = new System.Drawing.Drawing2D.GraphicsPath();

            Graphics G = this.CreateGraphics();
            contorno.StartFigure();
            contorno.AddLine(rectArcoWidth / 2, 0, this.Width - rectArcoWidth / 2, 0);
            contorno.AddArc(this.Width - rectArcoWidth, 0, rectArcoWidth, rectArcoHeight, -90, 90);
            contorno.AddLine(this.Width, rectArcoHeight / 2, this.Width, this.Height - rectArcoHeight / 2);
            contorno.AddArc(this.Width - rectArcoWidth, this.Height - rectArcoHeight, rectArcoWidth, rectArcoHeight, 0, 90);
            contorno.AddLine(this.Width - rectArcoWidth / 2, this.Height, rectArcoWidth / 2, this.Height);
            contorno.AddArc(0, this.Height - rectArcoHeight, rectArcoWidth, rectArcoHeight, 90, 90);
            contorno.AddLine(0, this.Height - rectArcoHeight / 2, 0, rectArcoHeight / 2);
            contorno.AddArc(0, 0, rectArcoWidth, rectArcoHeight, 180, 90);
            contorno.CloseFigure();
            Region R = new Region (new Rectangle(0, 0, this.Width , this.Height));
            R.Intersect(contorno);
            this.Region = R;
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            this.selezione = true;
            eXSel = e.X;
            eYSel = e.Y;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.selezione==true) 
            {
                this.Left -= (this.eXSel - e.X);
                this.Top -= (this.eYSel - e.Y);
            }
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            this.selezione = false;
        }
    }
1. Posso ottenere archi di curvatura anche ellittici, giocando con i due valori rectArcoWidth e rectArcoHeight. Unico requisito è avere la Form con FormBorderStyle = None. Il resto lo fa tutto il codice.

2. C'ho già messo il codice per spostarla con il mouse.

3. A quanto sono bravo.
Veramente elegante devo dirlo al socio che mi ha passato il link.
__________________

1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. Learn Falcon language sul sito ufficiale e sul mio
RIP NBA3D
atragon è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 09:41   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
@calo182 : possiamo continuare qui.

Piccola parentesi : ragazzi, lo ripeto per la N-esima volta, non fatemi in pvt richieste che potreste tranquillamente fare in chiaro in un thread...

Pulsante ellittico, o comunque diciamo non rettangolare :
E' semplice, ad esempio con una Label ( che ha l'evento Click() come il Button, e che può essere perfettamente flat, senza bordi o ombreggiature... ).
La label può essere creata e aggiunta alla Form a design.
Anche qui, come per il caso precedente, diffidare di tutti quei "tutorial" che raccomandano cose come l'override dell'evento Paint, o peggio ancora l'accesso ad API esterne. Il semplice ridisegno dei controlli va fatto una volta sola, e può essere effettuato nell'evento Load della Form :

Codice:
            //Ridisegno di label1
            System.Drawing.Drawing2D.GraphicsPath contorno = new System.Drawing.Drawing2D.GraphicsPath();
            contorno.StartFigure();
            contorno.AddEllipse(0, 0, label1.Width, label1.Height);
            contorno.CloseFigure();
            Region R = new Region(new Rectangle(0, 0, label1.Width, label1.Height));
            R.Intersect(contorno);
            label1.Region = R;
            label1.Cursor = Cursors.Hand;
A questo punto la nostra label1 è un pulsante vero e proprio di forma ellittica, e con tanto di "manina"...

Basta solo usare l'evento Click() :
Codice:
        private void label1_Click(object sender, EventArgs e)
        {

        }
E il gioco è fatto.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 09:59   #9
calo182
Member
 
Iscritto dal: Mar 2010
Messaggi: 38
Grazie 1000 ancora una volta, ma che valori devo cambiare per restringere io allargare il bottone?
calo182 è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 10:04   #10
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da calo182 Guarda i messaggi
Grazie 1000 ancora una volta, ma che valori devo cambiare per restringere io allargare il bottone?
Semplice, vai ad agire da codice su label1.Width e label1.Height. Considera che l'ellisse che in questo caso sarà la Region del controllo, è sempre inscritta nel Rectangle originario del controllo stesso.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 10:08   #11
calo182
Member
 
Iscritto dal: Mar 2010
Messaggi: 38
èèèèèèèèèèèè gia!
Grazie!
calo182 è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 10:43   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Chiamare API da C# per una cosa come questa ?
"CreateRoundRectRgn" ?
..cut..
MarcoGG, Se non l'avessi ancora fatto ti consiglio di dare uno sguardo a WPF.
Sono sicuro che ci troveresti spunti parecchio interessanti.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 13:42   #13
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
MarcoGG, Se non l'avessi ancora fatto ti consiglio di dare uno sguardo a WPF.
Sono sicuro che ci troveresti spunti parecchio interessanti.
Eh, c'hai ragione. Ammetto di non aver ancora adottato seriamente WPF, sarà perchè ormai dai tempi di VS 2003, mi sono appassionato alle GDI+, arrivando a fare cose "spaziali" ( o "turche", a seconda dei punti di vista ), sarà anche che normalmente nelle Form che costruisco cerco sempre di pensare molto alla funzionalità pratica lato-utente e non tanto all'aspetto estetico...
A maggior ragione se qualcuno mi chiede un consiglio sullo shaping di Forms e Controlli, preferibilmente senza uscire dal Windows Forms secco, come in questo caso, ci vado a nozze.
Il fatto è che, secondo l'idea comune, sembra che GDI+ sia pesante, e lo credo bene, se c'è una marea di gente in giro che consiglia tecniche come quelle. Andare a scrivere nel Paint() può portare una Form ad essere inutilizzabile, e nel 90% dei casi non è affatto necessario.
Cmq, prima o poi mi ci butterò, anche su WPF...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
L'ASUS Zenbook di cui tutti parlano torn...
Helios, la piattaforma di Schneider Elec...
Multiverse Computing raccoglie 500 milio...
Videogiochi, social e azzardo: un giovan...
Tre astronauti rientrano dalla ISS: la S...
Kimi K3 ha trovato 19 zero-day in Redis ...
Aggiungere un acceleratore IA per data c...
Debian valuta lo stop totale ai contribu...
Huawei sfida il ban USA: al via la produ...
QNAP lancia i nuovi NAS TS-262A e TS-462...
E4 Computer Engineering e EuroHPC JU uni...
World di Sam Altman raccoglie 52,5 milio...
AMD prepara il futuro delle CPU Ryzen: Z...
Intel fa marcia indietro: torna la tecno...
Honor ROBOT PHONE ha una data d'uscita: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v