AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Rahmen begrenzen Canvas

Ein Thema von Blackheart · begonnen am 20. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#1

Rahmen begrenzen Canvas

  Alt 20. Apr 2009, 19:13
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
Edit: Quelltext vergessen anzufügen
Blackheart
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Rahmen begrenzen Canvas

  Alt 23. Apr 2009, 01:17
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
Daniel Marschall
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Rahmen begrenzen Canvas

  Alt 23. Apr 2009, 08:04
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;
Blackheart
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf