Archive for April, 2008

Delphi for DotNet - WebForm per fare l’upload di un file

COME CREARE UNA PAGINA PER ESEGUIRE GLI UPLOAD CON ASP.NET IN DELPHI PER .NET

A differenza del caro e buon veccio Asp in cui creare una pagina di upload era simile ad un parto, nel nuovo ambiente .Net di Microsoft la cosa è resa molto più semplice grazie all’introduione della classe : System.Web.UI.HtmlControls.HtmlInputFile.

In questo esempio viene creata una pagina ASP.Net da inserire nel vs. progetto per poter permettere agli utenti di eseguire un upload di un file.

Come ben sapete una pagina ASP.Net in delphi 8.0 costituita dal relativo file .aspx e dal code behind contenuto nella dll del progetto. Il “code behind” viene generato in funzione del file della pagina .pas (scritto nel classico object pascal).

Analizziamo cosa dobbiamo inserire nel file .aspx nel nostro caso la pagina l’ho chiamata wf_upload_file.aspx che contiene il codice :

  1.  
  2. <%@ Page language="c#" Debug="true" Codebehind="wf_upload_file.pas" AutoEventWireup="false" Inherits="wf_upload_file.Twf_upload_file" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  4.  
  5. <html>
  6.   <head>
  7.     <title></title>
  8.     <meta name="GENERATOR" content="Borland Package Library 7.1">
  9.   </head>
  10.  
  11.   <body ms_positioning="GridLayout">
  12.   <form id=Form1 method=post enctype="multipart/form-data" runat="server">
  13.     <input id=MyFile type=file runat="server"><br>
  14.     <input type=submit value="Invia query">
  15.     <asp:textbox id=TextBox1
  16.                  style="Z-INDEX: 1; LEFT: 14px; POSITION: absolute; TOP: 86px"
  17.                  runat="server" height="93" width="691px" textmode="MultiLine">
  18.     </asp:textbox>
  19.     <asp:image id=Image1
  20.                style="Z-INDEX: 2; LEFT: 118px; POSITION: absolute; TOP: 214px"
  21.                runat="server" height="211px" width="243px">
  22.     </asp:image>
  23.   </form>
  24. </body>
  25. </html>
  26.  

La riga di ns interesse è :

  1. "<input id=MyFile type=file runat="server">"

dove l’interprete .Net crea un oggetto il cui nome è “MyFile” questo oggetto fa parte della classe : System.Web.UI.HtmlControls.HtmlInputFile.

