Avatar billede segato Nybegynder
02. december 2006 - 10:49 Der er 6 kommentarer og
1 løsning

Tegning af en pil.

Når man tegner en pil kan man tegne en linie og så tilføje LineCap.ArrowAnchor. Men hvordan styrer man størelsen af trekanten?
Avatar billede bulgroz Nybegynder
02. december 2006 - 14:42 #1
Pilen afhænger af linietykkelsen! Jo bredere linie, jo bredere pil.

Så det man kan gøre, hvisman vil bruge de pile om allerede findes, er at snyde!

Du laver en Pen til pilen og laver tykkelsen af stregen så pilens størrelse bliver som ønsket. Med denne Pen tegner du så en linie med længden 1 pix. (hvis 0 så tegnes pilen ikke). Med en anden Pen tegner du så resten af linien.

Se følgende lille snydeeksempel:

            using (Pen arrowPen = new Pen(Color.Black, 10))
            using (Pen linePen = new Pen(Color.Black, 1))
            {
                // Sæt pilen...
                arrowPen.SetLineCap(LineCap.ArrowAnchor, LineCap.Flat, DashCap.Flat);

                // Snyd og tegnpilen som en linie med længden 1.
                e.Graphics.DrawLine(arrowPen, 10, 10, 11, 10);
               
                // Tegn resten af linien
                e.Graphics.DrawLine(linePen, 11, 10, 200, 10);
            }
Avatar billede bulgroz Nybegynder
03. december 2006 - 00:26 #2
En pænere løsning er imidlertid at lave sin egen pil i den rette størrelse og form.

Følgende er et eksempel hvorledes du anvender CustomLineCap.

http://msdn2.microsoft.com/en-gb/library/system.drawing.drawing2d.customlinecap(VS.80).aspx
Avatar billede bulgroz Nybegynder
03. december 2006 - 00:49 #3
Her er et noget reduceret eksempel, men grundlæggende kan du tegne hvadsomhelst.

            using (GraphicsPath arrowPath = new GraphicsPath())
            {
                // Create the outline for our custom end cap.
                arrowPath.AddLine(new Point(3, 0), new Point(0, 10));
                arrowPath.AddLine(new Point(-3, 0), new Point(0, 10));
                arrowPath.AddLine(new Point(-3, 0), new Point(3, 0));

                using (CustomLineCap customArrowCap = new CustomLineCap(null, arrowPath))
                using (Pen linePen = new Pen(Color.Black, 1))
                {
                    linePen.CustomStartCap = customArrowCap;

                    // Tegn resten af linien
                    e.Graphics.DrawLine(linePen, 20, 20, 200, 20);
                }
            }
Avatar billede segato Nybegynder
03. december 2006 - 15:00 #4
den er meget smart den med at "snyde", men tak for hjælpen og smid et svar begge.
Avatar billede bulgroz Nybegynder
03. december 2006 - 16:41 #5
Begge? der er nu kun mig.
Avatar billede bulgroz Nybegynder
11. december 2006 - 23:40 #6
...
Avatar billede segato Nybegynder
12. december 2006 - 08:56 #7
He he det kan jeg da egentlig godt se. Tak for hjælpen Bulgroz.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester