PDA

View Full Version : سوال: نمایش اندیس آرایه ای از نوع image



mahdi.sagga
دوشنبه 17 خرداد 1395, 11:43 صبح
با سلام و خسته نباشید خدمت اساتید دلفی

بنده اومدم یک آرایه از نوع Timage تعریف کردم بعدش اومدم چندتا فایل تصویری رو در داخل آرایه ذخیره کردم و بعدش عکس ها رو داخل فرم به نمایش گذاشتم
حالا چه کدی باید بنویسم تا موقعی که روی یکی از عکس ها کلیک میکنم شماره خانه آرایه رو مثلا توی یه مسیج باکس یا توی یه لیبل برام نمایش بده .
کدهایی رو که استفاده کردم رو هم میزارم .



var
FormListImage: TFormListImage;
Pic: array [0..35] of TImage;
i:integer;

implementation
{$R *.dfm}


procedure TFormListImage.ControlMouseDown(
Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
FormListImage.Caption:={چه کدی اینجا بنویسم تا شماره خانه آرایه رو به من بده؟}
end;

procedure TFormListImage.BitBtn1Click(Sender: TObject);
begin
i:=strtoint(FormListImage.LabelFlag.Caption);
pic[i] := TImage.Create(FormListImage);
pic[i].Parent := FormListImage;
with pic[i] do begin
Width := 150;
Height := 130;
Align:=alTop;
if OpenPictureDialog1.Execute then
Picture.LoadFromFile(OpenPictureDialog1.FileName);
Stretch:=True;
OnMouseDown := ControlMouseDown;
end;
FormListImage.LabelFlag.Caption:=IntToStr(i+1);

end;


اینم یه عکس از فرم برنامه :

140738
با تشکر

Felony
دوشنبه 17 خرداد 1395, 13:17 عصر
وقتی کنترل ها رو ساختین دیگه ایندکسشون معلوم نیست - باید این ایندکس رو جایی برای استفاده بعدی نگهداری کنید - بهترین جا خصیصه Tag کنترلتون هست :


pic[i].Tag := i;

با کد بالا در زمان ساخته شدن هر شی ایندکسش رو هم ذخیره کردید .
در زمان ساخته شدن کنترل به خاصیت OnClick کنترل هاتون یک EventHandler تخصیص بدید و داخل اون میتونید به خصیصه Tag کنترلی که روش کلیک شده دسترسی داشته باشید که همون ایندکس کنترل هست .

mahdi.sagga
دوشنبه 17 خرداد 1395, 23:14 عصر
ممنونم جناب تاجیک بابت راهنمایی مفید شما . ولی شرمنده اخلاق ورزشی ، این قسمت EventHandler رو درست متوجه نشدم که چطوری شد .
دقیقا تو OnClick چی کار کنم که تخصیص بشه؟

Felony
سه شنبه 18 خرداد 1395, 03:43 صبح
var

FormListImage: TFormListImage;

Pic: array [0..35] of TImage;

i:integer;



implementation

{$R *.dfm}



procedure TFormListImage.ImageClick(Sender: TObject);

begin

if (sender is TImage)

ShowMessage(IntToStr(TImage(sender).Tag));

end;




procedure TFormListImage.ControlMouseDown(

Sender: TObject;

Button: TMouseButton;

Shift: TShiftState;

X, Y: Integer);

begin

FormListImage.Caption:={چه کدی اینجا بنویسم تا شماره خانه آرایه رو به من بده؟}

end;



procedure TFormListImage.BitBtn1Click(Sender: TObject);

begin

i:=strtoint(FormListImage.LabelFlag.Caption);

pic[i] := TImage.Create(FormListImage);

pic[i].Parent := FormListImage;

pic[i].Tag := i;

pic[i].OnClick := ImageClick ;

with pic[i] do begin

Width := 150;

Height := 130;

Align:=alTop;

if OpenPictureDialog1.Execute then

Picture.LoadFromFile(OpenPictureDialog1.FileName);

Stretch:=True;

OnMouseDown := ControlMouseDown;

end;

FormListImage.LabelFlag.Caption:=IntToStr(i+1);



end;