10. maj 2002 - 06:48Der er
25 kommentarer og 1 løsning
Rotate billede ved hjælp af HScroll
Hej Eksperter.
Hvordan får man Picture1 til at rotere 2 grader med uret hver gang man trykker på HScroll1's pil til højre og 2 grader mod uret hver gang man trykker på HScroll1's pil til venstre ??.
Så vidt jeg ved: det kan du ikke. Du kan ikke rotere billeder vilkårligt. Ved at anvende tegnemetoder (enten den indbyggede Paint eller API BitBlt) kan du rotere i hele 90 graders intervaller.
Hvis du vil lave det du beskriver, er du nødt til at lave de roterede billeder i et tegneprogram, og så skifte billede ved piltryk.
Hmmm, sejt, men hvordan filan får jeg lavet den om så hvis man trykker på pil til højre eller venstre på en hscroll så rotere billedet feks. 5 grader den ene eller anden vej ???.
Jeg har kigget på sjh's link, og såvidt jeg kan se kan den kun rotere i 45 graders intervaller. Det kan så modificeres, men jeg fandt i stedet et andet projekt du måske kan bruge:
Her kan du rotere frit i begge retninger. -Og tilfældigvis har han i dette eksempel netop sat rotationen til 5 grader. Dette er et noget mere avanceret projekt med API-kald, men du skal sådan set blot indsætte modulet i dit projekt, og så kalde funktionen RotateDC. (Der er en del fnidder i forhold til dit behov, -det er fordi man kan vælge rotationspunktet -den lille grønne prik- det kan du bare pille væk). Nu kan du blot kalde funktionen i din HScroll's click-events. (Jeg formoder der findes events til klik på pilene). Hvilken komponent er det for i øvrigt? (altså HScroll'en).
Den har jeg også selv fundet, og har siddet og lejet med et par dage, men jeg har problemer med at få den til at virke i mit eget program ??. Jeg har indsat modulet og det hele, men det virker ikke. Men mange tak for hjælpen, hvordan jeg får det til at virke med Hscroll har jeg heller ikke fundet ud af endnu !!!.
Skal man slå noget bestemt til, for at lave API kald ??, jeg har indsat modulet og lavet de 2 pictureboxe og givet dem samme navn, lavet knapperne, men det virker ikke, og den kommer ikke med nogen fejl meddelse ????.
-Jeg har her fjernet den prik billedet roterer om. Rotationspunktet er billedets centrum. I dette tilfælde er det midt på picDest i pixels. DVS X=picDest.Width / 30 (bredden på pictureboxen /15 (omregning fra twips til pixels) /2 (for at finde centrum) OK?
Dette burde virke hvis dine picboxe og knapper hedder det sammme.
Det hjalp :-) > Tjacob, hvis jeg opretter et nyt ?, vil du hjælpe med at få det til at virke sammen med en Hscroll, der er ikke nogen "click procedure" på en sådan, så jeg kan kun få den til at rotere den ene vej
Hmmm, jeg bruger desværre og Hscrollen til andet, så for at det kommer til at virke kræver det at koden kommer til at virke udfra flg. værdier: min 101 max 201 start værdi 151
Du kan så lege lidt med værdierne: Såvidt jeg kan se kan du ikke rotere billedet mere end 250 grader -hver vej. Det kunne du jo evt. ændre ved at sige (HScroll1.Value - 151) * 7. Så roterer du 7 grader, men når (næsten) hele vejen rundt.
Jeg har faktisk allerede ændret koden så den nu ser således ud:
m_Angle = (HScroll1.Value - 151) * 9 If m_Angle > 135 Then m_Angle = 135 If m_Angle < -135 Then m_Angle = -135 picDest.Cls RotateDC picDest.hdc, picDest.Width / 30, _ picDest.Height / 30, picSource.hdc, picSource.Picture.Handle, m_Angle
Så nu rotere den 9 grader hvergang man trykker på HScrollen og max 135 grader hver vej, samtidig med at den bliver på 135 grader den ene vej og -135 den anden vej selvom man er nået til ydre punkterne på HScrollen. Så det hele spiller nu :-)
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.