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

سؤال في البرمجة بمكتبة Gtk

بدأه aziz nor في 20 يوليو 2008 · 6 رد · 1,407 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الي المبرمجين بمكتبة

gtk

عندي سؤال وهو حول

signal

وهو يوافق طريقة الاحداث في الوندوز

مثل منقول في الوندوز اظغط علي الزر الفلاني ونتوقع حدوث حدث معين وهدا الامر معروف لغالبية المبرمجين

المهم سؤالي اني لم افهم دالة السنيال وهدا هو شكلها العام

/* Connexion du signal "destroy" */

g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(OnDestroy), NULL);

للعلم ان

pWindow

هو عبارة عن

Widget

في مكتبة

Gtk

يعني اريد شرح مستفيض وعميق لهده الدالة لانها اساس العمل كله

ولكم مني الشكر الجزيل

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#2
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(OnDestroy), NULL)

معناها كالتالى

اربط ال signal destroy الخاصة ب ال object المسمى pWindow بال callback -فنكشن/ميثود هيتم تنفيذها فى حال حدوث ال signal دى- المسماة OnDestroy

وحاول تستخدم ال code tag

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 20 يوليو 2008 في 12:26

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

السلام عليكم

بارك الله فيك اخي الكريم

الحقيقة انا قرت بعض الملاحظات في الموقع الرسمي للمكتبة وبالاعتماد علي ما قلته

ةلكن بقي بعض الامور غامضة ومنها

اني لما اريد استدعاء حدث معين مثلا العنصر

pwindow

في مثالنا لمادا نقوم باستدعاء

callback

هل هي الوسيط مابين الامر المراد تنفيده والحدث الدي سيكون نتيجة له

وهل يوجد احدث اخري غيرها وادا كان ممكن مثال بسيط لو امكن

وانا ساحاول جاهدا البحث عن الاجابة وانا في انتظار ردك يالاخ يوسف ادا امكن

وبارك الله فيك

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#4

اخى بص مثال بسيط جدا

الواحد طالما حس بالجوع بيعمل ايه ؟ بيروح يفتح التلاجة وياكل صح؟

هنا الإحساس بالجوع دا signal وصلت للobject اللى هو الإنسان واتهندلت "اتعالجت" بإستخدام callback انه يفتح التلاجة وياكل .. ممكن واحد يكتب callback تانية مثلا إنه ينزل مطعم وياكل وهكذا وفى حال انك مش استدعيت callback بكل بساطة مش هيحصل حاجة.. ممكن يكون واحد جعان ويتجاهل الشعور بالجوع

هى ال event handler لو متأقلم مع التسمية دى

بالمناسبة فى فرق بين استدعاء الحدث وحدوثه لأن الإستدعاء بيتم من خلال emit -كأنك بتقوم بدور المعدة هنا وبتبلغ الإنسان انه جعان -

اى استفسار تحت امرك

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#5

مثال للتوضيح

int main (int argc, char *argv[])
{
  GtkWidget *button = NULL;
  GtkWidget *win = NULL;
  GtkWidget *vbox = NULL;

  /* Initialize GTK+ */
  gtk_init (&argc, &argv);


  /* Create the main window */
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (win), 8);
  gtk_window_set_title (GTK_WINDOW (win), "Signals");
  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
  gtk_widget_realize (win);
  g_signal_connect (win, "destroy", gtk_main_quit, NULL);

  /* Create a vertical box with buttons */
  vbox = gtk_vbox_new (TRUE, 6);
  gtk_container_add (GTK_CONTAINER (win), vbox);

  /* Create a button with a label */
  button = gtk_button_new_with_label("Click Me!");
  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_btn_clicked), (gpointer) win);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);


  /* Enter the main loop */
  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}

هنا عندنا button بإسم button وعايزين يتم تنفيذ فنكشن معينة(callback) لما يكون clicked

هنعمل فنكشن بسيطة

void on_btn_clicked(GtkWidget* w, gpointer data){
		printf("Clicked!");
}

كل ماهيتم الضغط على ال button بمعنى ادق لما يوصله clicked signal هيتم تنفيذ on_btn_clicked

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#6

السلام عليكم

بارك الله فيك ياخي علي الشرح المميز

وعلي فكرة انت فكرتني في الاكل لاني لي مدة طويلة علي جهاز الكومبيوتر ونسيت الاكل تماما

هههههههههههههههههههههههههههههههههههههههههههههههههههههه

وانت عملت لي سنيال

ولازم نستدعي

(callback)

فورا

وبارك الله فيك

واما كتعليق علي اجابتك يعني

callback

هي الحدث المراد تنفيده مثلا تاخد قيم من المستخدم وتقوم بجمع او طرح علي سبيل المثال ووضعها في مكان اخر وهكدا

ولك مني الشكر الجزيل

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#7

تحت امرك

اقتباس
callback

هي الحدث المراد تنفيده مثلا تاخد قيم من المستخدم وتقوم بجمع او طرح علي سبيل المثال ووضعها في مكان اخر وهكدا

لأ ال callback هى فنكشن هتتنفذ مباشرة عند حدوث اشارة معين *signal*

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 26 يونيو 2009 في 05:41

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…