مشاهدة النسخة كاملة : فيما يخص بطء برنامج اثناء تنفيذه
medreg
14-06-2010, 09:46 PM
السلام عليكم ورحمة الله تعالى وبركاته
ماذا علي ان افعل او ما هي الطريقة التي تجعل برنامجي ينفذ بسرعة
لقد عملت برنامج بالدلفي 7
واثناء تنفيذه يستغرق وقت طويل يصل الى 4 او 5 دقائق ليتم تنفيذه
ما هو سبب هذا البطء
السؤال الثاني :
هل كثرة استعمال المتغيرات في برنامج ما له علاقة ببطء تنفيذه أم كثرة استعمال قواعد البيانات هي السبب في بطء التنفيذ
وجزاكم الله عنا كل خير
karazeh2006
15-06-2010, 02:49 PM
اين الكود؟
كيف تريد ان نعرف ما الذي يجعل البرنامج بطيئا دون ان نرى الكود
Unprogramme
15-06-2010, 06:08 PM
ما هو نوع قاعدة البيانات التي تستعملها ؟
و ما هي المكونات التي تستعملها للاتصال بقواعد البيانات؟
medreg
15-06-2010, 10:17 PM
ما هو نوع قاعدة البيانات التي تستعملها ؟
و ما هي المكونات التي تستعملها للاتصال بقواعد البيانات؟
السلام عليكم ورحمة الله تعالى وبركاته
بالنسبة للأخ karazeh2006
لا استطيع ارفاق الكود لأن المشروع يحتوي على عدة اكواد وليس كود واحد
اما بالنسبة للأخ Unprogramme
كنت في السابق اعمل بقاعدة البيانات Paradox
ونفس المشكل فاضطريت الى تحويلها لقادة Absoulute
ولا زالت المشكلة قائمة
بالنسبة للمكونانت المستعملة فهي المكونات العادية التي تاي مع الدلفي7
منها Dbgrid
dbedit
edit
panel
radiogroup
dbcheckbox
checkbox
dbtexte
dbnavigator
QRShape
QRLabel
QRDBText
Quickreport العادي
PopuMenu
ToolBar
PageControl
Spinedit
DBLookupCombobox
على فكرة المكون QRShape استعنله بكثرة في ورقة الطباعة لصناعة الجداول لبعض النماذج لا يجوذ ان تتنافى مع تلك المقننة
هذا كل ما استعمله من المكونات في برنامجي وشكرًا جزيلاً
B.M.AbdelAziZ
16-06-2010, 08:51 AM
السلام عليكم ورحمة الله
حجم الملف التنفيذي كبير
واستخدمت الكثير من الForms وكلها يتم انشائها اثناء التنفيذ
والاتصال بالقاعدة وفتح كل الجداول يتم اثناء التنفيذ
اليس كذلك ؟
medreg
17-06-2010, 07:50 AM
حجم الملف التنفيذي كبير...
عدد الفورمات التي الستعملها هو 12 فورم منها اربعة لعمليات الحجز وغيره والباقي لأوراق الطباعة
وكل فورم تتعلق بالطباعة بداخلها 10 من مكونات Quickrep
لأن هذخ الأوراق مقننة ول يمكن ان يتم بها تغيير ال بنص قانوني
ولهذا اضريت لرسمها مع العلم ان كل ورقة تحمل عدد لابأس به من مكون QRShape
هذا من جهة
اما عن انشاء كلForms وكل الجداول اثناء تنفيذ البرنامج هذه العبارة دائمًا اسمعها
لكن مع كل اسف لم افهم ما القصد من فتح كل الجداول والفورمات اثناء التنفيذ
انا لدي الفورم الأولى بها menu ومن خلاله استدعى form التي ارغب العمل عليها بواسطة الكود
procedure TMenu_BS.ToolButton3Click(Sender: TObject);
begin
form2.ShowModal;
end;
فقط ولا شيء أخر
اما بالنسبة للجداول انا استعمل هذا الكود داخل dataModule
procedure TDModule_BS.DataModuleCreate(Sender: TObject);
var i:integer;
begin
for i:= 0 to ComponentCount-1 do
if(Components[i] is TABSDataBase) then
(Components[i] as TABSDataBase).Open
else if(Components[i] is TABSTable) then
(Components[i] as TABSTable).Open;
end;
procedure TDModule_BS.DataModuleDestroy(Sender: TObject);
var i:integer;
begin
for i:= 0 to ComponentCount-1 do
if(Components[i] is TABSDataBase) then
(Components[i] as TABSDataBase).Close
else if(Components[i] is TABSTable) then
(Components[i] as TABSTable).Close;
end; إذا هل من طريقة اخرى تنقصني وكيفوجزاكم الله عنا كل خير
B.M.AbdelAziZ
17-06-2010, 11:16 AM
أولا وقبل اي شيئ حاول اظهار شاشة ترحيبية Splash Screen
ثانيا قم بانشاء الForm التي تحتاجها عند البداية والاخرى انشائها عند الحاجة قبل التنفيذ
ثالثا اتصل/افتح قاعدة البيانات و الجداول عند الحاجة فقط
رابعا ان كنت تستخدم صور بصيغة BMP حاول تغييرها الى صيغ اقل حجما مثل JPG او PNG
ملاحظة: كل ما طرحت موجود بالمنتدى بمواضيع مختلفة فابحث...
medreg
17-06-2010, 08:50 PM
شكرًا على الإهتمام
بالنسبة للشاشة الترحيبية فهي اصلا موجودة ببرنامجي بعد تنفيذ البرنامج تظهر هي الأولى وتبقى لمدة معينة من الوقت من دون ان استعمل sleep
وهذ محتوى سورس البرنامج
program Prg_Prg;
uses
Forms,
windows,
USplashScreen in 'USplashScreen.pas' {SplashScreen},
UMenuPrincipal in 'UMenuPrincipal.pas' {MenuPrincipal},
USaisie1 in 'USaisie1.pas' {Saisie1},
UImpDetail1 in 'UImpDetail1.pas' {ImpDetail1},
USaisieDetail in 'USaisieDetail.pas' {SaisieDetail},
UImpDetail2 in 'UImpDetail2.pas' {ImpDetail2},
UImpPageGarde in 'UImpPageGarde.pas' {ImpPageGarde},
UImpAnnexe in 'UImpAnnexe.pas' {ImpAnnexe},
UParam in 'UParam.pas' {Param},
USaisie2 in 'USaisie2.pas' {Saisie2},
URecap in 'URecap.pas' {Recap},
UImpRecap in 'UImpRecap.pas' {ImpRecap},
UImpBP1 in 'UImpBP1.pas' {ImpBP1},
UImpBP2 in 'UImpBP2.pas' {ImpBP2},
UImpBP3 in 'UImpBP3.pas' {ImpBP3},
USaisie3 in 'USaisie3.pas' {Saisie3},
UImpBP4 in 'UImpBP4.pas' {ImpBP4},
UImpBP5 in 'UImpBP5.pas' {ImpBP5},
UImpBP6 in 'UImpBP6.pas' {ImpBP6},
UImpDetail3 in 'UImpDetail3.pas' {ImpDetail3},
UDModule in 'UDModule.pas' {DModule: TDataModule};
{$R *.res}
begin
SplashScreen:=TSplashScreen.Create(Application);
SplashScreen.Show;
Application.Initialize;
Application.CreateForm(TMenuPrincipal, MenuPrincipal);
Application.CreateForm(TSaisie1, Saisie1);
Application.CreateForm(TSplashScreen, SplashScreen);
Application.CreateForm(TImpDetail1, ImpDetail1);
Application.CreateForm(TSaisieDetail, SaisieDetail);
Application.CreateForm(TImpDetail2, ImpDetail2);
Application.CreateForm(TImpPageGarde, ImpPageGarde);
Application.CreateForm(TImpAnnexe, ImpAnnexe);
Application.CreateForm(TParam, Param);
Application.CreateForm(TSaisie2, Saisie2);
Application.CreateForm(TRecap, Recap);
Application.CreateForm(TImpRecap, ImpRecapP);
Application.CreateForm(TImpBP1, ImpBP1);
Application.CreateForm(TImpBP2, ImpBP2);
Application.CreateForm(TImpBP3, ImpBP3);
Application.CreateForm(TSaisie3, Saisie3);
Application.CreateForm(TImpBP4, ImpBP4);
Application.CreateForm(TImpBP5, ImpBP5);
Application.CreateForm(TImpBP6, ImpBP6);
Application.CreateForm(TImpDetail3, ImpDetail3);
Application.CreateForm(TDModule, DModule);
SplashScreen.Hide;
SplashScreen.Free;
Application.Run;
end.
هل يوجد هنا ما يسبب في ثقل تنفيذ البرنامج
علما بأن الملف التنفيذي للبرنام حجمه 53.2 م.ب
Unprogramme
17-06-2010, 09:08 PM
لكن مع كل اسف لم افهم ما القصد من فتح كل الجداول والفورمات اثناء التنفيذ
انا لدي الفورم الأولى بها menu ومن خلاله استدعى form التي ارغب العمل عليها بواسطة الكود
إذهب إلى projet ثم إلى Option
http://img121.imageshack.us/img121/3265/imagefsp.jpg
الله ييسر أمرك.
medreg
17-06-2010, 09:39 PM
لم اتر سو ى
SplashScreen
Form1
DataModule
لكن المشكلة عند تنفيذ البرنامج للعمل عليه
كلما ضغطت على Menu للدخول الى اي Form
يعطيني خطأ ولا يدخل اليها
رسالة الخطأ
Violation d'accés à l'adresse 0046E536 dans le Module 'Prg_Prg.exe'.Lecture de l'adresse 000002F4
للتوضيح الباقي من Forms
وضعنه في الجهة الأخرى المسماة
Fiches Disponible
Unprogramme
17-06-2010, 10:06 PM
الحمد لله ، بقي عليك أن ترينا كيفية إظهار النوافذ ، يعني عندما مثلا تضغط في القائمة Menu ما هو الكود الذي تعتمد عليه لإظهار اي Form ؟
هذا من جهة ، و من جهة أخرى أظن أنه عليك أيضا تغيير في الكود Splash screen
بدلا من الكود :
program Prg_Prg;
uses
Forms,
windows,
USplashScreen in 'USplashScreen.pas' {SplashScreen},
UMenuPrincipal in 'UMenuPrincipal.pas' {MenuPrincipal},
USaisie1 in 'USaisie1.pas' {Saisie1},
UImpDetail1 in 'UImpDetail1.pas' {ImpDetail1},
USaisieDetail in 'USaisieDetail.pas' {SaisieDetail},
UImpDetail2 in 'UImpDetail2.pas' {ImpDetail2},
UImpPageGarde in 'UImpPageGarde.pas' {ImpPageGarde},
UImpAnnexe in 'UImpAnnexe.pas' {ImpAnnexe},
UParam in 'UParam.pas' {Param},
USaisie2 in 'USaisie2.pas' {Saisie2},
URecap in 'URecap.pas' {Recap},
UImpRecap in 'UImpRecap.pas' {ImpRecap},
UImpBP1 in 'UImpBP1.pas' {ImpBP1},
UImpBP2 in 'UImpBP2.pas' {ImpBP2},
UImpBP3 in 'UImpBP3.pas' {ImpBP3},
USaisie3 in 'USaisie3.pas' {Saisie3},
UImpBP4 in 'UImpBP4.pas' {ImpBP4},
UImpBP5 in 'UImpBP5.pas' {ImpBP5},
UImpBP6 in 'UImpBP6.pas' {ImpBP6},
UImpDetail3 in 'UImpDetail3.pas' {ImpDetail3},
UDModule in 'UDModule.pas' {DModule: TDataModule};
{$R *.res}
begin
SplashScreen:=TSplashScreen.Create(Application);
SplashScreen.Show;
Application.Initialize;
Application.CreateForm(TMenuPrincipal, MenuPrincipal);
Application.CreateForm(TSaisie1, Saisie1);
Application.CreateForm(TSplashScreen, SplashScreen);
Application.CreateForm(TImpDetail1, ImpDetail1);
Application.CreateForm(TSaisieDetail, SaisieDetail);
Application.CreateForm(TImpDetail2, ImpDetail2);
Application.CreateForm(TImpPageGarde, ImpPageGarde);
Application.CreateForm(TImpAnnexe, ImpAnnexe);
Application.CreateForm(TParam, Param);
Application.CreateForm(TSaisie2, Saisie2);
Application.CreateForm(TRecap, Recap);
Application.CreateForm(TImpRecap, ImpRecapP);
Application.CreateForm(TImpBP1, ImpBP1);
Application.CreateForm(TImpBP2, ImpBP2);
Application.CreateForm(TImpBP3, ImpBP3);
Application.CreateForm(TSaisie3, Saisie3);
Application.CreateForm(TImpBP4, ImpBP4);
Application.CreateForm(TImpBP5, ImpBP5);
Application.CreateForm(TImpBP6, ImpBP6);
Application.CreateForm(TImpDetail3, ImpDetail3);
Application.CreateForm(TDModule, DModule);
SplashScreen.Hide;
SplashScreen.Free;
Application.Run;
end.
ضع هذا الكود
program Prg_Prg;
uses
Forms,
windows,
USplashScreen in 'USplashScreen.pas' {SplashScreen},
UMenuPrincipal in 'UMenuPrincipal.pas' {MenuPrincipal},
USaisie1 in 'USaisie1.pas' {Saisie1},
UImpDetail1 in 'UImpDetail1.pas' {ImpDetail1},
USaisieDetail in 'USaisieDetail.pas' {SaisieDetail},
UImpDetail2 in 'UImpDetail2.pas' {ImpDetail2},
UImpPageGarde in 'UImpPageGarde.pas' {ImpPageGarde},
UImpAnnexe in 'UImpAnnexe.pas' {ImpAnnexe},
UParam in 'UParam.pas' {Param},
USaisie2 in 'USaisie2.pas' {Saisie2},
URecap in 'URecap.pas' {Recap},
UImpRecap in 'UImpRecap.pas' {ImpRecap},
UImpBP1 in 'UImpBP1.pas' {ImpBP1},
UImpBP2 in 'UImpBP2.pas' {ImpBP2},
UImpBP3 in 'UImpBP3.pas' {ImpBP3},
USaisie3 in 'USaisie3.pas' {Saisie3},
UImpBP4 in 'UImpBP4.pas' {ImpBP4},
UImpBP5 in 'UImpBP5.pas' {ImpBP5},
UImpBP6 in 'UImpBP6.pas' {ImpBP6},
UImpDetail3 in 'UImpDetail3.pas' {ImpDetail3},
UDModule in 'UDModule.pas' {DModule: TDataModule};
{$R *.res}
begin
SplashScreen:=TSplashScreen.Create(Application);
SplashScreen.Show;
Application.Initialize;
Application.CreateForm(TDModule, DModule);
SplashScreen.Hide;
SplashScreen.Free;
Application.Run;
end.
أظن أن الفرق واضح ،
بالتوفيق أخي الكريم.
medreg
17-06-2010, 10:20 PM
الكود الذي استعمله لإستدعاء الفورم من خلال الضغط على menu
هو :
Param.showModal;
لقد غيرت الكود كما وضحت لي
وبقي كيف يتم استدعاء النافذة التي احتاج اليها
لكن عند تنفيذ البرنامج ينفذ بسرعة ويختفي
لكن لاحظت بانه لم يبقى في Option سوى DataModule
Unprogramme
18-06-2010, 08:57 AM
السلام عليكم ورحمة الله وبركاته ،
أخي الحبيب في الجهة اليسرى (fiche pricipale) اترك Datamodule و form الأساسي ، أما في الجهة الأخرى Fiches disponibles ففيه باقي النوافذ.
بقي الآن طريقة الاستدعاء ، أنت لم تعطني الكود الكلي ، عموما أنا استعمل الكود التالي :
var temp : TFSaisie ;
begin
temp := TFSaisie.create(self);
temp.ShowModal;
temp.free;
end;
حيث أن TFSaisie هو اسم التافذة المراد إظهارها ، طبعا لا تنس إضافتها في ال Uses.
و الله الموفق أخي الحبيب.
medreg
18-06-2010, 02:34 PM
شكرًا جزيلاً
حلت المشكلة بحمد الله وبفضل مجهوداتكم ولكل من ساهم في الموضوع
جزاكم الله عنا كل خير
Unprogramme
18-06-2010, 04:23 PM
الحمد لله الذي بنعمته تتم الصالحات
karazeh2006
18-06-2010, 08:32 PM
في البداية يجب ان تقوم بإضافة اسماء الفورمز التي تريد استخدامها في قسم Implementation :
var
frmMain: TfrmMain;
implementation
uses
form2,form3;'هنا تضع أسماء الفورم المستخدمة في الفورم الحالي
{$R *.dfm}
ثم بدلاً من استخدامك الكود في السابق:
procedure TMenu_BS.ToolButton3Click(Sender: TObject);
begin
form2.ShowModal;
end;
استخدم كود كالتالي:
procedure TMenu_BS.ToolButton3Click(Sender: TObject);
begin
with tform2.create(nil) do begin
showmodal;
free;
end;
end;
medreg
19-06-2010, 06:45 PM
السلام عليكم ورحمة الله تعالى وبركاته
اخواني بعدما استعملت هاته الطرق وكانت النتيجة شغالة 100/100
ظهرت لي مشكلة بسيطة ولم انتبه لها الا الان
وهي شاشة الترحيب لم تعد تظر
وعندما استعمل sleep(3000)
تخرج لكن لا توجد بها الصورة بل تخرج فقط النافذة بدون صورة
لماذ لا تخرج الصورة
وعندما اترك كل الفورم مع بعضها رغم تقل التنفيذ الصورة التي بالفورم المخصصة لشاشة الترحيب تخرج
اذا اين المشكل وما عساي ان افعل حتى تظهر الصورة بالشاشة الترحيبية
وجزاكم الله عنا كل خير
Unprogramme
19-06-2010, 07:21 PM
و عليكم السلام ورحمة الله وبركاته ،
أخي الحبيب جرب هذا الكود :
Application.Initialize;
//Application.CreateForm(TFMain, FMain);
FSplache := TFSplache.Create(Application); // On crée la fenetre de Splash
FSplache.Show; // On affichage de cette fenetre
FSplache.Update; // On force l'affichage de la fenetre (sinon elle n'aparait que partiellement)
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TFMain, FMain);
FSplache.Close; // On ferme la fenetre de Splash
FSplache.Release; // On détruit la fenêtre et on libère la mémoire
Application.Run;
طبعا يجب عليك تغيير أسماء الفورم على حسب ما عندك.
بالتوفيق إن شاء الله .
medreg
19-06-2010, 09:26 PM
شكرًا اخي هذا هو
vBulletin® , Copyright ©2008-2012