Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rahmen begrenzen Canvas (https://www.delphipraxis.net/132833-rahmen-begrenzen-canvas.html)

Blackheart 20. Apr 2009 19:13


Rahmen begrenzen Canvas
 
Hallo Leute !
Hab gerade mal eine Denkblokade.
Ich zeichne mittels Mouse einen Rahmen auf ein Image, das der Rahmen nicht nach links bzw. nach oben gezeichnet werden kann hab ich schon hinbekommen.
Jetzt muss ich noch den Rahmen begrenzen im Image das man ihn nicht nach links und unten über das Image hinausziehen kann.
Bräuchte mal einen kleinen Tipp :wink:
Edit: Quelltext vergessen anzufügen

blackdrake 23. Apr 2009 01:17

Re: Rahmen begrenzen Canvas
 
Ich vermisse den Quelltext ein wenig. Die allgemeine Lösung ist:

Delphi-Quellcode:
if (Rahmen.Height > Image.Height - Rahmen.Top) then
  Rahmen.Heihgt := Image.Height - Rahmen.Top;

if (Rahmen.Width > Image.Width - Rahmen.Left) then
  Rahmen.Width := Image.Width - Rahmen.Left;
Dürfte so theoretisch funktionieren. Was der Rahmen genau ist, ist wiederum eine andere Sache.

PS: Lege doch eine Zeichnung an, wenn du Probleme hast, dir Abstände und deren resultierenden Formeln bildlich vorzustellen.

Gruß
blackdrake

Blackheart 23. Apr 2009 08:04

Re: Rahmen begrenzen Canvas
 
Danke Blackdrake für deine Mühe, bin nur nicht auf Client gekommen.
Hier der funktionierende Quelltext, wurde ja auch schon öfters nach gefragt vieleicht kann ihn ja jemand gebrauchen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Canvas.Pen.Mode:= pmNotXOR;
  Image1.Canvas.Pen.Style:= psDot;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.Canvas.Brush.Style:= bsClear;
  Image1.Canvas.Rectangle(x1,y1,x2,y2); //Vorheriges löschen
  if Shift = [ssLeft] then
  begin
    x1:= X;
    y1:= Y;
    x2:= X;
    y2:= Y;
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift = [ssLeft] then
  begin
  if (X > x1) and (Y > y1) then
    begin
      Image1.Canvas.Rectangle(x1,y1,x2,y2);
      x2 := X;
      y2 := Y;
      if X > Image1.ClientWidth then x2:= Image1.ClientWidth;
      if Y > Image1.ClientHeight then y2:= Image1.ClientHeight;
      Image1.Canvas.Rectangle(x1,y1,x2,y2);
    end;
  end;
end;


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