Pagine: 1 ... 6 7 [8] 9 10 ... 14

19 Dic 2011 - Da DataSource a Excel

Se implementate nei vostri progetti questa mia libreria, che necessita dell'installazione di questo componente http://wiki.lazarus.freepascal.org/FPSpreadsheet allora potrete esportare il contenuto di un DataSource in excel. Quella che segue è la libreria

Codice: [Seleziona]

{
     Libreria scritta da Sammarco Francesco
     francesco.sammarco@gmail.com
}

unit MyExcel;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, fpspreadsheet, fpsallformats, fpstypes, laz_fpspreadsheet, sqldb, db;

const OUTPUT_FORMAT = sfExcel5;

function ExportToExcel(MiaQuery: TDataSource; MyDir: string; NomeFile: string; NomeFoglio: string; var Errore: string): boolean;

implementation

     function ExportToExcel(MiaQuery: TDataSource; MyDir: string; NomeFile: string; NomeFoglio: string; var Errore: string): boolean;
     var
      ret: BOOLEAN;
        rst: TDataSet;
        MyWorkbook: TsWorkbook;
        MyWorksheet: TsWorksheet;
        Riga, i, Qta: integer;
        posizione: integer;
     begin
             if MiaQuery.DataSet.RecordCount>0 then
             begin
               posizione:=MiaQuery.DataSet.RecNo;
               MiaQuery.DataSet.DisableControls;
               Errore:='';
            ret:=TRUE;
               try
                 try
                    rst:=MiaQuery.DataSet;
                    rst.First;
                    if not rst.EOF then
                    begin
                          Riga:=0;
              // Create the spreadsheet
              MyWorkbook := TsWorkbook.Create;
              MyWorksheet := MyWorkbook.AddWorksheet(NomeFoglio);
              Qta:=rst.Fields.Count;
                          //stampo la testata
                          for i:=0 to Qta-1 do
                          begin
                               if (rst.FieldDefs.Items[i].Name='') then
                                  MyWorksheet.WriteUTF8Text(Riga, i, 'Campo' + IntToStr(i))
                               else
                                   MyWorksheet.WriteUTF8Text(Riga, i, rst.FieldDefs.Items[i].Name);
                               MyWorksheet.WriteFontStyle(Riga, i, [fssBold]); //metto la cella in grassetto
                          end;
                          Inc(Riga);
              //stampo i dati sul foglio excel
              rst.First;
              while not rst.EOF do
              begin
                               for i:=0 to Qta-1 do
                               begin
                                    if i=6 then
                                       Errore:=rst.Fields[i].AsString;

                                    if (rst.Fields[i].DataType=ftFloat) then
                                         MyWorksheet.WriteNumber(Riga, i, rst.Fields[i].AsFloat)
                                    else if (rst.Fields[i].DataType=ftCurrency) then
                                              MyWorksheet.WriteNumber(Riga, i, rst.Fields[i].AsCurrency)
                                    else if (rst.Fields[i].DataType=ftLargeint) then
                                              MyWorksheet.WriteNumber(Riga, i, rst.Fields[i].AsLargeInt)
                                    else if (rst.Fields[i].DataType=ftSmallint) then
                                              MyWorksheet.WriteNumber(Riga, i, rst.Fields[i].AsInteger)
                                    else if (rst.Fields[i].DataType=ftInteger) then
                                         MyWorksheet.WriteNumber(Riga, i, rst.Fields[i].AsInteger)
                                    else if (rst.Fields[i].DataType=ftString) then
                                         MyWorksheet.WriteUTF8Text(Riga, i, rst.Fields[i].AsString)
                                    else
                                        MyWorksheet.WriteUTF8Text(Riga, i, rst.Fields[i].AsString);
                               end;
                               Inc(Riga);
                   rst.Next;
              end;

              // Save the spreadsheet to a file
              MyWorkbook.WriteToFile(MyDir + System.DirectorySeparator + NomeFile + STR_EXCEL_EXTENSION, OUTPUT_FORMAT);
              MyWorkbook.Free;
             end
             else
             begin
              ret:=FALSE;
             end;
                finally
          end;
        except
                          on E: Exception do
                          begin
                               Errore:=E.Message;
                               ret:=FALSE;
                          end;
              end;
                  MiaQuery.DataSet.RecNo:=posizione;
                  MiaQuery.DataSet.EnableControls;

             end else begin
                  Errore:='Data empty';
                  ret:=false;
             end;

             result:=ret;
      end;

end.


Per usare questa libreria basta inserire la voce MyExcel nella sezione unit e nel codice da eseguire usiamo il seguente esempio:
Codice: [Seleziona]

     if ExportToExcel(DS_MiaQuery, "c:\", "FileOut.xls" , "Foglio1", Errore)=TRUE then
           ShowMessage("Esportato")
     else
           ShowMessage("Errore: " + Errore);


Dove il primo parametro (DS_MiaQuery) è il DataSource a cui è collegata la mia query da esportare, il secondo parametro stabilisce in quale cartella andare a salvare il file excel (bisogna avere i permessi di scrittura in tale directory, es "c:\"), il terzo parametro è il nome che vogliamo dare al file excel, il quarto parametro è il nome che vogliamo assegnare al foglio del documento excel, e l'ultimo parametro è una variabile passata per referenza in cui inserisco il messaggio d'errore se qualcosa va storto. Se tale funzione ha esito positivo ritorna TRUE diversamente ritorna FALSE.
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Ho notato che inserendo una StatusBar ad un Form , e su questa dei pannelli  con Style = psOwnerDraw;
quando si aggiunge la gestione dell'evento OnDrawPanel

viene generata in automatico
Codice: [Seleziona]

 procedure BarraStatoDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;  const Rect: TRect);  


in fase di compilazione segnala che StatusBar e' duplicata,
ovvio nella classe vi e' la dichiarazione del componente StatusBar: TStatusBar;
creata in automatico,

non resta che ovviare cambiando dichiarazione in modo che il parametro StatusBar abbia un nome diverso

Codice: [Seleziona]
[b][/b]
procedure BarraStatoDrawPanel([b]StatusBar1: TStatusBar[/b]; Panel: TStatusPanel;  const Rect: TRect);  


cosi' StatusBar e StatusBar1 risultano variabili diverse e non si disturbano;

questo solo mantenendo {$mode objfpc}  , se invece la direttiva e' {$mode delphi}  , l'anomalia non si presenta.
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Mi sono imbattuto nel problema su come visualizzare un file di Help, quindi un testo formattato con Font e Immagini;
un file Html e' semplice e di veloce realizzazione.

Inizialmente ho provato il componente RTFRichView, ma sembra che alcune parti non siano ancora implementate;
ho virato allora sul file Html, nei componenti TurboPower ho trovato cio' che serviva.

su un Form si utilizzano dal Pannello IPro i componenti IpFileDataProvider ed IpHtmlPanel

IpHtmlPanel1 viene impostato nela proprieta' Dataprovider su IpFileDataProvider

a runtime basterà semplicemente aprire il file voluto.

Codice: [Seleziona]

sFile := 'F:\ProvaHTM.html';
IpHtmlPanel1.OpenURL(sFile);


se non si inserisce IpFileDataProvider, il file non si aprira' e sara' sollevata eccezione, la scelta e' quindi obbligata.
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Spesso e' utile evidenziare con colori diversi le voci presenti in un controllo TTreView, acnhe solo per
dare l'idea all'utilizzatore di quali voci siano Titoli e quali Voci Operative, per farlo bastano pochi
passaggi:

1 - nel Controllo TreeView andare su Options ed impostare tvoRowSelect = True
questo permettera' di avere una barra colorata larga quanto il TreeView stesso

2 - attivare l'Evento AdvancedCustomDrawItem (doppio click)

Codice: [Seleziona]

  if Node.HasChildren then
    begin
      Sender.Canvas.Font.Color := clNavy;
      Sender.Canvas.Font.Style := [fsBold];
      Sender.SelectionColor := clSilver;        //cambia colore
    end
  else
    begin
      Sender.Canvas.Font.Color := clBlue;
      Sender.Brush.Color := $00F4FEFF;
      Sender.SelectionColor := clSkyBlue;;  //cambia colore se non ha figli
    end;

  if not Node.Expanded then Node.Expand(True);    


Sender.Canvas.Font.Color := clNavy;
Assegna un Colore diverso al Nodo che abbia figli

Sender.Canvas.Font.Style := [fsBold];
Assegna un Atrtibuto sul Font diverso al Nodo che abbia figli, in questo esempio Grasetto

Sender.SelectionColor := clSilver;
questa rappresenta il Colore di fondo della Barra Cursore che evidenzia ciascuna voce
verificando se il nodo ha figli   if Node.HasChildren then
possiamo cambiare colore quando ilo cursore o si clicca su uno di questi Nodi
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

15 Dic 2011 - Toolbar

La toolbar (lett. barra degli strumenti) è un componente (widget) delle più usate interfacce utente. È una barra orizzontale o verticale, o un box, che raccoglie, sotto forma di icone, i collegamenti alle funzioni più usate di un software.
Lazarus permette di usare tale strumento in maniera abbastanza semplice, vediamo come con un esempio.

Per prima cosa creiamo un nuovo progetto applicazione e inseriamo sulla nuova form il componente TToolBar che troviamo nella categoria "Common controls" e in più inseriamo un oggetto TImage che troviamo nella categoria "Additional".

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Pagine: 1 ... 6 7 [8] 9 10 ... 14