Advertisement
wandrake

Untitled

Feb 29th, 2012
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 4.51 KB | None | 0 0
  1. open System.Windows.Forms
  2.  
  3. // Come costruire programmativamente interfacce grafiche
  4.  
  5. // Capire come fare un WYSWYG
  6.  
  7. // Sistema Esse3, della Kion Software 2500 tabelle.
  8.  
  9. let form = new Form(Text = "Web browser", TopMost = true)
  10.  
  11. let webBrowser = new WebBrowser()
  12.  
  13. let panel = new Panel()
  14. panel.Dock <- DockStyle.Top
  15. (* panel.Anchor <- (AnchorStyles.Left ||| AnchorStyles.Right) *)
  16.  
  17. let flowPanel = new FlowLayoutPanel()
  18. flowPanel.FlowDirection <- FlowDirection.TopDown
  19. flowPanel.Dock <- DockStyle.Fill
  20. flowPanel.WrapContents <- true
  21.  
  22. let txtAddr = new TextBox()
  23. txtAddr.Dock <- DockStyle.Fill
  24.  
  25. let btnGo = new Button(Text = "Go!")
  26. btnGo.Dock <- DockStyle.Right
  27.  
  28. panel.Height <- txtAddr.Height
  29.  
  30. // DA SISTEMARE
  31. webBrowser.Dock <- DockStyle.Fill
  32. webBrowser.Height <- txtAddr.Height
  33.  
  34. let navigate (text: string) =
  35.     webBrowser.Navigate text
  36.  
  37. btnGo.Click.Add(fun _ ->
  38.     navigate txtAddr.Text
  39. )
  40.  
  41. txtAddr.KeyUp.Add(fun e ->
  42.     match e.KeyCode with
  43.     | Keys.Enter -> navigate txtAddr.Text
  44.     | _ -> ()
  45. )
  46.  
  47. (*  form.Opacity <- 0.5  *)
  48.  
  49. panel.Controls.Add(txtAddr)
  50. panel.Controls.Add(btnGo)
  51.  
  52. (* flowPanel.Controls.Add(panel)
  53. flowPanel.Controls.Add(webBrowser)
  54.  
  55. form.Controls.Add(flowPanel) *)
  56. form.Controls.Add(panel)
  57. form.Controls.Add(webBrowser)
  58.  
  59. form.Show()
  60.  
  61. (*
  62.     let form = new Form(Text = "Web browser", TopMost = true)
  63.  
  64.     let webBrowser = new WebBrowser()
  65.  
  66.     let txtAddr = new TextBox()
  67.     form.Controls.Add(txtAddr)
  68.  
  69.     let btnGo = new Button(Text = "Go!")
  70.     form.Controls.Add(btnGo)
  71.  
  72.     form.Show()
  73. *)
  74.  
  75. (*  Ora però c'è il problema di dover disporre i componenti. *)
  76.  
  77. (*  Nel lontano 1985/90 dove i cicli di clock erano importanti
  78.     si poteva pensare di fare una cosa del tipo:
  79.  
  80.     btnGo.Left <- 150 *)
  81.  
  82. (*  Usare i pixel andava bene quando i monitor erano tutti uguali
  83.     ora ormai non ha più senso.
  84.     Si possono usare ad esempio la funzione di dock:
  85.  
  86.     txtAddr.Dock <- DockStyle.Top
  87.     btnGo.Dock <- DockStyle.Right *)
  88.  
  89. (*  Si nota però che l'altezza del bottone non è quella che ci si
  90.     aspetta. *)
  91.  
  92. (*  In generale comunque uno non si aspetta di voler sistemare
  93.     tutte le componenti una ad una, ma di raggrupparle e dare un layout
  94.     al gruppo di componenti.
  95.     I.E. bottone e casella dell'indirizzo nel gruppo "barra indirizzo".
  96.     Per fare questo si usano i Panel.
  97.  
  98.     let form = new Form(Text = "Web browser", TopMost = true)
  99.  
  100.     let webBrowser = new WebBrowser()
  101.  
  102.     let panel = new Panel()
  103.     panel.Dock <- DockStyle.Top
  104.  
  105.     let txtAddr = new TextBox()
  106.     txtAddr.Dock <- DockStyle.Fill
  107.     panel.Controls.Add(txtAddr)
  108.  
  109.     let btnGo = new Button(Text = "Go!")
  110.     btnGo.Dock <- DockStyle.Right
  111.     panel.Controls.Add(btnGo)
  112.  
  113.     form.Controls.Add(panel)
  114.  
  115.     form.Show() *)
  116.  
  117. (*  Ora dobbiamo aggiungere il WebBrowser():
  118.  
  119.     webBrowser.Dock <- DockStyle.Fill
  120.     form.Controls.Add(webBrowser) *)
  121.  
  122. (*  Ora dobbiamo aggiungere un po'di business logic, vogliamo
  123.     che il browser faccia quello che deve fare (quando premo Go!
  124.     il browser faccia navigate all'interno del sito scritto nella
  125.     barra).
  126.    
  127.     btnGo.Click.Add(fun _ ->
  128.         webBrowser.Navigate(txtAddr.Text)
  129.     )
  130.  
  131.     txtAddr.KeyUp.Add(fun e ->
  132.         match e.KeyCode with
  133.         | Keys.Enter -> webBrowser.Navigate(txtAddr.Text)
  134.         | _ -> ()
  135.     )
  136. *)
  137.  
  138. (*  Magari è una buona idea fattorizzare le azioni che vengono
  139.     prodotte uguali da controlli differenti in funzioni a parte
  140.     da richiamare all'interno dei vari gestori degli eventi.
  141.    
  142.     let navigate (text: string) =
  143.         webBrowser.Navigate text
  144.  
  145.     btnGo.Click.Add(fun _ ->
  146.         navigate txtAddr.Text
  147.     )
  148.  
  149.     txtAddr.KeyUp.Add(fun e ->
  150.         match e.KeyCode with
  151.         | Keys.Enter -> navigate txtAddr.Text
  152.         | _ -> ()
  153.     )
  154. *)
  155.  
  156. (*  Possiamo aggiungere anche la trasparenza, così, tanto per...
  157.  
  158.     form.Opacity <- 0.5
  159. *)
  160.  
  161. (*  Il sistema grafico svolge una funzione simile a quella del
  162.     sistema operativo, per quanto riguarda la schedulazione di
  163.     scheda grafica e schermi. *)
  164.  
  165. (*  === CURIOSITÀ ===  *)
  166.  
  167. (*  L'asse y parte dall'alto perché nei vecchi CRT le righe
  168. venivano disegnate partendo dall'alto. *)
  169.  
  170. (*  I radiobutton si chiamano così perché nelle vecchie radio
  171.     c'erano dei selettori meccanici della frequenza, che una volta
  172.     pigiato un bottone faceva alzare gli altri. *)
  173.  
  174. (*  Le ore hanno 60 minuti perché i babilonesi, primi a studiare
  175.     gli astri, usavano un sistema numerico sessagesimale. *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement