الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال واضح MyEditText = Edit1,Edit2,Edit3

مغلق
بدأه hid في 19 مايو 2005 · 8 رد · 575 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

في بعض الاوقات , وحين تكثر علينا المكونات الرسومية كـ EditBox و غيرها , قد نحتاج إلى أمر واحد

يجعل المربع يتغير لونه عند مرور السهم فوقه مثلا , أو أي حدث آخر .

وليس - كما تعلمون - من الممكن تكرار نفس الأمر كل مربع نص .

والحقيقة أني حاولت مرارا وتكرار , ولكنها باءت بالفشل , وأريد منكم - فضلا - توضيح الطريقة المثلى

لتجاوز الإرهاق وتكرار الأوامر من غير فائدة .....

حاولت أن أدخلها في مصفوفة , ودالة تكرار , ولكني لم أفلح , حقيقة أنا أحس بأنني حول الطريقة السليمة

, ولكن إلى الآن لم أجدها منتظرا أحدكم كي يضيء لي شمعة لأرى الحل

...........

بيئة العمل C++ Builder , ولكن لايهمني لو حصلت على الخوارزمية من خلال لغة برمجة أوبيئة تطوير أخرى

#2

ممكن توضح السؤال أكثر؟ يعني مثلا شوية تفاصيل عن موضوع المشكلة, و ما هي الطريقة التي تستخدمها حاليا؟

#3

أشكرك أخي على ردك أولا , وثانيا:

بشكل أوضح خذ مثلا هذا الكود

TEdit *Edit1

TEdit *Edit2

//

TEdit * MyEdit

//

MyEdit = Edit1,Edit2;

MyEdit->Text = "Hullo" ;

.............................

في الكود السابق قمت بتعريف Edit1 , Edit2 على أنهما مربعي نص , ثم عرّفت MyEdit وجعلته محتويا للمربعين السابقين والهدف من ذلك هو أنني أريد تغيير محتوى كلا المربعين بأمر واحد , من دون تكرار نفس الأمر مرتين

Edit1->Text = "Hullo";

Edit2->Text = "Hullo";

لتصبح

MyEdit->Text = "Hullo";

لكن المشكة هنا أنّ الذي يتغير هو مربع النص Edit1 الأول فقط دون الثانيEdit2 , وأنا وكما قلت أريد تغيير محتوى المربعين

#4

وعليكم السلام ..

اخي ممكن توضح اكثر

هل تعرف الدالة اللتي تغير لون الخلفية ؟

بالنسبة لموضوع ""لتجاوز الإرهاق وتكرار الأوامر من غير فائدة""

اعتقد لدي فكرةممكن تنجح ..لكن سأطبقها اولا حتى اتأكد

واخيرا انت تريد تستخدم دوال api ام mfc ....

تم تعديل هذه المشاركة بواسطة الشـمري في 19 مايو 2005 في 07:27

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5
MyEdit = Edit1,Edit2;

هل هذا سطر صحيح في الـ ++C ؟!

اقرب شي يمكنني تخيله هو

MyEdit = {Edit1,Edit2};

حيث MyEdit من نوع TEdit و TEdit هو struct

طبعا هناك حل أسهل و افضل, ببعض حيل الـ OOP و ربما حتى من دون OOP

غير TEdit بحيث يحتوي على مؤشر لـ list, مثلا linked list او vector او dynamic array .. شي من هالقبيل, المهم ان تكون قادرا على اضافة اي عدد من العناصر الى السلسلة.

السلسلة هذي يجب تحتوي على مؤشرات للعناصر التابعة لها, و هذه العناصر هي اللتي ستقوم بتنفيذ العملية عليها في سطر واحد.

تحتاج method او function لاضافة عنصر الى هذه السلسلة, و method آخر لكي يطبق العملية المطلوبة (تغيير لون الخلفية) على جميع هذه العناصر.

class Manager
{
private:
	EditList list;
public:
	//add a new item to the list
	add( TEdit *obj )
	{
  list.push_back( obj );
	}

	performActionOnAll()
	{
  //loop through the list
  for(int i = 0; i < list.size(); i++)
  {
 	 list.at(i)->Text = "hello"; //perform the action
  }
	}
}

و تستطيع استخدامه كالتالي:

TEdit *Edit1
TEdit *Edit2
//
Manager *mgr = new Manager();
//
mgr->add(Edit1);
mgr->add(Edit2);

mgr->performAction();

طبعا المشكلة هنا انك لازم تكتب loop لكل عملية تريدها, يعني لا تستطيع تنفيذ كل العمليات هكذا

مع العلم انني لم اجرب الكود, يعني ممكن تكون فيها أخطاء, لكني هي توضح الفكرة العامة.

#6

أخي الشمري ..... أنا أعمل على Builder C++ وهو يتيح لي تعريف MyEdit = Edi1,Edit2

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

تم تعديل هذه المشاركة بواسطة hid في 19 مايو 2005 في 07:49

#7

فهمت :)

صحيح.. وضعنا الرد في نفس الوقت

ساحاول اليوم ان شاء الله ... اوعدك ..

اعتقد ان الحل باستخدام OOP ..

اقتباس
أخي الشمري ..... أنا أعمل على Builder C++ وهو يتيح لي تعريف MyEdit = Edi1,Edit2

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

اللي رد عليك هو الاخ حسن .....

تم تعديل هذه المشاركة بواسطة الشـمري في 19 مايو 2005 في 09:19

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

الحمدلله .. هذا كودي يبين لك المطلوب ..

قمت بكتابته اليوم وهو يقوم بانشاء 6 صناديق نص .. ثم يقوم يقوم بتغيير النص اللي بداخلها اذا ضغط المستخدم على F1 ...

وبالتالي ستوفر الوقت وكمية جيدة من السطور ...

هنا انشأنا EDIT

	HWND hwndEdit[6];
.
.
.
.
for(int j=0;j<6;j++)
{
   s+=50;
     hwndEdit[j]= CreateWindow(
          	"EDIT",    "EDIT",   	WS_CHILD|ES_MULTILINE|ES_LEFT|ES_AUTOVSCROLL|WS_VSCROLL |WS_VISIBLE|WS_BORDER,
      	
     20, s, 120, 40,hwnd, NULL, NULL, 0);

    ShowWindow(hwndEdit[j], nCmdShow);
}

ثم قمنا بتغيير النص هكذا

  case VK_F1 ://whene press F1 then change  the text;)
  	{ 
    for(int i=0;i<6;i++)
    {  
    SendMessage(hwndEdit, WM_SETTEXT,0, 
                (LPARAM) "Alslam alaikum" ); 


    }
    	break;

  	}

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

===

قمت بعمل نفس البرنامج لكنه الان يغير الخلفية .. ولكن لا استطيع تبيق الكود الا اذا كانت الاداة ليست داخل النافذة .. يعني الغيت خاصية WS_CHILD

هكذا

for(int j=0;j<6;j++)
{
   s+=50;
     hwndEdit[j]= CreateWindow(
          	"EDIT",   "EDIT",
      	ES_MULTILINE|ES_LEFT|ES_AUTOVSCROLL|WS_VSCROLL |WS_VISIBLE|WS_BORDER,
      	20, s, 120, 40 , hwnd, NULL, NULL, 0);

    ShowWindow(hwndEdit[j], nCmdShow);
}

ثم اغير لون الخلفية 
  case VK_F1 ://whene press F1 then change  the text;)
  	{ 
    for(int i=0;i<6;i++)
    {  
        HDC hdc=GetDC(hwndEdit);
     RECT rect;
     GetClientRect(hwndEdit,&rect);
     ///////
     FillRect(hdc,&rect,(HBRUSH)(COLOR_WINDOW+23));
     }
    	break;

  	}

لاحظ الصورة

34e6ff73e6.gif

739fa5f645.gif

هذه الفكرة الاساسية وهي ادخال الدوال في حلقة تكرارية .

اتمنى اني اكون قد جاوبتك صح وفهمت السؤال صح B)

حمل المرفقات

1 CHANGE text.zip

2 text COLOR.zip

تم تعديل هذه المشاركة بواسطة الشـمري في 19 مايو 2005 في 17:52

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9

لك حبي وتقديري أخي المبدع الشمري , على طريقتك في الإجابة , وكذلك لك أخي حسن , ,اتمنى لكما مزيدا من التقدم والإبداع البرمجي

هذا الموضوع مغلق.

مواضيع مشابهة