الانتقال إلى المحتوى

كيف يتم تنشيط و عدم تنشيط لزر حسب احتواء حقل معين على بيانات


وليد علاء الدين

Recommended Posts

كيف يتم تنشيط و عدم تنشيط لزر حسب احتواء حقل معين على بيانات فعندما يكتب المستخدم شيء في هذا الحقل يتم تفعيل لزر فورا و اذا تم تفريغ هذا الحقل من كل البيانات يتم عمل عدم تنشيط لهذا الزر - ياريت من غير استخدام الجافا

رابط هذا التعليق
شارك

DECLARE
  ID_FLD  <DATA_TYPE>;
BEGIN
SELECT <FIELD_NAME>
INTO  ID_FLD
FROM <TABLE_NAME>
WHERE <FILD_OTHER = VALUE>;

IF(ID_FLD = <VALUE>)THEN
	SET_ITEM_PROPERTY('ITEM_NAME',ENABLED,PROPERTY_FALSE);
ELSE
	 SET_ITEM_PROPERTY('ITEM_NAME',ENABLED,PROPERTY_TRUE);
END IF;
END;

رابط هذا التعليق
شارك

شكرا على الاجابة .. بس ايه هو التريجر اللي اكتب فيه هذا الكويد
تريجر يتتبع هذا الحقل لحظة حدوث تغير فيه يقوم باجراء معين
مثلا لو كتبت حرف يعمل Enable و لو فرغته يعمل Disable
يعني مش عاوز استنى المستخدم لما ينتقل لحقل تاني و يعمل Validation

رابط هذا التعليق
شارك

Simply,

u can use the following code.....

IF :TEXT_ITEM IS NULL THEN 
         SET_ITEM_PROPERTY('button_name',ENABLED,PROPERTY_FALSE);
   ELSE
        SET_ITEM_PROPERTY('button_name',ENABLED,PROPERTY_TRUE);
   END IF;




Put it in (when-validate-item trigger) on the text_item
or
(key-next-item trigger) on the text_item.

Good Luck

رابط هذا التعليق
شارك

Thank you rose


But you did use a validation trigger which requries user to press enter or move to next or previous field to fire that trigger
which is not the case i'm talking about
I wonder if there is a trigger respond to the user input sponteously to do an action without waiting for a validation trigger
it would work like send button in yahoo messanger for example .. if you type anything , the send button enabled at once

رابط هذا التعليق
شارك

شكرا على الاجابة .. بس ايه هو التريجر اللي اكتب فيه هذا الكويد
تريجر يتتبع هذا الحقل لحظة حدوث تغير فيه يقوم باجراء معين
مثلا لو كتبت حرف يعمل Enable و لو فرغته يعمل Disable
يعني مش عاوز استنى المستخدم لما ينتقل لحقل تاني و يعمل Validation


كما ذكر لك الأخ ( rose_4_pretty )... يمكنك في نفس العنصر إدراج When-Validate-Item Trigger ، بحيث قبل الخروج عنها يتم تنفيذ الأمر


بس أعزرني أنا رديت في الصباح وكنت مستعجل ، فنسيت أقل لك شيء !!!

عندما تجعل خاصية Enable الي القيمة Property_False يؤدي الي إلغاء تمكين المستخدم من إستخدام زر أمر Tab مع زر الأمر المحدد ... وذلك لأنه يقم بتغيير خاصية Keyboard Navigable الي القيمة False ... فهنا يعتبر مشكلة!!!

عموماً يمكنك تغيير الكود السابق ليصبح كما يلي :

DECLARE
  ID_FLD  <DATA_TYPE>;
BEGIN
SELECT <FIELD_NAME>
INTO  ID_FLD
FROM <TABLE_NAME>
WHERE <FILD_OTHER = VALUE>;

IF(ID_FLD = <VALUE>)THEN
	SET_ITEM_PROPERTY('ITEM_NAME',ENABLED,PROPERTY_FALSE);
ELSE
	 SET_ITEM_PROPERTY('ITEM_NAME',ENABLED,PROPERTY_TRUE);
	 SET_ITEM_PROPERTY('ITEM_NAME',NAVIGABLE,PROPERTY_TRUE);
END IF;
END;





بالتوفيق

رابط هذا التعليق
شارك

شكرا على الاجابة .. بس ايه هو التريجر اللي اكتب فيه هذا الكويد
تريجر يتتبع هذا الحقل لحظة حدوث تغير فيه يقوم باجراء معين
مثلا لو كتبت حرف يعمل Enable و لو فرغته يعمل Disable
يعني مش عاوز استنى المستخدم لما ينتقل لحقل تاني و يعمل Validation



فهمت عليك

على مستوى الفورم when_new_form_instance
وعلى مستوى نفس البلوك when-new_block_instance

اضف الكود بالاضافة الى خاصية navigation اللي حدثنا عنها مشكور الاخ MMA.
رابط هذا التعليق
شارك

المشكلة بردو موجودة و هي الكود بيتنفذ مره واحدة في حالة when-new-form-instance و when-new-block-instance
هل يوجد TRIGGER على مستوى الـ ITEM يتنفذ كل ما المستخدم يضغط على زرار على الـ Keyboard
هذا فقط ما اسأل عنه .. ياريت اسم الـ TRIGGER دا لو موجود
و شكرا لكل من حاول التفكير و الرد :rolleyes:

رابط هذا التعليق
شارك

السلام عليكم و رحمة الله و بركاته
أعتقد اخى الحبيب انك لابد من كتابة هذا الكود فى التريجر و الذى يتم اطلاقة بعد الانتهاء من الكتابة فى text_item
و اسم هذا التريجر ----- Post_text_item
و حتى يتم تطبيق ما تريد على البيانات المطبقة فى قاعدة البيانات فلابد من اعادة كتابة الكود فى الحدث Post_query

رابط هذا التعليق
شارك

مين قال ان فى قصور فى الاوراكل

القصور فينا احنا


انا اخيرا والحمد لله وبعد استعارة فكرة الاخ وليد الذى اشكره كل الشكر على هذه الفكرة


عملت الفورمة اللى تعبتنى قوى دى لكن بعد انجازها أسعدتنى جدا جدا جدا

وهذه هى الخطوات

1-أنشئ فورمة جديدة بكنترول بلوك وسميه BLOCK3 وكنفس جديد

2-اعمل عليها TEXT_ITEM وسميه T_X واعمل BUSH_BUTTON وسميه P_B

3-اعمل تريجر WHEN_NEW_FORM_INSTANCE واكتب فيه الكود التالى

:GLOBAL.SEC:='1';
DECLARE
TIM TIMER;
BEGIN
TIM:=FIND_TIMER('TIMER1');
IF NOT ID_NULL(TIM) THEN 
	DELETE_TIMER('TIMER1');
END IF;
TIM:=CREATE_TIMER('TIMER1',300,REPEAT);
END;



وعلى مستوى الفورمة ايضا اعمل تريجر WHEN_TIMER_EXPIRED واكتب فيه الكود التالى

DECLARE
X NUMBER;
T_X ITEM;
P_STATUS VARCHAR2(20);
BEGIN
X:=:GLOBAL.SEC;
IF X>1 THEN
	T_X:=FIND_ITEM('BLOCK3.T_X');
	IF :T_X IS NULL THEN
	SET_ITEM_PROPERTY('P_B',VISIBLE,PROPERTY_FALSE);
	ELSIF :T_X IS NOT NULL THEN
	P_STATUS:=GET_ITEM_PROPERTY('P_B',VISIBLE);
	IF P_STATUS='FALSE' THEN
	SET_ITEM_PROPERTY('P_B',VISIBLE,PROPERTY_TRUE);
	SET_ITEM_PROPERTY('P_B',ENABLED,PROPERTY_TRUE);
	SET_ITEM_PROPERTY('P_B',NAVIGABLE,PROPERTY_TRUE);
  END IF;
	END IF;
	END IF;
X:=X+1;	
:GLOBAL.SEC:=X;
END;



وبعد كده اعمل COMPILE وRUN

وسامحونى على كلامى لانى لسة مبتدئ وسعدت جدا لما عملت الفورمة دى

وشكرى للمنتدى الجميل ده واعضاؤه


النموذج فى المرفقات

New_Folder.zip

تم تعديل بواسطة محمد فتحى باشا
رابط هذا التعليق
شارك

الأخ محمد فتحي
فكرتك كويسة طبعاً ... انما استخدام الـ TIMER بيقلل اداء الفورم لأنه بيزود ما يطلق عليه Network Round Trip
لأنه كل ثانية او حسب الوقت اللي انت عاملة بـ Fire الـ Trigger حتى لو المستخدم ما عملش اي حاجة
في حاجة بسيطة بعيدة شوية عن الموضوع ... ابقى غيّر خاصية الـ ENABLE للزر بدلاً من تغير خاصية الـ VISIBLE
المطلوب طريقة تعمل Fire لـ Trigger بمجرد كتابة اي شيء في Item لحظياً يعني يعمل Fire لكل حرف
و شكراً للسادة الأعضاء اللي شاركوا معانا

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...

مشكور اخي الفاضل على هذه الفكره العبقريه ... حيث انه لايوجد فعلا ترجرز تعمل على الرن تايم ولاثيما يمكننا استخدام التايمر ولكنها تستهلك جزء كبير من النتورك ... ففعلا هذه فكره وان كانت غريبه فهى ممكنه وكما نقول افتكاسه

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية