31. maj 2002 - 00:00Der er
56 kommentarer og 1 løsning
det går LANGSOMT....zzzZZZzzz
Hejsa! jeg har en timer der styrer noget grafik på min form (Interval: 50). mit problem er så at jeg samtidig med det bruger en mousemove på min form til at tegne rektangler når jeg holder venstre museknap nede(ligesom når man markerer ikoner), når jeg så begynder at tegne rektanglerne så går min timer næsten i stå... :(
nogen der kender en lidt bedere måde at lave sådan en "markerings boks" eller hvad jeg nu skal kalde det, det går nemlig også langsomt for den at følge med musen.
bruger du din forms canvas til at tegne med? Borrisholt har i sin tid lavet en anden timer (ThreadTimer) den er meget mere stabil end delphi's standard TTimer!
Hej Hermandsen. Jeg går udfra at du har fået et nyhedsbrev fra mig i løbet af dagen. Der er kommet en tutorial mere siden nyhedsbrevet: "Lys og Materials" - synes bare lige du skulle vide det!!! :)) God Førnøjelse!
var t : integer; procedure TForm1.Timer1Timer(Sender: TObject); begin timer1.interval := 50; if timer1 <> nil then inc(t,1); caption := inttostr(t); end;
var b : boolean; sx, sy : integer; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssleft in shift then with canvas do begin if not b then begin sx := x; sy := y; b := true; end; pen.style := psdot; brush.color := color; fillrect(clientrect); rectangle(sx,sy,x,y); end; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin b := false; end;
faktisk behøver du kun 2 procedure, med mit eksempel:
var t : integer; procedure TForm1.Timer1Timer(Sender: TObject); begin timer1.interval := 50; if timer1 <> nil then inc(t,1); caption := inttostr(t); end;
var b : boolean; sx, sy : integer; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssleft in shift then with canvas do begin if not b then begin sx := x; sy := y; b := true; end; pen.style := psdot; brush.color := color; brush.Style := bsclear; fillrect(clientrect); rectangle(sx,sy,x,y); end else b := false; end;
>>zerohero Oups... My bad... Sad og kopierede fra hjælpen, da jeg ikke kunne huske alle de parametre der var med MouseMove og MouseDown, og så er det vist gået galt en enkelt gang... ;)
hmmm, den laver godt nok en box men.... jeg har en masse billeder på min form --> de forsvinder ved "fillrect(clientrect);"
nu har jeg rodet lidt så det passer til mine behov:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin down := true; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if down then begin canvas.pen.style := psdot; canvas.pen.color := cllime; canvas.Brush.Style := bsclear; canvas.rectangle(stx,sty,x,y); end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin down := false; end;
hvordan får jeg den så til når den opdaterer rect'en kun at fjerne den rect der blev lavet tidligere? lige nu fylder den jo hele min skærm med dem når jeg rykker musen frem og tilbage..
begin if down then begin canvas.pen.style := psdot; canvas.pen.color := cllime; canvas.Brush.Style := bsclear; canvas.rectangle(stx,sty,x,y); end; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin down := false; end;
hehe, forestil dig at jeg har omkring 50 billeder på min form.... kan man ikke slette canvas med canvas.free eller noget for det vil jo nok tage lidt tid at repainte 50 billeder. eller hvad ved jeg, er der heller ik noget der hedder 'undo' eller sådan noget.... jeg er godt nok vild efter at få det til at køre!! hehe
hmmmm det var jo lige det jeg stod og manglede..BRAVO MEEEEEEN... jeg vil gerne have at rektanglet forsvinder når jeg slipper knappen.... det skal som jeg startede med at skrive jo være ligesom når man markerer flere ikoner på fx. skrivebordet.
nu har jeg sgu afvist dine svar så mange gange ...så du får sgu 100 point når det lykkes. hmmm om der var mere....ok ja, hvis jeg laver en rect og slipper musen så kan jeg ikke få lov til at lave en ny hvis det er inde for det samme område som den forrige...(kun nogle gange)... skriv lige hvis du har brug for uddybning...
ikke fra billedet nej, det er kun nogle gange den gør det!! og det er efter hvad jeg kan se hvis jeg starter trækket fra et punkt som er 'inde' for den forrige rect....hmmmm jeg er sq ik så god til at forklare..sorry
hehe, det virker nu!! der gik bare lidt ged i mit billede....sorry kender du en måde jeg kan bruge "setCaptureControl(form1);" på, så jeg også kan starte trækket fra billedet. hvis jeg sætter det i form.create er curseren bare et timeglas når programmet starter og det virker kun en gang... :(
NEJ NEJ NEJ..... *River mig i håret* som du ser oppe for oven skriver jeg at min timer næsten går i stå når jeg laver et træk... det er lige netop det jeg ville forebygge med hele dette spm. HEHE jeg kan altså ik lade være med at grine ad (ik for at være ond eller noget) "Jeg stopper simpelthen dit billede når jeg laver rektanglet! :)" better luck next time....hehe
øhhhh det fattede jeg ik lige. hør her: mine billeder kører rundt på skærmen og samtidig vil jeg gerne bare kunne trække et rektangel ud over dem...get it? forestil dig at ikonerne på dit skrivebord flyver rundt men du stadig kan markere dem....<<-- godt eksempel
Hold kæft for en gang sladder tanter *G* - jeg vågendede op og modtog 48 mails - hvoraf langt de fleste var fra dette spørgsmål!!! :)) Klokken 6.30 i morges var I først færdig tsk tsk tsk - har I ikke noget liv! ;))....
Lige en lille komentar, dit delphi program er ikke Mutitask internt i programmet, derfor går din timer i stå dår du Bliver ved med at genere OnMouseMove events, en løsning kunne være at give din timer en chance ved at starte din OnMouseMoveEvent med Application.ProssesMessage; Det kunne godt være en løsning helt uden alle mulige krumspring og med den kode du havde lavet fra starten, man kommer langt med KIS også når man koder
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.