Come realizzare stampe in formato A3 con Crystal Report

Categories: .NET, C

Tags:

Da qualche settimana ho cominciato ad utilizzare per lavoro la versione di Crystal Report fornita in bundle con Visual Studio 2005. Devo dire che è uno strumento potente, che consente di realizzare report di diversa natura e tipologia rimanendo all’interno dell’ambiente .NET e non dovendo ricorrere ad applicativi esterni verso cui esportare i dati, come Excel.
Ciò nonostante, a mio avviso questo applicativo possiede delle pecche che mi auguro possano essere risolte nelle release successive.
Una cosa che mi ha letteralmente fatto uscire di senno è stata la realizzazione delle stampe di grafici in formato A3. Spesso infatti i dati che intendiamo visualizzare su un grafico sono molti e la stampa in formati di dimensione inferiore, come l’A4, non consente di ottenere una rappresentazione nitida e precisa.

Grafico Crystal Report

La cosa triste che ho potuto constatare è che Crystal Report imposta automaticamente lo spazio per realizzare il progetto del report in relazione ai settings della propria stampante installata. Mi spiego meglio: se la stampante che ho installata sul mio PC non supporta la stampa in formato A3, non mi è possibile effettuare progetti dei report di dimensione A3.
Questo fatto è molto limitante per diverse ragioni. Intanto perchè spesso i report creati non necessitano di essere stampati su carta ma basta soltanto che siano visualizzati sul monitor dell’utente, e quindi non vedo la ragione per cui se non devo stampare un report non devo neanche poterlo progettare in quel formato. Un altro motivo consiste nel fatto che le impostazioni della stampante eventualmente installata sul PC dello sviluppatore, non è detto che corrispondano con quelle delle eventuali stampanti installate sui PC degli utenti reali del software.
Continue Reading »

Thread in C# utilizzando i metodi anonimi

Categories: C

Tags:

Per creare un Thread in C# solitamente si usa scrivere un metodo con all’interno il codice che il Thread deve eseguire, per poi creare il Thread settandogli come delegate il metodo appena creato:

public void FaiQualcosaDiUtile()
{
	for (int i = 0; i < 100; i++)
	{
		// faccio qualcosa...
		Thread.Sleep(500);
	}
}

static void Main()
{
	// qui creo il thread passandogli il delegate del metodo creato pocanzi
	Thread t = new Thread(FaiQualcosaDiUtile);
	t.Name = "Thread di prova";
	t.Start();
}

dual core

Per creare i Thread, il C# dà l’opportunità di utilizzare i metodi anonimi. Per utilizzarli, basta scrivere il codice da eseguire nel Thread all’interno del codice della creazione dell’oggetto Thread, offrendo quindi la possibilità di non scrivere il metodo:
Continue Reading »

Spegnere o riavviare il pc

Categories: C, Source Code, Windows

Tags:

Piccolo post per una funzione che spegne o riavvia il pc su Windows in c++.
La funzione viene chiamata con il parametro false se si vuole spegnere il pc, con true se invece si vuole riavviare, e ritorna false nel caso in cui per qualche motivo la procedura di spegnimento non sia andata in porto (per es. qualche processo ha negato lo shutdown).

Shut Down

Per spegnere il pc basta quindi invocare la funzione nel seguente modo:

if (!ShutDown(false))
{
	// spegnimento non riuscito
}

Parte del codice sorgente è di seguito:
Continue Reading »

Modificare gli elementi di un form da un thread

Categories: C, Source Code

Tags:

Scenario:
Si vuole eseguire al clic di un certo elemento di un Form un’operazione abbastanza lunga, come per esempio lo scaricamento di alcuni files da internet, ma durante l’operazione l’utente deve poter avere il controllo del programma e avere un feedback visivo della percentuale di completamento dell’operazione.
Soluzione non funzionante:
Ci si rende conto subito che per risolvere un problema del genere è necessario utilizzare un Thread che esegua l’operazione in un contesto separato da quello del Form principale, altrimenti il programma si bloccherà in attesa della fine dell’operazione senza possibilità di ricevere input dall’utente. Il vero problema adesso si crea quando si cerca di aggiornare i componenti del Form dal Thread:

private void button1_Click(object sender, EventArgs e)
{
    testThread = new Thread(threadProc);
    testThread.Start();
}

public void threadProc()
{
    // wast a lot of time...
    for (int i = 1; i <= 10; i++)
    {
        Thread.Sleep(250);
        progressBar.Value = i * 10;
    }
    MessageBox.Show("Operation Completed!");
}

