Avatar billede stone Forsker
11. oktober 1999 - 00:14 Der er 23 kommentarer og
1 løsning

flytte billed

hvordan laver man en funktion så man kan flytte billedet - ligesom i ADSEE
viewer32.
her kan man hvis billedet fylder mere end skærmen, trække billedet op eller ned.

Avatar billede blackthorne Nybegynder
11. oktober 1999 - 08:01 #1
Hvis jeg forstår dig rigtig så placere billedet i en paintbox som ligger i en scrollbox
Avatar billede snorga Nybegynder
11. oktober 1999 - 10:31 #2
Vil du kunne trække med musen?
Avatar billede TRoXa Novice
11. oktober 1999 - 14:39 #3
jeg ved ikke om dette kan bruges men prøv bare
Jeg sidder ikke i delphi lige nu, så jeg har ingen ide om, om det vil virke... men det skader vel ikke at prøve :)
skal tilføjes under mousedown på billedet.

if shift=[ssleft] then
  begin
    image1.left := image1.left + X
    image1.top := iamge1.top + y
  end;

det kan også være at du skal smide det ind i en scrollbox før dette vil virke :)

håber det virker...
Avatar billede snorga Nybegynder
11. oktober 1999 - 15:55 #4
Troxa er inde på noget rigtigt.. Tror jeg :)

Avatar billede aasuper Nybegynder
11. oktober 1999 - 18:47 #5
Hvis du vil have et billede, der ikke kan være på skærmen til at være på formen, så gør sådan:

-Sæt formens AutoScroll til True
-Sæt så Image-komponentens Align til alNone
-Sæt Image-komponentens Stetch til False
-Sæt Image-komponentens Height og Width til billedets Height og Width. (imgIMAGE.Height:=imgIMAGE.Picture.Height)
Avatar billede stone Forsker
11. oktober 1999 - 18:57 #6
aasuper
det er ikke et specifik bilede, vi taler om mange billeder

eller har det ingen betydning?
stone
Avatar billede stone Forsker
11. oktober 1999 - 19:52 #7
man skal kunne trække billedet med musen,
det er for at undgå scrollbox eller scrollbar.
troxa's eksempel giver en fejlmelding:
missing operator or semicolon, i nederste linie(og det har ikke noget at gøre med stavefejlen)

jeg bruger et gif/jpeg komponent som
hedder "fejpeg1"
Avatar billede stone Forsker
11. oktober 1999 - 20:15 #8
jeg har igen afprøvet troxa's eksempel
fejlmeldingen skyldes manglende semicolon i anden sidste linie.
men eksemplet virker ikke i image eller scrollbox.
stone
Avatar billede stone Forsker
11. oktober 1999 - 20:43 #9
troxa

dit eksempel virker delvis!
når jeg klikker på image flytter det ned
i højre hjørne, man kan ikke fastholde billedet med musen.
man skulle gerne kunne trække billedet rund i image.
stone

Avatar billede stone Forsker
11. oktober 1999 - 22:45 #10
troxa
hvordan undgår man at trække uden for formen, for at nå bunden af billedet?
jeg har prøvet at indsætte eksemplet under (onmousemove) det virker bedre,men
når man på ny trækker i billedet, er det ikke muligt at få det til at blive
det "falder" ned mod højre.

Avatar billede snorga Nybegynder
11. oktober 1999 - 23:40 #11
Her er hvad jeg lavede efter at have læst uden at have set de komentar der efterfulgte min kommentar.. men den kan modificers til at virke efter det du vil ha'.

I stedet for mit timage så sætter du bare dit "gif/jpeg" komponent ind.

Hvis du ikke vil kunne se scrollbox'en kan du sætte vertscrollbar.visible:=false (håber jeg, jeg er ikke helt sikker på at den har en visible, men den har en size som kan sættes til 1(0 virker ikke da den så bare bliver default size))

Her kommer så vi svar:
----------
(*
Følgende virker for mig:
Lav et TScrollbox, kaldet scrollbox1.
Inde i scrollbox'en laver du et TImage, kaldet image1

sæt Image1's propery:
Autosize=true
top=0
left=0

sæt:
Scrollbox1.vertscrollbar.tracking=true
Scrollbox1.hontzscrollbar.tracking=true

Fået lavet det så at Image1's og Scrollbar1's events passe med de procedure givet nedefor her:
*)
const
  Traekker:Boolean=false;
var
  Sidste_x,sidste_Y:integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Traekker:=True;
  Sidste_x:=x;
  Sidste_y:=y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var mx,my:integer;
