AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mousetracking oder woher zweite Ebene nehmen?

Ein Thema von Alter Mann · begonnen am 28. Dez 2009 · letzter Beitrag vom 30. Dez 2009
 
Alter Mann

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

Mousetracking oder woher zweite Ebene nehmen?

  Alt 28. Dez 2009, 13: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz