Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wie zeichne und bearbeite ich einen Bereich, bevor ich ein Loch in das Formular mache (https://www.delphipraxis.net/202228-wie-zeichne-und-bearbeite-ich-einen-bereich-bevor-ich-ein-loch-das-formular-mache.html)

flashcoder 10. Okt 2019 15:11

Delphi-Version: 10 Seattle

Wie zeichne und bearbeite ich einen Bereich, bevor ich ein Loch in das Formular mache
 
Mit dem folgenden Code können Sie einen Bereich zeichnen und ein Loch in das Formular einfügen.
Wie kann ich diesen Bereich zeichnen und bearbeiten (kein Loch in einem bestimmten Bereich erstellen), bevor ich das Loch in Form mache? z.B:

BILD

Delphi-Quellcode:
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);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    FSelecting: Boolean;
    FSelection: TRect;
    pos1, pos2, pos3, pos4: Integer;
    Region, Region2: HRGN;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FSelection.Left := X;
  FSelection.Top := Y;
  FSelecting := true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if FSelecting then
  begin
    FSelection.Right := X;
    FSelection.Bottom := Y;
    Invalidate;
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FSelecting := false;
  FSelection.Right := X;
  FSelection.Bottom := Y;
  Invalidate;

  FSelection.NormalizeRect;
  if FSelection.IsEmpty then

  else
  begin
    pos1 := FSelection.Left;
    pos2 := FSelection.Top;
    pos3 := X;
    pos4 := Y;

    Region := CreaterectRgn(0, 0, Width, Height);
    Region2 := CreaterectRgn(pos1, pos2, pos3, pos4);
    CombineRgn(Region, Region, Region2, RGN_DIFF);
    SetWindowRgn(Handle, Region, True);
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Brush.Style := bsClear;
  Canvas.Pen.Style := psSolid;
  Canvas.Pen.Color := clRed;
  Canvas.Rectangle(FSelection);
end;

TurboMagic 10. Okt 2019 21:50

AW: Wie zeichne und bearbeite ich einen Bereich, bevor ich ein Loch in das Formular m
 
Eventluel mit einem Zustandsflag, welches anzeigt, ob die Zeichenoperation
schon erfolgt ist und erst dann wird der Loch machende Code ausgeführt,
wenn dieses Flag das signalisiert?

jaenicke 11. Okt 2019 08:06

AW: Wie zeichne und bearbeite ich einen Bereich, bevor ich ein Loch in das Formular m
 
Ich würde den Benutzer für den Zweck zuerst nur markieren lassen und danach dann auf expliziten Befehl die Fensterregion setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 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