Avatar billede Slettet bruger
21. januar 2008 - 08:24 Der er 19 kommentarer og
1 løsning

"Tegne" på skærmen?

Hej eksperter,

Hvordan kan jeg med en C#-applikation "tegne" på skærmen? Eksempelvis oprette et rektangel midt i skærmbilledet.
Avatar billede alex_sleiborg Nybegynder
21. januar 2008 - 11:44 #1
Pseudo kode

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen pen = new Pen(Color.Aquamarine, 2);
            g.DrawRectangle(pen, (this.Height / 2) - 25, (this.Width / 2) - 10, 50, 20);

        }
Og så bare centrer dit App. Og sæt formborderstyle til none
Avatar billede Slettet bruger
21. januar 2008 - 16:03 #2
Øh, det er jeg ikke helt sikker på, jeg forstår...
For det første: Hvad betyder protected og override?
For det andet: Hvad betyder resten? ;P
Avatar billede skov_p Praktikant
21. januar 2008 - 22:50 #3
override betyder du gerne vil tilføje noget når din form automatisk gør noget.
Når du feks. flytter dit vindue med musen fordi du gerne vil læse teksten bagved skal vinduet "tegnes" igen på den nye position.
Så findes der et OnPaint der automatisk kaldes, ligesom du har en OnClick når du trykker på en knap. Med override fortæller du at når winduet bliver tegnet vil du gerne udføre noget. I eksemplet fra Alex tegner han en firkant med de angivede positioner. Fra den parameter der gives med hentes et Graphics object som bruges til at tegne.
Hvis du vil gøre det med musen skal du bruge OnMouseDown for at se hvor din firkant skal starte og OnMouseUp for at se hvor den skal slutte.
Avatar billede skov_p Praktikant
21. januar 2008 - 23:09 #4
public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        Point start = new Point();
        Point end = new Point();

        private void Form1_MouseDown(object sender, MouseEventArgs e) {
            start = new Point( e.X , e.Y);
            Console.WriteLine("Start " + start.ToString());
        }

        protected override void OnPaint(PaintEventArgs e) {
                Graphics g = e.Graphics;
                g.DrawRectangle( Pens.Black, new Rectangle( start.X, start.Y, end.X - start.X, end.Y - start.Y ) );
            base.OnPaint( e );
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e) {
            if( e.Button.Equals( MouseButtons.Left ) ) {
                end = new Point( e.X, e.Y );
                Invalidate();
            }
        }
    }
Avatar billede Slettet bruger
22. januar 2008 - 08:38 #5
Jeg ser ingen reaktion på ovenstående kode... Har lige sat den ind i et tomt projekt og compilet/kørt applikationen med et konsolvindue uden resultat (bare konsollen og et tomt vindue). Hvad kan det skyldes?
Avatar billede skov_p Praktikant
22. januar 2008 - 12:13 #6
Du skal lægge events på din form, MouseMove og MouseDown. Har du ikke et vindue,  du kan ikke bruge en konsol.
Avatar billede Slettet bruger
22. januar 2008 - 12:17 #7
Nej, jeg tror, du har misforstået mig...
Jeg vil gerne kunne tegne på skærmen (altså bare ændre pixels' egenskaber) uafhængigt af forms og konsoller.
Avatar billede alex_sleiborg Nybegynder
22. januar 2008 - 14:04 #8
Jeg har misforstået dig så. Men for at kunne gøre det, så bliver du nød til at lave en Form. For du skal jo have startet et program op, du kan så lave programmet transparant. Og derefter bruge GDI+ til at tegne noget på skærmen, så vil det se ud som om du tegner på skærmen uden nogen form
Avatar billede Slettet bruger
22. januar 2008 - 14:23 #9
Okay... Men er det ikke på nogen måde muligt at gå direkte til kilden (uden om Windows' form-system) og bare bede hardwaren om at udfylde pixels i et bestemt mønster?
Avatar billede alex_sleiborg Nybegynder
22. januar 2008 - 14:33 #10
Muligvis kunne du skrive direkte til grafikkort driveren. Men så skal du nok over i noget C++
Avatar billede Slettet bruger
22. januar 2008 - 14:43 #11
Fordi C# er for idiotsikkert til jobbet?
Avatar billede alex_sleiborg Nybegynder
22. januar 2008 - 21:06 #12
Du kan ikke skrive direkte til grafik driveren i C#. Men hvorfor ikke bare lave en transparent form, som du ikke kan flytte, minimere, ændre på og altid ligger øverst. Så ser det ud som om du tegner direkte på skærmen?
Avatar billede Slettet bruger
23. januar 2008 - 00:11 #13
Tja, er jo en form for et hax... Hm. Men hvis det klarer tricket, er det jo fint. Jeg prøver lige på et tidspunkt (går i seng nu).
Avatar billede alex_sleiborg Nybegynder
26. januar 2008 - 14:34 #14
Jeg kan da godt prøve at lave et eksempel, hvis det er?
Avatar billede skov_p Praktikant
26. januar 2008 - 22:40 #15
Jeg tænkte det samme, men hvis den er tranparent kan stregen der tegnes heller ikke ses. Ikke i min test i hvertfald.
Avatar billede Slettet bruger
27. januar 2008 - 20:04 #16
Jeg vil meget gerne have et konkret eksempel. Er det forresten muligt at gøre sådan, at andre programmer ikke pludselig kan "stjæle" fokus, således at disse vinduer eller brugerens inputfokus flyttes til andre applikationer?
Avatar billede alex_sleiborg Nybegynder
31. januar 2008 - 11:14 #17
Jeg prøver lige  at lave en test, mener man skal override et panel for at få det til at virke. Det er noget af de samme teknikker man bruger, som når man laver ens form rund. Men det bliver først imorgen jeg får tid til det. Man kan gøre sådan at applikationen altid vil ligge øverst, så den måde tager de ikke fokus, fra den firkant der skal tegnes
Avatar billede Slettet bruger
20. februar 2008 - 17:20 #18
Tak, tak, tak...
Det er rart at vide, at jeg ikke er den eneste, der glemmer mine posts xD
Sidder nemlig lige og rydder op i mine glemte sager på Eksperten.
Avatar billede alex_sleiborg Nybegynder
26. februar 2008 - 11:45 #19
Arr sorry, har haft så travlt så havde helt glemt det=D Jeg kigger lige på det her imorgen til frokost
Avatar billede Slettet bruger
02. maj 2008 - 09:56 #20
Øh... Lukket.
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