martedì 28 febbraio 2023

sito online per la creazione e modifica di immagini

Il seguente sito https://kleki.com/ permette la possibilità di creare e modificare immagini, sia come nuovi o su quelle già esistenti.
Uno strumento online gratuito che non richiede ne email e ne registrazioni.

domenica 26 febbraio 2023

Free VPN da Avira

 


Avira, oltre ad aver realizzato un antivirus gratuito, ha anche rilasciato un software di VPN per protegger ancora di più il proprio pc.

Il software è utilizzabile per vari sistemi operativi, quali Windows, Mac e Android e IOS, fornisce una maggiore sicurezza dei propri sistemi.

Per maggiori informazioni e download visitate il seguente sito https://www.avira.com/it/free-vpn

sabato 25 febbraio 2023

Download gioco Duskers

 


Disponibile gratuitamente e senza limitazioni il gioco di simulazione drone Duskers per sistemi operativi Windows e Mac.

Il gioco è disponibile gratuitamente fino al 2 marzo 2023, dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito Duskers | Acquistalo e scaricalo subito sull'Epic Games Store

QueryStorm componente per utilizzare C# in Microsoft Excel

 




QueryStorm, qui https://querystorm.com/csharp-in-excel/ il sito, offre la possibilità di aggiungere un componente al programma Microsoft Excel, per utilizzare il linguaggio di programmazione C# e Sql, per eseguire determinate funzionalità o ampliare quelle già presenti nel foglio di calcolo più usato al mondo.

E' possibile utilizzare anche la sintassi Linq, divenendo in questo modo un LinqToExcel.

Ci sono varie versioni di licenza, quella gratuita è la Community, mentre per altri utilizzi e funzionalità ci sono licenze a pagamento.

Per il download e maggiore informazioni visitate il sito indicato.

venerdì 24 febbraio 2023

Sito per sfondi computer

 


Se cercate un sito per scaricare immagini come sfondi per il proprio pc, dal seguente sito https://www.wallpaperfusion.com/ è possibile consultare una serie di immagini di ogni genere da utilizzare come sfondo per il proprio computer.


giovedì 23 febbraio 2023

Programmi gratuiti per il computer con sistema operativo Windows

Quando si acquista un nuovo pc, o ci viene regalato, spesso non si trovano i programmi essenziali all'utilizzo quotidiano che occorre fare.
Di seguito si riporta una serie di programmi gratuiti per il sistema operativo Windows, da installare per l'utilizzo quotidiano. 


Adobe: Programma gratuito per la lettura e compilazione dei moduli dei file Pdf. Download qui https://get.adobe.com/it/reader/

Office Automation: Sono programmi che offrono la possibilità di una serie sottoprogrammi, quali un programma di video scrittura per la stesura delle lettere, foglio di calcolo per operazioni di contabilità e matematici, presentazioni e tanto altro. Onlyoffice https://www.onlyoffice.com/it/download-desktop.aspx?from=home-use oppure Libre Office https://it.libreoffice.org/ sono entrambi molto validi, anche se OnlyOffice offre qualcosa in più.

Office online: Suite di Microsoft, gratuita se utilizzata con un account Microsoft con indirizzo email outlook o altri. Qui Home | Microsoft 365 (office.com) per accedere.


Browser Chrome: Programma per la navigazione in internet, oltre a Edge qui https://www.google.com/intl/it_it/chrome/ il sito.

Paint.Net programma di grafica: Un programma gratuito con codice sorgente, per realizzare immagini anche professionali https://www.getpaint.net/index.html





mercoledì 22 febbraio 2023

C# libreria gratuita per la gestione dei pdf PDFsharp

PdfSharp http://www.pdfsharp.net/ è una  libreria gratuita per la gestione dei file "pdf".

La libreria è utilizzabile anche per progetti commerciali, ed è open source, disponibile il sorgente anche su Git, qui https://github.com/empira/PDFsharp il sito.

Una libreria molto valida e professionale, anche se non viene aggiornata da circa 5 anni.




martedì 21 febbraio 2023

Rilasciata la versione di Flax Engine 1.5