begin
  If (traekker)and(ssLeft in shift)then begin
    //Flyt på x akselen
    mx:=ScrollBox1.HorzScrollBar.Position;
    ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position+sidste_x-x;
    if ScrollBox1.HorzScrollBar.Position<0 then
      ScrollBox1.HorzScrollBar.Position:=0;
    if ScrollBox1.HorzScrollBar.Position>ScrollBox1.HorzScrollBar.Range then
      ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Range;
    mx:=mx-ScrollBox1.HorzScrollBar.Position;
    //Flyt på y akselen
    my:=ScrollBox1.VertScrollBar.Position;
    ScrollBox1.VertScrollBar.Position:=ScrollBox1.VertScrollBar.Position+sidste_y-y;
    if ScrollBox1.VertScrollBar.Position<0 then
      ScrollBox1.VertScrollBar.Position:=0;
    if ScrollBox1.VertScrollBar.Position>ScrollBox1.VertScrollBar.Range then
      ScrollBox1.VertScrollBar.Position:=ScrollBox1.VertScrollBar.Range;
    my:=my-ScrollBox1.VertScrollBar.Position;
    //Husk flyning til næsten gang
    sidste_y:=y-my;
    sidste_x:=x-mx;
  end else traekker:=False;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Traekker:=False;
end;
Avatar billede snorga Nybegynder
11. oktober 1999 - 23:42 #12

Kommentar til koden på "request".. jeg gad desvære ikke til at fylde koden med kommentar, men vil gerne uddybe hvis der er noget du ikke forstår!

/Steffen
Avatar billede TRoXa Novice
12. oktober 1999 - 10:39 #13
/me synes nu at hans eksempel var godt :)... må jeg ikke få lidt af de points *g*... ses
Avatar billede stone Forsker
12. oktober 1999 - 11:09 #14
jeg kan ikke trække billedet, hvad har jeg glemt?

ingen fejlmeldinger

hvad mener du med "få det lavet sådan at image og scrollbox event passer med de procedure nedenfor?"
Avatar billede snorga Nybegynder
12. oktober 1999 - 11:17 #15
Det jeg mener er at du skal sætte Image1's onMouseDown, onMovemove og onMouseUp events til dem der er i den kode jeg har givet.

Skal jeg sende dig hele projektet?
Avatar billede stone Forsker
12. oktober 1999 - 12:15 #16
det har jeg også gjort
men der sker ingenting

du må gerne sende mig projektet


sl.pol@get2net.dk
Avatar billede stone Forsker
12. oktober 1999 - 13:40 #17
snorga
jeg ønsker ikke at bruge scrollfunktion!

det eksempel som troxa har vist er tæt på det som jeg skal bruge, men den skubber billedet ned i højre side,og man skulle gerne kunne trække billedet indenfor image's rammer.
Avatar billede snorga Nybegynder
12. oktober 1999 - 14:08 #18
Vil du bare ikke ha' scollbar'erne?
Eller vil du overhoved ikke bruge scrollbox?

Avatar billede snorga Nybegynder
12. oktober 1999 - 14:09 #19
Det du vil er det jeg har lavet unden scrolbar'erne?
Avatar billede stone Forsker
12. oktober 1999 - 14:32 #20
det betyder ikke noget om det er scrollbox, men man skal kunne trække billedet op og ned med musen inde i Image, uden scrollbars.



Avatar billede snorga Nybegynder
12. oktober 1999 - 14:38 #21
Øv, Det virker ikke når scollbar'erne er "visible=false"..

Fixer det lige.. stand by :)
Avatar billede snorga Nybegynder
12. oktober 1999 - 14:50 #22
Okay klar igen:

Jeg har lavet 2 af procedure'erne om de skal bare over skrive de gamle. Bare sæt scrollbar'erne's visible til false, så skulle de virke.
----------------------------------
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If (ssLeft in shift)then begin
    Traekker:=True;
    Sidste_x:=x;
    Sidste_y:=y;
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var mx,my:integer;
begin
  If (traekker)and(ssLeft in shift)then begin
    //Flyt på x akselen
    mx:=Image1.Left;
    Image1.Left:=Image1.Left-(sidste_x-x);
    mx:=Image1.Left-mx;

    //Flyt på y akselen
    my:=Image1.Top;
    Image1.Top:=Image1.Top-(sidste_y-y);
    my:=Image1.Top-my;

    //Husk flyning til næsten gang
    sidste_y:=y-my;
    sidste_x:=x-mx;
  end else traekker:=False;
end;
Avatar billede stone Forsker
13. oktober 1999 - 16:25 #23
det virker rigtigt godt.

men er det muligt at undgå at brugeren
kan flytte billedet helt ud af scrollboxen hvor Image ligger i.
Avatar billede stone Forsker
13. oktober 1999 - 16:31 #24
det accepterede svar skulle have været
12-10-99 14.50.42
men hvad betyder det, bare du fik dine point.


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