Toon posts:

[VB.NET] GDI+ over objecten heen tekenen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste tweakers,

ik weet dat ik in een control kan teken door bv dit te doen:
Visual Basic:
1
2
3
4
5
6
7
    Private Sub pnlInstellingen_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pnlInstellingen.Paint
        Dim g As Graphics = e.Graphics

        ' Lijnen motor temp
        Dim pnMotorlijn As Pen = New Pen(Color.White, 1)
        g.DrawLine(pnMotorlijn, 152, 62, 312, 50)
    End Sub


Maar ik (en dat kan komen omdat ik alweer te lang bezig ben :O) kan nergens vinden hoe ik over alle controls heen teken. Ik wil een lijn maken, in een panel die over een picturebox heen gaat.

Als dat één lijn was wast niet zo erg want dan zou ik voor elke control de paint event gebruiken. Maar moet er een stuk of 20! Die allemaal over andere controls heen gaan?!

Is hier een snellere oplossing voor?

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Je moet rekening houden dat elk van de controls waarover je tekent geinvalideerd kan worden. Dan is het foetsie met een stuk van je lijn.

misschien moet je je niet afvragen hoe het kan. Ik denk dat je GUI design inherent fout is.

In het ergste geval doe je't met de desktop DC (GetDC(NULL), vergeet ReleaseDC(HDC*) niet).
Misschien moet je dan ook eens kijken naar die property die zegt dat jij zelf alles tekent.
Bij elke invalidatie van een child control moet je dan ook die van de parent control oproepen.

ASSUME makes an ASS out of U and ME


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Kun je niet een transparant user control over heel je form heenleggen en daarop tekenen?

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

Verreweg het makkelijkste is idd om een panel op je form te leggen en die te gebruiken:

private void frmMain_Paint(object sender, PaintEventArgs e) {
panel1.BackColor = Color.Coral;
panel1.Height = 1;
panel1.Top = 228;
panel1.Left = 0;
panel1.Width = panel1.Parent.Width;
}


edit:

ofwel:

C#:
1
2
3
4
5
6
7
private void frmMain_Paint(object sender, PaintEventArgs e) {
  panel1.BackColor = Color.Coral;
  panel1.Height = 1;
  panel1.Top = 228;
  panel1.Left = 0;
  panel1.Width = panel1.Parent.Width;
}



Je kunt ook gaan voor een oplossing die alle OnPaints aanpast in de OnLoad van de Form, maar dan stuit je op problemen bij Textboxes omdat die niet echt reageren op textBox1.Paint += ProcOmLijntjeOpControlTeKladderen.

[ Voor 14% gewijzigd door RobIII op 28-12-2006 02:25 ]


Verwijderd

Topicstarter
6K schreef op woensdag 27 december 2006 @ 11:19:
Kun je niet een transparant user control over heel je form heenleggen en daarop tekenen?
Hm ja als ik alle colors op transparent zet wordt alles onder de control zwart....?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Shezzie schreef op woensdag 27 december 2006 @ 14:32:
Verreweg het makkelijkste is idd om een panel op je form te leggen en die te gebruiken:
Pssst, [code]-tags ;)
Ik heb het even erin ge-edit ;)

[ Voor 24% gewijzigd door RobIII op 28-12-2006 02:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Verwijderd schreef op donderdag 28 december 2006 @ 02:16:
[...]


Hm ja als ik alle colors op transparent zet wordt alles onder de control zwart....?
ja klopt, daar moet je ff op zoeken, daar is wat extra voor nodig, ik zal eens kijken of ik het nog kan vinden

edit:
mocht je iets in deze vorm gebruiken (C#):
code:
1
2
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;


Dan gaat het daar fout. .Net GDI+ kan niet al te goed omgaan met transparantie
vervang dat dan met:
code:
1
2
3
4
5
6
7
8
9
protected override CreateParams CreateParams
{
     get
     {
         CreateParams cp=base.CreateParams;
         cp.ExStyle|=0x00000020; //WS_EX_TRANSPARENT
         return cp;
     }
}

[ Voor 43% gewijzigd door 6K op 28-12-2006 09:11 ]

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

RobIII schreef op donderdag 28 december 2006 @ 02:23:
[...]

Pssst, [code]-tags ;)
Ik heb het even erin ge-edit ;)
Ah thanks, was al niet zo blij dat m'n VS 2005 code niet de copy-paste overleefde _/-\o_
Pagina: 1