Tag Archive for 'html'

Tiburon -> Delphi 2009

Da qualche giorno è ormai disponibile la nuova versione di Delphi e C++ con enormi novità tecnologiche rispetto alle precedenti. Questa nuova versione codename “Tiburon” migliora drasticamente le performance dell’IDE e del compilatore/parser,tra le novità più ecclatanti vi sono :

  • Supporto ai generics (Tlist)
  • Completo supporto a Unicode
  • DataSnap completamente nuovo basato sullo std JSON per la comunicazione.
  • Attualmente alla lista delle cose che mi attendevo ne manca una non di poca importanza cioè Delphi2009 for DotNet , che sul sito di Embacadero non trovo nemmeno nella RoadMap… Ogni volta che vedo delle cose del genere mi torna in mente lo spettro di Kylix e delle aziende che vi ci avevano investito sopra!!.
    Cosa molto carina invece è la possibilità di provare (cacchio solo per 14gg) le versioni trial del prodotto Enterprise scaricandole direttamente da Embarcadero all’indirizzo :

    http://cc.codegear.com/free/delphi oppure http://cc.codegear.com/free/cppbuilder
    la procedura di intallazione e richiesta dei codici questa volta è veramente smart e come dicono dalle mie parti veramente “sbattimento zero!”.

    Domani a Milano vi sarà la presentazione di questi nuovi bei prodotti e ovviamente Synaptica andrà a far visita e porterà con sè qualche news …

    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 ….