استخدآم procedure دآخل procedure آخر ؟ الدلفي يعترض؟
#1
السلام عليكم روحمة الله

اخواني الكرام,, هل ممكن استخدآم Procedure دآخل Procedure آخر تحت قسم ال implementation ؟

وكيف السبيل الى ذلك ؟

بختصار,, عندي بروسيدور اسمه
PHP كود :
procedure OnShiftPress; 

وبه بعض الأوآمر,,

والآن انشئت procedure آخر,, وإسمه
PHP كود :
Procedure AfterClick; 

عندما أكتب هذا الكود

PHP كود :
Procedure AfterClick;
  
begin
    form1
.advGlowbutton42.Down:= false;
    
form1.advGlowbutton53.Down:= false;
    
OnShiftLeft;
  
end; 

يعترض الدلفي على ذلك,, يا ترى ما السبب ؟

هل يكون هذا بسبب ان ال 2 Procedure معرفيّن مبآشرة تحت implementation ام مآذا ؟

بارك الله لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#2
و عليكم السلام و رحمة الله
ما هو الاعتراض ؟

الاجراء المستدعى
كود :
OnShift[COLOR=red]Left[/COLOR]

الاجراء المعرف
كود :
OnShift[COLOR=red]Press[/COLOR]


اظن انه خطأ كتابي في اسم الاجراء فقط Big Grin
الرد
#3
نعم صحيح اخي,, خطأ مطبعي :eek:

تم حل الإشكآل ولله الحمد,,

الخطأ هو انه كان الدلفي يقول ان البروسيدور غير معرّف,,

PHP كود :
private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;
------------------------ 
هنا  procedure OnShiftLeft;
  
//s : string;
implementation 

فعرّفت البروسيدور كما هو وآضح في الأعلى,, ومشي معي الحآل,, Smile

لا ادري ان كان بالصدفة,, لكن مشي الحآل على كل حال :eek:

شكرا لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#4
إقتباس :لا ادري ان كان بالصدفة
لو كان هنا اخي Delta لقال لك : لا يوجد شئ اسمه صدفة في البرمجة :mad:

كود :
implementation procedure test; begin end; procedure testing; begin [COLOR=red]test;[/COLOR] end;

هذا المثال لا يولد خطأ....
يجب مراعاة سلسلة الترتيب، الاجراء المستدعى يجب ان يكون قبل الاجراء المستدعي

----
و في حالة عدم مراعاة ترتيب الاجراءات يمكنك جعل الاجراء Global قبل implementation كما هو الحال مع الحل الذي ارفقته...
نستعمل هذه الطريقة فقط في حالة تصدير الاجراء الى وحدات اخرى من المشروع.
----


كود :
implementation procedure test; begin [COLOR=red]testing;[/COLOR] end; procedure testing; begin end;

كتابة الكود بهذه الطريقة يولد الخطأ...
بالتوفيق ان شاء الله
الرد
#5
السلام عليكم
OnShiftPress ماذا تريد أن تفعل...
هناك متغير TShiftState معرف باسم Shift يسمح لك بالتعرف على زر التحكم المضغوط، مثال (بطريقتين للاستعمال):
كود :
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ssCtrl in Shift then ShowMessage('[Ctrl] in hold!'); if Shift = [ssAlt, ssShift] then ShowMessage('[Alt] and [Shift] are in hold!'); end;
تجده في الحدث OnKeyDown و OnKeyUp ويمكن استعماله بطريقة أخرى في إجراءات أخرى.
الرد
#6
شكرا لكما اخواني هلى التوضيح,,

وآضح جدا اخي STRELiTZIA ,, فهمت 100% ولله الحمد

اخي كاش,, Smile

إقتباس :OnShiftPress ماذا تريد أن تفعل...

هههه,, هذا سر للغآية,, Wink

هذه تسمية فقط,, كان بلإمكان ان يكون الإسم شئ آخر ,,, Wink
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم