Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System.Windows.Forms
- // Come costruire programmativamente interfacce grafiche
- // Capire come fare un WYSWYG
- // Sistema Esse3, della Kion Software 2500 tabelle.
- let form = new Form(Text = "Web browser", TopMost = true)
- let webBrowser = new WebBrowser()
- let panel = new Panel()
- panel.Dock <- DockStyle.Top
- (* panel.Anchor <- (AnchorStyles.Left ||| AnchorStyles.Right) *)
- let flowPanel = new FlowLayoutPanel()
- flowPanel.FlowDirection <- FlowDirection.TopDown
- flowPanel.Dock <- DockStyle.Fill
- flowPanel.WrapContents <- true
- let txtAddr = new TextBox()
- txtAddr.Dock <- DockStyle.Fill
- let btnGo = new Button(Text = "Go!")
- btnGo.Dock <- DockStyle.Right
- panel.Height <- txtAddr.Height
- // DA SISTEMARE
- webBrowser.Dock <- DockStyle.Fill
- webBrowser.Height <- txtAddr.Height
- let navigate (text: string) =
- webBrowser.Navigate text
- btnGo.Click.Add(fun _ ->
- navigate txtAddr.Text
- )
- txtAddr.KeyUp.Add(fun e ->
- match e.KeyCode with
- | Keys.Enter -> navigate txtAddr.Text
- | _ -> ()
- )
- (* form.Opacity <- 0.5 *)
- panel.Controls.Add(txtAddr)
- panel.Controls.Add(btnGo)
- (* flowPanel.Controls.Add(panel)
- flowPanel.Controls.Add(webBrowser)
- form.Controls.Add(flowPanel) *)
- form.Controls.Add(panel)
- form.Controls.Add(webBrowser)
- form.Show()
- (*
- let form = new Form(Text = "Web browser", TopMost = true)
- let webBrowser = new WebBrowser()
- let txtAddr = new TextBox()
- form.Controls.Add(txtAddr)
- let btnGo = new Button(Text = "Go!")
- form.Controls.Add(btnGo)
- form.Show()
- *)
- (* Ora però c'è il problema di dover disporre i componenti. *)
- (* Nel lontano 1985/90 dove i cicli di clock erano importanti
- si poteva pensare di fare una cosa del tipo:
- btnGo.Left <- 150 *)
- (* Usare i pixel andava bene quando i monitor erano tutti uguali
- ora ormai non ha più senso.
- Si possono usare ad esempio la funzione di dock:
- txtAddr.Dock <- DockStyle.Top
- btnGo.Dock <- DockStyle.Right *)
- (* Si nota però che l'altezza del bottone non è quella che ci si
- aspetta. *)
- (* In generale comunque uno non si aspetta di voler sistemare
- tutte le componenti una ad una, ma di raggrupparle e dare un layout
- al gruppo di componenti.
- I.E. bottone e casella dell'indirizzo nel gruppo "barra indirizzo".
- Per fare questo si usano i Panel.
- let form = new Form(Text = "Web browser", TopMost = true)
- let webBrowser = new WebBrowser()
- let panel = new Panel()
- panel.Dock <- DockStyle.Top
- let txtAddr = new TextBox()
- txtAddr.Dock <- DockStyle.Fill
- panel.Controls.Add(txtAddr)
- let btnGo = new Button(Text = "Go!")
- btnGo.Dock <- DockStyle.Right
- panel.Controls.Add(btnGo)
- form.Controls.Add(panel)
- form.Show() *)
- (* Ora dobbiamo aggiungere il WebBrowser():
- webBrowser.Dock <- DockStyle.Fill
- form.Controls.Add(webBrowser) *)
- (* Ora dobbiamo aggiungere un po'di business logic, vogliamo
- che il browser faccia quello che deve fare (quando premo Go!
- il browser faccia navigate all'interno del sito scritto nella
- barra).
- btnGo.Click.Add(fun _ ->
- webBrowser.Navigate(txtAddr.Text)
- )
- txtAddr.KeyUp.Add(fun e ->
- match e.KeyCode with
- | Keys.Enter -> webBrowser.Navigate(txtAddr.Text)
- | _ -> ()
- )
- *)
- (* Magari è una buona idea fattorizzare le azioni che vengono
- prodotte uguali da controlli differenti in funzioni a parte
- da richiamare all'interno dei vari gestori degli eventi.
- let navigate (text: string) =
- webBrowser.Navigate text
- btnGo.Click.Add(fun _ ->
- navigate txtAddr.Text
- )
- txtAddr.KeyUp.Add(fun e ->
- match e.KeyCode with
- | Keys.Enter -> navigate txtAddr.Text
- | _ -> ()
- )
- *)
- (* Possiamo aggiungere anche la trasparenza, così, tanto per...
- form.Opacity <- 0.5
- *)
- (* Il sistema grafico svolge una funzione simile a quella del
- sistema operativo, per quanto riguarda la schedulazione di
- scheda grafica e schermi. *)
- (* === CURIOSITÀ === *)
- (* L'asse y parte dall'alto perché nei vecchi CRT le righe
- venivano disegnate partendo dall'alto. *)
- (* I radiobutton si chiamano così perché nelle vecchie radio
- c'erano dei selettori meccanici della frequenza, che una volta
- pigiato un bottone faceva alzare gli altri. *)
- (* Le ore hanno 60 minuti perché i babilonesi, primi a studiare
- gli astri, usavano un sistema numerico sessagesimale. *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement