دلفي تعليم
مرحبا بكم ايها الزئر أو الزائرة الكريمين

كيفية ربط Excel مع Delphi

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

كيفية ربط Excel مع Delphi

مُساهمة  mah11 في 21/6/2013, 6:39 pm

بسم الله الرحمن الرحيم
والصلاة والسلام على أشرف المرسلين
--------------
هذه محاولة متوضعة



كيفية ربط -Excel- مع -Delphi -

الخطوة الاولى

افتح اكسال
اكتب في الخانات من -A3- الى -A12- اسماء الطلاب
اكتب في الخانات من -B3- الى -B12- لقب الطلاب
اكتب في الخانات من -C3- الى -C12- تاريخ ميلاد
اكتب في الخانات من -D3- الى -D12- الاقسام الطلاب
اكتب في الخانات من -E3- الى -E12- رقم التسجيل
احفظ الملف باسم -bOOK1-

الخكوة الثانية

افتح - Module Base de données - وهذا بنسبة النسخ الفرنسية
والتابعة لدلفي
افتح -Fichier- ثم -Nouveau- ثم -Table- اختر -Paradox 7-
اكتب كما في المثال :
---------------------------------
- Nom de champ- Type - Taille - Index -
---------------------------------
- Num- - A - 10 - 0 -
- Nom - A - 15 - 0 -
- Prenom - A - 20 - 0 -
- Date_Na - A - 10 - 0 -
- Class - A - 15 - 0 -
---------------------------------
ملاحظة لا تكتب الاصفار في -Index-
احفظ الملف باسم -Para01.db-

الخطوة الثلثة
افتح دلفي واحفظ المشروع بأي اسم تختاره مع ملف قاعدة البيانات -Para01.db- أي في نفس المجلد

unit Uk1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Db,
DBTables, Buttons;

type
TForm1 = class(TForm)
// ضع على الموذج هذه العناصر
Button1: TButton; // عدم تمكين استعمالها أي -Button1.Enabled := false;-
Button2: TButton;
Button3: TButton;
// ضع -Table1- واحد على النموذج -Form1-
Table1: TTable;
// ربط -Table1- بقاعدة البيانات -Para01.db- وذلك من خلال الخصية -TableName- في مفتش الكائنات
// تفعيل الخاصية -Active-
// ضع -- واحد على النموذج -Form1-
// ضع -DataSource1- واحد على النموذج -Form1-
DataSource1: TDataSource;
// ربط -DataSource1- بــ -Table1- وذلك من خلال الخاصية -DataSet-
// ضع -DBNavigator1- واحد على النموذج -Form1-
DBNavigator1: TDBNavigator;
// ربط -DBNavigator1- بــ -DataSource1- وذلك من خلال الخاصية -DataSource -
// ضع -DBGrid1- واحد على النموذج -Form1-
DBGrid1: TDBGrid;
// ربط -DBGrid1- بــ -DataSource1- وذلك من خلال الخاصية -DataSource -
// انقر مرتين على -Table1- داخل المربع انقر باليمنى واختر -Ajouter tous les champs- اغلق المربع
// أي ظهور كافة الحقول وهي
Table1Num: TStringField;
Table1Nom: TStringField;
Table1Prenom: TStringField;
Table1Date_Na: TStringField;
Table1Classe: TStringField;
// مربع تحرير متعددة السطور -Memo1- ضع 5 منه
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Memo5: TMemo;
// مربع تحرير ذو السطر واحد -Edit1- ضع 1 منه
Edit1: TEdit;
// ضع -BitBtn1- واحدة
BitBtn1: TBitBtn;
// ضع -OpenDialog1- واحد
OpenDialog1: TOpenDialog;

procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;
Excel10: OleVariant;

implementation
//
// هذه الوحدة خاصة باستدعاء تطبيقات خارجية مثل إكسال ووورد وغيرهم
uses ComObj;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
// تصريح داخل الاجراء --
// تصريح بمتغيير صحيح وهو -i-
var i: integer;
begin
// بداية
try // يحاول أو يجرب فتح
// هذه الدالة لاستدعاء إكسال أو فتح اكسال
Excel10 := GetActiveOleObject('Excel.Application');
except // اذا لم تنجح المحاولة وهي المحاولة الاولى
try // حاول أو يجرب فتح مرة ثانية
Excel10 := CreateOleObject('Excel.Application');
except// اذا لم تنجح المحاولة وهي المحاولة الثانية
// ظهور رسالة
ShowMessage('لايمكن بدأ تشغيل إكسال أو لم يثبت إكسال بعد ?');
// هذه الدالة للخروج من الاجراء نهائيا
Exit;
// نهاية المحاولة الاولى
end;
// نهاية المحاولة الثانية
end;
// هذه الدالة لـ
// فتح المستند المحدد في مربع التحرير
Excel10.Workbooks.Open(Edit1.Text);
// بداية حلقة دوارة من 1 الى 10
for i := 1 to 10 do
// بداية الحلقة
begin
// تعتبر مربعات تحرير المتعددة هذه كــوسائط
// ضع محتوى الحجرات من 1 و 1 الى 1 و 10
Memo1.Lines.add(Excel10.Cells[i, 1].Value);
// ضع محتوى الحجرات من 2 و 1 الى 2 و 10
Memo2.Lines.add(Excel10.Cells[i, 2].Value);
// ضع محتوى الحجرات من 3 و 1 الى 3 و 10
Memo3.Lines.add(Excel10.Cells[i, 3].Value);
// ضع محتوى الحجرات من 4 و 1 الى 4 و 10
Memo4.Lines.add(Excel10.Cells[i, 4].Value);
// ضع محتوى الحجرات من 5 و 1 الى 5 و 10
Memo5.Lines.add(Excel10.Cells[i, 5].Value);
// مثلا الحجرة وهي -cells[1, 1].Value - قيمة الخالية أو الحجرة الممثلة في اكسال بــ -A1-
// نهاية الحلقة
end;
// فتح -Table1-
Table1.Open;
// انتقال الى التسجيلة الاولى في -Table1-
Table1.First;
// بداية حلقة دوارة من 1 الى مجموع سطور مربع التحرير
for i := 0 to Memo1.Lines.Count - 1 do
// عدم وجود فراق في سطور مربع التحريروهو شرط
if Memo1.Lines.Strings[i] <> '' then
begin
// بداية الاظافة الى قاعدة البيانات -Para01.db-
Table1.Append;
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Num-
Table1Num.Value := Memo5.Lines.Strings[i];
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Nom-
Table1Nom.Value := Memo1.Lines.Strings[i];
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Prenom-
Table1Prenom.Value := Memo2.Lines.Strings[i];
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Date-
Table1Date_Na.Value := Memo3.Lines.Strings[i];
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Classe-
Table1Classe.Value := Memo4.Lines.Strings[i];
// تمام الاظافة من اجل تهيئة الى اظافة جديدة
Table1.Post;
// انتقال الى المرحلة التالية
Table1.Next;
// نهاية الحلقة
end;
// نهاية الاجراء
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
// اغلاق إكسال
if not VarIsEmpty(Excel10) then
begin
Excel10.DisplayAlerts := False;
Excel10.Quit;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
Table1.Delete;
Table1.Next;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
// مربع حوار فتح
if OpenDialog1.Execute then
// وضع اسم الملف المحدد من مربع الحوار فتح في مربع تحرير
Edit1.Text := OpenDialog1.FileName;
// تفعيل -Button1- بالقيمة -True-
Button1.Enabled := true;
end;

end.

الرمز:

unit Uk1;// delph.forumalgerie.net

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,// delph.forumalgerie.net
Forms, Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Db,// delph.forumalgerie.net
DBTables, Buttons;// delph.forumalgerie.net

type
TForm1 = class(TForm)// delph.forumalgerie.net
// ضع على الموذج هذه العناصر
Button1: TButton; // عدم تمكين استعمالها أي -Button1.Enabled := false;// delph.forumalgerie.net
Button2: TButton;// delph.forumalgerie.net
Button3: TButton;// delph.forumalgerie.net
// ضع -Table1- واحد على النموذج -Form1-
Table1: TTable;// delph.forumalgerie.net
// ربط -Table1- بقاعدة البيانات -Para01.db- وذلك من خلال الخصية -TableName- في مفتش الكائنات
// تفعيل الخاصية -Active-
// ضع -- واحد على النموذج -Form1-
// ضع -DataSource1- واحد على النموذج -Form1-
DataSource1: TDataSource;
// ربط -DataSource1- بــ -Table1- وذلك من خلال الخاصية -DataSet-
// ضع -DBNavigator1- واحد على النموذج -Form1-
DBNavigator1: TDBNavigator;// delph.forumalgerie.net
// ربط -DBNavigator1- بــ -DataSource1- وذلك من خلال الخاصية -DataSource -
// ضع -DBGrid1- واحد على النموذج -Form1-
DBGrid1: TDBGrid;// delph.forumalgerie.net
// ربط -DBGrid1- بــ -DataSource1- وذلك من خلال الخاصية -DataSource -
// انقر مرتين على -Table1- داخل المربع انقر باليمنى واختر -Ajouter tous les champs- اغلق المربع
// أي ظهور كافة الحقول وهي
Table1Num: TStringField;// delph.forumalgerie.net
Table1Nom: TStringField;// delph.forumalgerie.net
Table1Prenom: TStringField;// delph.forumalgerie.net
Table1Date_Na: TStringField;// delph.forumalgerie.net
Table1Classe: TStringField;// delph.forumalgerie.net
// مربع تحرير متعددة السطور -Memo1- ضع 5 منه
Memo1: TMemo;// delph.forumalgerie.net
Memo2: TMemo;// delph.forumalgerie.net
Memo3: TMemo;// delph.forumalgerie.net
Memo4: TMemo;// delph.forumalgerie.net
Memo5: TMemo;// delph.forumalgerie.net
// مربع تحرير ذو السطر واحد -Edit1- ضع 1 منه
Edit1: TEdit;// delph.forumalgerie.net
// ضع -BitBtn1- واحدة
BitBtn1: TBitBtn;// delph.forumalgerie.net
// ضع -OpenDialog1- واحد
OpenDialog1: TOpenDialog;// delph.forumalgerie.net

procedure Button1Click(Sender: TObject);// delph.forumalgerie.net
procedure FormDestroy(Sender: TObject);// delph.forumalgerie.net
procedure Button2Click(Sender: TObject);// delph.forumalgerie.net
procedure Button3Click(Sender: TObject);v
private
public
end;// delph.forumalgerie.net

var
Form1: TForm1;// delph.forumalgerie.net
Excel10: OleVariant;// delph.forumalgerie.net

implementation
//
// هذه الوحدة خاصة باستدعاء تطبيقات خارجية مثل إكسال ووورد وغيرهم
uses ComObj;

{$R *.DFM}// delph.forumalgerie.net

procedure TForm1.Button1Click(Sender: TObject);// delph.forumalgerie.net
// تصريح داخل الاجراء --
// تصريح بمتغيير صحيح وهو -i-
var i: integer;// delph.forumalgerie.net
begin
// بداية
try // يحاول أو يجرب فتح
// هذه الدالة لاستدعاء إكسال أو فتح اكسال
Excel10 := GetActiveOleObject('Excel.Application');// delph.forumalgerie.net
except // اذا لم تنجح المحاولة وهي المحاولة الاولى
try // حاول أو يجرب فتح مرة ثانية
Excel10 := CreateOleObject('Excel.Application');// delph.forumalgerie.net
except// اذا لم تنجح المحاولة وهي المحاولة الثانية
// ظهور رسالة
ShowMessage('
لايمكن بدأ تشغيل إكسال أو لم يثبت إكسال بعد ?
'
)
;
// هذه الدالة للخروج من الاجراء نهائيا
Exit;// delph.forumalgerie.net
// نهاية المحاولة الاولى
end;// delph.forumalgerie.net
// نهاية المحاولة الثانية
end;// delph.forumalgerie.net
// هذه الدالة لـ
// فتح المستند المحدد في مربع التحرير
Excel10.Workbooks.Open(Edit1.Text);
// بداية حلقة دوارة من 1 الى 10
for i := 1 to 10 do
// بداية الحلقة
begin
// تعتبر مربعات تحرير المتعددة هذه كــوسائط
// ضع محتوى الحجرات من 1 و 1 الى 1 و 10
Memo1.Lines.add(Excel10.Cells[i, 1].Value);// delph.forumalgerie.net
// ضع محتوى الحجرات من 2 و 1 الى 2 و 10
Memo2.Lines.add(Excel10.Cells[i, 2].Value);// delph.forumalgerie.net
// ضع محتوى الحجرات من 3 و 1 الى 3 و 10
Memo3.Lines.add(Excel10.Cells[i, 3].Value);// delph.forumalgerie.net
// ضع محتوى الحجرات من 4 و 1 الى 4 و 10
Memo4.Lines.add(Excel10.Cells[i, 4].Value);// delph.forumalgerie.net
// ضع محتوى الحجرات من 5 و 1 الى 5 و 10
Memo5.Lines.add(Excel10.Cells[i, 5].Value);// delph.forumalgerie.net
// مثلا الحجرة وهي -cells[1, 1].Value - قيمة الخالية أو الحجرة الممثلة في اكسال بــ -A1-
// نهاية الحلقة
end;// delph.forumalgerie.net
// فتح -Table1-
Table1.Open;// delph.forumalgerie.net
// انتقال الى التسجيلة الاولى في -Table1-
Table1.First;// delph.forumalgerie.net
// بداية حلقة دوارة من 1 الى مجموع سطور مربع التحرير
for i := 0 to Memo1.Lines.Count - 1 do
// عدم وجود فراق في سطور مربع التحريروهو شرط
if Memo1.Lines.Strings[i] <> '' then
begin
// بداية الاظافة الى قاعدة البيانات -Para01.db-
Table1.Append;// delph.forumalgerie.net
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Num-
Table1Num.Value := Memo5.Lines.Strings[i];// delph.forumalgerie.net
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Nom-
Table1Nom.Value := Memo1.Lines.Strings[i];// delph.forumalgerie.net
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Prenom-
Table1Prenom.Value := Memo2.Lines.Strings[i];// delph.forumalgerie.net
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Date-
Table1Date_Na.Value := Memo3.Lines.Strings[i];// delph.forumalgerie.net
// وضع محتوى سطور من 1 الى مجموع السطور في الحقل -Classe-
Table1Classe.Value := Memo4.Lines.Strings[i];// delph.forumalgerie.net
// تمام الاظافة من اجل تهيئة الى اظافة جديدة
Table1.Post;// delph.forumalgerie.net
// انتقال الى المرحلة التالية
Table1.Next;// delph.forumalgerie.net
// نهاية الحلقة
end;// delph.forumalgerie.net
// نهاية الاجراء
end;// delph.forumalgerie.net

procedure TForm1.FormDestroy(Sender: TObject);// delph.forumalgerie.net
begin
// اغلاق إكسال
if not VarIsEmpty(Excel10) then
begin
Excel10.DisplayAlerts := False;// delph.forumalgerie.net
Excel10.Quit;// delph.forumalgerie.net
end;// delph.forumalgerie.net

end;// delph.forumalgerie.net

procedure TForm1.Button2Click(Sender: TObject);// delph.forumalgerie.net
begin
Table1.Open;// delph.forumalgerie.net
Table1.First;// delph.forumalgerie.net
while not Table1.Eof do
begin
Table1.Delete;// delph.forumalgerie.net
Table1.Next;// delph.forumalgerie.net
end;// delph.forumalgerie.net
end;// delph.forumalgerie.net

procedure TForm1.Button3Click(Sender: TObject);// delph.forumalgerie.net
begin
// مربع حوار فتح
if OpenDialog1.Execute then
// وضع اسم الملف المحدد من مربع الحوار فتح في مربع تحرير
Edit1.Text := OpenDialog1.FileName;// delph.forumalgerie.net
// تفعيل -Button1- بالقيمة -True-
Button1.Enabled := true;// delph.forumalgerie.net
end;// delph.forumalgerie.net

end.// delph.forumalgerie.net


عدل سابقا من قبل mah11 في 23/5/2015, 12:51 pm عدل 1 مرات

mah11
Admin

عدد المساهمات : 365
تاريخ التسجيل : 21/06/2013