Rilasciata in questi giorni la nuova versione del componente per la creazione di video giochi FlaxEngine 1.5.
Il componente per la creazione dei video giochi permette di gestire scenari in 3D ed è utilizzabile gratuitamente.
Il componente si può utilizzare con il linguaggio di programmazione C#,  nel sito si trova un manuale di utilizzo.
Per maggiori informazioni e download visitate il seguente sito Flax - Flax Engine

C# .Net MAUI la gestione della posizione del mouse nelle immagini.


In questo articolo vedremo come gestire la posizione del mouse in un’immagine in un progetto di .Net 7 Framework MAUI per la multipiattaforma, con il linguaggio di programmazione C# ed ambiente di sviluppo Visual Studio 2022.
Il controllo Image, tramite i suoi eventi di mouse quale “PointerEntered” che viene scatenato quando il mouse entra nell’area dell’immagine, l’evento “PointerExited” quando il puntatore del mouse esce dall’area dell’immagine e l’evento “PointerMoved” quando si sposta all’interno dell’area dell’immagine, possiamo gestire la posizione ed altri aspetti che possono tornare utile nello sviluppo di applicazioni.
Questi eventi si possono gestire solo per ambiente “Ipad”, “Mac Catalyst” e “Windows Application” .
Il risultato sarà come mostrato in figura 1.

Figura 1 – Le coordinate del mouse nell’immagine.


Creazione del progetto

Si crea un nuovo progetto di tipo “App .Net MAUI” e nella finestra successiva si sceglie il nome ed il percorso dove creare il progetto, nella finestra successiva, selezionare la versione 7 del Framework, a questo punto si crea il progetto.
Tra i controlli creati di default che troviamo nel progetto, cambiamo nel controllo “Image” l’immagine, puntando al logo del sito “Iprogrammatori” tramite percorso web, il tutto come rappresentato dal codice XAML qui di seguito.



XAML

   <Image

                SemanticProperties.Description="logo"

                HeightRequest="200"

                HorizontalOptions="Center"

                Source="https://www.iprogrammatori.it/images/logo-iprogrammatori.png"

                 x:Name="ImgLogo"

                >


Sempre per il controllo Image, si aggiunge il sotto nodo “Image.GestureRecognizers” per la gestione degli eventi, mettendo per i vari eventi (mouse che entra nell’immagine, mouse che esce dell’area dell’immagine e mouse che si sposta all’interno dell’area dell’immagine) il gestore degli eventi per ognuno.
Di seguito si riporta il codice completo delle suddette operazioni e di tutto il controllo “Image”.

XAML

<Image

                SemanticProperties.Description="logo"

                HeightRequest="200"

                HorizontalOptions="Center"

                Source="https://www.iprogrammatori.it/images/logo-iprogrammatori.png"

                 x:Name="ImgLogo"

                >

                <Image.GestureRecognizers>

                    <PointerGestureRecognizer PointerEntered="PointerGestureRecognizer_PointerEntered"  PointerExited="PointerGestureRecognizer_PointerExited" PointerMoved="PointerGestureRecognizer_PointerMoved">

                        

                       

                    </PointerGestureRecognizer>

                </Image.GestureRecognizers>

               

            </Image>


Di seguito si riporta anche il tag name del controllo “Label” per visualizzare informazioni a video.
Di seguito il frammento di codice per il controllo “Label”

XAML

    

            <Label

                Text="Esempio di gestione mouse"

                SemanticProperties.HeadingLevel="Level1"

                FontSize="32"

                HorizontalOptions="Center"

                x:Name="lblDati"/>



Stesura del codice

Dopo aver impostato la parte dei controlli e grafica del nostro progetto, non resta che scrivere il codice nel linguaggio C# per gestire la posizione del mouse per ogni evento.
Per ogni evento, andremo a gestire la posizione del mouse all’interno dell’immagine, quando entra, si sposta all’interno dell’area immagine e quando esce fuori.
Di seguito il codice per i tre eventi delle suddette operazioni.



C#

