Delphi5. Kan ikke tegne på Image
Jeg har problem med nedenstående:Når jeg med "FormActivate" har hentet et billede ind i Image1, kan jeg ikke med de nedenstående Mouse-rutiner på Image1 tegne rammen om det, der skal kopieres til Image2.
Programmet løber fint igennem Mouse-procedurerne, men det ser ud som om X- og Y-koordinaterne ikke overføres.
Jeg har et andet program, hvor jeg med "btnHentBilledeClick" (vist nederst) henter billedet, og ellers bruger de samme Mouse-procedurer.
Det fungerer fint!
Hvad gør jeg galt?
//-------------------------------------------------------
procedure TKopiForm.FormActivate(Sender: TObject);
Var
Bmp: TBitmap;
Jpg: TJPEGImage;
begin
ProgDir := GetCurrentDir;
MaxWdt := 449;
MaxHgh := 449;
DrawDone := false;
HarHentetNy := False;
//Konverter jpg-filen til BMP og gem
Bmp := Tbitmap.Create;
Jpg := TJPEGImage.Create;
Jpg.LoadFromFile(KopiBilledeNavn);
Bmp.Assign(Jpg); // Indeholer nu "KopiBilledeNavn" som BMP
Bmp.SaveToFile(ProgDir+'\_BMP_File.bmp');
bmp.Free;
Jpg.Free;
Image1.Picture.LoadFromFile(ProgDir+'\_BMP_File.bmp');
FindPicxy(KopiBilledeNavn,449); //Fast bredde
KopiForm.Image1.Width := PicWdt;
KopiForm.Image1.Height := PicHgh;
end;
//-------------------------------------------------------
procedure TKopiForm.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//Her skal startpunktet opsættes
Drawing := True;
DrawDone := False;
Image1.Canvas.Pen.Width := 3;
StartX := Round(X * ScaleFaktor);
StartY := Round(Y * ScaleFaktor);
SlutX := Round(X * ScaleFaktor);
SlutY := Round(Y * ScaleFaktor);
Image1.Canvas.Pen.Mode := pmNotXor;
//Slet rammen
Image1.Canvas.Rectangle(SletStartX, SletStartY, SletSlutX, SletSlutY);
HarHentetNy := True;
end;
//-------------------------------------------------------
procedure TKopiForm.Image1MouseMove(Sender: TObject; Shift: ShiftState; X, Y: Integer);
begin
if Drawing then
begin
Image1.Canvas.Pen.Mode := pmNotXor;
Image1.Canvas.Rectangle(StartX, StartY, SlutX, SlutY);
SlutX := Round(ScaleFaktor * X);
//ScaleFaktor er forhold mellem Image1 bredde og billedets bredde
SlutY := Round(ScaleFaktor * Y);
Image1.Canvas.Pen.Mode := pmNotXor;
Image1.Canvas.Rectangle(StartX, StartY, SlutX, SlutY);
end;
Image1.Canvas.Pen.Mode := pmCopy;
end;
//-------------------------------------------------------
procedure TKopiForm.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
If Drawing Then
Begin
Kopier(); //Kopierer det udvalgte område på Image2
End;
Drawing := False;
SletStartX := StartX;
SletStartY := StartY;
SletSlutX := SlutX;
SletSlutY := SlutY;
Image1.Canvas.Pen.Mode := pmNotXor;
DrawDone := True;
end;
-----------------------------------------------------------------------------------------------
Fra originalt program
//-------------------------------------------------------
procedure TForm1.btnHentBilledeClick(Sender: TObject);
Var
Bmp: TBitmap;
// PicFormat, //Billedformatet Bredde/Højde
// ScaleFaktor: //Forhold mellem Stretch og ikke-Stretch
begin
HarHentetNy := True;
Bmp := TBitmap.Create;
if OpenPictureDialog1.Execute then
Begin
Image1.Canvas.Pen.Width := 3;
Image1.Stretch := True;
bmp.LoadFromFile(OpenPictureDialog1.FileName);
FilNavn := OpenPictureDialog1.FileName;
//Find formatet på billedet
PicFormat := bmp.Width/bmp.Height;
if PicFormat < 1 Then
Begin //Højere end bred
Image1.Width := Round(PicFormat * MaxHgh);
Image1.Height := MaxHgh;
//Find Forhold mellem Stretch og ikke-Stretch
ScaleFaktor := bmp.Height / Image1.Height;
End
Else
Begin //Brederre end høj
Image1.Height := Round(PicFormat / MaxHgh);
Image1.Width := MaxWdt;
//Find Forhold mellem Stretch og ikke-Stretch
ScaleFaktor := bmp.Width / Image1.Width;
End;
image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Bevel1.Width := Image1.Width+1;
Bevel1.Height := Image1.Height+1;
End;
Bmp.Free;
end;