Salve a tutti. Non sono certo che sia la sezione giusta dove postare, spero di averci preso. Ho un codice in F# che sfrutta Windows Forms che vorrei capire nel dettaglio. Tenete conto che non ho mai avuto a che fare con la OOP e che sto iniziando adesso anche con il linguaggio. Divido in blocchi per semplicità, ponendo in grassetto ciò che non mi è del tutto chiaro:
- as this so che dà un nome all'istanza di classe, ma non mi è del tutto chiara la sua utilitàcodice:type Throbber() as this = inherit UserControl() let mutable animcount = 0 let timer = new Timer(Interval=100) let mutable pbg = true
- non capisco perché il metodo Start è dichiarato attraverso l'uso di this. quando mi sembra sia possibile dichiararlo anche senza. Vorrei capire la differenza.codice:do this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true) timer.Tick.Add(fun _ -> animcount <- (animcount + 1) % 12 this.Invalidate() ) member this.Start () = timer.Start() member this.Stop () = timer.Stop() override this.OnPaintBackground e = //if pbg then base.OnPaintBackground(e) pbg <- false override this.OnSizeChanged e = pbg <- true this.Invalidate()
- override serve a ridefinire una proprietà/metodo/evento precedentemente definito (ereditato dalla quella "madre" in questo caso), mentre base serve a richiamare quella "originale" della classe ereditata?
- e.Graphics esattamente cos'è?codice:override this.OnPaint e = let g = e.Graphics g.SmoothingMode <- Drawing2D.SmoothingMode.HighQuality use pen = new Pen(Color.LightGray, 5.f) let from = this.Width / 6 let len = this.Width / 3 pen.StartCap <- Drawing2D.LineCap.Round pen.EndCap <- Drawing2D.LineCap.Round let middle = single(this.Width / 2) g.TranslateTransform(middle, middle)
- il costrutto sintattico use a che serve?
- 5.f è per dire che è un float?
- il resto non capisco proprio cosa faccia, antialiasing e stile degli estremi della linea a parte![]()
- il primo grassettato serve a garantire che si prenda un valore alpiù pari a 255, giusto?codice:for i in 1..12 do let gray = min (128 + (128 / 12)*((12 - i + animcount) % 12)) 255 pen.Color <- Color.FromArgb(gray, gray, gray) g.DrawLine(pen, from, 0, from + len - 5, 0) g.RotateTransform(30.f)
- per il resto non mi è chiaro come si riesca a costruire correttamente la linea ruotata
Grazie anticipatamente![]()

Rispondi quotando
