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

برامج الدلفي كبيرة الحجم !!

مغلق
بدأه Lheef في 26 أبريل 2002 · 10 رد · 1,413 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركانه

عملت برنامج باستخدام دلفي 6 ( برنامج صغير يحتوي على زرين و صندوقي نص) لكني تفاجأت بالحجم الهائل للبرنامج الناتج

يعني أكثر من 300 kb

هل هناك طريقة تجعل البرنامج أقل من هذا الرقم ( غير الupx وأشباهه)

#2

السلام عليكم

احدى الطرق لجعل البرنامج صغير الحجم هي طريقة برمجته .

مثلا لا تستخدم الـ VCL و استعمل console application مع حذف {$APPTYPE CONSOLE} ,ثم استعمل دوال الــ api لتكوين الـ form,button,...

بالامكان استعمال الـ resource file ايضا . مثلا قم بعمل ملف الـ resource في البرامج الخاصة بذلك( VC على سبيل المثال ), ثم استخدم console application ...

ان كنت تريد شرح على الطريقتين السابقتين ممكن اكتب لك عنها .

في امان الله

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#3

الى الاخ العزيز tmaaa

السلام عليكم ورحمة الله

يا ليت تكتب عن الطريقتين السابقتين فهى مهمة للجميع

اخوك العطار

#4

السلام عليكم

ولا يهمك اخي . غدا اكتب عن الطريقتين .

اليوم مصدع من الـ api hook . شوي مع الدلفي و شوي مع الـ vc .

