PDA

View Full Version : نام متدی که در آنیم



یوسف زالی
شنبه 02 دی 1391, 05:15 صبح
سلام.
صورت سوال واضحه.
اما همین سوال برای With هم وجود داره. نام شیئی که در With به آن اشاره شده است هنگامی که در آنیم.
چیزی مثل Self.
ممنون.

یوسف زالی
شنبه 02 دی 1391, 05:23 صبح
خدا گوگل رو واسه ما نگه داره :خجالت:
http://wiki.delphi-jedi.org/index.php?title=JEDI_Code_Library
اما واسه With راهی نیست نه؟

Felony
شنبه 02 دی 1391, 13:43 عصر
هدف از این کار چیه ؟

فصل 3 کتاب Delphi 2010 Handbook ممکنه کمکتون کنه .

یوسف زالی
شنبه 02 دی 1391, 22:45 عصر
فرستادن چند متد به یک متد و هندل کردن اونها. دیدم به جای گرفتن یک رشته و مقایسش کافیه بشه چیزی مثل Self پاس داد.
منظورم کمی فنی تر از حالتی هست که آدرس متد رو ارجاع می دی.
اگر لازم هست کد می گذارم.
به هر حال اون کار انجام شد اما برام جالب بود بدونم راه بی دردسری نداره.

Felony
شنبه 02 دی 1391, 22:50 عصر
منظورتو متوجه نشدم ، واضح تر بگو .

یوسف زالی
یک شنبه 03 دی 1391, 00:24 صبح
ببین من برای بارکد های مختلف در برنامه هات استرینگ تعریف کردم.
یعنی هر جا که باشی با گرفتن بارکد خاصی وارد متدی می شی که رجیستر کردی:


RegisterHotKeySequenceAction(MainForm, '100123500'{hot barcode}, 'Handle_Barcode_SequenceAction1');
RegisterHotKeySequenceAction(MainForm, '200123500'{hot barcode}, 'Handle_Barcode_SequenceAction2');
RegisterHotKeySequenceAction(MainForm, '300123500'{hot barcode}, 'Handle_Barcode_SequenceAction3');
RegisterHotKeySequenceAction(MainForm, '400123500'{hot barcode}, 'Handle_Barcode_SequenceAction4');


اون Handle_ ها در حقیقت نام های متد هایی هست که در فرم داده شده وجود داره و مسئول هندل کردن هات استرینگ هاست.
ناگزیریم که فرمت داده شده رو رعایت کنیم. (به دلایل تحلیلی)
حالا مواقعی بوجود میاد که باید این هندل ها به فرم دیگه ای واگذار بشه. من برای این کار در کد تمام اون هندلینگ ها متد مسئول رو با مقادیر "نام" صدا زدم تا تو اون متد بفهمم کدوم متد اون رو فراخوانی کرده.
یعنی نیاز هست که بدونم متدی که من رو فراخوانی کرده "اسمش" چی بوده.
روشی که به کار بردم در حال حاضر اینه:



HandleSequenceActions('StartReceiptCodeHKS', KeySequence);
HandleSequenceActions('StartOrderCodeHKS', KeySequence);
HandleSequenceActions('SaveCodeHKS', KeySequence);
.
.


هر کدوم تو یکی از متدهایی که گفتم گیرنده ی اولیه هستند.
حالا در HandleSequenceActions با یک مقایسه ی رشته ای کار مدیریت انحام می شه.

این به طور کلی اشتباهه که برای هر متد یک رشته اختصاص بدی. اگر می شد "راه راحتی" برای پارامتری کردن فراخوانی داشت، به راحتی و "با خیال راحت" (از نظر نگهداری و گسترش سیستم) می شد نوشت:


HandleSequenceActions(SelfMethodName, KeySequence);

برای تمام متد ها.
راهی که الان به نظرم می رسه رجیستر کردن آدرس متدها در یک سری آرایه هست.
مثلا آرایه ای از رکورد به این شکل:


MethodName: string;
MethodAddr: Pointer;


گفتم شاید راه سرراست تری برای این کار موجود باشه.

یوسف زالی
یک شنبه 03 دی 1391, 00:46 صبح
حاجی با اصافه کردن یک پارامتر به متد های Fire شده، نام متد رو هم از همون RegisterHotKeySequenceAction گرفتم دادم دست به دست رفت رسید به مقصد.
یعنی اینکه فقط در حالت RegisterHotKeySequenceAction از رشته استفاده شد و تمام جاهای دیگه فقط پارامتر رو پاس دادم به متد های دیگه.
به جای این استاندارد


THotActionEvent = procedure(KeySequence: string) of object;

این رو گذاشتم:


THotActionEvent = procedure(MethodName, KeySequence: string) of object;


در کل نطرت چیه؟ راهی که برای این قبیل کار ها به ذهنت می رسه چیه؟
ممنون از پیگیریت.