La parte di “code behind” il file wf_upload_file.pas :

  1.  
  2. unit wf_upload_file;
  3.  
  4. interface
  5.  
  6. uses
  7.   System.Collections, System.ComponentModel,
  8.   System.Data, System.Drawing, System.Web, System.Web.SessionState,
  9.   System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls;
  10.  
  11. type
  12.   Twf_upload_file = class(System.Web.UI.Page)
  13.   {$REGION ‘Designer Managed Code’}
  14.   strict private
  15.     procedure InitializeComponent;
  16.   {$ENDREGION}
  17.   strict private
  18.     procedure Page_Load(sender: System.Object; e: System.EventArgs);
  19.   strict protected
  20.     TextBox1: System.Web.UI.WebControls.TextBox;
  21.     MyFile : System.Web.UI.HtmlControls.HtmlInputFile;
  22.     Image1: System.Web.UI.WebControls.Image;
  23.     procedure OnInit(e: EventArgs); override;
  24.   private
  25.  
  26.   public
  27.     { Public Declarations }
  28.   end;
  29.  
  30. implementation
  31.  
  32. uses borland.vcl.sysutils;
  33.  
  34. {$REGION ‘Designer Managed Code’}
  35. /// <summary>
  36. /// Required method for Designer support — do not modify
  37. /// the contents of this method with the code editor.
  38. /// </summary>
  39. procedure Twf_upload_file.InitializeComponent;
  40. begin
  41.   Include(Self.Load, Self.Page_Load);
  42. end;
  43. {$ENDREGION}
  44.  
  45. procedure Twf_upload_file.Page_Load(sender: System.Object; e: System.EventArgs);
  46. begin
  47.   // TODO: Put user code to initialize the page here
  48.  
  49.   If filMyFile.PostedFile <> nil then
  50.    Begin
  51.      TextBox1.Text := ‘ non nullo ‘;
  52.      TextBox1.Text := TextBox1.Text + MyFile.PostedFile.FileName + #10#13;
  53.      TextBox1.Text := TextBox1.Text + ‘dimensione : ‘ + Int64(filMyFile.PostedFile.ContentLength).ToString + #10#13;
  54.  
  55.      filMyFile.PostedFile.SaveAs(‘C:\Inetpub\wwwroot\mio_progetto\up_img\’ + ExtractFileName(filMyFile.PostedFile.FileName));
  56.      Image1.ImageUrl := ‘up_img/’ + ExtractFileName(MyFile.PostedFile.FileName);
  57.  
  58.    End
  59.   Else
  60.    Begin
  61.    End;
  62.  
  63.  
  64. end;
  65.  
  66. procedure Twf_upload_file.OnInit(e: EventArgs);
  67. begin
  68.   //
  69.   // Required for Designer support
  70.   //
  71.   InitializeComponent;
  72.   inherited OnInit(e);
  73. end;
  74.  
  75. end.
  76.  

Da notare l’obbligatorietà della dichiarazione dell’oggetto MyFile all’interno della classe che definisce la pagina, che non avviene in automatico, anche se dovrebbe delphi 8.0 riconoscere tutti gli oggetti definiti nella pagina .aspx e mantenerne l’allineamento con il .pas. Nell’evento Page_Load viene implementato il codice per salvare il file inviato dall’utente in una posizione del disco.

Ho aggiunto l’uso della libreria uses borland.vcl.sysutils; s per poter accedere alla funzione ExtractFileName della vcl semplicemente perchè non conosco la funzione che esegue le stesse cose nel .Net framework.

Spero che l’articolo sia comprensibile, l’ho effettivamente scritto un po di fretta.

Ciao a tutti

Ivan ….

La ballata del programmatore

La sonata del programmatore :

sonata del programmatore

Link alla canzone

testo:Enrico Colombini http://www.erix.it
voce:Domenico Agostino
cori/arrangiamento: Marco Di Francesco - http://www.myspace.com/difra

Testo :

All'ombra dell'ultimo sole
si addormentò un programmatore
tra le sue braccia un manuale
sognando il mare tropicale

Venne alla ditta un committente
con un progetto inconsistente
delle richieste da far paura
"prima di ieri perché ho premura"

E domandò un lavoro immane
con le specifiche più strane
"io voglio tutto e pago niente
ho fretta sono un committente"

Gli occhi dischiuse il softwarista
un video l'unica sua vista
dall'alba grigia fino a sera
incatenato alla tastiera

Battendo i tasti a mo' di ossesso
e trascurando cibo e sesso
riuscì un bel giorno a consegnare
una release preliminare

E si sentiva ormai contento
ma fu sollievo di un momento
già richiamava quel cliente
"qui non funziona un accidente"

Ricominciò il programmatore
a faticar per ore ed ore
sopra un problema assai intricato
nascosto dentro ad un listato

Venne di nuovo il committente
disse "così è meglio che niente
è tuttavia per me importante
fare una piccola variante"

Ma all'ombra dell'ultimo sole
dormiva già il programmatore
tra le sue braccia un manuale
sognando il mare tropicale

Erix

Delphi for pHp v2.0

Rilascio ufficiale di Delphi for pHp

Da CodeGear è stata rilasciata la nuova versione di Delphi4php … interessanti le features sulla carta, cosa che spicca è l’integrazione dello Zend Framework con la VCL per php.
Personalmente non ho ancora provato il prodotto, ma da quello che si evince dalla documentazione ufficiale, non dovrebbe esser male.