Purtroppo, all’esecuzione della riga di codice dove viene assegnato il valore alla progressBar si otterrà un messaggio di errore simile al seguente:
“Operazione cross-thread non valida: è stato eseguito l’accesso al controllo ‘progressBar1′ da un thread diverso da quello da cui è stata eseguita la creazione.”

lock

Continue Reading »

Thread e C#

Categories: .NET, C, Web

Tags:

Fino a poco tempo fa ogni qual volta avevo a che fare con i thread lo facevo con poca cognizione di causa… ogni tanto mi era capitato di fare applicazioni che dovevano popolare una lista o aspettare un input, senza che il programma si bloccasse, ma non avevo mai approfondito il tema più di tanto.

amd dualcore

Un esempio del classico uso base dei Thread in C# è il seguente:
Continue Reading »

UDPSender: Inviare messaggi udp in c#

Categories: .NET, C, Source Code, UDP Communication

Tags:

Questo post fa parte della sezione Comunicazione UDP, e tratterà l’utilizzo di una semplice classe per inviare messaggi dalla propria applicazione c# utilizzando il protocollo udp.

Header UDP

La classe si chiama UDPSender e, per comodità, implementa un’interfaccia denominata INetworkSender.

public interface INetworkSender
{
	void SendMessage(string address, byte[] message);
}

In più in caso di errore la classe genera una eccezione del tipo UDPSenderException che contiene la descrizione dell’errore, la causa dell’eccezione (innerException), e l’oggetto UDPSender che ha generato l’eccezione.
Continue Reading »

UDPListener: Classe che riceve messaggi UDP

Categories: C, Source Code, UDP Communication

Tags:

Questo post fa parte della sezione Comunicazione UDP, dove vengono raccolti gli articoli inerenti la programmazione dei socket UDP in C#.

UDP - User Datagram Protocol

La classe in questo post permette in maniera facile e veloce di ricevere messaggi UDP con poche righe di codice e senza scendere nei dettagli dell’implementazione. Un esempio di utilizzo della classe è il seguente:

private void InitConnection()
{
	m_udpListener = new UDPListener(m_port, new byte[4] { 0, 0, 0, 0 });
	m_udpListener.MessageReceived += new UDPMessageReceivedDelegate(udpListener_MessageReceived);
}

Continue Reading »

Conoscere tutti i processi in esecuzione da una unità

Categories: C, Windows

Tags:

Continuando sulla scia della gestione in c++ delle unità removibili, il post seguente tratterà di come conoscere tutti i processi in memoria, che siano stati lanciati da un drive in particolare. Questo può essere utile, ad esempio, per chiudere tutti i processi di un pendrive che si vuole “smontare”.

Processi

Per ottenere la lista dei processi in esecuzione windows mette a disposizione due metodi: uno derivante da windows 95 (TOOLHELP API), compatibile quindi con tutti gli s.o. di microsoft dal 95 in poi, ed un metoto introdotto in windows NT (PSAPI), compatibile con gli s.o. derivanti da esso (NT, 2000, XP e vista). Naturalmente, dato che la stragrande maggioranza dei utenti windows usa xp, o vista :( , nell’esempio qui sotto ho usato le PSAPI. Attenzione però, per potere includere il file psapi.h bisogna istallare il “Platform SDK”.
Continue Reading »

Classe timer in c++

Categories: C, Source Code, Windows

Tags:

Partendo dall’articolo sui timer in c++, abbiamo creato una semplice classe che fa da wrapper alle funzioni di Windows e che permette facilmente di fare partire un nuovo timer, stopparlo, e decidere quale funzione chiamare quando il tempo del timer è scaduto.

Timer

Un semplice esempio di utilizzo della classe è il seguente:
Continue Reading »

Calcolo del CRC in C#

Categories: .NET, C, Source Code

Tags:

Questo è un post veloce sul calcolo del codice CRC(Cyclic Redundancy Check) in C#. Per lavoro mi serviva una classe che mi calcolasse il crc-12, e non vi nascondo che ho avuto un poco di difficoltà nel trovare le specifiche dato che, di solito, gli standard più usati sono crc-8, crc16 e crc32.

binary matrix

Alla fine ho trovato una classe che mi permettava di calcolare il crc di ordine variabile da 1 a 32, ho inserito lo standard crc-12, ho aggiunto una classe per semplificare l’inserimento dei valori (CRCSettings) e una funzione per generare altri polinomi oltre quelli standard. Infine ho ripulito la struttura della classe principale.
Continue Reading »

« Prev - Next »