http://delph.forumalgerie.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  زائر في 4/1/2014, 7:43 pm


موضـــــوع رائع شكرا لك

زائر
زائر


الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  mah11 في 5/1/2014, 8:00 pm

مشكور على الرد

mah11
Admin

عدد المساهمات : 365
تاريخ التسجيل : 21/06/2013

http://delph.forumalgerie.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  sad13 في 30/1/2014, 7:33 pm

جزاك الله كل خير

sad13
مبرمج

عدد المساهمات : 53
تاريخ التسجيل : 04/01/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  rida10 في 3/2/2014, 7:15 pm

بارك الله فيك

rida10
مبتدئ في البرمجة

عدد المساهمات : 21
تاريخ التسجيل : 01/02/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  rida10 في 3/2/2014, 7:16 pm

بارك الله فيك

rida10
مبتدئ في البرمجة

عدد المساهمات : 21
تاريخ التسجيل : 01/02/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  rida10 في 3/2/2014, 7:16 pm

بارك الله فيك

rida10
مبتدئ في البرمجة

عدد المساهمات : 21
تاريخ التسجيل : 01/02/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  kiko123 في 28/4/2014, 10:49 pm

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

kiko123

عدد المساهمات : 1
تاريخ التسجيل : 27/04/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  mah11 في 29/4/2014, 8:46 pm

kiko123 كتب:شكرا
من فضلك اريد هذا المثال كبرنامج ان استطعت
مشكور اخي العزيز

بسم الله

سأضعه غـــدا ان شاءالله
أي الكود فقط وتصميم يبق عليك وشكرا

mah11
Admin

عدد المساهمات : 365
تاريخ التسجيل : 21/06/2013

http://delph.forumalgerie.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  mah11 في 30/4/2014, 8:14 pm


والصلاة والسلام على أشرف المرسلين

كيفية ربط -Excel- مع -Delphi -


unit Uk1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Db,
DBTables, Buttons;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Table1: TTable;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
Table1Num: TStringField;
Table1Nom: TStringField;
Table1Prenom: TStringField;
Table1Date_Na: TStringField;
Table1Classe: TStringField;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Memo5: TMemo;
Edit1: TEdit;
BitBtn1: TBitBtn;
OpenDialog1: TOpenDialog;

procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;
Excel10: OleVariant;

implementation

uses ComObj;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
try
Excel10 := GetActiveOleObject('Excel.Application');
excep
try
Excel10 := CreateOleObject('Excel.Application');
except
ShowMessage('لايمكن بدأ تشغيل إكسال أو لم يثبت إكسال بعد ?');
Exit;
end;
end;
Excel10.Workbooks.Open(Edit1.Text);
for i := 1 to 10 do
begin
Memo1.Lines.add(Excel10.Cells[i, 1].Value);
Memo2.Lines.add(Excel10.Cells[i, 2].Value);
Memo3.Lines.add(Excel10.Cells[i, 3].Value);
Memo4.Lines.add(Excel10.Cells[i, 4].Value);
Memo5.Lines.add(Excel10.Cells[i, 5].Value);
end;
Table1.Open;
Table1.First;
for i := 0 to Memo1.Lines.Count - 1 do
if Memo1.Lines.Strings[i] <> '' then
begin
Table1.Append;
Table1Num.Value := Memo5.Lines.Strings[i];
Table1Nom.Value := Memo1.Lines.Strings[i];
Table1Prenom.Value := Memo2.Lines.Strings[i];
Table1Date_Na.Value := Memo3.Lines.Strings[i];
Table1Classe.Value := Memo4.Lines.Strings[i];
Table1.Post;
Table1.Next;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(Excel10) then
begin
Excel10.DisplayAlerts := False;
Excel10.Quit;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
Table1.Delete;
Table1.Next;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;
Button1.Enabled := true;
end;

end.

mah11
Admin

عدد المساهمات : 365
تاريخ التسجيل : 21/06/2013

http://delph.forumalgerie.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: كيفية ربط Excel مع Delphi

مُساهمة  sdk11 في 13/6/2015, 9:18 am

بارك الله فيك

sdk11
مبرمج مجتهد

عدد المساهمات : 109
تاريخ التسجيل : 19/09/2014

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى