OK, du brauchst die drei Ereignisse
- OnMouseDown
- OnMouseUp
- OnMouseMove
Folgende globale Variablen werden benötigt:
Delphi-Quelltext
1: 2: 3:
| DragStartX,DragStartY,LastX,LastY:integer; DragAction:Boolean; OldPenMode:TPen |
Und hier ist der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin DragStartX:=x; DragStartY:=y; LastX:=x; LastY:=y; DragAction:=True; end; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if DragAction then begin OldPenMode:=Image1.Canvas.Pen; with Image1.Canvas do begin Pen.Color:=clgray; Pen.Mode:=pmNot; Brush.Style:=bsClear; Rectangle(DragStartX,DragStartY,LastX,LastY); if (x-DragstartX)<(y-DragstartY) then x:=(y-DragstartY+DragstartX) else y:=(x-DragstartX+DragstartY); Rectangle(DragStartX,DragStartY,x,y); LastX:=x;LastY:=y; end; end; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if DragAction then begin with Image1.Canvas do begin Pen.Color:=clgray; Pen.Mode:=pmNot; Brush.Style:=bsClear; Rectangle(DragStartX,DragStartY,LastX,LastY); DragAction:=False; Pen:=OldPenMode; end; if (x=DragStartX) OR (y=DragStartY) then begin Exit; end; end; end; |
Ich hoffe, ich hab alles nicht dazugehörende richtig rausgeschnitten, was war Teil einer ziemlich großen Prozedur
Anmerkung: Das oben ist von einem alten beitrag von mir rauskopiert und auf ein Image angewendet, aber es müsste bei jeder Kompo mit Canvas funktionieren. Weiß ja net, was Du nimmst, hoffe es hilft Dir