Autor Beitrag
Benny800
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 28.12.10 19:41 
Hallo zusammen,

ich tüftel gerade ein einer Funktion um einen Bildausschnitt zu verschieben. Dazu benutze ich zwei TImage Komponenten. Image1 enthält das Bild und der Ausschnitt wird dann in Image2 kopiert und mit der Maus verschoben. Beim ersten Mal funktioniert das wunderbar. Wenn ich allerdings einen zweiten Bildausschnitt verschieben will, der größer als der erste ist, wird er in der Höhe und Breite vom ersten abgeschnitten.
Ich suche schon seit Stunden den Fehler und weiß nicht mehr weiter.
Hier der Code

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TForm1.MoveSelection(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  source,dest: TRect;
  dy,dx: Integer;
begin
  if(selected) then
  begin
    dx := X - dcursorx;
    dy := Y - dcursory;

    if(x1 > x0) AND (y1 > y0) then begin source := Rect(x0,y0,x1,y1); dest := Rect(0,0,x1-x0,y1-y0); end;
    if(x1 < x0) AND (y1 > y0) then begin source := Rect(x1,y0,x0,y1); dest := Rect(0,0,x0-x1,y1-y0); end;
    if(x1 < x0) AND (y1 < y0) then begin source := Rect(x1,y1,x0,y0); dest := Rect(0,0,x0-x1,y0-y1); end;
    if(x1 > x0) AND (y1 < y0) then begin source := Rect(x0,y1,x1,y0); dest := Rect(0,0,x1-x0,y0-y1); end;

    Image1.Canvas.Pen.Width := 0;
    Image1.Canvas.Pen.Color := clWhite;
    Image1.Canvas.Brush.Color := clWhite;

    Image2.Width := source.Right - source.Left;
    Image2.Height := source.Bottom - source.Top;
    Image2.Left := dx;
    Image2.Top := dy;


    Image2.Canvas.CopyRect(dest,Image1.Canvas,source);
    Image1.Canvas.Rectangle(source); 

  end;
end;


X0, Y0, X1 und Y1 sind globale Variablen, die die Koordinaten der Eckpunkte der Auswahl enthalten.

Image2, dest und source haben immer die gleichen Maße, trotzdem wird dest nie größer als das zuerst gesetzte dest. Die Fläsche, die danach weiß gesetzt wird (source) hat immer die richtige Größe.

Grüße, Dennis
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 28.12.10 20:05 
Das zugrundeliegende Bitmap wird nur initial erzeugt, das vergrößern der Images verändert die Größe des Bitmaps nicht mehr.
ausblenden Delphi-Quelltext
1:
Image.Picture.Bitmap := nil;					


vor dem Malen behebt Dein Problem.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: Benny800
Benny800 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 28.12.10 20:11 
Vielen Dank.
Du bist mein Held :) Jetzt kann ich endlich wieder weiterarbeiten.