سلام
من میخوام از ساده ترین راه یه ناحیه از تصویر رو در برنامه خودم انتخاب کنم.
برای این منظور یه ScrollBox روی فرم گذاشتم و داخلش یه Imgae برای نمایش تصویر فایل بیت مپ قرار دادم(اسمش رو گذاشتم Img!).
برای شبیه سازی کادر انتخاب از یه Image دیگه که Transparent شده روی Image مربوط به تصویر استفاده می کنم(اسمش رو گذاشتم SelectImg). با بررسی فشار و حرکت و رها کردن ماوس روی تصویر(Img) مختصات کادر انتخاب(SelectImg) رو تنظیم می کنم.این هم کدش:
var
Form1: TForm1;
ImgMouseISDown:Boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ScrollBox1.DoubleBuffered:=True;
SelectImg.Transparent:=True;
end;
procedure TForm1.ImgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ImgMouseISDown:=True;
SelectImg.Left:=X;
SelectImg.Top:=Y;
SelectImg.Width:=0;
SelectImg.Height:=0;
SelectImg.Visible:=True;
end;
procedure TForm1.ImgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If ImgMouseISDown=False then
Exit;
SelectImg.Canvas.FillRect(SelectImg.ClientRect);
SelectImg.Width:=X-SelectImg.Left;
SelectImg.Height:=Y-SelectImg.Top;
DrawFocusRect(SelectImg.Canvas.Handle
,SelectImg.ClientRect);
end;
procedure TForm1.ImgMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ImgMouseISDown:=False;
SelectImg.Visible:=False;
end;
procedure TForm1.SelectImgMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ImgMouseISDown:=False;
SelectImg.Visible:=False;
end;
مشکل اینه که تا این قسمت کد رو حذف نکنم کدم کاری نمی کنه:
If ImgMouseISDown=False then
Exit;
در حالیکه این قسمت کد ضروریه!
مشکل دیگه اینه که ناحیه انتخاب از اندازه زمان طراحی بزگتر نمیشه و وقتی سعی می کنم بزرگترش کنم (البته با حذف دو سطر بالا) ناحیه انتخاب سفید میشه.
لطفا راهنماییم کنین.
این هم کل پروژه:
SelectArea.rar