:'( :'( :'( [ حاتجنـــــــــــــــن :D :D ]

في امان الله

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#5

ياليت يا أخ tmaaa تعطينا من الخبرة اللي عندك

سؤال : لو فرضنا أني قبلت بهذا الحجم للبرنامج , هل سيطلب ملفات مساعدة لتشغيله على أجهزة أخرى ؟

.

#6

السلام عليكم

لا خبرة ولا شي

:o :o :o

لن يطلب ملفات مساعدة كما هو الحال بالنسبة للـ vb , ان لم تستخدم اشياء تطلب ملفات مساعدة (مثلا لو استخدمت ملف dll لا بد من ارفاقه ... )

موضوع كتابة البرنامج بدون استخدام vcl . ان شاء الله بعد شي كم ساعة اكتبه .

في امان الله

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#7

السلام عليكم

هذا جزء من الرد على الموضوع .

عمل برنامج دون استخدام VCL :

* انشاء console application .ويتم ذلك كالاتي :

FileNewOthers ثم يتم اختيار console application .

وهذا هو الكود الذي سيظهر

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.

العبارة {$APPTYPE CONSOLE} تدل على ان الـ project من النوع console project و سيعمل البرنامج على الشاشة السوداء .

عليك بحذف هذه العبارة لاننا لانريد console application .

هنا ساكتب المثال اولا ثم ساقوم بشرح بعض اجزاءه .

program Project1;
uses
  Windows,messages;
const
AppName ='Windows';
{$R *.RES}
function WindowProc(Window:Hwnd;Amessage,wParam,
        lParam:LongInt):LongInt;stdcall;export;
begin
WindowProc:=0;
case AMessage of
        WM_DESTROY:
        begin
                PostQuitmessage(0);
                Exit;
        end;
     end;
WindowProc:=DefWindowProc(Window,AMessage,wParam,lParam);
end;
function WinRegister:Boolean;
var
WindowClass:TWndClass;
begin
WindowClass.style:= cs_hredraw or cs_vRedraw ;;
WindowClass.lpfnWndProc := @WindowProc;
WindowClass.cbClsExtra := 0;
WindowClass.cbWndExtra := 0;
WindowClass.hInstance := Hinstance;
WindowClass.hIcon := LoadIcon(0,idi_Application);
WindowClass.hCursor := LoadCursor(0,idc_Arrow);
WindowClass.hbrBackground:= COLOR_WINDOW;
WindowClass.lpszMenuName := nil;
WindowClass.lpszClassName := AppName;
Result:=RegisterClass(WindowClass)<>0;
end;
function WinCreate:HWnd;
var
hWindow:Hwnd;
begin
hWindow:=CreateWindowEx(
                        WS_EX_RTLREADING,
                        AppName,'Samples Window',
                        ws_OverlappedWindow,
                        200,100,400,300,0,0,
                        Hinstance,nil
                       );
Result:=hWindow;
end;
var
AMessage:TMsg;
hWindow:HWnd;
//************ main program **************
begin
if not WinRegister then
  begin
    MessageBox(0,'Window Register Failed',nil,mb_ok);
    Exit;
  end;
hWindow:=WinCreate;
if hWindow=0 then
  begin
    MessageBox(0,'Create Window Failed',nil,mb_ok);
    Exit;
  end;
ShowWindow(hWindow, SW_SHOW );
UpdateWindow(hWindow);
While GetMessage(AMessage,0,0,0)do
  begin
    TranslateMessage(AMessage);
    DispatchMessage(AMessage);
  end;
Halt(AMessage.wParam);
end.

حجم البرنامج التنفيذي فقط 16KB ,بينما حجم البرنامج باستخدام VCL تقريبآ 352KB .

شرح بعض اجزاء البرنامج :

*WinRegister و يتم فيها عمل تسجيل للـ window class لبرنامجنا . وفيها يتم اعطاء القيم الاوليه لــ TWndClass .

يمكن مراجعة Windows API Help او MSDN لمزيد من المعلومات عن WNDCLASS .

*بعد ذلك WinCreate ويتم فيها انشاء الـ window الخاصة بالبرنامج . وهنا استخدمنا الدالة CreateWindowEx .

*بعد ذلك يتم اظهار الـ window بواسطة ShowWindow .

*ثم ياتي دور ما يعرف بالـ Message Loop و هذا كما هو معروف يعمل على استقبال الـ messages و وترجمتها ثم ارسالها الى window proc .

المعذرة الشرح قليل حيث اني اعتبرت ان معظم دوال الـ API معروفة لدى الجميع كما انه يمكن الرجوع الى Windows API Help او MSDN لمعرفة معلومات عنها ,

واي استفسارات عن الدوال او المثال الاخوة كلهم في الخدمة ان شاء الله .

ان شاء الله اكتب في المرة القادمة عن اضافة buttons,edit,..في الطريقة الاولى ,و عن كيفية استخدام الطريقة الاخرى (استعمال الـ resource).

في امان الله

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#8

بارك الله فيك وننتظر طريقة التعامل مع resorce

تصحيح : الحجم 9.5 وليس 16

#9

السلام عليكم

مشكور اخي على التصحيح ( يدل على انك قرأت الموضوع ) .

انا كنت كتبت الحجم 9.5k وبعدها عدلته الى 16k .

لو تلاحظ في نهاية ردي (تم تحريره من قبل tmaaa في تاريخ 27-04-2002 عند الساعة 01:59 PM ) حيث قمت بالتعديل المذكور . لانني عملت مثالين احدهما حجمه 9.5k والاخر لا ادري لماذا كان حجمه 16k .يبدو انني اضفت شي على الكود :D فزاد الحجم ..

بالنسبة لموضوع استخدام الـ resource ان شاء الله غدا اكتب عنه .

في امان الله ,

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#10

التقارير

اخى tmaaa

الف شكر على ردك وشرحك

احب ان استفسر عن مشكله قد سمعتها واريد ان اتاكد من صحتها وهل اذا كانت صحيحه هل يوجد حل لهذه المشكله .

المشكله هي ان احد اصحاب الشركات والتي تبرمج بالدلفي اخبرني ان البرنامج اذا عمل مع تقارير عن طريق report builder مثلا فان البرنامج يكبر بسرعة خياليه .

صراحة هذا هو المخوفني من عمل برنامجي بالدلفي فالبرامج يعتمد بشكل كبير على التقارير اذا كان هذا الكلام صحيح فهل توجد طريقة لتصغير الحجم مع هذه التقارير الي قد تتجازو الـ 20 تقرير والسلام عليكم.

اخوك العطار(f)

#11

السلام عليكم

بالنسبة لمسألةreport builder فانا لم استخدمه فلا اعلم شيئا عن الموضوع ارجو المعذرة . شوف بقية الاخوة اكيد لديهم خبرة في الموضوع .

اما عن استخدام الـ resource لعمل برنامج صغير الحجم فها هي الطريقة :

*** هنا ساقوم بشرح الطريقة باختصار , ان كان هناك اي قصور او اخطاء ارجو من الاخوة التعديل وابداء الاراء ( كما ارجو المعذرة فما زلت مبتدئا ومستواي :o :'( ) .

-------------------

using ms vc :

اعتقد العديد من الاخوة قد استخدمها من قبل .

لنبدأ :

بعد تشغيل vc -هنا انا استخدم vc6.0 )علينا باتباع الخطوات الاتيه :

* FileNew او Ctrl+New

* اختر الصفحة (Page) ذات الاسم Files .

* اختر Resource Template .

* لابد من تسميه الملف , في الـ edit الخاصة بـ File اكتب اسم الملف وليكن MyRes .

* Location عليك بتحديده حيث ما تشاء وهو المكان حيث سيتم حفظ كل العمل الذي تقوم به.

* OK ستظهر نافذه بداخلها MyRes.rct .

* Mouse Right click ستظهر Popup Menu علينا الضغط على Insert .

* في Insert Resource Diloag الذي سيظهر , علينا اختيار Dialog ( تتغير الخلفية اسفل الاسم الى ازرق - default color for selected item is blue- ) ,

ثم mouse double click او New .سيظهر Dialog بداخله 2 buttons .يمكن تغيير خصائص الـ Dialog حسب الرغبة .

للوصول الى Diloag Properties :

Mouse Right click ثم Properties .

هنا سنقوم بتغيير بعض هذه الخواص :

General :

ID :وسيتم تغييرها الى "MAINFORM" لابد من كتابة "" ويجب استخدام الاحرف الكبيرة .

Styles :

اختيار Maximize and Minimize Box .

* لنحذف احد الـ buttons الموجوده ونبقي على الاخر مع تعديل خاصية الـ Caption الى Exit , الخاصية ID و لنغيرها الى 106 مثلا .

* يحفظ الملف باسم MyRes.res . ( بامتداد res ) .

-----------------------------

Using Resource Builder 1.0 :

افضل هذا البرنامج عن استخدام VC

لتنزيل البرنامج

http://www.newhua.com.cn/down/ResourceBuilder1.10.zip

ftp://www.newhua.com/ResourceBuilder1.10.zip

http://hanzify.on.net.cn/hhtools/ResourceB...Builder1.10.zip

ID : BwEsxG8L

SN : Sn5W32ew

بعد تشغيل البرنامج علينا بتنفيذ الخطوات الاتيه :

* في القائمة الموجودة على اليسار نختر Dialoge ثم Mouse Right click ومن الـ Popup Menu الظاهرة click ADD .

* ستظهر 3 Forms . العمل مشابه للدلفي . هنا سنضف 1 Button , في Properties Form نغير Caption الى Exit ستكون قيمة Control Id =106 (تذكر هذه القيمة ).

* في Tool Form نضغط OK .

* نقوم بتغيير اسم الـ Dialog الى MainForm . ليس هناك مشكلة نوع الاحرف .

* save as MyRes.rc

* استخدام brcc32.exe الموجود في delphibin .والطريقة كالاتي

في الـ command prompt : بعد الوصول الى bin يتم تنفيذ الامر

brcc32.exe PathNameMyRes.rc سنحصل على ملف MyRes.res .

------------------

بعد ذلك نبدأ بكتابة كود البرنامج :

program mydemo;
Uses Windows,Messages;
{$R MyRes.res}
const ID_CLOSE =106;
function MainDialogProc(
       DlgWin: hWnd;
       DlgMessage: UINT;
       DlgWParam: WPARAM;
       DlgLParam: LPARAM
       )
       : integer; stdcall;
begin
Result := 0;
case DlgMessage of
        WM_Close:
                begin
                        PostQuitMessage(0);
                        Exit;
                end;
        WM_COMMAND:
           case LOWORD(DlgWParam) of
           ID_CLOSE:
               begin
                 PostQuitMessage(0);
                 EXIT;
               end;
            end;
end;
end;

begin
DialogBox(hInstance, 'MAINFORM', 0, @MainDialogProc);
end.

ملحوظات على الكود :

# الملف MyRes.res لابد ان يكون في نفس المسار حيث يوجد كود البرنامج .

# const ID_CLOSE =106; لماذا 106 ؟ هي قيمة الـ ID التابعة للـ Button الموجود معنا . اذا غيرت هذه القيمة لا بد من تغييرها في الـ Resource file .

البرنامج التنفيذي بحجم 8KB تقريبــا .

عذرا الشرح غير مرتب فلدي اشياء كثيرة يجب ان اعملها .

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

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

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