Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [F# - Windows Forms]Spiegazione codice

    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:

    codice:
    type Throbber() as this =
      inherit UserControl()
      let mutable animcount = 0
      let timer = new Timer(Interval=100)
      let mutable pbg = true
    - as this so che dà un nome all'istanza di classe, ma non mi è del tutto chiara la sua utilità

    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()
    - non capisco perché il metodo Start è dichiarato attraverso l'uso di this. quando mi sembra sia possibile dichiararlo anche senza. Vorrei capire la differenza.
    - 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?

    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)
    - e.Graphics esattamente cos'è?
    - 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

    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)
    - il primo grassettato serve a garantire che si prenda un valore alpiù pari a 255, giusto?
    - per il resto non mi è chiaro come si riesca a costruire correttamente la linea ruotata

    Grazie anticipatamente

  2. #2
    La sezione giusta dove postare era quella .NET framework (perdonami, capisco inizi ora con la OOP, ma almeno sapere con che cosa stai programmando no?)

    Comunque...


    as this non so cosa significhi essendo una caratteristica del linguaggio....ù

    - non capisco perché il metodo Start è dichiarato attraverso l'uso di this. quando mi sembra sia possibile dichiararlo anche senza. Vorrei capire la differenza.
    solitamente si usa il puntatore this per fare più chiarezza nel codice e per evitare -eventuali- ambiguità. Io personalmente lo uso spesso dentro l'implementazione di una classe per i suoi membri e i suoi metodi.
    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?
    Esatto.
    e.Graphics esattamente cos'è?
    E' una classe che incapsula una GDI, per esempio ogni controllo "visibile" presente in una Form, e la form stessa, hanno un membro di tipo Graphics, e tramite questo tu puoi "disegnare" sulla sua superficie.


    - il costrutto sintattico use a che serve?
    http://msdn.microsoft.com/it-it/library/dd233240.aspx

    - 5.f è per dire che è un float?
    si

  3. #3
    Una domanda: visto che inizi ora con la OOP, cos'è che ti spinge a usare F#?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ardito86
    Una domanda: visto che inizi ora con la OOP, cos'è che ti spinge a usare F#?
    Era quello che mi chiedevo anch'io, più che altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da ardito86
    La sezione giusta dove postare era quella .NET framework (perdonami, capisco inizi ora con la OOP, ma almeno sapere con che cosa stai programmando no?)
    perdonami, non l'avevo proprio vista. Grazie per le risposte

    Originariamente inviato da ardito86
    Una domanda: visto che inizi ora con la OOP, cos'è che ti spinge a usare F#?
    corso universitario. Parallelamente ne sto frequentando un altro che dovrebbe introdurmi alla OOP con Java, ma siamo ancora agli inizi, mentre quest'altro è partito subito a manetta con F#

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Frank Lioty
    corso universitario. Parallelamente ne sto frequentando un altro che dovrebbe introdurmi alla OOP con Java, ma siamo ancora agli inizi, mentre quest'altro è partito subito a manetta con F#
    Mah ... un corso che parte con F# non mi pare una grande idea, ma potrebbe avere anche i suoi vantaggi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    è un corso sulla costruzione di interfacce, il professore usa F# perché lo ritiene particolarmente adatto a livello didattico.

    comunque non mi è chiaro come possano venire disegnate in quel modo le linee del throbber in base alle coordinate specificate. Elimimando l'istruzione

    codice:
    g.RotateTransform(30.f)
    ottengo tutte le linee nella posizione originaria della terza (usando la numerazione tipica di un orologio analogico). In base alla chiamata

    codice:
    g.DrawLine(pen, from, 0, from + len - 5, 0)
    mi aspetterei tutt'altra posizione, considerando che gli assi cartesiani partono dal vertice in alto a sinistra della finestra...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ah ... ora è più chiaro.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Almeno hai detto che è un throbber

    Secondo me dovresti leggere la guida ufficiale. Io non conoscevo RotateTransfrm(), ma leggendo qui tutto è chiaro:

    http://msdn.microsoft.com/en-us/library/a0z3f662.aspx

    Ruota l'asse cartesiano di 30 gradi. Per questo DrawLine sembra che dovrebbe disegnare una linea orizzontale, ma per effetto del rotate transform è obliqua

  10. #10
    quello era chiaro, quello che non riesco a capire è perché l'istruzione:

    codice:
    g.DrawLine(pen, from, 0, from + len - 5, 0)
    non disegna la terza stanghetta attaccata al margine superiore della finestra, visto che y0 e y1 sono entrambi = 0

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.