Stickman problematico

Rispondi
Avatar utente
InformateciBot
Messaggi: 314
Iscritto il: 30/09/2018, 16:33

Per allenarmi, stavo provando a disegnare un uomo stecchino a cui poter almeno muovere braccia e gambe trascinandole col mouse, ma nella form il disegno mi viene fuori tagliato tipo a metà...
Pensavo c'entrasse l'area di clipping e ho provato a modificarla, ma o non si tratta di quello o non ho capito bene come si modifica. Come posso modificare?


Codice: Seleziona tutto

open System.Windows.Forms
open System.Drawing

let f = new Form (TopMost = true, Text = "StickMan", BackColor = Color.Black)
f.Show()

type StickMan() =
  inherit UserControl()

  let rect = new Rectangle(Point(80,50), Size(50,50))
  let armL = [|PointF(105.f,115.f); PointF(85.f,170.f) |]
  let armR = [|PointF(105.f,115.f); PointF(125.f,170.f)|]
  let legL = [|PointF(105.f,200.f); PointF(85.f,280.f)|]
  let legR = [|PointF(105.f,200.f); PointF(125.f,280.f)|]
  let r = new Region(Rectangle(Point(0,0),Size(700,700)))

  override this.OnPaint e = 
    let g = e.Graphics
    g.SmoothingMode <- Drawing2D.SmoothingMode.HighQuality
    
    g.FillEllipse(Brushes.White, rect)
    g.DrawLine(Pens.White, Point(105,100), Point(105,200))
    g.DrawLine(Pens.White, armL.[0], armL.[1])
    g.DrawLine(Pens.White, armR.[0], armR.[1])
    g.DrawLine(Pens.White, legL.[0], legL.[1])
    g.DrawLine(Pens.White, legR.[0], legR.[1])

let man = new StickMan()
f.Controls.Add(man)
baaba
Forse si potrebbe dire che è colpa del rettangolo di clipping: non imposti le dimensioni del controllo!
Di default dovrebbero essere tipo 100x100 e per questo viene solo disegnato quello che è contenuto in quest'area ^^
Comunque per postare codice c'è la modalità (?) codice, che tiene conto dell'indent e ha un font migliore :D

EDIT:
Non sono sicurissimo ma dovrebbe esserci un modo per creare un controllo con proprietà "FILL" in maniera che sia grande quanto la finestra che lo ospita
ALTROEDIT:
mi sembra un passaggio inutile assegnare lo smoothing dentro la paint. Sono abbastanza sicuro si possa assegnare alla creazione della form o del controllo :o

MindFlyer
Tadaah! T'ho aggiustato l'indentazione.

Ymir
MindFlyer;comment-856 ha scritto:Tadaah! T'ho aggiustato l'indentazione.
... e avevo pure guardato tra gli strumenti!
baaba;comment-854 ha scritto: Non sono sicurissimo ma dovrebbe esserci un modo per creare un controllo con proprietà "FILL" in maniera che sia grande quanto la finestra che lo ospita
Avevo dimenticato il Dock per l'appunto -.- e cercavo di fare cose diverse e inutili per sistemare l'area di clipping.

Codice: Seleziona tutto

let man = new StickMan(Dock=DockStyle.Fill) 
Grazie :D
Ultima modifica di andrea.tosti il 08/07/2019, 22:31, modificato 1 volta in totale.
Motivazione: aggiornamento
Rispondi

Torna a “[PI] Programmazione di interfacce”