"يستخدم المبرمجين الأذكياء Delphi!" ومع ذلك ، بعد كل شيء ، هناك عدد قليل من الخبراء ، والمبتدئين مثلي في كل مكان ، هاها. نظرًا لأنني صاعد ، فإن لدي بطبيعة الحال الكثير من الأسئلة الجيدة للغاية ، مثل كيفية إعداد هذا وكيفية كتابة ذلك ... لذلك ، أدناه ، سألقي خطابًا موجزًا بناءً على القليل من التجربة التي تراكمتها و الأسئلة الصغيرة الشائعة في المنتدى.
== تطبيقات النظام ==
أ. استبدلت Delphi عددًا كبيرًا من عناصر التحكم الشائعة الاستخدام ، مثل Delphi5 ، و Delphi6 الذي تم إصداره هذا العام هو 1.5 أضعاف Delphi5. مع وجود العديد من عناصر التحكم ، حتى بدقة 1024*768 ، لا يمكنهم عرض جميع لوحات المكونات الخاصة بهم ، ومن غير المريح حقًا الضغط على هذين الأزرار الصغيرة لعرض المزيد من اللوحات في كل مرة! ومع ذلك ، بإضافة قيمة مفتاح التسجيل التالية ، يمكن توسيع لوحة المكون تلقائيًا:
[hkey_current_user/software/borland/delphi/x.0/extra]
"Autopaletteselect" = "1"
(ملاحظة: يشير X.0 إلى رقم إصدار Delphi الخاص بك ؛ إذا لم يكن هناك مفتاح أساسي إضافي ، فقط قم بإنشاء واحد جديد ، نفس الشيء أدناه)
b. في كل مرة أقوم فيها بإنشاء نموذج جديد ، ثم ضبط خطه وحجمه ... إنه أمر مزعج حقًا! ثم أضف قيمة المفتاح التالية واترك النظام تلقائيًا:
[hkey_current_user/software/borland/delphi/x.0/formDesign]
"DefaultFont" = "宋体 ، 9 ، _"
(ملاحظة: _ يمثل المساحة ، ويمكن استبداله أيضًا بجرأة (جريئة) وما إلى ذلك)
جيم تخصيص بيئة العمل لجعلها أكثر ملاءمة لك.
• شريط أدوات الإعدادات. انقر بزر الماوس الأيمن على شريط أدوات Delphi ، وحدد التخصيص ، ثم حدد الزر المطلوب واسحب الأداة ، واسحب تلك غير المرغوب فيها. ما أستخدمه في كثير من الأحيان هو: Open ، Open Project ، حفظ الكل ، التراجع ، Redo تحت شريط الأدوات القياسي ؛ شريط أدوات لوحة مكون.
• تعيين تخطيط النافذة. لكي تكون قادرًا على كتابة البرامج بكفاءة ، من المهم ترتيب كل نافذة بشكل معقول. Windows شائع الاستخدام هي: مفتش الكائن ، مدير المشروع (عرض | مدير المشروع) ، قائمة المراقبة (Run | Add Watch ...).
بعد إعداد كل نموذج ، اضغط على زر حفظ سطح المكتب الحالي على شريط أدوات سطح المكتب لحفظه.
• اضبط لون العرض. اجعل لون الكود أكثر تمشيا مع عاداتك ، وهو ما يفضي إلى مسح التفكير عند الكتابة. أدوات | خيارات المحرر فتح خصائص المحرر ، حدد علامة التبويب Color ، وضبط لون الرمز. هنا فقط عدد قليل من الأدوات الشائعة الاستخدام:
المساحة البيضاء: الفضاء الفارغ ، أي الخلفية ؛
التعليق: تعليق
كلمة محفوظة: كلمات محفوظة ؛
السلسلة: سلسلة ؛
الرقم: الرقم ؛
نقطة التنفيذ: الخط الحالي الذي يتم تنفيذه (أي الخط الذي يصل عندما يخطو F7 إلى) ؛
استراحة تمكين: نقطة التوقف ؛
سطر الخطأ: حدث الخطأ ؛
d. إن إتقان بعض المفاتيح المختصرة في برمجة دلفي يمكن أن يحسن الكفاءة بشكل كبير ولن يجعلك تشعر بالملل من الكثير من الإعدادات المملة. فيما يلي بعض مفاتيح الاختصار التي أستخدمها غالبًا:
ESC: حدد حاوية المكون المحدد حاليًا (عادةً اللوحة ، Groupbox ، النموذج ، إلخ) ؛
مفتاح سهم Ctrl+: يحرك المكون المحدد بواسطة بكسل واحد ؛
مفاتيح سهم Ctrl+Shift+: حرك المكون المحدد بواسطة شبكة كبيرة (على غرار تأثير التحول في الألعاب النارية ثم التحرك باستخدام مفاتيح الأسهم) ؛
Shift+Dragon Keys: اضبط حجم المكون المحدد ، بكسل واحد في وقت واحد ؛
SHIFT+SELECT: اضغط على مفتاح Shift وانقر على المكون مع الماوس.
CTRL+زر الماوس: استخدم وظائف أخرى في الإجراء (مثل عملية مخصصة). انتقل مباشرة إلى جزء التنفيذ من هذه الوظيفة المسمى. لقد استخدمت هذه الوظيفة أكثر من غيرها ، مما يجعلها مريحة للغاية بالنسبة لي للعثور على وحدات!
Ctrl+Shift+C: إعلان طريقة في كائن ما ، ثم ضع المؤشر عليه ، اضغط على Ctrl+Shift+C لإنشاء إطار أساسي لتنفيذه ، مثل:
tform1 = فئة (tform)
خاص
{إعلانات خاصة}
عام
{الإعلانات العامة}
منجم الإجراء ؛
نهاية؛
ضع المؤشر على خط منجم الإجراء ، واضغط على Ctrl+Shift+C ، وسيتم إدخال الكود التالي تلقائيًا في الوحدة:
الإجراء tform1.mine ؛
يبدأ
نهاية؛
== عمليات النموذج ==
في البرامج ذات النماذج المتعددة ، تتخلف Delphi الافتراضي لإنشاءها جميعًا عند بدء تشغيل البرنامج (إنه مخفي فقط ، يتم عرض نموذج رئيسي واحد فقط) ، بحيث تكون تلك النماذج غير الضرورية مؤقتًا لبدء تشغيل مساحة كبيرة من الذاكرة. لذلك نحن بحاجة إلى نقل تلك النماذج التي لم يتم تشغيلها في الوقت الحالي من "النماذج التلقائية" إلى "النماذج المتاحة" ضمن علامة التبويب النماذج لمشروع القائمة | خيارات ... وبهذه الطريقة ، يتطلب إنشاء وإصدار هذه النماذج رمزًا للتنفيذ.
أ. مقارنة طريقتان لإنشاء نموذج. بالنسبة لهذه النماذج التي تم إنشاؤها من الناحية غير التلقائية ، يجب أن ننشئها قبل إظهار (الذات) أو إنشاء (تطبيق). على سبيل المثال ، form2.creat (self) و form2.create (التطبيق) ، ولكن ما هو الفرق بينهما؟ في الواقع ، لا يوجد فرق كبير بين الاثنين.
ولكن إذا كان المالك ينتمي إلى نافذة أو عنصر تحكم آخر ، عند إصدار مالكه ، فسيتم إصدار ما هو المالك. الفرق الرئيسي هو من يدير موارد النموذج. تم إنشاؤها في الطريقة الأولى ، يتم إدارة موارد النموذج من قبل المبرمج ؛
b. عدة طرق لإصدار النماذج. نظرًا لأنه هو حفظ الذاكرة ، يجب أن "يخرج" الذاكرة. هنا سوف أدرج بعض الطرق المماثلة:
(1)
الإجراء tform1.button1click (المرسل: tobject) ؛
يبدأ
......
إذا form2 = nil ثم
form2: = tform2.create (application) ؛
form2.showmodal ؛
......
نهاية؛
الإجراء tform2.close (المرسل: TOBJECT ؛ var الإجراء: tcloseaction) ؛
يبدأ
ModalResult: = mrnone ؛
الإجراء: = Cafree ؛
form2: = nil ؛
نهاية؛
(2)
الإجراء tform1.button1click (المرسل: tobject) ؛
يبدأ
إذا لم يتم تعيينه (form2) ثم
يبدأ
application.createform (tform2 ، form2) ؛
يحاول
form2.showmodal ؛
أخيراً
form2.free ؛
form2: = nil ؛
نهاية؛
نهاية
آخر
form2.showmodal ؛
نهاية؛
(3)
الإجراء tform2.button1click (المرسل: tobject) ؛
يبدأ
form2.close ؛
form2.release ؛
نهاية؛
== السيطرة على الاستخدام
أ. كتب حزمة التحكم في RXLIB الشهيرة ثلاثة خبراء روسيين وهي رائعة للغاية! ومع ذلك ، هناك الكثير من المحتوى ، وليس من السهل استخدامه بشكل جيد. سأقول فقط بضع نقاط هنا إلى Rxrichedit.
• سأل الكثير من الناس كيفية تثبيت RXLIB ، يبدو أنه معقد بعض الشيء ، هاها ، لذلك سأقول ذلك أيضًا بالمناسبة:
قم بتشغيل rxinst.exe لتثبيت rxlib في/ملفات البرامج/borland/delphi5 (أو 6)/rx ، ثم افتح Delphi ، حدد ملف/فتح ... ، و turn rxctl5.dpk ، rxdb5.dpk ، rxbde5.dpk بعد الفتح ، PRESS COMPILE ، تابع المفتوحة: DCLRX5.DPK ، DCLRXDB5.DPK و DCLRXBD5
• خاصية المسموح بها. الإعداد الافتراضي لـ Win98 صحيح. ولكن عندما يكون خطأ ، سيتم عرضه بشكل طبيعي. لذلك ، لتوافق النظام ، من الضروري تحديد إصدار نظام التشغيل الحالي:
الإجراء tformmain.formcreate (المرسل: tobject) ؛
var
Osvi: OsversionInfo ؛
......
يبدأ
osvi.dwosversionInfosize: = sizeof (osversionInfo) ؛
getVersionex (OSVI) ؛
CASE OSVI.DWPLATFORMID من
1: rxrichedit1.allowObjects: = true ؛
2: rxrichedit1.allowObjects: = false ؛
نهاية؛
.........
نهاية؛
لكنني لا أعرف لماذا تعاني هذه السمة من هذه المشكلة ، لذلك آمل أن يقدم لي الخبير بعض النصائح.
• حدث onurlclick. يقوم RXRICHEDIT تلقائيًا بتحويل عناوين صفحة الويب إلى تنسيق الارتباط التشعبي ، لكن السلوك المحدد لا يزال يتطلب كتابة رمز بمفرده ، وإلا فإن هذه العناوين ستصبح قذائف فارغة:
الإجراء tformmain.rxRicheDit1urlClick (المرسل: tobject ؛ const urltext: string ؛ زر: tmouseButton) ؛
يبدأ
إذا كان الزر = mbleft ثم
Shellexecute (مقبض ، nil ، pchar (urltext) ، nil ، nil ، sw_show) ؛
نهاية؛
b. من أجل حفظ الذاكرة وتحسين التشغيل ، نقوم دائمًا بإنشاء مكونات ديناميكية. ولكن بعد استخدامه ، إذا لم يتم مسحها من الذاكرة في الوقت المناسب ، فسيتعارض مع نيتنا الأصلية. ولكن كيف "تقتل" المكون الذي تم إنشاؤه على سبيل المثال ، قمت بإنشاء تحكم التحرير والآن أريد أن يختفي ، ولكن بعد استخدام edit.fre هذا يحرر مساحة الذاكرة التي يشرها التحرير ، ولكن لم يتم ضبط المؤشر على شيء. ولدت .... لذلك ، نحتاج إلى عدم وجود المؤشر بعد التحرير المجاني: = NIL أو FREANDNIL (صالح فقط تحت DELPHI5) لضمان التشغيل العادي في المستقبل.
جيم يعرض النص المطري لكل عنصر تحكم على سطر الحالة. يمكن استخدام حدث OnHint لهذا التطبيق ، ولكن نظرًا لأن التطبيق هو كائن غير متوافق ، يمكن استخدام الطريقة التالية:
......
عام
عرض الإجراء (المرسل: TOBJECT) ؛
نهاية؛
......
الإجراء tform1.displayhint (المرسل: TOBJECT) ؛
يبدأ
statusBar1.SimpleText: = getLonGhint (application.hint) ؛
نهاية؛
الإجراء tform1.formcreate (المرسل: tobject) ؛
يبدأ
application.onhint: = displayHint ؛
نهاية؛
وبهذه الطريقة ، يكون النص المعروض في شريط الحالة هو نفسه مربع المطالبة (المربع الأصفر الصغير الذي يظهر تلقائيًا). ماذا لو كنت تريد أن يكون النص المطري في شريط الحالة أكثر تفصيلًا؟ في الواقع ، طالما أن خاصية تلميح عنصر التحكم مكتوبة على هذا النحو: MyHint | إنه مجرد myHint! ، المحتوى قبل "|" "يتم عرضه في شريط الحالة. الآن.
d. بعض النقاط الرئيسية في استخدام ListView. فيما يلي عبارة عن ListView ثنائية العمود كمثال.
→ أضف خطًا:
مع ListView1 تفعل
يبدأ
ListItem: = items.add ؛
ListItem.Caption: = "محتوى العمود الأول" ؛
ListItem.Subitems.add ("محتوى العمود الثاني") ؛
نهاية؛
→ Clear ListView1:
ListView1.Items.Clear ؛
→ احصل على رقم السطر للصف المحدد حاليًا وحذف الصف الحالي:
بالنسبة إلى i: = 0 to listview1.items.count-1 do
إذا listView1.Items [i]
يبدأ
ListView1.Items.Delete (I) ؛
نهاية؛
بالطبع ، يحتوي ListView على حدث OnSelectItem ، والذي يمكنه تحديد الصف الذي حددته وتعيينه إلى متغير عالمي.
→ عملية قراءة صف وعمود:
edit1.text: = ListView1.Items [i].
edit2.text: = listView1.Items [i] .Subitems.Strings [0]
edit3.text: = listView1.Items [i] .Subitems.Strings [1] ؛
عن طريق القياس ، يمكن قراءة العمود بأكمله باستخدام حلقة.
→ حرك خط التركيز على خط واحد:
بالنسبة إلى i: = 0 to listview1.items.count-1 do
if (listView1.items [i]. selected) و (i> 0) ثم
يبدأ
ListView1.setFocus ؛
listView1.Items.Item [i-1] .selected: = true ؛
نهاية؛
ومع ذلك ، في Delphi6 ، يحتوي ListView على سمة itemIndex ، لذلك فقط
ListView1.setFocus ؛
ListView1.ItemIndex: = 3 ؛
يمكنك ضبط التركيز.
== الآخرين ==
• من أجل تحسين البرنامج وجعله أكثر مثالية ، غالبًا ما يتم استخدام المصفوفات الديناميكية عند استخدام المصفوفات. عند الإعلان ، مثل: A: صفيف من السلسلة ، ثم قبل استخدام الصفيف ، يضبط الطول (A ، 3) طول الصفيف إلى 3 ، أي [0] ، A [1] ، A [2] ، هذا كل شيء. عندما يكون من الضروري توسيع طول الصفيف ، مرة أخرى: يتم إضافة الطول (A ، 5) ، ثم [3] و A [4] ، وفي السابق A [0] ، A [1] ، A [2] لن يتم مسح قيمة ، إذا كان هناك عزل (A ، 3) والطول (A ، 1). 2] يتم مسحها تلقائيا من الذاكرة. ملاحظة: تبدأ المصفوفات الديناميكية بـ "0" ، لذلك بعد SetLength (A ، 1) High (A) = 0! !
أخيرًا ، عندما لم يعد هذا الصفيف الديناميكي يستخدم ولم يخرج البرنامج بعد ، من أجل حفظ الذاكرة ، والاستخدام: A: = لا شيء لإطلاق هذه الصفيف ، والآن يحقق حقًا "حماية خضراء وبيئية" :)
• يمكن رؤية السؤال "كيفية الحصول على المسار إلى البرنامج الحالي" في المنتديات. في الواقع ، يتم استخدام هذه الوظيفة من وقت لآخر في البرمجة. هناك بالفعل العديد من الوظائف التي يمكن أن تحقق هذا التأثير:
→ getCurrentDirectory (): وظيفة winapi ، الاستخدام المحدد هو كما يلي:
var
mycurrentdir: صفيف [0..144] من char ؛
يبدأ
GetCurrentDirectory (Sizeof (mycurrentdir) ، mycurrentdir) ؛
myCurrentDir: = myCurrentDir+'/mysoftname.exe' ؛
نهاية؛
→ getCurrentDir (): وظيفة مغلفة بواسطة getCurrentDirectory بواسطة Delphi ، الاستخدام بسيط: mycurrentdir: = getCurrentDir. التنسيق النهائي هو: C:/Windows/System
هناك أيضًا وظائف يمكنها الحصول مباشرة على المسار: extractFilePath (paramstr (0)) ، extractFilePath (application.exename) ، إلخ.
• رسائل إغلاق النظام ، إعادة التشغيل ، إلخ. هذا أيضًا سؤال يطرحه الناس ، وسأذكره هنا:
الإغلاق: exitwindowsex (ewx_shutdown ، 32) ؛
إعادة التشغيل: exitwindowsex (ewx_reboot ، 32) ؛
تسجيل الدخول: exitwindowsex (ewx_logoff ، 32) ؛
إيقاف التشغيل: exitwindowsex (EWX_Poweroff ، 32) ؛
• في دلفي ، بالإضافة إلى استخدام #39 ، كيفية التعامل مع "عروض أسعار فردية" في برنامج (مثل ShowMessage)؟ كلا "" "و" "" "" "" "" "" "" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' في الواقع ، تمثل أربعة عروض أسعار فردية اقتباسًا واحدًا ، أي ، "" "، والثاني والثالث يشيران إلى أن هذا" "" ، والأولى والرابعة تشير إلى أن هذا نوع حرف. هاها ، مثيرة جدا للاهتمام :)
• القضايا الصينية في Showmessage. الأزرار في ShowMessage كلها في النص الإلكتروني ، مما يجعل الناس يشعرون بعدم الارتياح. في الواقع ، بعد DIY ، يمكننا أن نجعلهم جميعًا في الصينيين.
أولاً ، احفظ المشروع الحالي ، ثم حدد Project | Languages | Add ... يظهر مربع الحوار Add Language ، حدد المشروع الذي تريده الصينية (يمكنك أيضًا تخصيص المجلد) ، التالي ؛ الصين) ابحث عن عنصر "const_smsgdlgok" في القائمة ، وقم بتغيير نمط "الصينية (المترجمة) إلى" OK "(الأصلي)) ، والخروج بعد الادخار. الآن ، قم بتشغيل البرنامج مرة أخرى ، هاها ، هل هو فقط الزر الصيني؟
ومع ذلك ، فإن مربع حوار الرسائل الخاص بـ ShowMessage بسيط للغاية ويمكن عرضه للمطورين أثناء تصحيح تصحيح النظام. ولكن نظرًا لأنه بسيط للغاية ، أوصي بعدم استخدام مربعات الحوار هذه في الإصدار الرسمي من البرنامج. علاوة على ذلك ، من الأفضل استخدام MessageBox بدلاً من ShowMessage لتقليل حجم البرنامج. !