Avatar billede nanna31 Praktikant
30. november 2002 - 23:57 Der er 14 kommentarer og
1 løsning

tegn en linie

Jeg vil gerne tegne et rødt kryds i midten af min picturebox, som har dimensioner 200x200 pixels:

For i = 0 To 200
            Form1.Picture1.PSet (100, i), vbRed
            Form1.Picture1.PSet (i, 100), vbRed
        Next i

Hvorfor skærer linierne ikke hinanden i midten, men lidt under midten ?

Hvorfor er den lodrette af de to linier stiplet (som om hver 10 pixel konsekvent mangler) ?
Avatar billede martin_moth Mester
01. december 2002 - 03:03 #1
Hmm - ja, det er da besynderligt, at krydset ikke er i midten. Det skyldes sandsynligvis at dimensionerne på din picturebox er "udvendige" dimensioner - der er jo lidt "skygge" rundt om boxen, og således er "tegne-feltets" størrelse følgende (fundet ved at prøve mig frem):

Bredde: Picture1.width - 73
Højde: Picture1.height - 73

Altså skal din kode hedde:

For i = 0 To 200
  Form1.Picture1.PSet (100-37, i), vbRed
  Form1.Picture1.PSet (i, 100-37), vbRed
Next i

Og i stedet for at sætte 400 prikker, kan du bare tegne 2 linier:

  Form1.Picture1.Line (0, 63)-(200, 63), vbRed
  Form1.Picture1.Line (63, 0)-(63, 200), vbRed

Den stiplede linie du taler om vil ikke fremkomme med den kode du har vist - og slet ikke hvis du i stedet for bruger .Line - du må have gjort noget andet for at få den stiplede linie frem...

/Martin
Avatar billede martin_moth Mester
01. december 2002 - 03:45 #2
PS: For at være 100% korrekt og pædagogisk, vil jeg skrive koden som:

  Form1.Picture1.Line (0, 63)-(128, 63), vbRed
  Form1.Picture1.Line (63, 0)-(63, 128), vbRed

- for man må jo ikke male ud over kanterne, har min mor altid sagt :o)))
Avatar billede mikker Nybegynder
01. december 2002 - 11:58 #3
Prøv med det her:
For at overskueliggøre det har jeg delt det lidt op.
'----
'midten:
xmidt = picture1.scalewidth/2
ymidt = picture1.scaleheight/2

'så kan vi tegne...
picture1.line ((xmidt-100),(ymidt-100))-((xmidt+100),(ymidt+100)),vbred
picture1.line ((xmidt-100),(ymidt+100))-((xmidt+100),(ymidt-100)),vbred
'leg lidt med det :O)

- Mikker
Avatar billede martin_moth Mester
01. december 2002 - 12:27 #4
Aaaah - SCALEwidth / SCALEheight - tænk at jeg kunne glemme den :o(
Avatar billede martin_moth Mester
01. december 2002 - 12:28 #5
Dummeslag til mig! Så absolut - så meget pladder skrevet om at man skal trække fra osv. Men ideen med at bruge .line (x1,y1)-(x2,y2) var go nok ;o)
Avatar billede mikker Nybegynder
01. december 2002 - 13:05 #6
Bare lidt surt, hvis man pludselig finder ud af, at man skal lave sin picturebox større eller mindre og så iøvrigt har tegnet 678.185 streger :O)

bruger man så ovenikøbet laengde = 100, kan man nøjes med at ændre 1 sted :O)

Det bliver måske lidt uoverskueligt:

picture1.line ((picture1.scalewidth/2 -laengde),( picture1.scaleheight/2 - laengde ))-((picture1.scalewidth/2 + laengde ),( picture1.scaleheight/2 + laengde )),vbred
picture1.line (( picture1.scalewidth/2 -laengde),( picture1.scaleheight/2 +laengde))-(( picture1.scalewidth/2 + laengde ),( picture1.scaleheight/2 - laengde )),vbred

- Mikker
Avatar billede martin_moth Mester
01. december 2002 - 16:10 #7
Ja da - jeg mente, at _princippet_ .line (x1,y1)-(x2,y2) var en god ide i stedet for at sætte 400 punkter med pset - x1, y1 osv. behøver jo ikke være absolutte værdier, men kan - som du nævner det - være angivet ved picture1.scalewidth osv.

Og så kan der vist ikke koges mere suppe på denne historie ;o)
Avatar billede mikker Nybegynder
01. december 2002 - 18:09 #8
Du har ganske ret, det _er_ ved at være noget tyndbenet, dette emne.
Jeg eksperimenterede blot med _hvor_ uoverskueligt man kunne gøre det :O)

Over and OUT!

- Mikker
Avatar billede nanna31 Praktikant
01. december 2002 - 23:34 #9
Jeg har fundet løsningen - jeg havde glemt at sætte scalemode til pixel. Nu stå krydset i midten, og der er ingen huller i linierne.

Thanks anyway.
Avatar billede martin_moth Mester
02. december 2002 - 08:53 #10
Selv tak (for ..?) - husk at brug line i stedet for Pset...
Avatar billede mikker Nybegynder
02. december 2002 - 18:06 #11
Sig lige til, hvis du finder ud af, at det faktisk er en god ting at bruge scaleheight/scalewidth også. :O)

- Mikker
Avatar billede nanna31 Praktikant
03. december 2002 - 08:52 #12
Jeg forstår faktisk ikke helt, hvad de to ting er til for (scale- og height og width) ? - der er jo allerede en height og en width!
Avatar billede martin_moth Mester
03. december 2002 - 10:43 #13
Så prøv at oprette et nyt spørgsmål om ScaleWidth, få en massse svar, og afslut med at tage dine points selv ;-D
Avatar billede nanna31 Praktikant
03. december 2002 - 13:22 #14
Godt ord igen - det er jo ikke noget, jeg plejer at gøre det med at tage mine egne points vel - men nu løste jeg jo selv mit problem denne gang uden at blive det mindste klogere af diverse svar - beklager, men jeg er som sagt begynder her.
Avatar billede martin_moth Mester
03. december 2002 - 18:58 #15
Du fik skam ellers 2 gode råd:

  Brug Scalewidth
  Brug .Line i stedet for .Pset...

I anledning af højtiden vil jeg ønske dig rigtig glædelig jul :o)
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
Kurser inden for grundlæggende programmering

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