Hallo
ich habe gerade eine kleine Denkpause und komme einfach nicht darauf wie man ein Auswahlrechteck,
ähnlich wie im Windowsexplorer programmiert.
Es liegt nicht daran zuerkennen ob die linke Maustaste gedrückt ist wenn die Maus bewegt wird,
ich komme nicht darauf mit welcher Technik das Rechteck entsprechend gezeichnet werden kann.
Hat jemand eine Idee/Tipp oder ein Beispiel?
So geht es jedenfalls nicht:
Delphi-Quellcode:
...
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private-Deklarationen }
MR : TRect;
MS : Boolean;
procedure PaintRectangle(aRect : TRect);
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MS := Button = mbLeft;
MR.Left := X;
MR.Top := Y;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MS then
begin
MR.Right := X;
MR.Bottom:= Y;
PaintRectangle(MR);
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if MS then MS := false;
end;
procedure TForm1.PaintRectangle(aRect : TRect);
begin
with Canvas do
begin
Pen.Color := clBlue;
Brush.Style := bsDiagCross;
Rectangle(aRect);
end;
end;
...
Legt man beispielhaft auf dem Formular einige Bilder ab und ruft
PaintRectangle erst im FormMouseUp auf
kommt es dem schon Nahe wie es aussehen könnte. Jedoch soll die Größenänderungen des Rechtecks auch
gezeigt werden und dafür ist dieses Verfahren untauglich. Da die ganze Geschichte in einer Scrollbox laufen
soll, bräuchte ich so etwas wie eine weitere transparente Ebene, die nur das aktuelle Rechteck zeichnet und
alle bisher gezeichneten vergisst.
Viele Grüße