PDA

View Full Version : یک مشکل عجیب در ارتباط بین دو فرم



Hadizadeh
دوشنبه 29 مرداد 1386, 09:11 صبح
سلام. من یک یونیت به شکل زیر دارم:


unit unit1;
....
type
TUnit1 = class(TActiveForm)
Image1: TImage;
.....
end;
var Unit1:TUnit1;
uses unit2;

حالا یه فرم دیگه دارم که از تو فرم 1 فراخوانیش می کنم


unit2.show;

حالا از تو یونیت 2 می خوام به Image1 یونیت 1 دسترسی داشته باشم:


unit unit2;
uses unit1;
......
begin
Unit1.Image1.Width:=100;
end;

ولی با اجرای این دستور ، یک خطای Access Violation می گیرم در حالیکه هر دو فرم Create شده اند. حالا مشکل چیه؟

Batman
دوشنبه 29 مرداد 1386, 09:55 صبح
با سلام
جناب هادیزاده access violation ممکنه به دلایل مختلفی باشه دقیقا تو چه خطی خطا میده

Hadizadeh
دوشنبه 29 مرداد 1386, 10:02 صبح
اینجا:


Unit1.Image1.Width:=100;

Batman
دوشنبه 29 مرداد 1386, 10:08 صبح
با سلام
جناب هادیزاده مطمئنی که هیچ جایی image رو free نکردی
تو یه برنامه دیگه امتحان کن ببین بازم خطا میده
موفق باشید

Hadizadeh
دوشنبه 29 مرداد 1386, 10:19 صبح
نه مشکل از اون نیست. ببین TUnit1 از جنس TActiveForm هست یعنی یه فرم ActiveX. وقتی دیالوگ Project Option رو باز می کنم مدیر پروژه هیچ تبی رو جهت تعیین و مدیریت ساخت فرم ها ارایه نمی کنه. یعنی من فکر می کنم با کد


var Unit1:TUnit1;
uses unit2;

Unit1 از دید unit2 ساخته نمی شه و باید قبل از استفاده از دستوری مثل


Unit1.Image1.Width:=100;

اون رو ساخت. یعنی


Unit1:=TUnit1.Create(self);
Unit1.Image1.Width:=100;

ولی نظرت چیه؟ رفتم که تست کنم!

Hadizadeh
دوشنبه 29 مرداد 1386, 10:21 صبح
آره با همین راه حلی که گفتم کار کرد ولی چرا اینطوریه؟

Hadizadeh
دوشنبه 29 مرداد 1386, 10:24 صبح
در ضمن بگم که فقط یونیت اول از جنس TActiveForm هست و یونیت دوم از جنس همین TForm معمولی خودمون هست.