View Full Version : مشكل در لينك كردن event در dll
golbafan
چهارشنبه 16 تیر 1389, 20:45 عصر
سلام
اگر مشكلم رو حل كنيد ممنون ميشم
من يك dll نوشتم و در اون از يك unit استفاده كردم
در اون يونيت دارم:
procedure VLFindContours1Contours(Sender: TObject; Contours: TVLContours);
procedure loaddll;
.
.
.
var
procedure loaddll;
begin
VLFindContours1:= TVLFindContours.Create(nil);
//اينجا ارور داره
VLFindContours1.OnContours:=VLFindContours1Contour s(VLFindContours1,Contours);
end;
وقتي ميخوام اونت كامپوننت رو لينك بدم به پروسه مربوطه برنامه كامپايل نميشه و ارور زيرو ميده
[DCC Error] MainUnit.pas(301): E2010 Incompatible types: 'TVLContoursEvent' and 'procedure, untyped pointer or untyped parameter'
ولي در موقعي كه فرم داشته باشم ميتونم اونت كامپوننت رو به اين پروسه وصل كنم
با تشكر
SAASTN
چهارشنبه 16 تیر 1389, 22:15 عصر
موقعی که یه رویداد رو ست می کنید نباید پارامتر هاش رو مقدار دهی کنید، چون اون رویداد الان که نمی خواد اجرا بشه.
VLFindContours1.OnContours:=VLFindContours1Contour s;
vcldeveloper
چهارشنبه 16 تیر 1389, 23:24 عصر
Eventها در دلفی به صورت object method تعریف میشند؛ پس باید event-handlerایی که به اونها اختصاص داده میشه، متدی از یک شی باشند. در مثال شما، VLFindContours1Contours متعلق به هیچ شی ایی نیست.
اگر اصرار دارید که Event-handler شما متدی از یک شی نباشه، باید خودتان از روی آن، یک ساختار متد بسازید، و به Event مربوطه اختصاص بدید. مثلا کد زیر، یک Procedure معمولی رو به عنوان Event-handler مربوط به OnClick یک Button استفاده میکنه:
procedure OnClickEventHandler(Sender: TObject);
begin
ShowMessage('This is a sample');
end;
var
EventHandler : TNotifyEvent;
begin
TMethod(EventHandler).Code := @OnClickEventHandler;
TMethod(EventHandler).Data := nil;
Button2.OnClick := EventHandler;
end;
golbafan
پنج شنبه 17 تیر 1389, 08:46 صبح
موقعی که یه رویداد رو ست می کنید نباید پارامتر هاش رو مقدار دهی کنید، چون اون رویداد الان که نمی خواد اجرا بشه.
VLFindContours1.OnContours:=VLFindContours1Contour s;
اينجوري هم عمل كردم و نشد
SAASTN
پنج شنبه 17 تیر 1389, 10:57 صبح
اينجوري هم عمل كردم و نشد
عذر می خوام، من به خط اول کدتون که پیاده سازی VLFindContours1Contours رو نشون می داد توجه نکردم.
golbafan
یک شنبه 28 شهریور 1389, 19:37 عصر
من در نهايت اين كار رو با استفاده از يك فرم انجام دادم
مرسي
nilidelphi
یک شنبه 28 شهریور 1389, 19:57 عصر
VLFindContours1.OnContours:=VLFindContours1Contour s(Sender: TObject; Contours: TVLContours);
اینم یه امتحان بکن.
golbafan
دوشنبه 05 مهر 1389, 20:22 عصر
VLFindContours1.OnContours:=VLFindContours1Contour s(Sender: TObject; Contours: TVLContours);
اینم یه امتحان بکن.
براي كار من جواب نداد
مرسي
vcldeveloper
سه شنبه 06 مهر 1389, 06:47 صبح
اینم یه امتحان بکن.
براي كار من جواب نداد
برای هیچ کاری جواب نخواهد داد، چون انتصاب یک رویداد به اون شکل کلا از نظر Syntax دلفی اشتباه هست، و کد اصلا کامپایل نمیشه، چه برسه که حالا بخواد برای کاری جواب بده یا نده!
esmit61
چهارشنبه 07 مهر 1389, 19:57 عصر
سلام
چطوري اين همه ستاره داري؟
تعجب میکنم از لحن صحبت کردن شما! قصد دفاع از کسی ندارم، ولی این روش حرف زدن اصلاً، صحیح نیست.
کجای حرف ایشون اشتباه بود که به ستاره های ایشون گیر دادید؟
بله. از نظر syntax کاملاً اشتباه هست. شما اگر بلد بودید پس چرا سوال می پرسید؟
golbafan
سه شنبه 20 مهر 1389, 18:40 عصر
تعجب میکنم از لحن صحبت کردن شما! قصد دفاع از کسی ندارم، ولی این روش حرف زدن اصلاً، صحیح نیست.
کجای حرف ایشون اشتباه بود که به ستاره های ایشون گیر دادید؟
بله. از نظر syntax کاملاً اشتباه هست. شما اگر بلد بودید پس چرا سوال می پرسید؟
سلام
منظورم جواب درست ایشون نبود. ضمن شوخی با علی آقا (البته گیر ندادم ...)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.