11. oktober 1999 - 00:14Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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 :)
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)
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"
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
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
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.
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
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.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;
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.
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;
det accepterede svar skulle have været 12-10-99 14.50.42 men hvad betyder det, bare du fik dine point.
Synes godt om
Ny brugerNybegynder
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.