private void PointerGestureRecognizer_PointerEntered(object sender, PointerEventArgs e)

    {

        lblDati.Text = "Entrato";

        

        Point? posizione = e.GetPosition(null);

        string descrizione = "Posizione: Asse X: " + posizione.Value.X.ToString() + " Asse Y: " + posizione.Value.Y.ToString();

        // Posizione relativa dell'immagine

        Point? posizioneRelativaImagine = e.GetPosition(ImgLogo);

        descrizione += "\r\t" + "Posizione Immagine: Asse X: " + posizioneRelativaImagine.Value.X.ToString() + " Asse Y: " + posizioneRelativaImagine.Value.Y.ToString();

        // Posizione relativa nella finestra

        Point? posizioneRelativaFinestra = e.GetPosition((View)sender);

        descrizione += "\r\t" + "Posizione nella finestra: Asse X" + posizioneRelativaFinestra.Value.X.ToString() + " Asse Y: " + posizioneRelativaFinestra.Value.Y.ToString();

        lblDati.Text = descrizione;

    }

 

    private void PointerGestureRecognizer_PointerExited(object sender, PointerEventArgs e)

    {

        lblDati.Text = "Uscito";

        Point? posizione = e.GetPosition(null);

        string descrizione = "Posizione: Asse X: " + posizione.Value.X.ToString() + " Asse Y: " + posizione.Value.Y.ToString();

        // Posizione relativa dell'immagine

        Point? posizioneRelativaImagine = e.GetPosition(ImgLogo);

        descrizione += "\r\t" + "Posizione Immagine: Asse X: " + posizioneRelativaImagine.Value.X.ToString() + " Asse Y: " + posizioneRelativaImagine.Value.Y.ToString();

        // Posizione relativa nella finestra

        Point? posizioneRelativaFinestra = e.GetPosition((View)sender);

        descrizione += "\r\t" + "Posizione nella finestra: Asse X" + posizioneRelativaFinestra.Value.X.ToString() + " Asse Y: " + posizioneRelativaFinestra.Value.Y.ToString();

        lblDati.Text = descrizione;

    }

 

    private void PointerGestureRecognizer_PointerMoved(object sender, PointerEventArgs e)

    {

        lblDati.Text = "Si sposta dentro";

       

        Point? posizione = e.GetPosition(null);

        string descrizione = "Posizione: Asse X: " + posizione.Value.X.ToString() + " Asse Y: " + posizione.Value.Y.ToString();

        // Posizione relativa dell'immagine

        Point? posizioneRelativaImagine = e.GetPosition(ImgLogo);

        descrizione += "\r\t" + "Posizione Immagine: Asse X: " + posizioneRelativaImagine.Value.X.ToString() + " Asse Y: " + posizioneRelativaImagine.Value.Y.ToString();

        // Posizione relativa nella finestra

        Point? posizioneRelativaFinestra = e.GetPosition((View)sender);

        descrizione += "\r\t" + "Posizione nella finestra: Asse X" + posizioneRelativaFinestra.Value.X.ToString() + " Asse Y: " + posizioneRelativaFinestra.Value.Y.ToString();

        lblDati.Text = descrizione;

    }







Terminata la stesura del codice, non resta che eseguire il progetto in ambiente “Windows” per verificare la correttezza di quanto scritto.

Conclusioni

Con la tecnologia MAUI e soprattutto le potenzialità offerte da .Net 7 lo sviluppo di applicazioni multipiattaforma diventa molto facile e per chi proviene dallo sviluppo web o windows application non troverà nessuna difficoltà nel creare applicazioni per altri ambiti.
La gestione delle immagini può tornare utile in quelle applicazioni che richiedono situazioni particolare come può essere un gioco oppure aspetti grafici da rendere più interattiva l’applicazione.

lunedì 20 febbraio 2023

C# .Net MAUI utilizzo varie funzionalità per Android

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_csharp-dotnet-maui-utilizzo-varie-funzionalit-per-_1817.aspx

In questo articolo vedremo l’utilizzo di varie funzionalità del framework MAUI con il linguaggio di programmazione C# e versione 7 del Framework .Net. In particolare, vedremo funzionalità quali la predisposizione per l’invio di SMS, o telefonate, la possibilità di aprire la torcia, e convertire unità di misure. 
Il Framework MAUI offre tante classi e funzionalità per semplificare lo sviluppo multipiattaforma, ma in questo articolo vedremo come scrivere il codice per Android, codice che può essere usato anche per sistemi IOS.

Creazione del progetto

