"โปรแกรมเมอร์อัจฉริยะใช้ Delphi!" ตอนนี้ผู้คนจำนวนมากเริ่มใช้ Delphi อย่างไรก็ตามในที่สุดก็มีผู้เชี่ยวชาญไม่กี่คนและสามเณรอย่างฉันมีอยู่ทุกหนทุกแห่งฮ่าฮ่า เนื่องจากฉันเป็นมือใหม่ฉันจึงมีคำถามที่ดีมากมายเช่นวิธีการตั้งค่านี้และวิธีการเขียนที่ ... ดังนั้นด้านล่างฉันจะพูดสรุปตามประสบการณ์เล็ก ๆ น้อย ๆ ที่ฉันได้สะสมและ คำถามเล็ก ๆ น้อย ๆ ในฟอรัม
== แอปพลิเคชันระบบ ==
ก. Delphi ได้แทนที่ตัวควบคุมที่ใช้กันทั่วไปจำนวนมากเช่น Delphi5 และ Delphi6 ที่เปิดตัวในปีนี้คือ 1.5 เท่าของ Delphi5 ด้วยการควบคุมจำนวนมากแม้จะมีความละเอียด 1024*768 พวกเขาไม่สามารถแสดงแผงควบคุมทั้งหมดของพวกเขาได้และไม่สะดวกที่จะกดปุ่มสองปุ่มทั้งสองเพื่อแสดงแผงควบคุมมากขึ้นทุกครั้ง! อย่างไรก็ตามโดยการเพิ่มค่าคีย์รีจิสทรีต่อไปนี้แผงส่วนประกอบสามารถขยายได้โดยอัตโนมัติ:
[HKEY_CURRENT_USER/SOFTWARE/BORLAND/DELPHI/X.0/EXTRAS]
"Autopaletteselect" = "1"
(หมายเหตุ: x.0 ระบุหมายเลขเวอร์ชันของ Delphi ของคุณหากไม่มีคีย์หลักพิเศษเพียงสร้างใหม่เพียงเดิมด้านล่าง)
b. ทุกครั้งที่ฉันสร้างรูปแบบใหม่จากนั้นตั้งค่าตัวอักษรและขนาด ... มันลำบากจริงๆ! จากนั้นเพิ่มค่าคีย์ต่อไปนี้และปล่อยให้ระบบตั้งค่าโดยอัตโนมัติ:
[HKEY_CURRENT_USER/SOFTWARE/BORLAND/DELPHI/X.0/FORMDESIGN]
"defaultFont" = "宋体, 9, _"
(หมายเหตุ: _ หมายถึงพื้นที่และยังสามารถแทนที่ด้วยตัวหนา (ตัวหนา) ฯลฯ )
ค. ปรับแต่งสภาพแวดล้อมการทำงานเพื่อให้เหมาะกับคุณมากขึ้น
•แถบเครื่องมือการตั้งค่า คลิกขวาที่แถบเครื่องมือ Delphi เลือกปรับแต่งจากนั้นเลือกปุ่มที่ต้องการแล้วลากเครื่องมือแล้วลากปุ่มที่ไม่ต้องการออก สิ่งที่ฉันมักจะใช้คือ: เปิด, เปิดโครงการ, บันทึก, ทั้งหมด, เลิกทำ, ทำซ้ำภายใต้แถบเครื่องมือมาตรฐาน; แถบเครื่องมือประกอบส่วนประกอบ
•ตั้งเค้าโครงหน้าต่าง เพื่อให้สามารถเขียนโปรแกรมได้อย่างมีประสิทธิภาพสิ่งสำคัญคือการจัดเรียงแต่ละหน้าต่างอย่างสมเหตุสมผล Windows ที่ใช้กันทั่วไปของฉันคือ: Object Inspector, Project Manager (ดู | Manager Project), รายการเฝ้าดู (Run | Add Watch ... )
หลังจากตั้งค่าแต่ละฟอร์มให้กดปุ่มบันทึกเดสก์ท็อปปัจจุบันบนแถบเครื่องมือเดสก์ท็อปเพื่อบันทึก
•ตั้งค่าสีแสดง ทำให้สีของรหัสสอดคล้องกับนิสัยของคุณมากขึ้นซึ่งเอื้อต่อการคิดที่ชัดเจนเมื่อเขียน เครื่องมือ | ตัวเลือกตัวเลือกเปิดคุณสมบัติตัวแก้ไขเลือกแท็บสีและตั้งค่าสีรหัส นี่เป็นเพียงไม่กี่คนที่ใช้กันทั่วไป:
Whitespace: พื้นที่ว่างนั่นคือพื้นหลัง;
ความคิดเห็น: ความคิดเห็น;
คำที่สงวนไว้: คำที่สงวนไว้;
สตริง: สตริง;
หมายเลข: หมายเลข;
จุดดำเนินการ: บรรทัดปัจจุบันที่ดำเนินการ (นั่นคือบรรทัดที่มาถึงเมื่อ F7 ก้าวเข้าสู่);
เปิดใช้งาน Break: Breakpoint;
บรรทัดข้อผิดพลาด: ข้อผิดพลาดเกิดขึ้นบรรทัด;
d. การเรียนรู้ปุ่มลัดบางอย่างในการเขียนโปรแกรม Delphi สามารถปรับปรุงประสิทธิภาพได้อย่างมากและจะไม่ทำให้คุณเบื่อกับการตั้งค่าที่น่าเบื่อมากเกินไป นี่คือปุ่มลัดบางส่วนที่ฉันมักใช้:
ESC: เลือกคอนเทนเนอร์ของส่วนประกอบที่เลือกในปัจจุบัน (โดยปกติจะเป็นพาเนล, กลุ่ม, แบบฟอร์ม, ฯลฯ );
คีย์ Ctrl+Arrow: ย้ายส่วนประกอบที่เลือกโดยหนึ่งพิกเซล;
คีย์ Ctrl+Shift+Arrow: เลื่อนส่วนประกอบที่เลือกโดยกริดขนาดใหญ่ (คล้ายกับผลของการจับการเปลี่ยนแปลงในดอกไม้ไฟแล้วเคลื่อนที่ด้วยปุ่มลูกศร);
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 (แอปพลิเคชัน);
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 เลือกไฟล์/เปิด ... และเปิด rxctl5.dpk, rxdb5.dpk, rxbde5.dpk หลังจากเปิด , กด Compile, Open to Open: DCLRX5.DPK, DCLRXDB5.DPK และ DCLRXBD5.DPK
•คุณสมบัติของ AllowObjects การตั้งค่าเริ่มต้นของ Win98 เป็นจริง แต่เมื่อเท็จมันจะแสดงตามปกติ ดังนั้นสำหรับความเข้ากันได้ของระบบจำเป็นต้องกำหนดเวอร์ชันระบบปฏิบัติการปัจจุบัน:
ขั้นตอน tformmain.formCreate (ผู้ส่ง: tobject);
วาจา
osvi: OsversionInfo;
-
เริ่ม
OSVI.DWOSVERSIONINFOSIZE: = sizeof (OsversionInfo);
GetVersionex (OSVI);
กรณี osvi.dwplatformid ของ
1: rxrichedit1.allowoBjects: = true;
2: rxrichedit1.allowoBjects: = false;
จบ;
-
จบ;
แต่ฉันไม่รู้ว่าทำไมคุณลักษณะนี้มีปัญหาเช่นนี้ดังนั้นฉันหวังว่าผู้เชี่ยวชาญจะให้คำแนะนำกับฉัน
•เหตุการณ์ onurlclick rxrichedit แปลงที่อยู่เว็บเพจเป็นรูปแบบไฮเปอร์ลิงก์โดยอัตโนมัติ แต่พฤติกรรมเฉพาะยังคงต้องใช้รหัสการเขียนด้วยตัวเองมิฉะนั้นที่อยู่เหล่านี้จะกลายเป็นเชลล์ที่ว่างเปล่า:
ขั้นตอน tformmain.rxrichedit1urlclick (ผู้ส่ง: tobject; const urltext: สตริง; ปุ่ม: tmouseButton);
เริ่ม
ถ้าปุ่ม = mbleft แล้ว
Shellexecute (ด้ามจับ, ไม่มี, pchar (urltext), nil, nil, sw_show);
จบ;
b. เพื่อบันทึกหน่วยความจำและเพิ่มประสิทธิภาพการทำงานเรามักจะสร้างส่วนประกอบแบบไดนามิก แต่หลังจากใช้งานแล้วถ้ามันไม่ได้ถูกลบออกจากหน่วยความจำในเวลามันจะขัดกับความตั้งใจดั้งเดิมของเรา แต่จะ "ฆ่า" องค์ประกอบที่สร้างขึ้นได้อย่างไร นี่เป็นเพียงการปลดปล่อยพื้นที่หน่วยความจำที่ชี้ไปโดยการแก้ไข แต่ตัวชี้ไม่ได้ตั้งค่าเป็น NIL สร้าง ... .mistake ดังนั้นเราจำเป็นต้องไม่มีตัวชี้หลังจากแก้ไขฟรี: = nil หรือ freeandnil (ใช้ได้ภายใต้ Delphi5) เพื่อให้แน่ใจว่าการทำงานปกติในอนาคต
ค. แสดงข้อความพรอมต์ของแต่ละตัวควบคุมบนบรรทัดสถานะ เหตุการณ์ onhint ของแอปพลิเคชันนี้สามารถใช้งานได้ แต่เนื่องจากแอปพลิเคชันเป็นวัตถุที่เข้ากันไม่ได้จึงสามารถใช้วิธีการต่อไปนี้ได้:
-
สาธารณะ
Procedure Displayhint (ผู้ส่ง: tobject);
จบ;
-
ขั้นตอน tform1.displayhint (ผู้ส่ง: tobject);
เริ่ม
StatusBar1.SimpleText: = getLonghint (application.hint);
จบ;
ขั้นตอน TFORM1.FormCreate (ผู้ส่ง: TOBJECT);
เริ่ม
application.onhint: = displayhint;
จบ;
วิธีนี้ข้อความที่แสดงในแถบสถานะเหมือนกับกล่องพรอมต์ (กล่องสีเหลืองขนาดเล็กที่ปรากฏขึ้นโดยอัตโนมัติ) ถ้าคุณต้องการให้ข้อความพรอมต์ในแถบสถานะมีรายละเอียดมากขึ้น ในความเป็นจริงตราบใดที่คุณสมบัติคำใบ้ของการควบคุมนั้นเขียนขึ้นเช่นนี้: Myhint | มันเป็นเพียง myhint! เนื้อหาก่อน "|" สามารถแสดงในกล่องพรอมต์ (Help Hint Box) และเนื้อหาหลังจาก "| "จะปรากฏในแถบสถานะตอนนี้
d. ประเด็นสำคัญบางประการในการใช้ ListView ต่อไปนี้เป็นตัวอย่างคอลัมน์สองคอลัมน์เป็นตัวอย่าง
→เพิ่มบรรทัด:
ด้วย ListView1 DO
เริ่ม
ListItem: = items.add;
listitem.caption: = 'เนื้อหาคอลัมน์แรก';
ListItem.subitems.add ('เนื้อหาคอลัมน์ที่สอง');
จบ;
→ล้าง ListView1:
ListView1.items.Clear;
→รับหมายเลขบรรทัดของแถวที่เลือกในปัจจุบันและลบแถวปัจจุบัน:
สำหรับ i: = 0 ถึง listview1.items.count-1 ทำ
ถ้า listview1.items [i]. เลือกแล้ว //i=listView1.Selected.index
เริ่ม
ListView1.items.delete (i);
จบ;
แน่นอน ListView มีเหตุการณ์ onSelectItem ซึ่งสามารถกำหนดแถวที่คุณเลือกและกำหนดให้กับตัวแปรส่วนกลาง
→การทำงานของการอ่านแถวและคอลัมน์:
edit1.text: = listview1.items [i] .caption;
edit2.text: = listview1.items [i] .subitems.strings [0];
EDIT3.Text: = ListView1.items [i] .subitems.strings [1];
โดยการเปรียบเทียบคอลัมน์ทั้งหมดสามารถอ่านได้โดยใช้ลูป
→เลื่อนโฟกัสหนึ่งบรรทัด:
สำหรับ i: = 0 ถึง listview1.items.count-1 ทำ
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: อาร์เรย์ของสตริงและจากนั้นก่อนที่จะใช้อาร์เรย์ setLength (a, 3) ตั้งค่าความยาวอาร์เรย์เป็น 3 นั่นคือ A [0], A [1], A [2], อย่างนั้น เมื่อมีความจำเป็นที่จะต้องขยายความยาวอาร์เรย์อีกครั้ง: seclength (a, 5) จากนั้นจะเพิ่ม [3] และ A [4] และใน A [0], A [1], A [2] ค่าของจะไม่ถูกล้าง; 2] จะถูกล้างออกจากหน่วยความจำโดยอัตโนมัติ หมายเหตุ: อาร์เรย์แบบไดนามิกเริ่มต้นด้วย "0" ดังนั้นหลังจาก setLength (a, 1) สูง (a) = 0! -
ในที่สุดเมื่ออาร์เรย์แบบไดนามิกนี้ไม่ได้ใช้อีกต่อไปและโปรแกรมยังไม่ได้ออกเพื่อบันทึกหน่วยความจำใช้: a: = nil เพื่อปล่อยอาร์เรย์นี้และตอนนี้มันประสบความสำเร็จอย่างแท้จริง "การป้องกันสิ่งแวดล้อมและสิ่งแวดล้อม" :)
•คำถาม "วิธีการรับเส้นทางไปยังโปรแกรมปัจจุบันที่ทำงาน" มักจะเห็นได้ในฟอรัม แน่นอนฟังก์ชั่นนี้ใช้เป็นครั้งคราวในการเขียนโปรแกรม มีฟังก์ชั่นหลายอย่างที่สามารถบรรลุผลนี้ได้:
→ GetCurrentDirectory (): ฟังก์ชั่น winapi การใช้งานเฉพาะมีดังนี้:
วาจา
MyCurrentDir: อาร์เรย์ [0..144] ของถ่าน;
เริ่ม
getCurrentDirectory (sizeof (mycurrentdir), mycurrentdir);
MyCurrentDir: = MyCurrentDir+'/mySoftName.exe';
จบ;
→ GetCurrentDir (): ฟังก์ชั่นที่ห่อหุ้มโดย GetCurrentDirectory โดย Delphi การใช้งานง่าย: mycurrentdir: = getCurrentDir รูปแบบสุดท้ายคือ: C:/Windows/System
นอกจากนี้ยังมีฟังก์ชั่นที่สามารถรับเส้นทางโดยตรง: ExtractFilePath (Paramstr (0)), ExtractFilePath (application.exename) ฯลฯ
•ข้อความของการปิดระบบรีสตาร์ท ฯลฯ นี่เป็นคำถามที่ผู้คนถามและฉันจะพูดถึงที่นี่:
SHUTDOWN: EXITWINDOWSEX (EWX_SHUTDOWN, 32);
รีสตาร์ท: ExitWindowSex (EWX_ROBOOT, 32);
ออกจากระบบ: ExitWindowSex (EWX_LOGOFF, 32);
Power Off: ExitWindowSex (EWX_Poweroff, 32);
•ใน Delphi นอกเหนือจากการใช้ #39 แล้วจะจัดการกับ "คำพูดเดียวเดียว" ในโปรแกรม (เช่น ShowMessage) ทั้ง '' 'และ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' ในความเป็นจริงสี่คำพูดเดียวแสดงถึงคำพูดเดียวนั่นคือ '' '' คำที่สองและสามระบุว่านี่คือ "'" และคำแรกและสี่ระบุว่านี่เป็นประเภทตัวละคร ฮ่าฮ่าน่าสนใจมาก :)
•ปัญหาจีนในการแสดง ปุ่มใน showmessage ทั้งหมดอยู่ในข้อความอิเล็กทรอนิกส์ซึ่งทำให้ผู้คนรู้สึกไม่สบายใจ ในความเป็นจริงหลังจาก DIY ของเราเราสามารถทำให้พวกเขาทั้งหมดเป็นภาษาจีน
ก่อนอื่นบันทึกโครงการปัจจุบันจากนั้นเลือกโครงการ | ภาษา | เพิ่ม ... กล่องโต้ตอบเพิ่มภาษาปรากฏขึ้นเลือกโครงการที่คุณต้องการเป็นภาษาจีน (คุณสามารถปรับแต่งโฟลเดอร์) ถัดไป; จีน) ถัดไป; ค้นหารายการ "const_smsgdlgok" ในรายการเปลี่ยนรูปแบบ "ภาษาจีน (แปล)" เป็น "ตกลง" (ต้นฉบับ)) และออกหลังจากบันทึก ตอนนี้เรียกใช้โปรแกรมอีกครั้งฮ่าฮ่ามันเป็นแค่ปุ่มจีนหรือไม่?
อย่างไรก็ตามกล่องโต้ตอบข้อความของ showmessage นั้นง่ายมากและสามารถแสดงต่อนักพัฒนาในระหว่างการดีบักระบบ แต่เนื่องจากมันง่ายเกินไปฉันไม่แนะนำให้ใช้กล่องโต้ตอบดังกล่าวในซอฟต์แวร์เวอร์ชันอย่างเป็นทางการ ยิ่งไปกว่านั้นเป็นการดีที่สุดที่จะใช้ MessageBox แทน showMessage เพื่อลดขนาดของซอฟต์แวร์ -