il link delle nuove implementazioni : http://www.qadram.com/vcl4php/docwiki/index.php/What_is_new_in_Delphi_for_PHP_2.0 Leggi il resto dell’articolo ‘Delphi for pHp v2.0′

Cool Stuff [Flussi informatici liberi]

Dal portale di lazarus ho trovato un sito scritto in italiano , molto bello e ben articolato, con poche cose ma precise e interessanti. Anche il nome del sito mi piace molto : flussi informatici liberi .
In questo sito si parla di sviluppi open source e di programmazione per i sistemi plc, il tutto basato su piattaforme open ,comprese le librerie di interfacciamento con i Siemens S5 e S7 via seriale per più sistemi operativi.

molto interessante e gradevole
dateci un okkio

a presto
i

Il gestionale synapse gira sotto Linux

Synapse , ERP by Synaptica


Grazie a wine, il nostro gestionale (Synapse) sviluppato con tecnologia win32 funziona perfettamente anche sulla piattaforma Linux.
Attualmente il gestionale è ancora una beta, e si pensa passerà in alfa entro la fine del prossimo mese, grazie alle tecnologie utilizzate garantisce un estrema flessibilità, e una notevole riduzione di costi dovuto al fatto di non dover acquistare licenze addizionali per il suo funzionamento.

Tecnologie utilizzate :

Lato Server :
- DB : Firebird 1.5 in versione superserver / embedded
- Servizi : Cross JAVA

Lato Client :
- Piattaforma w32 sviluppata in Delphi 7.0
- Piattaforma Web sviluppata con pHp , possibili porting per ASP.Net e JSF

a presto

Creare da codice una Virtual Directory su IIS

  1. Procedure Create_IIS_VirtualDir(VirtualDirectoryName : String;PhisicalPath : String =  ‘c:\’;AccessRead : Boolean = True;EnableDirBrowsing : Boolean =  False);
  2.  
  3. Var
  4. IIS, IIS_WServer, Root,  NewDir: Variant;
  5.  
  6. Begin
  7.  If not  DirectoryExists(PhisicalPath) then
  8.  If not  ForceDirectories(PhisicalPath) then Exit;
  9.  IIS :=  CreateOleObject(‘IISNamespace’);
  10.  IIS :=  IIS.GetObject(‘IIsWebService’, ‘localhost/w3svc’);
  11.  IIS_WServer :=  IIS.GetObject(‘IIsWebServer’, ‘1′);
  12.  Root :=  IIS_WServer.GetObject(‘IIsWebVirtualDir’, ‘Root’);
  13.  NewDir :=  Root.Create(‘IIsWebVirtualDir’, VirtualDirectoryName);
  14.  
  15. // setting web dir  property
  16.  NewDir.AccessRead :=  AccessRead;
  17.  NewDir.EnableDirBrowsing :=  EnableDirBrowsing;
  18.  NewDir.Path :=  PhisicalPath;
  19.  NewDir.SetInfo;
  20. End;

Tramite questa procedura è possibile creare dinamicamente virtual directory da codice. Ciò può risultare utile nel caso si debba scrivere un programma di installazione per la propria applicazione Web oppure creare delle procedure remote.

E’ inoltre possibile impostare in modo semplice moltissimi parametri e gestire IIS in modo semplice utilizzando I metodi descritti da ms in questo link

Cool Stuff [FL - Studio]

FL - Studio

 

FL Studio è un a pplicazione spettacolare scritta in Delphi per la gestione audio professionale, è veramente bella e gode di 5′000′000 di download al suo attivo. Il sito del prodotto : http://www.flstudio.com/index.html

Nick Hodges (noto sviluppatore di fama mondiale ) ne ha fatto un post sul suo blog , casualmente (nero tema K2) :

http://blogs.codegear.com/nickhodges/2008/04/03/39045/