Si crea un nuovo progetto con il linguaggio di programmazione C# di tipo App MAUI selezionando come versione del Framework la 7 e come nome un valore di vostro gradimento.
Dopo aver creato il progetto, dobbiamo aggiungere al progetto due label e quattro controlli di tipo “button” il quale ognuno eseguirà una determinata funzionalità, il tutto come mostrato in figura 1.


Figura 1 – La disposizione dei controlli con i 4 pulsanti e le label

Di seguito si riporta il codice XAML, relativo ai vari controlli, che va a sostituire o meglio modificare quello che viene impostato di default durante la creazione del progetto.


XAML

  <ScrollView>

        <VerticalStackLayout

            Spacing="25"

            Padding="30,0"

            VerticalOptions="Center">

 

            <Image

                Source="dotnet_bot.png"

                SemanticProperties.Description="Immagine "

                HeightRequest="200"

                HorizontalOptions="Center" />

 

            <Label

                Text="Descrizione"

                SemanticProperties.HeadingLevel="Level1"

                FontSize="32"

                HorizontalOptions="Center" x:Name="TxtErrore" />

 

            <Label

                Text="Vari test"

                SemanticProperties.HeadingLevel="Level2"

                SemanticProperties.Description="Funzionalità varie MAUI"

                FontSize="18"

                HorizontalOptions="Center" />

 

            <Button

                x:Name="BtnTorcia"

                Text="Torcia"

                SemanticProperties.Hint="Torcia"

                Clicked="BtnTorcia_Clicked"

                HorizontalOptions="Center" />

            <Button

                x:Name="BtnConvertitore"

                Text="Convertitore"

                SemanticProperties.Hint="Convertitore"

                Clicked="BtnConvertitore_Clicked"

                HorizontalOptions="Center" />

            <Button

                x:Name="BtnTelefonare"

                Text="Telefonare"

                SemanticProperties.Hint="Effettuare telefonata"

                Clicked="BtnTelefonare_Clicked"

                HorizontalOptions="Center" />

 

            <Button

                x:Name="BtnInviaSMS"

                Text="SMS"

                SemanticProperties.Hint="Invio SMS"

                Clicked="BtnInvaSMS_Clicked"

                HorizontalOptions="Center" />

 

        </VerticalStackLayout>

    </ScrollView>


Terminata la predisposizione della nostra pagina, occorre impostare i permessi per la gestione delle varie funzionalità, in particolare nel file “AndroidManifest.xml” , vanno inseriti i vari tag per gestire le autorizzazioni alla funzionalità per accendere e spengere la torcia, l’invio di SMS e telefonate.
Il file “AndroidManifest.xml” si trova nella cartella “Android” della cartella superiore “Platforms”.
Qui di seguito si riportano le suddette operazioni per le varie autorizzazioni.

XAML

<!--Per la torcia-->

      <uses-permission android:name="android.permission.FLASHLIGHT" />

      <uses-permission android:name="android.permission.CAMERA" />

      <!--Per le telefonate-->

      <queries>

            <intent>

                  <action android:name="android.intent.action.DIAL" />

                  <data android:scheme="tel"/>

            </intent>

      </queries>

      <!--Per gli SMS-->

      <queries>

            <intent>

                  <action android:name="android.intent.action.VIEW" />

                  <data android:scheme="smsto"/>

            </intent>

      </queries>




Terminata questa funzionalità non resta che scrivere il codice per effettuare la funzionalità della torcia, torniamo alla pagina con i pulsanti ed andiamo nell’evento click della torcia, in particolare in visualizzazione codice dell’evento “BtnTorcia_Clicked” con il quale scriveremo il codice per gestire la torcia  .
Si crea a livello di classe, una variabile per gestire lo stato della torcia, se è 0 vuole dire che è spenta, se è una vuol dire che è accesa.
Naturalmente questa variabile è già presente quando si crea il progetto.
Di seguito il frammento di codice della suddetta operazione.

C#

int count = 0;


Posizioniamoci nell’evento click del pulsante torcia e scriviamo il codice per accendere e spengere la torcia.
Tramite il metodo TurnOnAsync della classe “Flashlight” accendiamo la torcia, mentre tramite il metodo “TurnOffAsync” verrà spenta. 
Di seguito si riporta il frammento di codice dell’evento click per il pulsante torcia.

C#

