Einzelnen Beitrag anzeigen

Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Mousetracking oder woher zweite Ebene nehmen?

  Alt 28. Dez 2009, 14:37
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
  Mit Zitat antworten Zitat