private void BtnTorcia_Clicked(object sender, EventArgs e)

    {

        try

        {

 

            if (count == 0)

            {

                Flashlight.Default.TurnOnAsync();

                count += 1;

            }

            else

            {

                Flashlight.Default.TurnOffAsync();

                count = 0;

            }

        }

        catch (FeatureNotSupportedException ex)

        {

            TxtErrore.Text = ex.Message;

        }

        catch (PermissionException ex)

        {

            TxtErrore.Text = ex.Message;

        }

        catch (Exception ex)

        {

            TxtErrore.Text = ex.Message;

        }

    }



Eseguiamo il codice e vedremo che al click del pulsante “torcia” ci verrà chiesto di autorizzare questa applicazione all’uso della camera, come mostrato in figura 2.


Figura 2 – La richiesta ad utilizzare la camera dello smartphone.

Ora torniamo in visualizzazione grafica della form, e per il pulsante “BtnConverittore” passiamo in visualizzazione codice nell’evento click, in modo da creare il codice per l’evento del pulsante.
In questo pulsante, vedremo come convertire i gradi Fahrenheit in Celius e le distanze da Miglia in chilometri, il tutto tramite la classe UnitConverters, che offre una serie di metodi (sono diversi) per la conversione di unità di misura.
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#

private void BtnConvertitore_Clicked(object sender, EventArgs e)

    {

        try

        {

           

            var celsius = UnitConverters.FahrenheitToCelsius(35);

            var Chilometri = UnitConverters.MilesToKilometers(2);

           

        }

        catch (Exception ex)

        {

            TxtErrore.Text = ex.Message;

        }

    

    }


Dopo aver accertato il funzionamento del codice, torniamo in visualizzazione grafica, e passiamo al tag relativo al pulsante “BtnTelefonare”, ed in particolare passiamo in visualizzazione codice dell’evento click in modo da creare l’evento per tale pulsante.
Tramite la classe “PhonerDialer” verifichiamo se il dispositivo è predisposto alle telefonate, in tal caso tramite il metodo “open” verrà avviata la finestra per le chiamate.
Di seguito si riporta il codice delle suddette operazioni.

C#

private void BtnTelefonare_Clicked(object sender, EventArgs e)

    {

        if (PhoneDialer.Default.IsSupported)

            PhoneDialer.Default.Open("339-19800777");

    }

Nell’eseguire il codice, verrà visualizzata la tastiera per la composizione delle chiamate, il tutto come mostrato in figura 3.

Figura 3 – La maschera per la composizione delle chiamate

Terminato la stesura e test del codice, passiamo alla nostra form, in particolare andremo a scrivere il codice per l’ultimo pulsante rimasto, quello riguardante l’invio di SMS.

Per il pulsante “BtnInviaSMS” passiamo in visualizzazione codice dell’evento click, in modo che crea in automatico il codice di gestione del pulsante.
Tramite la classe “SMS”,  verifichiamo se il dispositivo supporta l’invio degli sms tramite la proprietà IsComposeSupported, mentre tramite il metodo “ComposeAsync” passando un oggetto di tipo “SmsMessage” viene aperta la schermata di invio SMS.
Qui di seguito si riporta il codice C# delle suddette operazioni.

C#

private void BtnInvaSMS_Clicked(object sender, EventArgs e)

    {

        if (Sms.Default.IsComposeSupported)

        {

            string[] Numeri = new[] { "339-19800777" };

            string testo = "Invio SMS";

 

            var message = new SmsMessage(testo, Numeri);

 

              Sms.Default.ComposeAsync(message);

        }

    }



Terminata la stesura del codice non resta che eseguire il codice, come mostrato in figura 4, sullo smartphone verrà aperta la schermata di invio sms, con il destinatario ed il testo predisposto.

Figura 4 – La predisposizione nell’invio SMS

Conclusioni

In questo articolo, abbiamo visto alcune funzionalità offerte dalle numerose classi messe a disposizione dal Framework MAUI, da utilizzare in ambiente Android, ma che si può adattare anche per sistemi IPhone.
Il programmatore troverà molto semplice sviluppare applicazioni per dispositivi mobile e per architettura multipiattaforma, visto le potenzialità offerte da questo Framework, che fornisce numerose classi di gestione del dispositivo anche su ambiti complessi.