http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﲪﻦ ﺍﻟﺮﺣﻴﻢ ﻟﻐﺔ ﺍﻟﱪﳎﺔ ﺩﻟﻔﻲ ﻣﻮﻗﻊ ﺍﻟ ِﻜﺘﺎﺏ ﻋﻠﻰ ﺍﻹﻧﺘﺮﻧﺖ http://www.alshater.net
ﻳﺴﻤﺢ ﺑﺎﻟﻨﺸﺮ ﺍﻹﻟﻜﺘﺮﻭﱐ ﺃﻭ ﺍﻻﻗﺘﺒﺎﺱ ﺃﻭ ﺍﻟﻨﻘﻞ ﻋﻠﻰ ﺃﻥ ﻳﺘﻢ ﺍﻹﺷﺎﺭﺓ ﺇﱃ ﺍﳌﺆﻟﻒ ﻭﻣﻮﻗﻊ ﺍﻟ ِﻜﺘﺎﺏ ﻋﻠﻰ ﺍﻻﻧﺘﺮﻧﺖ ﻭﻻ ﻳﺴﻤﺢ ﺑﺄﻱ ﺷﻜﻞ ﻣﻦ ﺍﻷﺷﻜﺎﻝ ﺍﻟﻨﺸﺮ ﺍﻟﻮﺭﻗﻲ ﻟﻠﻜﺘﺎﺏ
ﺇﻋﺪﺍﺩ
ﳏﻤﺪ ﺧﺎﻟﺪ ﻧﺎﺻﺮ ﺁﻏﺎ
[email protected]
1
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﻟﻰ ﺃﻤﻲ ،ﺇﻟﻰ ﺃﺒﻲ ﺍﻟﺫﻴﻥ ﻟﻭﻻ ﺴﻬﺭﻫﻤﺎ ﻭﺘﻌﺒﻬﻤﺎ ﻟﻡ ﺃﻜﻥ ﻫﻨﺎ ﻷﻜﺘﺏ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ. ﺇﻟﻰ ﺃﻨﺎﺱ ﻻ ﺃﻋﺭﻓﻬﻡ ﻭﻻ ﻴﻌﺭﻓﻭﻨﻨﻲ ﻭﻟﻜﻨﻬﻡ ﻗﺩﻤﻭﺍ ﻟﻲ ﺍﻟﻜﺜﻴﺭ ﻭﺨﺎﺼﺔ ﻓﻲ ﻤﺠﺎل ﺍﻟﺒﺭﻤﺠﺔ ﻜﻨﺕ ﻗﺩ ﺍﻟﺘﻘﻴﺕ ﺒﻬﻡ ﻋﻠﻰ ﺍﻻﻨﺘﺭﻨﺕ ﻓﻲ ﺍﻟﻤﻨﺘﺩﻴﺎﺕ ﻭﺴﺎﺤﺎﺕ ﺍﻟﺤﻭﺍﺭ ﻭﻜﺎﻥ ﻋﻁﺎﺌﻬﻡ ﻤﻥ ﺩﻭﻥ ﻁﻠﺏ ﺤﺘﻰ ﺃﻨﻬﻡ ﻟﻡ ﻴﻁﻠﺒﻭﺍ ﺍﻟﺸﻜﺭ ﻋﻠﻰ ﺍﻟﻤﺴﺎﻋﺩﺓ.
2
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻔﻬﺮﺱ ﺍﻟﺼﻔﺤﺔ ﺍﻟﻤﻭﻀﻭﻉ ﺍﻟﻤﻘﺩﻤﺔ 5 ................................................................................ ﻨﺒﺫﻩ ﻋﻥ ﺩﻟﻔﻲ 7 .......................................................................... ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻷﻭل 10 ......................................................................... ﺍﻟﻭﺤﺩﺓ 15 .......................................................................... unit ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺼﺭ 16 ................................................................. ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺤﺩﺍﺙ ) 18 ..................................................... ( Events ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻭﺍﺠﻬﺔ ﺍﻟﺩﻟﻔﻲ 20 ............................................................... ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﻤﺫﻜﺭﺓ 24 ................................................. Memo ﺇﻨﺸﺎﺀ ﻗﻭﺍﺌﻡ ﻟﻠﻨﻤﺎﺫﺝ ....................................................................
27
ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ 29 ........................................................ Data Type ﺍﻹﺠﺭﺍﺀﺍﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ 35 ................................................................... ﺒﻌﺽ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺩﻟﻔﻲ 43 ......................................................... ﺼﻨﺎﺩﻴﻕ ﺍﻟﺤﻭﺍﺭ 48 .............................................................. Dialog
ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ 52 ..................................................... MaskEdit ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺴﻼﺴل ﺍﻟﻨﺼﻴﺔ 55 ........................................................... ﻤﻌﺎﻟﺠﺔ ﺍﻷﺨﻁﺎﺀ ﻓﻲ ﺩﻟﻔﻲ ..............................................................
60
ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ........................................................................
69
ﺒﻨﺎﺀ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ 77 ............................................................ ﺒﻨﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ 86 .......................................... Database Desktop ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺨﻼل ﺩﻟﻔﻲ 100 ............................................... ﺍﻟﺒﺤﺙ ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ..............................................................
111
ﺍﻟﺤﻘﻭل ﺍﻟﺤﺴﺎﺒﻴﺔ 117 ....................................................................... ﻟﻐﺔ ﺍﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺒﻨﻴﻭﻴﺔ 118 .................................................... SQL : ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل .........................................................................
123
ﺇﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺒﺒﺭﻨﺎﻤﺞ ...................................................... Access
131
3
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
................................................................................ ADO
137
ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ ...................................................................
140
ﺍﻟﻁﺒﺎﻋﺔ ...............................................................................
146
ﻟﻤﺴﺎﺕ ﺒﺭﻤﺠﻴﺔ 147 ........................................................................ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ 150 ................................................ Windows Registry ﺘﻭﺍﺒﻊ ﻭﺜﻭﺍﺒﺕ ﺍﻟﻭﻴﻨﺩﻭﺯ ............................................. Windows API
154
ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ 158 .................................................................. ﺍﻟﺴﺤﺏ ﻭﺍﻹﻓﻼﺕ167 ....................................................................... ﺍﻟﺭﺴﻡ ﻓﻲ ﺩﻟﻔﻲ ........................................................................
169
ﺒﺭﻤﺠﺔ ﺍﻷﻭﺴﺎﻁ ﺍﻟﻤﺘﻌﺩﺩﺓ 182 ............................................................... ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ 184 .................................................................... ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ 183 ........................................................................ 197 ﺍﻟﺒﺭﻨﺎﻤﺞ ............................................. Install Shelled Express
4
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﳌﻘﺪﻣﺔ ﺒﺴﻡ ﺍﷲ ﻭﺍﻟﺤﻤﺩ ﷲ ﻭﺍﻟﺼﻼﺓ ﻭﺍﻟﺴﻼﻡ ﻋﻠﻰ ﺭﺴﻭل ﺍﷲ ﺃﻤﺎ ﺒﻌﺩ: ﻫﺫﻩ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﻜﻨﺕ ﻗﺩ ﺍﻋﺩﺩﺘﻬﺎ ﺃﺜﻨﺎﺀ ﺘﺩﺭﻴﺴﻲ ﻟﻠﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺩﻟﻔﻲ ﺴﻨﺔ 2003ﻓﻲ ﻤﺭﻜﺯ ﺍﻟﺸﺒﻴﺒﺔ ﻟﻠﻌﻠﻭﻡ ﻭﺍﻟﺤﺎﺴﻭﺏ ،ﻭﻤﻥ ﺫﻟﻙ ﺍﻟﻭﻗﺕ ﻭﺃﻨﺎ ﺃﻓﻜﺭ ﺒﻨﺸﺭ ﻫﺫﻩ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﻋﻠﻰ ﺍﻹﻨﺘﺭﻨﺕ ﻭﻟﻜﻥ ﺍﻟﻌﻤل ﺃﺨﺫ ﻜل ﻭﻗﺘﻲ ﻤﻨﺫ ﺫﻟﻙ ﺍﻟﺤﻴﻥ ﻭﻟﻡ ﺃﺠﺩ ﺍﻟﻭﻗﺕ ﺍﻟﻜﺎﻓﻲ ﻹﺘﻤﺎﻡ ﺫﻟﻙ. ﻭﻜﻨﺕ ﻗﺩ ﻓﻜﺭﺕ ﺤﻴﻨﻬﺎ ﺃﻨﻪ ﻴﺠﺏ ﺘﻨﻘﻴﺢ ﻫﺫﻩ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﻟﻐﻭﻴﹰﺎ ﻭﻋﻠﻤﻴﹰﺎ ﻗﺒل ﻨﺸﺭﻫﺎ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﺠﻌﻠﻨﻲ ﺃﺠﺩ ﻤﻥ ﻨﺸﺭﻫﺎ
ﻼ ﺸﺎﻗﹰﺎ ﻭﻴﺄﺨﺫ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺠﻬﺩ ﻭﻟﺫﻟﻙ ﻗﺭﺭﺕ ﻫﺫﻩ ﺍﻟﻌﺎﻡ 2006ﺃﻥ ﺃﻁﺭﺤﻬﺎ ﻜﻤﺎ ﻫﻲ ﻤﻊ ﺍﻟﻘﻠﻴل ﺍﻟﻘﻠﻴل ﻤﻥ ﺍﻟﺘﻨﻘﻴﺢ ﻋﻤ ﹰ
ﻓﻼ ﺍﻋﺘﻘﺩ ﺃﻨﻲ ﺴﺄﺠﺩ ﺍﻟﻭﻗﺕ ﺍﻟﻤﻨﺎﺴﺏ ﻟﻨﺸﺭ ﻫﺫﻩ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒل. ﻟﻤﺎﺫﺍ ﺩﻟﻔﻲ؟
ﻅﻬﺭ ﻜﺜﻴﺭﹰﺍ ﻤﻥ ﺍﻟﻨﺯﺍﻉ ﻓﻲ ﻤﻭﺍﻗﻊ ﺍﻹﻨﺘﺭﻨﺕ ﺤﻭل ﺃﻴﻬﻤﺎ ﺃﻓﻀل ﻓﻴﺠﻭل ﺒﻴﺴﻙ ﺃﻡ ﺩﻟﻔﻲ ﻭﻻ ﺃﺭﻴﺩ ﻫﻨﺎ ﺃﻥ ﺃﺩﺨل ﻓﻲ ﻫﺫﻩ ﺍﻟﻤﻨﺎﻗﺸﺎﺕ ﻭﻟﻜﻨﻲ ﺍﺨﺘﺭﺕ ﺍﻟﺩﻟﻔﻲ ﻟﺴﺒﺒﻴﻥ : – 1ﻴﺩﺭﺱ ﻜل ﻁﻼﺏ ﺍﻟﻬﻨﺩﺴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺘﻴﺔ ﻓﻲ ﺴﻭﺭﻴﺔ ﻟﻐﺔ ﺍﻟﺒﺎﺴﻜﺎل ﻭﺍﻟﺘﻲ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻡ ﻟﻠﺩﻟﻔﻲ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻜﻭﻥ ﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﺩﻟﻔﻲ ﺴﻠﺱ ﻭﺴﻬل.
– 2ﺍﻟﻤﻭﻀﺔ :ﻗﺩ ﻴﻔﺎﺠﺊ ﺍﻟﺒﻌﺽ ﻤﻥ ﻫﺫﺍ ﺍﻟﺴﺒﺏ ﻭﻟﻜﻥ ﻭﺒﻜل ﺼﺭﺍﺤﺔ ﺍﻗﺘﻨﻴﺕ ﺤﺎﺴﺒﹰﺎ ﺴﻨﺔ 1997ﻭﻜﻨﺕ ﻓﻲ ﺍﻟﺴﻨﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺔ ﻭﻜﺎﻨﺕ ﻨﺴﺨﺔ ﺍﻟﺩﻟﻔﻲ 2ﻗﺩ ﻅﻬﺭﺕ ﻷﻭل ﻤﺭﺓ ﻭﻜﺎﻥ ﺍﻟﻜﺜﻴﺭ ﻴﺩﺭﺱ ﺍﻟﺩﻟﻔﻲ ﻓﻲ ﺍﻟﻜﻠﻴﺔ ﺒﺎﻟﺭﻏﻡ ﻤﻥ ﺃﻨﻬﺎ ﻏﻴﺭ ﻤﻘﺭﺭﺓ ﻓﻲ ﺍﻟﻤﻨﻬﺎﺝ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﺠﻌل ﺍﻟﺩﻟﻔﻲ ﺘﻨﺘﺸﺭ ﻜﻤﺎ ﺘﻨﺘﺸﺭ ﺍﻟﻤﻭﻀﺔ ﺍﻟﺠﺩﻴﺩﺓ ﺒﻴﻥ ﺍﻟﻨﺴﺎﺀ ،ﺒﺎﻟﻨﺴﺒﺔ ﻟﻤﻥ ﻴﺭﻭﻥ ﺃﻥ ﺘﻌﺒﻴﺭ ﻤﻭﻀﺔ ﻟﻴﺱ ﻓﻲ ﻤﺤﻠﻪ ﺃﺫﻜﺭﻫﻡ ﺃﻥ ﺍﻟﻤﻭﻀﺔ ﻓﻲ ﻋﺎﻡ 2005ﻜﺎﻨﺕ C#ﻭﻻ ﺃﻋﺭﻑ ﺃﻴﻥ ﺴﺘﺘﺠﻪ ﺍﻟﻤﻭﻀﺔ ﻫﺫﺍ
ﺍﻟﻌﺎﻡ.
ﺭﺤﻠﺘﻲ ﻤﻊ ﺩﻟﻔﻲ:
ﺒﺩﺃﺕ ﺒﺩﺍﺭﺴﺔ ﺍﻟﺩﻟﻔﻲ ﻜﻤﺎ ﻗﻠﺕ ﻓﻲ ﻋﺎﻡ 1997ﻭﺒﻌﺩﻫﺎ ﺃﺼﺒﺤﺕ ﻤﺩﻤﻨﹰﺎ ﻟﻠﺩﻟﻔﻲ ﻜﻨﺕ ﺃﻟﻌﺏ ﺍﻟﺩﻟﻔﻲ ﺒﻴﻨﻤﺎ ﻜﺎﻥ ﺃﺼﺩﻗﺎﺌﻲ ﻴﻠﻌﺒﻭﻥ ﻓﻴﻔﺎ 98ﺃﻭ ﺭﻭﺩ ﺭﺵ . ﻭﻟﻜﻥ ﻓﻲ ﻋﺎﻡ 2004ﺒﺩﺃﺕ ﺤﻴﺎﺘﻲ ﺘﺄﺨﺫ ﻤﺴﺎﺭﹰﺍ ﺁﺨﺭ ﻓﻌﻤﻠﻲ ﺃﺼﺒﺢ ﻴﺘﻁﻠﺏ ﺍﻟﻌﻤل ﻋﻠﻰ ﺸﺒﻜﺎﺕ ﻟﻴﻨﻜﺱ ﻭﺍﻟﺘﻲ ﺘﺄﺨﺫ
ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻭﻗﺕ ﺒﺎﻹﻀﺎﻓﺔ ﺃﻨﻨﻲ ﺘﻌﺭﻓﺕ ﻋﻠﻰ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﺠﺩﻴﺩﺓ ﻭﻫﻲ PHPﻭﺍﻟﺘﻲ ﺃﺼﺒﺤﺕ ﺘﺄﺨﺫ ﺤﻴﺎﺘﻲ ﺸﻴﺌﹰﺎ ﻓﺸﻴﺌﺎﹰ، ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﺠﻌﻠﻨﻲ ﺃﺒﺘﻌﺩ ﻋﻥ ﺍﻟﺩﻟﻔﻲ ﺤﺘﻰ ﺃﻨﻲ ﺘﻭﻗﻔﺕ ﺍﻟﺴﻨﺔ ﺍﻟﻤﺎﻀﻴﺔ ﻋﻥ ﺍﻟﻌﻤل ﺒﻬﺎ ﺃﻭ ﺘﺩﺭﻴﺴﻬﺎ ﺘﻤﺎﻤﹰﺎ. ﻟﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ؟
ﺒﺎﻟﺭﻏﻡ ﻤﻥ ﺃﻨﻨﻲ ﺤﺎﻭﻟﺕ ﺘﺒﺴﻴﻁ ﺍﻟﻜﺘﺎﺏ ﻤﺎ ﺃﻤﻜﻥ ﻭﻟﻜﻨﻨﻲ ﺘﻭﺠﻬﺕ ﻓﻲ ﺇﻋﺩﺍﺩ ﻫﺫﻩ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﺇﻟﻰ ﻁﻼﺏ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺘﻴﺔ ﻭ ﻜﻠﻴﺔ ﺍﻟﺤﺎﺴﺒﺎﺕ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﺠﻌﻠﻨﻲ ﺃﻓﺘﺭﺽ ﺃﻥ ﻗﺎﺭﺉ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻟﺩﻴﻪ ﺇﻟﻤﺎﻡ ﻭﻟﻭ ﺒﺴﻴﻁ ﺒﻠﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ.
5
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﻤﺎﺫﺍ ﺃﻨﺸﺭ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ : ) ﺍﻗﺘﺒﺱ ﻫﺫﻩ ﺍﻟﻜﻼﻡ ﻤﻥ ﻤﻘﺩﻤﺔ ﻜﺘﺎﺏ ﺍﺤﺘﺭﺍﻑ Visual Basic.Netﻟﻤﺅﻟﻔﺔ ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ(:
ل ﻥ ﺴﻴﺘﺴﺎﺀﻟﻭﻥ :ﻤﺎ ﻫﻭ ﺍﻟﺩﺍﻓﻊ ﺍﻟﺫﻱ ﺤﺩﺍﻙ ﻟﺒﺫل ﻫﺫﺍ ﺍﻟﻤﺠﻬﻭﺩ؟ ..ﻭﺇﻨﹼﻲ ﻷﺠﺩﻫﺎ ﻓﺭﺼ ﹰﺔ ﻤﻨﺎﺴـﺒ ﹰﺔ ﻷﻨﻘـ َ ﻥ ﺍﻟﻜﺜﻴﺭﻴ ﻑﺃ ﺃﻋﺭ ﹸ
ﻥ ﺠﺯﺀﺍ ﻤـﻥ ﻥ ﻟﻬﻡ ﻜ ﱠ ﺱ ﺃﻜ ﻟﻜﻡ ﻓﻜﺭ ﹰﺓ ﺘﻌﻠﻤﺘﻬﺎ ﻤﻥ ﺍﺤﺘﻜﺎﻜﻲ ﺒﺄﻨﺎ ٍ ﻥ ﺍﻹﻨﺴﺎ ِ ل ﻜﻭ ِ ل ﺍﻟﻭ ﺩ ﻭﺍﻻﺤﺘﺭﺍﻡ ..ﻫﺫﻩ ﺍﻟﻔﻜﺭ ﹸﺓ ﺘﺩﻭ ﺭ ﺤﻭ َ ﻥ ﻤﻌﺎ. ﻥ ﻤﻌﺎ ﻭﻴﺸﻘﻴﺎ ِ ﻥ ﻤﺼﻴﺭﻩ ﻤﺭﺘﺒﻁ ﺒﻤﺼﻴﺭ ﻫﺫﺍ ﺍﻟﻤﺠﺘﻤﻊ ،ﻴﺴﻌﺩﺍ ِ ﻤﺠﺘﻤﻌِﻪ ،ﻟﻬﺫﺍ ﻓﻤﻬﻤﺎ ﻜﺎﻨﺕ ﺃﻗﺩﺍﺭ ﻫﺫﺍ ﺍﻹﻨﺴﺎﻥ ،ﻓﺈ ﻙ ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﻤﻌﺩﻡ؟ ﻓﻤﺎ ﻓﺎﺌﺩ ﹸﺓ ﺃﻥ ﺘﻤِﻠ ﻭﻤﺎ ﺠﺩﻭﻯ ﺃﻥ ﺘﺸﻌ ﺭ ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﻤﺘﺤﺠﺭ؟
ﻑ ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﻴﺠﻬل؟ ﻭﻤﺎ ﻗﻴﻤ ﹸﺔ ﺃﻥ ﺘﻌﺭ ﹶ ﻑ ﺃﻥ ﺘﻔﻬ ﻡ ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﻤﺘﺒﻠﹼﺩ؟ ﻭﻤﺎ ﻫﺩ ﹸ
ﻉ ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﻤﺘﺩﻨﹼﻲ ﺍﻟﺫﺍﺌﻘ ِﺔ ﻭﺍﻟﺜﻘﺎﻓﺔ؟ ﻭﻤﺎ ﻤﻐﺯﻯ ﺃﻥ ﺘﹸﺒﺩ ﻥ ﺱ ﺁﺨﺭﻭﻥ ،ﺒﺤﻴﺙ ﺘﻌ ﻡ ﺍﻟﻔﺎﺌﺩﺓ ﻋﻠﻰ ﺍﻟﺠﻤﻴﻊ ،ﻓﻲ ﺇﻁﺎ ٍﺭ ﻤﻥ ﺍﻟﺘﻌـﺎﻭ ِ ﻙ ﻤﻌﻙ ﻓﻴﻪ ﺃﻨﺎ ل ﻫﺫﺍ ﻗﻴﻤ ﹲﺔ ﺇﺫﺍ ﻟﻡ ﻴﺘﺸﺎﺭ ﻥ ﻟﻜ ﱢ ﻟﻥ ﻴﻜﻭ ﻭﺍﻟﻭ ﺩ.
ﺵ ﺒﺩﻭﻨِﻬﺎ ،ﺘﻤﺎﻤﺎ ﻜﺎﻟﻁﻌـﺎ ِﻡ ﻥ ﺍﻟﺤﻴﻭ ﻴ ِﺔ ﺍﻟﺘﻲ ﻻ ﻴﺴﺘﻁﻴ ﻊ ﺍﻟﻌﻴ ﹶ ﺕ ﺍﻹﻨﺴﺎ ِ ﺱ ﺒﺎﻻﻨﺘﻤﺎ ِﺀ ﻫﻲ ﺤﺎﺠ ﹲﺔ ﻤﻥ ﺤﺎﺠﺎ ِ ﻥ ﺍﻟﺤﺎﺠ ﹶﺔ ﻟﻺﺤﺴﺎ ِ ﺇ ﻙ ﻭﻤﺒﺎﺩﺌﻙ ﻭﺜﻘﺎﻓﺘِﻙ ﻭﺇﺒﺩﺍﻋﻙ؟؟!! ﻥ ﻟﻤﺴﺘﻭﻯ ﺨﹸﻠﻘ ِ ﺱ ﻴﺭﻗﻭ ﻭﺍﻟﺸﺭﺍﺏ! ..ﻭﻟﻜﻥ ..ﻫل ﻴﻤﻜﻨﹸﻙ ﺃﻥ ﺘﻨﺘﻤﻲ ﺇﻻ ﻷﻨﺎ ٍ ل ﺤﺘﹼﻰ ﻴﺠ ﺩ ﻤﻥ ﻥ ﻓﻲ ﻤﻌﺭﻓﺘِﻪ ﻭﻋﻠﻤِﻪ ،ﻋﻠﻰ ﺍﻷﻗ ﱢ ﻙ ﺍﻵﺨﺭﻴ ل ﺃﻥ ﻴﺸﺎﺭ ﺕ ﺃﻥ ﻴﺤﺎﻭ َ ل ﻤﻥ ﻴﻘﺭُﺃ ﻫﺫﻩ ﺍﻟﻜﻠﻤﺎ ِ ﻥ ﻫﺫﻩ ﺩﻋﻭ ﹲﺓ ﻟﻜ ﱢ ﺇ ﻕ ﻋﻠﻴﻪ ﻗﻭل ﺍﻟﺭﺴﻭ ِ ﻴﻘﺩ ﺭ ﻫﺫﻩ ﺍﻟﻤﻌﺭﻓ ﹶﺔ ﻭﻴﺤﺘﺭ ﻡ ﻫﺫﺍ ﺍﻟﻌﻠﻡ ،ﻓﻲ ﻤﺠﺘﻤ ٍﻊ ﺍﺨﺘﻠﹼﺕ ﺒﻪ ﻜ ّ ل )ﺼـﻠﹼﻰ ل ﺍﻟﻤﻘﺎﻴﻴﺱ!! ،ﻭﺤﺘﹼﻰ ﻴﻨﻁﺒ ﹶ ﺱ ﺃﻨﻔﻌﻬﻡ ﻟﻠﻨﺎﺱ". ﷲ ﻋﻠﻴﻪ ﻭﺴﻠﹼﻡ(" :ﺨﻴ ﺭ ﺍﻟﻨﺎ ِ ﺍ ُ
ﻭﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﺃﺭﺠﻭﺍ ﻤﻥ ﻜل ﻤﻥ ﻴﺴﺘﻔﻴﺩ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺃﻥ ﻴﺩﻋﻭ ﻟﻲ ﺒﺎﻟﻬﺩﺍﻴﺔ ﻭﺍﻟﺘﻭﻓﻴﻕ ﻭﺍﻟﻨﺠﺎﺡ ﻭﻟﻸﻤﺔ ﺍﻹﺴﻼﻤﻴﺔ ﺒﺎﻟﻨﺼﺭ ﻭﺍﻟﻌﺯﺓ ﻭﺍﻟﺨﺭﻭﺝ ﻤﻤﺎ ﻫﻲ ﻓﻴﻪ ﻤﻥ ﻤﺤﻥ.. ﺍﻟﻠﻬﻡ ﻋﻠﻤﻨﺎ ﻤﺎ ﻴﻨﻔﻌﻨﺎ ﻭﺍﻨﻔﻌﻨﺎ ﺒﻤﺎ ﻋﻠﻤﺘﻨﺎ ﻭﺍﻨﻔﻊ ﺍﻟﻨﺎﺱ ﺒﻨﺎ ﻭﺍﻏﻔﺭ ﻟﻨﺎ ﻭﺍﺭﺤﻤﻨﺎ ﺇﻨﻙ ﺃﻨﺕ ﺍﻟﻐﻔﻭﺭ ﺍﻟﺭﺤﻴﻡ
ﻤﺤﻤﺩ ﺨﺎﻟﺩ ﻨﺎﺼﺭ ﺁﻏﺎ ﺴﻭﺭﻴﺔ -ﺠﺎﻤﻌﺔ ﺤﻠﺏ ﺍﻟﺤﺭﻡ ﺍﻟﺠﺎﻤﻌﻲ ﺍﻟﺭﻗﻤﻲ ﺍﻟﻔﺭﺍﻨﻜﻔﻭﻨﻲ
[email protected]
6
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻷﻭﻟﻰ ﻨﺒﺫﻩ ﻋﻥ ﺩﻟﻔﻲ : ﻤﻥ ﺍﻟﻤﻌﺭﻭﻑ ﺃﻥ ﺩﻟﻔﻲ ﻫﻲ ﻤﻨﺘﺞ ﺒﻭﺭﻻﻨﺩ ﺍﻷﻜﺜﺭ ﻤﺒﻴﻌﹰﺎ ﻟﻠﺘﻁﻭﻴﺭ ﺍﻟﺴﺭﻴﻊ ﻟﻠﺘﻁﺒﻴﻘﺎﺕ RAD (Rapid Application
)Developmentﻭﺍﻟﻤﺴﺘﺨﺩﻡ ﻟﻜﺘﺎﺒﺔ ﺘﻁﺒﻴﻘﺎﺕ ﻭﻴﻨﺩﻭﺯ ،ﻭﻴﻤﻜﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺩﻟﻔﻲ ﺇﻨﺸﺎﺀ ﺘﻁﺒﻴﻘﺎﺕ ﻭﻴﻨـﺩﻭﺯ ﺒـﺴﺭﻋﺔ
ﺃﻜﺒﺭ ﻭﺒﺴﻬﻭﻟﺔ ﺃﻜﺜﺭ ﻤﻥ ﺃﻱ ﻭﻗﺕ ﻤﻀﻰ. ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻨﻪ ﻨﺴﺘﻁﻴﻊ ﺇﻨﺸﺎﺀ ﻭﺍﺠﻬﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ ) ﻴﻘﺼﺩ ﺒﻭﺍﺠﻬﺔ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺍﻟﻘـﻭﺍﺌﻡ ﻭﻤﺭﺒﻌـﺎﺕ ﺍﻟﺤـﻭﺍﺭ ﻭﺍﻹﻁـﺎﺭ ﺍﻟﺭﺌﻴﺴﻲ (..ﻟﻠﺒﺭﻨﺎﻤﺞ ﻤﺴﺘﺨﺩﻤﻴﻥ ﺘﻘﻨﻴﺎﺕ ﺍﻟﺴﺤﺏ ﻭﺍﻹﻓﻼﺕ ﻟﻤﻁﻭﺭ ﺘﻁﺒﻴﻘﺎﺕ ﺴﺭﻴﻊ ،ﻭﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﻭﻀـﻊ ﺘﺤﻜﻤـﺎﺕ ﺃﻜﺘﻴﻑ ﺇﻜﺱ ) Active Xﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﻓﻴﺠﻭل ﺒﻴﺴﻙ ( ﻋﻠﻰ ﺍﻟﻨﻤﺎﺫﺝ ﻹﻨﺸﺎﺀ ﺒﺭﺍﻤﺞ ﻤﺘﺨﺼﺼﺔ ﻤﺜل ﺒﺭﺍﻤﺞ
ﺍﺴﺘﻌﺭﺍﺽ ﺍﻟﻭﻴﺏ ﻓﻲ ﺩﻗﺎﺌﻕ ،ﺘﻘﻭﻡ ﺩﻟﻔﻲ ﺒﻌﻤل ﺠﻴﺩ ﻭﺫﻟﻙ ﺒﺈﺨﻔﺎﺀ ﺒﻌﺽ ﺍﻟﺘﻔﺼﻴﻼﺕ ﺍﻟﺘﻲ ﺘﺸﻜل ﺃﺤﺸﺎﺀ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻭﻴﻨﺩﻭﺯ ﻭﻟﻜﻥ ﻟﻴﺱ ﺒﺈﻤﻜﺎﻨﻬﺎ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺒﺸﻜل ﻜﺎﻤل ،ﻟﺫﻟﻙ ﻴﺠﺏ ﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﺒﺭﻤﺞ ﺠﻴﺩﹰﺍ ،ﻭﻴﻤﻜﻥ ﻟﻬﺫﻩ ﺍﻟﻌﻤﻠﻴـﺔ
ﺃﻥ ﺘﻜﻭﻥ ﻁﻭﻴﻠـﺔ ،ﻭﺍﻟﺨﺒـﺭ ﺍﻟﺠﻴـﺩ ﺃﻥ ﺩﻟﻔـﻲ ﺘﺠﻌـل ﺍﻟﺭﺤﻠـﺔ ﻏﻴـﺭ ﻤﺘﻌﺒـﺔ ﻭﺤﺘـﻰ ﺃﻨﻬـﺎ ﺘﺠﻌﻠﻬـﺎ ﻤﻤﺘﻌـﺔ. ﻨﻅﺭﺓ ﺴﺭﻴﻌﺔ ﻋﻠﻰ ﻤﻜﻭﻨﺎﺕ ﺩﻟﻔﻲ IDE ﺴﻨﺘﻌﺭﻑ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻋﻠﻰ ﺒﻴﺌﺔ ﺍﻟﺘﻁﻭﻴﺭ ﺍﻟﻤﺘﻜﺎﻤﻠﺔ ﻟﻠﺩﻟﻔﻲ IDE (Delphi Integrated Development Environment). ﻋﻨـﺩﻤﺎ ﺘـﺸﻐل ﺒﺭﻨـﺎﻤﺞ ﺍﻟـﺩﻟﻔﻲ ﺘﻅﻬـﺭ ﺒﻴﺌـﺔ ﺍﻟﺘﻁـﻭﻴﺭ ﻓﻴـﻪ ﻭﺍﻟﺘـﻲ ﺴـﻨﺘﻌﺭﻑ ﻋﻠﻴﻬـﺎ ﻜـل ﻋﻠـﻰ ﺤـﺩﻩ ﺒﻴﺌـــﺔ ﺩﻟﻔـــﻲ ﻤﻜﻭﻨـــﺔ ﻤـــﻥ ﺜﻼﺜـــﺔ ﺃﻗـــﺴﺎﻡ
:
1
ـ
ﺍﻹﻁـــﺎﺭ ﺍﻟﻌﻠـــﻭﻱ:
ﻴﻤﻜﻥ ﺍﻋﺘﺒﺎﺭﻩ ﺍﻹﻁﺎﺭ ﺍﻟﺭﺌﻴﺴﻲ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺃﺸﺭﻁﺔ ﺍﻷﺩﻭﺍﺕ ﻭﻟﻭﺤﺔ ﺍﻟﻤﻜﻭﻨﺎﺕ ﺘﻭﺼل ﺃﺸـﺭﻁﺔ ﺃﺩﻭﺍﺕ ﺩﻟﻔـﻲ ﺇﻟـﻰ
ﻭﻅﺎﺌﻑ ﻜﺎﻟﻔﺘﺢ ﻭﺍﻟﺘﺨﺯﻴﻥ ﻭﺍﻟﺒﻨﺎﺀ ﻭﺘﺤﺘﻭﻱ ﻟﻭﺤﺔ ﺍﻟﻤﻜﻭﻨﺎﺕ ﻋﻠﻰ ﻜﺜﻴﺭ ﻤﻥ ﻤﻜﻭﻨﺎﺕ ﺩﻟﻔﻲ ﺍﻟﺘﻲ ﻴﻤﻜـﻥ ﻭﻀـﻌﻬﺎ ﻓـﻲ
ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻻﻓﺘﺔ ﻨﺼﻴﺔ ،ﻋﻠﺏ ﺘﺤﺭﻴﺭ ،ﻤﺭﺒﻌﺎﺕ ﺴﺭﺩ ﻭﺃﺯﺭﺍﺭ ﻭﻤﺎ ﺸﺎﺒﻪ ﺫﻟﻙ ( ،ﻟﺘﻜﻭﻥ ﺃﻜﺜﺭ ﻤﻼﺌﻤﺔ ﻓﺈﻥ ﺍﻟﻤﻜﻭﻨـﺎﺕ ﻤﻘﺴﻤﺔ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺎﺕ ،ﺤﺘﻰ ﺘﻀﻊ ﻤﻜﻭﻥ ﻋﻠﻰ ﺒﺭﻨﺎﻤﺠﻙ ﺍﻨﻘﺭ ﻋﻠﻰ ﺍﻟﻤﻜﻭﻥ ﻭﻤﻥ ﺜﻡ ﺍﻨﻘﺭ ﻋﻠﻰ ﺍﻟﻤﻜﺎﻥ ﺤﻴـﺙ ﺘﺭﻴـﺩ ﻭﻀﻊ ﺍﻟﻤﻜﻭﻥ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ.
7
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ) :ﺴﻨﺘﻌﺭﻑ ﻋﻠﻴﻪ ﺒﺎﻟﺘﻔﺼﻴل ﻓﻲ ﺩﺭﻭﺱ ﻗﺎﺩﻤﺔ ( ﻭﺍﻟﺫﻱ ﻴﺘﻡ ﺒﻭﺍﺴﻁﺘﻪ ﺘﻌﺩﻴل ﺍﻟﺨﺼﺎﺌﺹ ﻭﺍﻷﺤﺩﺍﺙ ﻟﻠﻌﻨﺼﺭ ﻭﺴﻭﻑ ﻨﺴﺘﺨﺩﻤﻪ ﺒﺸﻜل ﺩﺍﺌﻡ ﺨﻼل ﻋﻤﻠﻨﺎ ﻤﻊ ﺩﻟﻔﻲ ﻭﻫﻨﺎﻙ ﺼﻔﺤﺘﻴﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻫﻤﺎ ﺍﻟﺨﺼﺎﺌﺹ Properties ﻭﺍﻷﺤﺩﺍﺙEvents.
ﻤﺼﻁﻠﺢ ﺍﻟﺨﺎﺼﺔ Propertyﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺨﺼﺎﺌﺹ ﻟﻬﺎ ﻗﻴﻡ ﺘﺤﺩﺩ ﻋﻤل ﺍﻟﻌﻨﺼﺭ ﻴﺘﻀﻤﻥ ﺒﺎﺏ ﺍﻷﺤﺩﺍﺙ Eventsﻗﺎﺌﻤﺔ ﺃﺤﺩﺍﺙ ﺍﻟﻌﻨﺼﺭ ،ﺘﺘﺸﻜل ﺍﻷﺤﺩﺍﺙ ﻨﺘﻴﺠﺔ ﻟﺘﻔﺎﻋل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻊ ﺍﻟﻤﻜﻭﻥ ﻤﺜﻼ ﻋﻨﺩ ﻨﻘﺭ ﺍﻟﻤﻜﻭﻥ ﻴﺘﻭﻟﺩ ﺤﺩﺙ ﻴﺨﺒﺭﻙ ﺒﺄﻥ ﺍﻟﻤﻜﻭﻥ ﻗﺩ ﻨﻘﺭ
ﺒﺈﻤﻜﺎﻨﻙ ﻜﺘﺎﺒﺔ ﺃﻭﺍﻤﺭ ﺘﺴﺘﺠﻴﺏ ﻟﻬﺫﻩ ﺍﻷﺤﺩﺍﺙ. ﻤﺼﻁﻠﺢ ﺍﻟﺤﺩﺙ Eventﻫﻭ ﺸﻲﺀ ﻤﺎ ﻴﺤﺼل ﻜﻨﺘﻴﺠﺔ ﻟﺘﻔﺎﻋل ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻭ ﻤﻊ ﻭﻴﻨﺩﻭﺯ
ﻼ( ) ﺤﺩﺙ ﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﻤﺜ ﹰ
ﻤﺼﻁﻠﺢ ﻤﻌﺎﻤل ﺍﻟﺤﺩﺙ Event Handlerﻫﻭ ﻤﻘﻁﻊ ﻤﻥ ﺍﻟﺒﺭﻤﺠﺔ ﻴﻨﻔﺫ ﺍﺴﺘﺠﺎﺒﺔ ﻟﻠﺤﺩﺙ.
3ـ ﻤﻨﻁﻘﺔ ﻋﻤل ﺩﻟﻔﻲ :
ﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻟﺙ ﻫﻭ ﻤﻨﻁﻘﺔ ﻋﻤل ﺩﻟﻔﻲ ﻭﻋﺎﺩﺓ ﻤﺎ ﻴﻅﻬﺭ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ،ﻓﻲ ﺍﻟﻤﻘﺩﻤﺔ ﻤﺼﻤﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺨﻠﻔﻪ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺍﻟﺫﻱ ﺘﺩﺨل ﻋﺒﺭﻩ ﺍﻟﺒﺭﻤﺠﺔ ﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺠﻙ. ﻼ ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﻤﺼﻤﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺘﺘﻔﺎﻋل ﻓﻴﻤﺎ ﻭﻜ ﹰ ﺒﻴﻨﻬﺎ ﻋﻨﺩ ﺒﻨﺎﺀ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﻟﺘﻭﻟﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ.
4ـ ﺸﺠﺭﺓ ﺍﻟﻌﻨﺎﺼﺭ : ﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻠﻰ ﺸﻜل ﺸﺠﺭﺓ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ : 8
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺃ ـ ﺍﻟﻘﻭﺍﺌﻡ :ﺴﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻘﺎﺌﻤﺔ Fileﺒﺎﻟﺘﻔﺼﻴل ﻷﻨﻬﺎ ﺃﺴﺎﺱ ﺍﻟﻌﻤل ﻤﻊ ﺍﻟﺒﻴﺌﺔ ﻭﻤﻥ ﺜﻡ ﺒﺎﻗﻲ ﺍﻟﻘﻭﺍﺌﻡ ﺴﺘﺸﺭﺡ ﻓﻲ ﺤﻴﻨﻬﺎ : 1ـ : File Menuﻭﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺍﻷﻭﺍﻤﺭ ﺍﻟﺘﺎﻟﻴﺔ : ـ : Newﻭﺘﻅﻬﺭ ﻋﻨﻪ ﻗﺎﺌﻤﺔ ﻓﺭﻋﻴﺔ )(1
: Applicationﺍﻟﺒﺩﺀ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ) ﻴﻌﻤل ﺘﺤﺕ ﻨﻅﺎﻡ ﻭﻴﻨﺩﻭﺯ ( .
)(2
: CLXﺍﻟﺒﺩﺀ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ) ﻴﻌﻤل ﺘﺤﺕ ﻨﻅﺎﻡ ﻟﻴﻨﻜﺱ ﻭﻭﻴﻨﺩﻭﺯ ( .
)(3
:Data Modelﺇﻨﺸﺎﺀ ﻭﺤﺩﺓ ﺠﺩﻴﺩﺓ )ﻴﺘﻡ ﺍﻟﻭﺼﻭل ﻟﻬﺎ ﻤﻥ ﺠﻤﻴﻊ ﻨﻤﺎﺫﺝ ﺍﻟﻤﺸﺭﻭﻉ(.
)(4
: Formﺇﻀﺎﻓﺔ ﻨﻤﻭﺩﺝ ﺠﺩﻴﺩ ﻟﻠﻤﺸﺭﻭﻉ .
)(5
: Frameﺘﺼﻤﻴﻡ ﻋﻨﺼﺭ ﻴﺤﻭﻱ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻟﻼﺴﺘﺨﺩﺍﻡ ﻤﻊ ﻨﻤﺎﺫﺝ ﺍﻟﻤﺸﺭﻭﻉ ) ﺴﻴﺘﻡ
ﺸﺭﺤﺔ ﻓﻴﻤﺎ ﺒﻌﺩ ﺒﻤﺜﺎل ﺨﺎﺹ . )(6
: Othersﺴﻴﺘﻡ ﺸﺭﺤﻬﺎ ﻓﻲ ﺤﻴﻨﻬﺎ .
ـ : Openﻟﻔﺘﺢ ﻤﻠﻑ ﻭﺤﺩﺓ ) ( *.Pasﺃﻭ ﻤﻠﻑ ﻤﺸﺭﻭﻉ ) ( *.dprﻤﻭﺠﻭﺩﻴﻥ ﻤﺴﺒﻘﹰﺎ . ـ : Open Projectﻟﻔﺘﺢ ﻤﺸﺭﻭﻉ ﻤﻭﺠﻭﺩ ﻤﺴﺒﻘﹰﺎ .
ـ : Reopenﻴﻘﺩﻡ ﻻﺌﺤﺔ ﺒﺂﺨﺭ ﻋﺩﺓ ﻤﻠﻔﺎﺕ ﺘﻡ ﻓﺘﺤﻬﺎ ﻟﺴﻬﻭﻟﺔ ﺇﻋﺎﺩﺓ ﻓﺘﺤﻬﺎ ﻤﻥ ﺠﺩﻴﺩ.
ـ : Saveﺘﺨﺯﻴﻥ ﺁﺨﺭ ﺘﻌﺩﻴل . ـ : Save Asﺘﺨﺯﻴﻥ ﺍﻟﻭﺤﺩﺓ Unitﺍﻟﺤﺎﻟﻴﺔ ﺒﺎﺴﻡ ﺠﺩﻴﺩ . ـ : Save Project Asﺘﺨﺯﻴﻥ ﻤﻠﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ Main Programﺒﺎﺴﻡ ﺠﺩﻴﺩ . ـ : Save Allﺇﻋﺎﺩﺓ ﺘﺨﺯﻴﻥ ﺠﻤﻴﻊ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺸﺭﻭﻉ . ـ : Closeﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻔﻌﺎﻟﺔ .
ـ : Close Allﺇﻏﻼﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻟﻜﺎﻤل . ـ : Use Unitﻻﺴﺘﺨﺩﺍﻡ ﻭﺤﺩﺓ ﺃﻱ ﻭﻀﻊ ﺍﺴﻤﻬﺎ ﺒﻌﺩ ﺘﻌﻠﻴﻤﺔ ) Useﺴﺘﺸﺭﺡ ﺘﻌﻠﻴﻤﺔ Useﻻﺤﻘﹰﺎ ( . ـ : printﻟﻁﺒﺎﻋﺔ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺤﺎﻟﻴﺔ ﺃﻭ ﻟﻁﺒﺎﻋﺔ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺤﺎﻟﻴﺔ.
9
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﺒﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻨﺎﻓﺫﺓ: ﺃ ـ ﻤﺭﺤﻠﺔ ﺍﻟﺘﺼﻤﻴﻡ :
1ـ ﺇﺒﺩﺃ ﻤﺸﺭﻭﻋﺎ ﺠﺩﻴﺩﺍ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ . File Æ New Æ Application 2ـ ﻟﻨﻌﻁﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺠﺩﻴﺩ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻟﻘﻴﻤﺔ ﺃﺴﻡ ﺍﻟﺨﺎﺼﺔ bdRightToLeft BiDiMode
ﺸﺭﺡ ﺍﻟﺨﺎﺼﺔ ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺘﺤﻭﻴل ﺍﺘﺠﺎﻩ ﺍﻟﻨﺹ ﻭﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﺍﻟﻴﻤﻴﻥ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ ) ﻟﻤﻭﺍﻓﻘﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺭﺒﻴﺔ (
Height
280
ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﺍﻟﻨﻤﻭﺫﺝ
Width
350
ﺘﺤﺩﻴﺩ ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ
Caption Position
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﻨﻤﻭﺫﺝ ﻴﻅﻬﺭ ﻓﻲ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ
ﺘﻐﻴﺭ ﺍﻷﻟﻭﺍﻥ poDesktopCenterﺘﺤﺩﻴﺩ ﻤﻜﺎﻥ ﻅﻬﻭﺭ ﺍﻟﻨﻤﻭﺫﺝ ) ﺴﺘﺸﺭﺡ ﻗﻴﻤﻬﺎ ﻓﻴﻤﺎ ﺒﻌﺩ (
2ـ ﻨﻀﻊ ﺜﻼﺜﺔ ﺃﺯﺭﺍﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ) ( Buttonﻤﻥ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ Standardﻭﻨﻌﻁﻲ ﻟﻜل ﻤﻨﻬﻡ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
: Button1 RedButton Name Caption
ﺃﺤﻤﺭ 160
Left
230
Top Button2 Name
ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
GreenButton
ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ
Caption
ﺃﺨﻀﺭ 190
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ
Left
203
Top Button3 Name Caption Top Left
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
CloseButton
ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ
ﺇﻏﻼﻕ 200
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ
24
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
10
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺏ ـ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ : 1ـ ﻨﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﻓﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻨﻜﺘﺏ ﻓﻴﻪ ﻤﺎﻴﻠﻲ : ; form1.Color := clred ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺒﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻨﻤﻭﺫﺝ ﺇﻟﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺤﻤﺭ ﻋﻥ ﻁﺭﻴﻕ ﺇﻋﻁﺎﺀ ﺨﺎﺼﺔ ﺍﻟﻠﻭﻥ Colorﺍﻟﻘﻴﻤﺔ clredﻭﻫﻲ
ﻗﻴﻤﺔ ﻤﺤﺠﻭﺯﺓ ﻓﻲ ﺍﻟﺩﻟﻔﻲ ﻭﺘﺩل ﻋﻠﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺤﻤﺭ.
2ـ ﻨﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﻓﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻨﻜﺘﺏ ﻓﻴﻪ ﻤﺎﻴﻠﻲ : ;form1.Color := clgreen 3ـ ﻨﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻟﺙ ﻓﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻨﻜﺘﺏ ﻓﻴﻪ ﻤﺎﻴﻠﻲ : ;close ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ﻭﺒﺫﻟﻙ ﻨﻜﻭﻥ ﻗﺩ ﺃﻨﻬﻴﻨﺎ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻟﺤﻔﻅﻪ ﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ File ÆSave Project As ﻟﻨﻌﻁﻲ ﺍﻟﻭﺤﺩﺓ ﺍﻻﺴﻡ NewCloorsﻭﺍﻟﻤﺸﺭﻭﻉ ﺍﻷﺴﻡ ChangeCloros ﻭﻟﺘﻨﻔﻴﺫﻩ ﻨﻀﻐﻁ ﻋﻠﻰ F9ﺃﻭ ﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ Runﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Run ) ( Run ÆRun ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﺘﻐﻴﺭ ﺒﻌﺽ ﺨﻭﺍﺹ ﺍﻟﻌﻨﺎﺼﺭ ﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﺨﺼﺎﺌﺹ ﺠﺩﻴﺩﺓ :
1ـ ﺨﺼﺎﺌﺹ ﺍﻟﻨﻤﻭﺫﺝ : ﻨﺨﺘﺎﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻴﻪ ﺃﻭ ﺒﺎﺨﺘﻴﺎﺭ ﺍﺴﻤﻪ ) ( Form1ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺃﻋﻠﻰ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ :
ﺃ ـ : BorderIconsﺘﻅﻬﺭ ﺃﻤﺎﻡ ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ ﺇﺸﺎﺭﺓ +ﺒﺎﻟﻨﻘﺭ ﻋﻠﻴﻬﺎ ﺘﻅﻬﺭ ﻟﻬﺎ ﺃﺭﺒﻊ ﺨﻴﺎﺭﺍﺕ ﺘﺄﺨﺫ ﻜل ﻤﻨﻬﺎ ﺍﻟﻘﻴﻤﺔ ﺼﺢ ﺃﻭ ﺨﻁﺄ ﻭﺘﺘﺤﻜﻡ ﻫﺫﻩ ﺍﻟﺨﻭﺍﺹ ﺒﺄﺯﺭﺍﺭ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ
:
: Bisystemmenuﺒﺈﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Falseﺘﺨﺘﻔﻲ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺜﻼﺜﺔ . : BiMinimizeﺒﺈﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Falseﻴﺨﺘﻔﻲ ﺯﺭ ﺍﻟﺘﺼﻐﻴﺭ ـ . : BiMaximizeﺒﺈﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Falseﻴﺨﺘﻔﻲ ﺯﺭ
. : BiHelpﺒﺈﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﻴﻅﻬﺭ ﺍﻟﺯﺭ ؟ ) ﻻ ﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺯﺭ ﻤﻊ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﻌﺎﺩﻴﺔ ﺴﺘﺸﺭﺡ ﻤﻊ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺘﺎﻟﻴﺔ .
ﻤﻼﺤﻅﺔ :ﻨﺘﺎﺌﺞ ﺍﻟﺘﻌﺩﻴل ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﻭﺍﺹ ﻻ ﺘﻅﻬﺭ ﺇﻻ ﻓﻲ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . ﺏ ـ : Borderstyleﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﺘﺤﻜﻡ ﺒﺸﻜل ﺍﻟﻨﺎﻓﺫﺓ ﻭﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ ﻭﺘﺄﺨﺫ ﺇﺤﺩﻯ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ .
11
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: bsDialogﺘﻘﻭﻡ ﺒﺈﺨﻔﺎﺀ ﺃﺯﺭﺍﺭ ﺍﻟﺘﻜﺒﻴﺭ ﻭﺍﻟﺘﺼﻐﻴﺭ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻤﻨﻊ ﺘﻐﻴﺭ ﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﻭﻴﻅﻬﺭ ﻓﻘﻁ ﺯﺭ ﺍﻹﻏﻼﻕ ﻭﺍﻟﺯﺭ ؟ ﻓﻲ ﺤﺎل ﺘﻡ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ Trueﻟﻠﺨﺎﺼﺔ . Bihelp
: bsNoneﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺩﻭﻥ ﺸﺭﻴﻁ ﻋﻨﻭﺍﻥ ﻭﻻ ﻴﻤﻜﻥ ﺘﻐﻴﺭ ﺤﺠﻤﻪ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ. : bsSingleﺘﻅﻬﺭ ﺠﻤﻴﻊ ﺃﺯﺭﺍﺭ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ ﻭﻻ ﻴﻤﻜﻥ ﺘﻐﻴﺭ ﺤﺠﻤﻪ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ .
: bsSizeableﻭﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻭﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺸﻜﻠﻪ ﺍﻟﻁﺒﻴﻌﻲ ﻤﻊ ﺇﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﻜﺒﻴﺭ ﻭﺍﻟﺘﺼﻐﻴﺭ ﻭﺍﻟﺘﺤﺠﻴﻡ. bsSizeToolWinﻭ : bsToolWindowﻴﻅﻬﺭ ﺸﺭﻴﻁ ﻋﻨﻭﺍﻥ ﺼﻐﻴﺭ ﻤﻊ ﺯﺭ × ﻓﻘﻁ ﻭﺘﺨﺘﻠﻑ ﺍﻷﻭﻟﻰ ﻋﻥ ﺍﻟﺜﺎﻨﻴﺔ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺘﻐﻴﺭ ﺍﻟﺤﺠﻡ .
ﻤﻼﺤﻅﺔ :ﻨﺘﺎﺌﺞ ﺍﻟﺘﻌﺩﻴل ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﻭﺍﺹ ﻻ ﺘﻅﻬﺭ ﺇﻻ ﻓﻲ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . ﺝ ـ : Positionﻹﻅﻬﺎﺭ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻤﻜﺎﻥ ﻤﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻭﺃﻫﻡ ﻗﻴﻤﻬﺎ : : poDesignedﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﺤﺩﺩ ﻟﻪ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ . : poDesktopCenterﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻭﺴﻁ ﺍﻟﺸﺎﺸﺔ. : poScreenCenterﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻭﺴﻁ ﺍﻟﺸﺎﺸﺔ ) ﻓﻲ ﺤﺎل ﻭﺠﻭﺩ ﺸﺎﺸﺔ ﻭﺍﺤﺩﺓ ﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻨﻔﺱ ﻨﺘﻴﺠﺔ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺴﺎﺒﻘﺔ ( .
ﺩ ـ : Iconﺘﺘﺤﻜﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺸﻜل ﺃﻴﻘﻭﻨﺔ ﺍﻟﻨﺎﻓﺫﺓ ،ﻭﻋﻨﺩ ﺘﺤﺩﻴﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻴﻅﻬﺭ ﺯﺭ ﻋﻠﻴﻪ ﺜﻼﺙ ﻨﻘﺎﻁ ... ﺒﺎﻟﻨﻘﺭ ﻋﻠﻴﻪ ﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻻﺨﺘﻴﺎﺭ ﺃﻴﻘﻭﻨﺔ ) ﻴﺘﻡ ﻋﺎﺩﺓ ﺠﻠﺏ ﺍﻷﻴﻘﻭﻨﺎﺕ ﻤﻥ ﺍﻻﻨﺘﺭﻨﺕ ﺃﻭ ﻴﺘﻡ ﺭﺴﻤﻬﺎ ﻴﺩﻭﻴﹰﺎ ﻜﻤﺎ ﺴﻨﺭﻯ ﻻﺤﻘﹰﺎ ( ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺃﺤﺩﻯ ﺍﻷﻴﻘﻭﻨﺎﺕ ﻤﻥ ﺍﻟﺩﻟﻴل : C:\Program Files\Common Files\Borland Shared\Images\Icons ﻫﺫﻩ ﻫﻲ ﺍﻟﺨﻭﺍﺹ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻠﻨﻤﻭﺫﺝ ﻭﺴﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺒﺎﻗﻲ ﺍﻟﺨﻭﺍﺹ ﻻﺤﻘﹰﺎ . 1ـ ﺨﺼﺎﺌﺹ ﺍﻟﺯﺭ :
ﺒﺎﻹﻀﺎﻓﺔ ﻟﻠﺨﺼﺎﺌﺹ ﺍﻟﻤﻌﺭﻭﻓﺔ ) ( Top, Left, Width, Height, Captionﻫﻨﺎﻙ ﺒﻌﺽ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ : : BiDiModeﺘﻡ ﺸﺭﺡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺴﺎﺒﻘﹰﺎ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻨﻤﻭﺫﺝ ﻭﻟﻜﻥ ﻤﻥ ﺍﻟﻤﻬﻡ ﺃﻥ ﻨﻌﻠﻡ ﺃﻨﻪ ﻋﻨﺩ ﺘﻐﻴﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺘﺘﻐﻴﺭ ﺒﺸﻜل ﺘﻠﻘﺎﺌﻲ ﻓﻲ ﺍﻟﺯﺭ .
: Fontﺘﺘﺤﻜﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﻨﻭﻉ ﺨﻁ ﻋﻨﻭﺍﻥ ﺍﻟﺯﺭ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻟﻭﻥ ﺍﻟﻌﻨﻭﺍﻥ ﻭﺤﺠﻤﻪ. : Hintﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻤﻼﺤﻅﺔ ﻋﻨﺩ ﻭﻗﻭﻑ ﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻕ ﺍﻟﺯﺭ : Showhintﻴﺠﺏ ﺃﻥ ﺘﺄﺨﺫ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﺤﺘﻰ ﻴﺘﻡ ﺘﻔﻌﻴل ﺍﻟﺨﺎﺼﺔ ﺍﻟﺴﺎﺒﻘﺔ . ﻤﺜﺎل :ﺃﺨﺘﺭ ﺍﻟﺯﺭ RedButtonﺜﻡ ﺍﺨﺘﺭ ﺍﻟﺨﺎﺼﺔ Hintﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻜﺘﺏ ﺍﻟﻨﺹ
ﺍﻟﺘﺎﻟﻲ ) ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﺴﻴﺘﺤﻭل ﻟﻭﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺇﻟﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺤﻤﺭ ( ﺜﻡ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ
ShowHintﺍﻟﻘﻴﻤﺔ Trueﻭﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ . : Visibleﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ Falseﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﻥ ﻴﻅﻬﺭ ﺍﻟﺯﺭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . : Enableﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ Falseﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺴﻴﻅﻬﺭ ﺍﻟﺯﺭ ﺒﺸﻜل ﺒﺎﻫﺕ ﻭﻻ ﻴﻤﻜﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ.
12
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: TabOrderﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Tabﻓﻲ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻴﻅﻬﺭ ﺇﻁﺎﺭ ﻤﺭﺒﻊ ﺩﺍﺨل ﺍﻟﺯﺭ ﻭﻴﻨﺘﻘل ﻫﺫﺍ ﺍﻹﻁﺎﺭ ﻤﻥ ﺯﺭ ﺇﻟﻰ ﺁﺨﺭ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ ﺍﻟﺯﺭ Tabﻭﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ
ﺒﺘﺤﺩﻴﺩ ﺘﺭﺘﻴﺏ ﺍﻨﺘﻘﺎل ﺍﻹﻁﺎﺭ ﻋﻨﺩ ﺍﻟﺘﻨﻘل ﺒﻴﻥ ﺍﻟﻌﻨﺎﺼﺭ.
1ـ ﻟﻨﻀﻴﻑ ﺍﻵﻥ ﺯﺭ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻨﻌﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : BtnAbout Name ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ Captionﺤﻭل Top
0
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل(
Left
0
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
Width
40
ﺘﺤﺩﻴﺩ ﻋﺭﺽ ﺍﻟﺯﺭ
ﺜﻡ ﻨﻀﻴﻑ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻟﻠﻤﺸﺭﻭﻉ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ : File Æ New ÆForm ﻭﺒﺫﻟﻙ ﻴﻅﻬﺭ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻟﻨﻌﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : About Name ﺇﻋﻁﺎﺀ ﺃﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻨﻤﻭﺫﺝ bdRightToLeft BiDiMode ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺘﺤﻭﻴل ﺍﺘﺠﺎﻩ ﺍﻟﻨﺹ ﻭﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﺍﻟﻴﻤﻴﻥ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ ) ﻟﻤﻭﺍﻓﻘﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺭﺒﻴﺔ ( Height
250
ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﺍﻟﻨﻤﻭﺫﺝ
Width
300
ﺘﺤﺩﻴﺩ ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ
ﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل ﺍﻟﺒﺭﻨﺎﻤﺞ poDesigned
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﻨﻤﻭﺫﺝ ﻴﻅﻬﺭ ﻓﻲ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ
Caption Position
ﺘﺤﺩﻴﺩ ﻤﻜﺎﻥ ﻅﻬﻭﺭ ﺍﻟﻨﻤﻭﺫﺝ
ﺍﻵﻥ ﻴﻤﻜﻥ ﺤﻔﻅ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Saveﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﺴﺭﻋﺔ ﺃﻭ ﺒﺎﺨﺘﻴﺎﺭ ﻨﻔﺱ ﺍﻷﻤﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Fileﺃﻭ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ Ctrl + sﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ،ﻟﻨﻌﻁ ﺍﻟﻭﺤﺩﺓ ﺃﺴﻡ aboutunit
ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻻ ﻴﻅﻬﺭ ﺇﻻ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ) ( Form1ﻭﺍﻵﻥ ﻋﻠﻴﻨﺎ ﻜﺘﺎﺒﺔ ﺍﻟﺸﻴﻔﺭ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ Aboutﻤﻥ ﺍﻟﻨﻤﻭﺫﺝ . Form1 ﻻﺴﺘﺩﻋﺎﺀ ﻨﻤﻭﺫﺝ ﺜﺎﻨﻲ ﻤﻥ ﻨﻤﻭﺫﺝ ﺃﻭل ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻌﻠﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﺒﺎﺴﻡ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺘﺎﺒﻊ ﻟﻬﺎ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﺈﻀﺎﻓﺔ ﺍﺴﻡ ﻭﺤﺩﺓ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﻓﻲ ﺍﻟﻘﺴﻡ implementationﻟﻭﺤﺩﺓ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﺒﻌﺩ ﻋﺒﺎﺭﺓ : Uses ﻭﺍﻵﻥ ﺃﻀﻑ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻜﻤﺎ ﻴﻠﻲ :
implementation ; uses aboutunit ﺍﻵﻥ ﻨﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ BtnAboutﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;about.Show ﻴﻘﻭﻡ ﺍﻷﻤﺭ Showﺒﺈﻅﻬﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) Aboutﺃﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺤﻭل ﻟﻤﺸﺎﻫﺩﺓ ﺍﻟﻨﺘﺎﺌﺞ (.
ﻟﻨﻜﻤل ﺍﻵﻥ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ : About
13
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﻨﻀﻴﻑ ﺍﻟﻌﻨﺼﺭ ) Panelﻟﻭﺡ ( ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Standardﻭﻟﻨﻌﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : AlTop Align ﺘﺠﻌل ﺍﻟﻌﻨﺼﺭ ﻴﺘﻭﻀﻊ ﻓﻲ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻋﻠﻰ ﻋﺭﻀﻬﺎ ﺒﺸﻜل ﻜﺎﻤل ) ﺴﻴﺘﻡ ﺸﺭﺡ ﻗﻴﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻗﺭﻴﺒﹰﺎ (
Caption Height
"" 185
bvLowered BevelOuter
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﺍﻟﻠﻭﺡ ﺘﺤﺩﻴﺩ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺤﺩ ﺍﻟﺨﺎﺭﺠﻲ ﻟﻠﻭﺡ
ﺤﺎﻭل ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻤﺎ ﻟﺨﺎﺼﺔ Widthﺴﺘﻼﺤﻅ ﺃﻨﻬﺎ ﻻ ﺘﺘﻐﻴﺭ ﻭﺫﻟﻙ ﻷﻥ ﺍﻟﺨﺎﺼﺔ Alignﻤﻔﻌﻠﺔ 2ـ ﻨﻀﻴﻑ ﺯﺭ Buttonﻭﻨﻌﻁﻪ ﺍﻟﺨﻭﺍﺹ ﺍﻟﺘﺎﻟﻴﺔ : BtnClose Name ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ Captionﺇﻏﻼﻕ Top
192
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل(
Left
112
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
3ـ ﻨﻀﻴﻑ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ Imageﻤﻥ ﺍﻟﺼﻔﺤﺔ Additionalﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ Panel picture ﺇﻋﻁﺎﺀ ﺼﻭﺭﺓ ﻟﻠﻌﻨﺼﺭ ﻴﻤﻜﻥ ﺃﺨﺘﻴﺎﺭ ﺃﻱ ﺼﻭﺭﺓ ﻤﺭﻏﻭﺒﺔ ) ﻴﻤﻜﻥ ﺃﺨﺫ ﺃﻱ ﺼﻭﺭﺓ
Stretch
True
ﺼﻭﺭﺓ ﻤﻥ ﺍﻟﻤﺠﻠﺩ : C:\Program Files\Common Files\Borland Shared\Images \Splash\256Color ﺇﻅﻬﺎﺭ ﻜﺎﻤل ﺍﻟﺼﻭﺭﺓ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ Image
Top
0
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل(
Left
0
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل (
3ـ ﻨﻀﻴﻑ ﻋﻨﺼﺭﻴﻥ ﻤﻥ ﺍﻟﻨﻭﻉ Labelﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ Panelﻭﻨﻌﻁﻲ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ: Label1 Captionﺘﻐﻴﺭ ﺍﻷﻟﻭﺍﻥ 24 Top 168 Left font ﻨﻐﻴﺭ ﺍﻟﺨﻁ ﻭﻨﻌﻁﻴﻪ ﺍﻟﻠﻭﻥ ﺍﻷﺯﺭﻕ Label2 Captionﺇﻋﺩﺍﺩ ﻭﺘﻨﻔﻴﺫ : 88 Top 212 Left Font ﻨﻌﻁﻲ ﺍﻟﺨﻁ ﺍﻟﻠﻭﻥ ﺍﻷﺤﻤﺭ ﻨﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ BtnCloseﻭﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ Closeﻓﻲ ﻤﺤﺭﺭ ﺸﻴﻔﺭﺓ ،ﺜﻡ ﻨﺤﻔﻅ ﺍﻟﻤﺸﺭﻭﻉ ﻭﻨﻨﻔﺫﻩ .
14
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻟﺜﺔ ﺃﺼﺒﺢ ﺍﻟﻭﻗﺕ ﻤﻼﺌﻤﹰﺎ ﺍﻵﻥ ﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻭﺤﺩﺓ Unitﺒﺸﻜل ﻤﻔﺼل . ﺘﺘﺄﻟﻑ ﺍﻟﻭﺤﺩﺓ ﺴﻭﺍﺀ ﻜﺎﻨﺕ ﻤﺭﺘﺒﻁﺔ ﺒﺸﻜل ﺃﻡ ﻻ ﻤﻥ ﺍﻷﺠﺯﺍﺀ ﺍﻟﺘﺎﻟﻴﺔ :
; unit Unit Name interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ;Dialogs type )TForm1 = class(TForm private } { Private declarations public } { Public declarations ;end var ;Form1: TForm1 implementation end. 1ـ ﻴﺒﺩﺃ ﺭﺃﺱ ﺍﻟﻭﺤﺩﺓ ﺒﺎﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻭﺯﺓ Unitﻴﻠﻴﻬﺎ ﻤﺒﺎﺸﺭﺓ ﺃﺴﻡ ﺍﻟﻭﺤﺩﺓ ) ﻓﻲ ﻤﺜﺎﻟﻨﺎ . ( NewColors
ﻗﺴﻡ ﺍﻻﺘﺼﺎل ﺍﻟﺨﺎﺭﺠﻲ : Interface
ﺍﻟﺫﻱ ﻴﺤﺩﺩ ﺒﺩﺍﻴﺔ ﻤﻨﻁﻘﺔ ﺍﻻﺘﺼﺎل ﺍﻟﺨﺎﺭﺠﻲ ،ﺃﻱ ﺍﻟﻤﻨﻁﻘﺔ ﻤﻥ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺭﺍﻫﺎ ﻭﺤﺩﺍﺕ ﺃﺨﺭﻯ ﻤﻥ ﻭﺤﺩﺍﺕ ﺍﻟﺘﻁﺒﻴﻕ ﻭﻓﻴﻪ :
ﺃ ـ ﺍﻟﻘﺴﻡ : Usesﺘﻭﻀﻊ ﻓﻴﻪ ﺠﻤﻴﻊ ﺃﺴﻤﺎﺀ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻌﻬﺎ ﺍﻟﻭﺤﺩﺓ ﺴﻭﺍﺀ ﻜﺎﻨﺕ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﺩﻟﻔﻲ ﺃﻭ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﺘﻲ ﺃﻨﺸﺄﻫﺎ ﺍﻟﻤﺒﺭﻤﺞ ) ﻋﻨﺩ ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺘﻘﻭﻡ ﺩﻟﻔﻲ ﺒﺈﻀﺎﻓﺔ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺘﺎﺒﻌﺔ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺒﺸﻜل ﺘﻠﻘﺎﺌﻲ ( . ﺏ ـ ﺍﻟﻘﺴﻡ : Typeﺘﻌﺭﻑ ﺍﻟﻭﺤﺩﺓ ﻫﻨﺎ ﺼﻨﻔﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻤﻭﺭﻭﺜﹰﺎ ﻤﻥ ﺍﻟﻨﻭﻉ ) TFormﺼﻨﻑ ﺍﻟﻨﻤﻭﺫﺝ ( ،ﻴﻀﺎﻑ ﺇﻟﻰ ﺍﻟﺼﻨﻑ ﺍﻟﺠﺩﻴﺩ ﺃﺴﻤﺎﺀ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻭﺍﻷﺤﺩﺍﺙ ﺍﻟﻤﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻭﺤﺩﺓ ) ﻗﺎﺭﻥ ﺒﻴﻥ ﺍﻟﻘﺴﻡ Typeﻟﻠﻭﺤﺩﺓ NewColorsﻭﺍﻟﻭﺤﺩﺓ ( AboutUnitﻭﻴﺘﻀﻤﻥ ﺍﻟﻘﺴﻡ Typeﺍﻟﺠﺯﺃﻴﻥ :
: Privateﻭﺘﻭﻀﻊ ﻓﻴﻪ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﻭﺤﺩﺓ ﻨﻔﺴﻬﺎ.
: Publicﻭﺘﻭﻀﻊ ﻓﻴﻪ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻌﺎﻤﺔ ) ﻤﻥ ﺃﺠل ﺃﻥ ﺘﺘﺒﺎﺩل ﺍﻟﻭﺤﺩﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻊ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻷﺨﺭﻯ ( ﻭﺴﻴﺸﺭﺡ ﻫﺫﻴﻥ ﺍﻟﺠﺯﺃﻴﻥ ﺒﺸﻜل ﻤﻔﺼل ﻓﻴﻤﺎ ﺒﻌﺩ ،ﻴﻨﺘﻬﻲ ﺍﻟﻘﺴﻡ Typeﺒﺎﻟﺘﻌﻠﻴﻤﺔ ;.end
ﺝ ـ ﺍﻟﻘﺴﻡ : Varﻴﺘﻡ ﻓﻴﻪ ﺘﻌﺭﻴﻑ ﻋﻥ ﻫﺩﻑ ) ﻏﺭﺽ ( ﺍﺴﻤﻪ Form1ﻤﻥ ﺍﻟﻨﻭﻉ TForm1ﻭﻴﺸﻴﺭ Form1ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺫﻱ ﻨﻀﻴﻑ ﻟﻪ ﺍﻟﻌﻨﺎﺼﺭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ .
15
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻗﺴﻡ ﺍﻟﺘﻨﻔﻴﺫ : implementation ﻴﻤﻜﻥ ﺃﻥ ﻴﺤﺘﻭﻱ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻋﻠﻰ ﺘﺼﺭﻴﺤﺎﺕ ﻋﻥ ﺘﻭﺍﺒﻊ ﻭﺇﺠﺭﺍﺀﺍﺕ ﻭﻤﺘﺤﻭﻻﺕ ﺨﺎﺼﺔ ﺒﺎﻟﻭﺤﺩﺓ ﻨﻔﺴﻬﺎ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺠﻤﻴﻊ ﺍﻟﺘﻭﺍﺒﻊ ﻭﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﺩﺍﺨل ﺍﻟﻭﺤﺩﺓ .
ﻤﻼﺤﻅﺔ :ﻗﺩ ﻴﻜﻭﻥ ﺍﻟﺠﺯﺀ ﺍﻟﺴﺎﺒﻕ ﺼﻌﺒﹰﺎ ﺒﻌﺽ ﺍﻟﺸﻲﺀ ﻟﻜﻨﻪ ﻀﺭﻭﺭﻱ ﻟﻤﺘﺎﺒﻌﺔ ﺍﻟﻌﻤل ﻤﻊ ﺩﻟﻔﻲ ﻜﻤﺎ ﺃﻨﻨﺎ ﺴﻨﺘﻌﺭﻑ ﻋﻠﻴﻪ ﺒﺸﻜل ﺃﻜﺒﺭ ﻜﻠﻤﺎ ﺩﻋﺕ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﺫﻟﻙ .
ﺴﻨﻌﻤل ﺍﻵﻥ ﻋﻠﻰ ﻜﺘﺎﺒﺔ ﺘﻁﺒﻴﻘﺎﺕ ﺒﺴﻴﻁﺔ ﺍﻟﻬﺩﻑ ﻤﻨﻬﺎ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﻭﺨﺼﺎﺌﺼﻬﺎ : 1ـ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺼﻨﺩﻭﻕ ﺍﻻﺨﺘﻴﺎﺭ checkboxﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ : Standard ﻼ ﻭﺃﻀﻑ ﺃﻟﻴﻪ ﻋﻨﺼﺭ ﺍﺒﺩﺃ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩﹰﺍ ﻭﺼﻐﺭ ﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻗﻠﻴ ﹰ ﺍﻟﺯﺭ Buttonﻭﻋﻨﺼﺭ : checkbox ﺍﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ checkbox1ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ " : Captionﺃﻅﻬﺭ ﺍﻟﺯﺭ "
ﺜﻡ ﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻭﺍﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺤﺩﺙ OnClickﻓﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ : ; if checkbox1.Checked then button1.Visible := true else button1.Visible := false ﺍﻟﺨﺎﺼﺔ Checkedﻟﻠﻌﻨﺼﺭ checkboxﺘﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Trueﻓﻲ ﺤﺎل ﺘﻡ ﺇﻅﻬﺎﺭ ﺇﺸﺎﺭﺓ ; ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻻﺨﺘﻴﺎﺭ ﻭﺍﻟﻘﻴﻤﺔ Falseﻓﻲ ﺤﺎل ﺍﺨﺘﻔﺎﺀ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺴﺎﺒﻘﺔ .
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺸﺎﻫﺩ ﺍﻟﻨﺘﺎﺌﺞ .
3ـ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺼﺭ ﺼﻨﺩﻭﻕ ﺍﻟﻼﺌﺤﺔ ListBoxﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ : Standard ﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻗﺎﺌﻤﺔ ﺒﻨﺼﻭﺹ ﺘﻡ ﺇﺩﺨﺎﻟﻬﺎ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ
ﺃﻭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ : ﻗﻡ ﺒﺈﻨﺸﺎﺀ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺼﻨﺩﻭﻕ ﻨﺹ ) ( Edit
ﻭﺼﻨﺩﻭﻕ ﻻﺌﺤﺔ ) ( ListBoxﻭﺜﻼﺜﺔ ﺃﺯﺭﺍﺭ ) ( Buttonﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺭﻓﻕ :
ﺃ ـ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ :ﺒﺎﺨﺘﻴﺎﺭ ﺍﻟﺨﺎﺼﺔ Itemsﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﺘﻅﻬﺭ ﻨﺎﻓﺫ ﻴﻤﻜﻥ ﺃﻥ ﻨﻜﺘﺏ ﻓﻴﻬﺎ ﺴﻁﻭﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻼ ﺃﺩﺨل " ﺍﻟﺠﻠﺴﺔ ﺍﻷﻭﻟﻰ " ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻷﻭل ﻭ " ﻤﺜ ﹰ ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻨﻴﺔ " ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ .
ﺏ ـ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ :
ﺃﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ Buttonﻭﺃﻀﻑ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ : 16
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)Listbox1.items.add (edit1.text ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺈﻀﺎﻓﺔ ﺍﻟﻨﺹ ﺍﻟﻤﻜﺘﻭﺏ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﻨﺹ ﺇﻟﻰ ﺼﻨﺩﻭﻕ ﺍﻟﻼﺌﺤﺔ ) ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺸﺎﻫﺩ ﺍﻟﻨﺘﺎﺌﺞ ( ﻟﺤﺫﻑ ﺴﻁﺭ ﻭﺍﺤﺩ ﻤﻥ ﻋﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ ﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﻭﻨﻀﻴﻑ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ : ; listbox1.DeleteSelected ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺤﺫﻑ ﺍﻟﺴﻁﺭ ﺍﻟﺫﻱ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ ﻤﻥ ﺍﻟﻼﺌﺤﺔ . ﻜﺫﻟﻙ ﻟﺤﺫﻑ ﻋﻨﺎﺼﺭ ﺍﻟﻼﺌﺤﺔ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻟﺙ ﻤﺭﺘﻴﻥ ﻭﺍﻜﺘﺏ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ : ; Listbox1.items.clear ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻤﺴﺢ ﺼﻨﺩﻭﻕ ﺍﻟﻼﺌﺤﺔ ﺒﺎﻟﻜﺎﻤل. 4ـ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺃﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ) : ( RadioButtons
ﺘﻌﺘﺒﺭ ﺃﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﻤﺸﺎﺒﻬﺔ ﻟﻌﻨﺼﺭ ﺼﻨﺩﻭﻕ ﺍﻻﺨﺘﻴﺎﺭ ﻭﺘﺨﺘﻠﻑ ﻋﻨﻪ ﺃﻨﻪ
ﻻ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺯﺭﻱ ﺭﺍﺩﻴﻭ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ﺃﻱ ﺃﻨﻪ ﺃﻤﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﺨﺘﻴﺎﺭ ﺯﺭ ﻭﺍﺤﺩ ﻤﻥ ﺒﻴﻥ ﺍﻷﺯﺭﺍﺭ ﺍﻟﻅﺎﻫﺭﺓ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ. ﻜﻤﺜﺎل ﻋﻠﻰ ﺫﻟﻙ : ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺜﻼﺜﺔ ﺃﺯﺭﺍﺭ ﺭﺍﺩﻴﻭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل : ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻟﺙ ﺍﻟﺨﺎﺼﺔ Checkedﺍﻟﻘﻴﻤﺔ Trueﻭﺃﻋﻁ ﺍﻟﻨﻤﻭﺫﺝ
ﺍﻟﻠﻭﻥ . ClCream
ﺃﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;form1.Color := clred ﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﺯﺭ ﺍﻟﺜﺎﻨﻲ : ;form1.Color := clblue ﻭﻟﻠﺯﺭ ﺍﻟﺜﺎﻟﺙ ﺍﻟﺘﻌﻠﻴﻤﺔ : ;form1.Color := clcream ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺸﺎﻫﺩ ﺍﻟﻨﺘﺎﺌﺞ .
5ـ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺼﻨﺩﻭﻕ ﺍﻟﻤﺠﻤﻭﻋﺔ : GroupBox
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻟﻨﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﺇﻀﺎﻓﺔ ﻤﺠﻤﻭﻋﺔ ﺠﺩﻴﺩﺓ ﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﻟﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﺨﻁ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ) ﻜﺎﻨﺕ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻨﻤﻭﺫﺝ ( ،ﻓﺈﺫﺍ ﺃﻀﻔﻨﺎ ﺯﺭﻴﻥ ﺁﺨﺭﻴﻥ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻼ ﻴﻤﻜﻨﻨﺎ ﺘﻐﻴﺭ ﺍﻟﺨﻁ ﻭﺍﻟﻠﻭﻥ ﻤﻌﹰﺎ ﻷﻨﻪ ﻻ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺯﺭﻱ ﺭﺍﺩﻴﻭ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ،ﻭﻫﻨﺎ ﻴﺄﺘﻲ ﺩﻭﺭ ﺼﻨﺩﻭﻕ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺤﻴﺙ ﻴﺅﻤﻥ ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﺭﺒﻁﹰﺎ ﺒﻴﻥ ﺃﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺒﺩﺍﺨﻠﻪ ﻓﻘﻁ ﺩﻭﻥ ﺍﻟﺘﺄﺜﻴﺭ ﻋﻠﻰ ﺃﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺨﺎﺭﺠﻪ ،ﻜﻤﺎ ﻴﻭﻀﺢ ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ : ﺃﻀﻑ ﺼﻨﺩﻭﻕ ﻤﺠﻤﻭﻋﺔ ﻟﻠﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭﻀﻊ ﻋﻠﻴﻪ ﺯﺭﻴﻥ ﺭﺍﺩﻴﻭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﺯﺭ ﺍﻷﻭل ﺩﺍﺨل ﺍﻟﺼﻨﺩﻭﻕ
;form1.Font.Color := clgreen ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﺯﺭ ﺍﻵﺨﺭ : form1.Font.Color := clyellow 17
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺤﺩﺍﺙ ) : ( Events ﻼ ﻋﻠﻰ ﺍﻟﺤﺩﺙ OnClickﻟﻠﺯﺭ ﻴﻭﺠﺩ ﻟﻜل ﻋﻨﺼﺭ ﻓﻲ ﺩﻟﻔﻲ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻷﺤﺩﺍﺙ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﻨﻔﺫﻫﺎ ،ﺘﻌﺭﻓﻨﺎ ﻤﺜ ﹰ ) Buttonﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺯﺭ ﻴﺘﻡ ﺘﻔﻌﻴل ﺍﻟﺤﺩﺙ Onclickﻭﻴﻅﻬﺭ ﻤﻌﺎﻟﺞ ﺍﻟﺸﻴﻔﺭﺓ ﻟﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺒﻴﻥ ﻜﻴﻔﻴﺔ ﺘﻌﺎﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻊ ﻫﺫﺍ ﺍﻟﺤﺩﺙ (،ﺴﻨﺘﻌﺭﻑ ﺍﻵﻥ ﻋﻠﻰ ﻤﺠﻤﻭﻋﺔ ﺠﺩﻴﺩﺓ ﻤﻥ ﺍﻷﺤﺩﺍﺙ.
1ـ ﺍﻟﺤﺩﺙ : OnMouseMoveﻴﻌﻤل ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻥ ﻤﺭﻭﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ ﻭﻴﻌﻴﺩ ﺍﺤﺩﺍﺜﻴﺎﺕ ) ( x,yﺍﻟﺫﻴﻥ ﻴﺸﺭﻴﻥ ﻋﻠﻰ ﻤﻜﺎﻥ ﻭﺠﻭﺩ ﺍﻟﻔﺄﺭﺓ ﺤﻴﺙ X = leftﺃﻱ ﺒﻌﺩ ﺍﻟﻔﺄﺭﺓ ﻋﻥ ﺍﻟﻴﺴﺎﺭ ،ﻭ y = topﺃﻱ ﺒﻌﺩ ﺍﻟﻔﺄﺭﺓ ﻋﻥ ﺸﺭﻴﻁ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻜﻤﺜﺎل ﻋﻠﻰ ﺫﻟﻙ :
ﺃﻨﺸﺎﺀ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﻀﻊ ﻋﻠﻰ ﻋﻨﺼﺭ Labelﺍﻷﻭل ﻓﻲ ﺍﻷﻋﻠﻰ ﻭﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻥ ﻭﺍﻟﺜﺎﻨﻲ ﻓﻲ ﺍﻷﺴﻔل ﻭﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ،ﻭﺍﻵﻥ ﺤﺩﺩ ﺍﻟﻨﻤﻭﺫﺝ ) ( Form1ﺍﺨﺘﺭ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻭﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺨﺎﺼﺔ OnMouseMoveﻓﹸﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺍﻟﺘﺎﺒﻊ : procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, ;)Y: Integer ﻟﻨﻜﺘﺏ ﺒﻴﻥ ﺍﻟﺴﻁﺭﻴﻥ Beginﻭ Endﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;)label1.Caption := inttostr(x ;)label2.Caption := inttostr(y ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ . 2ـ ﺍﻟﺤﺩﺙ : OnMouseDownﻴﻌﻤل ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻭﻴﻌﻴﺩ ﺍﻹﺤﺩﺍﺜﻴﺎﺕ ﻜﻤﺎ ﻓﻲ ﺍﻟﺤﺩﺙ ﺍﻟﺴﺎﺒﻕ ،ﻜﻤﺜﺎل ﻋﻠﻴﻪ :ﺤﺩﺩ ﺍﻟﻨﻤﻭﺫﺝ ) ( Form1ﻤﻥ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺍﺨﺘﺭ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻭﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﺨﺎﺼﺔ OnMouseDownﻓﻴﻅﻬﺭ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺃﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;label1.Left := x ;label1.Top := y -10 ;label2.Left := x+20 ;label2.Top := y-10 18
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﻌﻤل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﻭﻀﻊ ﻋﻨﺼﺭﻱ ﺍﻟﻌﻨﻭﺍﻥ Labelﻓﻲ ﻤﻜﺎﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻔﺄﺭﺓ ) ،ﺘﻡ ﺇﻀﺎﻓﺔ ﻭﻁﺭﺡ ﺍﻷﺭﻗﺎﻡ ﻤﻥ Xﻭ yﻓﻘﻁ ﻹﻅﻬﺎﺭ ﺍﻟﻨﺘﺎﺌﺞ ﺒﺸﻜل ﺃﻓﻀل ( .
5ـ ﺍﻟﺤﺩﺙ : OnMouseLeaveﻴﻌﻤل ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩ ﺍﺒﺘﻌﺎﺩ ﺍﻟﻔﺄﺭﺓ ﻋﻥ ﺍﻟﻌﻨﺼﺭ :
ﺃﻀﻑ ﻋﻨﺼﺭ Labelﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﺸﻜل ﺍﻟﺴﺎﺒﻕ ﻭﺤﺩﺩ ﺍﻟﺤﺩﺙ OnMouseMoveﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ:
;label3.font.color := clblue
ﺜﻡ ﺤﺩﺩ ﺍﻟﺤﺩﺙ OnMouseLeaveﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;Label3.font.color := clblack ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺃﻨﻪ ﻋﻨﺩ ﻤﺭﻭﺭ ﺍﻟﻔﺄﺭﺓ ﻤﻥ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ Label3ﻴﺘﺤﻭل ﺇﻟﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺯﺭﻕ ﺜﻡ ﻴﻌﻭﺩ ﺇﻟﻰ ﻟﻭﻨﻪ ﺍﻷﺴﻭﺩ ﻋﻥ ﻤﻐﺎﺩﺭﺓ ﺍﻟﻔﺄﺭﺓ ﻟﻪ. 4ـ ﺍﻟﺤﺩﺙ : On DblClickﻴﻌﻤل ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ :
ﺤﺩﺩ ﺍﻟﻌﻨﺼﺭ Label3ﺜﻡ ﺃﺨﺘﺭ ﺍﻟﺤﺩﺙ On DblClickﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ :
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ Label3ﻟﻠﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .
19
;Close
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺭﺍﺒﻌﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻭﺍﺠﻬﺔ ﺍﻟﺩﻟﻔﻲ : 1ـ ﺇﻀﺎﻓﺔ ﻋﺩﺓ ﻨﺴﺦ ﻤﻥ ﺍﻟﻌﻨﺼﺭ ﻨﻔﺴﻪ : ﻴﻤﻜﻥ ﺇﻀﺎﻓﺔ ﻋﺩﺓ ﻨﺴﺦ ﻤﻥ ﺍﻟﻌﻨﺼﺭ ﻨﻔﺴﻪ ﻭﺫﻟﻙ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘﺎﺡ Shiftﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﺇﺒﻘﺎﺅﻩ ﻤﻀﻐﻭﻁﹰﺎ
ﺤﺘﻰ ﻨﺨﺘﺎﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺭﺍﺩ ﺇﻀﺎﻓﺘﻪ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ ،ﻋﻨﺩﺌ ٍﺫ ﻴﻅﻬﺭ ﻤﺭﺒﻊ ﺃﺯﺭﻕ ﻴﺤﻴﻁ ﺒﺄﻴﻘﻭﻨﺔ ﺍﻟﻌﻨﺼﺭ ﻀﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ ،ﻨﻨﻘﺭ ﺍﻵﻥ ﻓﻭﻕ ﺍﻟﻨﻤﻭﺫﺝ ﻟﻴﻅﻬﺭ ﺍﻟﻌﻨﺼﺭ ﻭﻓﻲ ﻜل ﻤﺭﺓ ﻨﻨﻘﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺘﻅﻬﺭ ﻨﺴﺨﺔ ﺃﺨﺭﻯ ﻤﻥ ﺍﻟﻌﻨﺼﺭ ﻨﻔﺴﻪ ،ﻹﻴﻘﺎﻑ ﺍﻟﻌﻤﻠﻴﺔ ﻨﻀﻐﻁ ﺃﻴﻘﻭﻨﺔ ﺍﻟﻤﺅﺸﺭ ﻀﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ ﻟﻴﺨﺘﻔﻲ ﺍﻟﺼﻨﺩﻭﻕ ﺍﻷﺯﺭﻕ ﺤﻭل ﺍﻟﻌﻨﺼﺭ ،ﻜﻤﺜﺎل ﻋﻠﻰ ﺫﻟﻙ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ Labelﺒﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﻤﻊ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘﺎﺡ shiftﺍﻨﻘل ﺍﻟﻔﺄﺭﺓ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺍﻀﻐﻁ ﻋﺩﺓ ﻤﺭﺍﺕ .
2ـ ﺍﻟﺘﺤﻜﻡ ﺒﻤﻜﺎﻥ ﺍﻟﻌﻨﺼﺭ ﻭﺤﺠﻤﻪ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ : ﻜﻤﺎ ﺭﺃﻴﻨﺎ ﻴﻤﻜﻥ ﺍﻟﺘﺤﻜﻡ ﺒﻬﺫﻩ ﺍﻟﺨﻭﺍﺹ ﺒﺩﻗﺔ ﻋﻥ ﻁﺭﻴﻕ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﻟﻜﻥ ﻫﻨﺎﻙ ﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ ﻭﻤﻔﻴﺩﺓ ﻟﻠﺘﺤﻜﻡ ﺒﻬﺫﻩ ﺍﻟﺨﻭﺍﺹ .
ﺃ ـ ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺼﺭ :
ﺃﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺭﺍﺩ ﺘﺤﺭﻴﻜﻪ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺎﺘﺢ + Ctrlﺃﺯﺭﺍﺭ ﺍﻷﺴﻬﻡ ﻓﺴﻴﺘﻡ ﻨﻘل ﺍﻟﻌﻨﺼﺭ ﺒﺎﺘﺠﺎﻩ ﺍﻟﺴﻬﻡ ﺍﻟﻤﻀﻐﻭﻁ ،ﻭﻟﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺼﺭ ﺒﺴﺭﻋﺔ ﺃﻜﺒﺭ ﺃﺴﺘﺨﺩﻡ ﺍﻷﺯﺭﺍﺭ + Ctrl + Shiftﺃﺯﺭﺍﺭ ﺍﻷﺴﻬﻡ .
ﺏ ـ ﺘﻐﻴﺭ ﺤﺠﻡ ﺍﻟﻌﻨﺼﺭ :
ﺍﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺭﺍﺩ ﺘﻐﻴﺭ ﺤﺠﻤﻪ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘﺎﺡ + Shiftﺃﺯﺭﺍﺭ ﺍﻷﺴﻬﻡ ﻭﺴﻴﺘﻡ ﺍﻟﺘﻜﺒﻴﺭ ﺃﻭ ﺍﻟﺘﺼﻐﻴﺭ ﺤﺴﺏ ﺍﻟﺴﻬﻡ ﺍﻟﻤﻀﻐﻭﻁ .
3ـ ﺍﺨﺘﻴﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﻋﻨﺼﺭ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ :
ﻴﻤﻜﻥ ﺃﻥ ﻨﺨﺘﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﻋﻨﺼﺭ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻋﻠﻰ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﻭﻤﻥ ﺜﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺜﺎﻨﻲ ﻤﻊ ﻤﻔﺘﺎﺡ Shiftﻭﻫﻜﺫﺍ ، ...ﻭﻋﻨﺩ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺘﻅﻬﺭ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﺍﻟﺨﻭﺍﺹ ﺍﻟﻤﺸﺘﺭﻜﺔ ﻟﻠﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ) ﻋﻨﺩ ﺃﺨﺘﻴﺎﺭ ﻋﻨﺼﺭﻴﻥ ﺍﻷﻭل Labelﻭﺍﻟﺜﺎﻨﻲ Editﺴﺘﻅﻬﺭ ﺍﻟﺨﻭﺍﺹ ﺍﻟﻤﺸﺘﺭﻜﺔ ﻤﺜل ، ... Width, Height, left, top,ﻭﺴﺘﺨﺘﻔﻲ ﺒﻌﺽ ﺍﻟﺨﻭﺍﺹ ﻤﺜل ( Caption, Text ـ ﺭﺼﻑ ﺍﻟﻌﻨﺎﺼﺭ :
ﻴﻤﻜﻨﻨﺎ ﺭﺼﻑ ﺍﻟﻌﻨﺎﺼﺭ ﻨﺴﺒﻴﹰﺎ ﻭﻓﻕ ﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺽ ،ﺃﻭ ﻨﺴﺒﻴﹰﺎ ﻭﻓﻕ ﺍﻟﺸﻜل ﻭﺫﻟﻙ ﻤﻥ ﺨﻼل ﺍﺨﺘﻴﺎﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺭﺍﺩ ﺭﺼﻔﻪ ﻭﻤﻥ ﺜﻡ ﺍﺴﺘﺨﺩﺍﻡ ﻟﻭﺤﺔ ﺍﻟﺭﺼﻑ Alignment paletteﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Viewﺃﻭ Alignmentﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ : Edit
ﺃ ـ ﻟﻭﺤﺔ ﺍﻟﺭﺼﻑ : Alignment palette
ﻜل ﺯﺭ ﻓﻲ ﻫﺫﻩ ﺍﻟﻠﻭﺤﺔ ﻟﻪ ﻤﻬﻤﺔ ﻤﺎ ﻭﺴﻴﺘﻡ ﺸﺭﺡ ﻜل ﻤﻨﻬﺎ ﻋﻠﻰ ﺤﺩﺓ : ﺘﺭﺼﻑ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﺍﻟﺠﻬﺔ ﺍﻟﻴﺴﺎﺭﻴﺔ ﻷﻭل ﻋﻨﺼﺭ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ . ﻨﻔﺱ ﺍﻟﻌﻤل ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺍﻟﺭﺼﻑ ﻴﺘﻡ ﻟﻠﺠﻬﺔ ﺍﻟﻴﻤﻴﻨﻴﺔ 20
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﺭﺼﻑ ﺍﻟﻌﻨﺎﺼﺭ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻤﻨﺘﺼﻑ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﺍﻟﺫﻱ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ ﺒﺸﻜل ﺃﻓﻘﻲ ) ﺘﺠﻌل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻠﻰ ﻋﻤﻭﺩ ﻭﺍﺤﺩ (
ﻨﻔﺱ ﻋﻤل ﺍﻟﺯﺭ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺍﻟﺭﺼﻑ ﻴﺘﻡ ﺒﺸﻜل ﻋﻤﻭﺩﻱ)،ﺘﺠﻌل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﻋﻠﻰ ﺼﻑ ﻭﺍﺤﺩ(.
ﺘﻨﻘل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻭﺴﻁ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﺒﺸﻜل ﺃﻓﻘﻲ . ﺘﻨﻘل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻭﺴﻁ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﺒﺸﻜل ﻋﺎﻤﻭﺩﻱ . ﺘﺠﻌل ﺍﻟﻤﺴﺎﻓﺔ ﺒﻴﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻷﻓﻘﻴﺔ ﻤﺘﺴﺎﻭﻴﺔ ) ﺘﺜﺒﺕ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﻭﺍﻷﺨﻴﺭ ﻭﺘﺤﺭﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺒﻴﻨﻬﻤﺎ ﻟﺘﺄﺨﺫ ﻤﺴﺎﻓﺎﺕ ﻤﺘﺴﺎﻭﻴﺔ .
ﻨﻔﺱ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻟﻠﻌﻨﺎﺼﺭ ﺍﻟﻌﺎﻤﻭﺩﻴﺔ . ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺇﻟﻰ ﻨﻔﺱ ﺍﻟﻨﺎﺤﻴﺔ ﺍﻟﺴﻔﻠﻴﺔ ﻷﻭل ﻋﻨﺼﺭ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ . ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺇﻟﻰ ﻨﻔﺱ ﺍﻟﻨﺎﺤﻴﺔ ﺍﻟﻌﻠﻭﻴﺔ ﻷﻭل ﻋﻨﺼﺭ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ .
ﺏ ـ : Alignmentﺃﺨﺘﺭ Alignﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Editﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﻋﻤل ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻴﺸﺒﻪ ﻋﻤل ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ﻭﻟﻜﻥ ﺘﻡ
ﺍﻻﺴﺘﻌﺎﻀﺔ ﻋﻥ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺒﺄﺯﺭﺍﺭ ﺭﺍﺩﻴﻭ ﻟﻴﺘﻡ ﺍﻻﺨﺘﻴﺎﺭ ﻤﻨﻬﺎ.
ﺘﺜﺒﻴﺕ ﻤﻭﻗﻊ ﺍﻟﻌﻨﺎﺼﺭ : ﺒﻌﺩ ﺃﻥ ﻨﻌﻁﻲ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻭﺍﻗﻌﻬﺎ ﻴﻤﻜﻨﻨﺎ ﺘﺜﺒﻴﺕ ﻫﺫﻩ ﺍﻟﻤﻭﺍﻗﻊ ﻟﻜﻲ ﻻ ﺘﺘﺤﺭﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺒﻁﺭﻴﻕ ﺍﻟﺨﻁﺄ ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴـﻕ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻌﻨﺼﺭ ﻭﻤﻥ ﺜﻡ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻷﻤﺭ Lock Controlsﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ، Editﻋﻨﺩﻫﺎ ﻟـﻥ ﻨـﺴﺘﻁﻴﻊ ﺘﺤﺭﻴـﻙ ﻫـﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ ﺤﺘﻰ ﻨﺨﺘﺎﺭ ﻨﻔﺱ ﺍﻷﻤﺭ ﻤﺭﺓ ﺃﺨﺭﻯ . ﻗﺹ ﻭﻨﺴﺦ ﻭﻟﺼﻕ ﺍﻟﻌﻨﺎﺼﺭ :
ﻴﻤﻜﻥ ﻗﺹ ﺃﻭ ﻨﺴﺦ ﺍﻟﻌﻨﺎﺼﺭ ﻭﻟﺼﻘﻬﺎ ﻋﻠﻰ ﻨﻔﺱ ﺍﻟﻨﻤﻭﺫﺝ ﺃﻭ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﺁﺨﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻌﻨﺎﺼﺭ ﻭﻗﺼﻬﺎ ﺍﻭ ﻨﺴﺨﻬﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻷﻭﺍﻤﺭ Cutﺃﻭ Copyﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ Editﻭﻟﺼﻘﻬﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻷﻤﺭ Pasteﻤﻥ ﻨﻔﺱ ﺍﻟﻘﺎﺌﻤﺔ : ﻤﻼﺤﻅﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﻠﺼﻕ ﻴﺄﺨﺫ ﺠﻤﻴﻊ ﺨﺼﺎﺌﺹ ﺍﻟﻌﻨﺼﺭ ﺍﻷﺼل ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺠﻤﻴﻊ ﺃﺤﺩﺍﺜﻪ .
ﻋﻨﻭﺍﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ :
ﻴﻤﻜﻥ ﻭﻀﻊ ﻋﻨﻭﺍﻥ ﻟﻠﺒﺭﻨﺎﻤﺞ ) ﻋﻨﻭﺍﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻅﻬﺭ ﻋﻠﻰ ﺸﺭﻴﻁ ﺍﻟﻤﻬﺎﻡ ﺒﻘﺭﺏ ﺃﻴﻘﻭﻨﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ( ﺃﺨﺘﺭ ﺍﻷﻤﺭ File Æ Optionsﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ، Applicationﻭﺍﻜﺘﺏ ﻓـﻲ ﺍﻟﻘـﺴﻡ Application settingﻗﺭﺏ Titleﺍﻟﻨﺹ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ،ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻌﻨﻭﺍﻥ ﻋﻠﻰ ﺸﺭﻴﻁ ﻤﻬﺎﻡ ﻭﻴﻨﺩﻭﺯ .
21
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺃﻴﻘﻭﻨﺔ ﺒﺭﻨﺎﻤﺞ : ﺘﻌﻠﻤﻨﺎ ﺴﺎﺒﻘﹰﺎ ﺘﻐﻴﺭ ﺃﻴﻘﻭﻨﺔ ﻨﺎﻓﺫﺓ ) ﻨﻤﻭﺫﺝ ( ﻭﺴﻨﺘﻌﻠﻡ ﺍﻵﻥ ﺘﻐﻴﺭ ﺃﻴﻘﻭﻨﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﺃﻴﻘﻭﻨﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻫﻲ ﻨﻔﺱ ﺃﻴﻘﻭﻨﺔ ﺍﻟﻤﻠﻑ EXEﺍﻟﺫﻱ ﻴﻨﺘﺞ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﻅﻬﺭ ﺃﻴﻘﻭﻨﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺸﺭﻴﻁ ﺍﻟﻤﻬﺎﻡ ﻭﻓﻲ ﺃﻱ ﺍﺨﺘﺼﺎﺭ ﻴﻭﻀﻊ ﻟﻠﺒﺭﻨﺎﻤﺞ (،
ﻤﻥ ﻨﻔﺱ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺴﺎﺒﻘﺔ Project Æ Optionsﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ ، Applicationﺍﻀﻐﻁ ﻋﻠـﻰ ﺍﻟـﺯﺭ Load
Iconﻭﺍﺨﺘﺭ ﺃﻴﻘﻭﻨﺔ ﺠﺩﻴﺩﺓ ﻟﻠﺒﺭﻨﺎﻤﺞ ) ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺃﻴﻘﻭﻨﺎﺕ ﻤﻥ ﺍﻟﻔﻬﺭﺱ C:\Program Files\Common Files\Borland Shared\Images\Icons ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ . ﺼﻨﺎﺩﻴﻕ ﺍﻟﺭﺴﺎﺌل :
ﺃ ـ ﺍﻟﺼﻨﺩﻭﻕ : ShowMessage ﻴﺴﺘﺨﺩﻡ ﺍﻹﺠﺭﺍﺀ ) showmessage (S : stringﻹﻅﻬﺎﺭ ﺭﺴﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺤﻴﺙ ﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺼﻐﻴﺭﺓ ﺘﺤـﻭﻱ ﻨـﺹ ﺍﻟﺭﺴﺎﻟﺔ ﻭﻋﻠﻰ ﺍﻟﺯﺭ Okﻓﻘﻁ ﻭﻴﻜﻭﻥ ﻋﻨﻭﺍﻥ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻫﻭ ﺃﺴﻡ ﺍﻟﻤﻠـﻑ ﺍﻟﺘﻨﻔﻴـﺫﻱ ﻟﻠﺒﺭﻨـﺎﻤﺞ ﻜﻤﺜﺎل ﻋﻠﻰ ﺫﻟﻙ ﺃﻨﺸﺄ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ Buttonﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻨﺩ ﺤـﺩﺙ
ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ :
ﻼ ﺒﻜﻡ ﻤﻊ ﺩﻟﻔﻲ'(showmessage ;)'ﺃﻫ ﹰ ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻟﺘﺸﺎﻫﺩ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ
ﺏ ـ ﺍﻟﺼﻨﺩﻭﻕ : MessageDlg
ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻴﺸﺒﻪ ﺍﻟﺼﻨﺩﻭﻕ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻨﻪ ﻴﺘﻭﻗﻊ ﻤﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻥ ﻴﻌﻴﺩ ﻗﻴﻤﻪ ﻟﻠﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺨﻼل ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺯﺭﺍﺭ
ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻓﺭﻀﹰﺎ ﺴﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﻤﻌﻴﻨﺔ ﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺯﺭ Yesﻭﺘﻌﻠﻴﻤﺎﺕ ﺃﺨﺭﻯ ﻓﻲ
ﺤﺎل ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ، NOﻴﺘﻡ ﺍﺴﺘﺩﻋﺎﺀ ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺘﺎﻟﻲ : Function MessageDlg(const Msg: string ; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons ; HelpCtx: Longint): Word ﺤﻴﺙ : Msgﻨﺹ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﻤﻁﻠﻭﺏ ﺇﻅﻬﺎﺭﻫﺎ . : Dlgtypeﺘﺤﺩﻴﺩ ﻨﻭﻉ ﻟﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﻭﻴﺄﺨﺫ ﺃﺤﺩﻯ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :
: mtWarningﻴﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﺃﻴﻘﻭﻨﺔ ﻋﻠﻰ ﺸﻜل ﻤﺜﻠﺙ ﺃﺼﻔﺭ ﻟﻪ ﺇﺸﺎﺭﺓ ﺘﻌﺠﺏ . : mtErrorﻴﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﺃﻴﻘﻭﻨﺔ ﻋﻠﻰ ﺸﻜل ﺩﺍﺌﺭﺓ ﺤﻤﺭﺍﺀ ﺩﺍﺨﻠﻬﺎ ﺇﺸﺎﺭﺓ × .
: mtInformationﻴﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﺃﻴﻘﻭﻨﺔ ﻋﻠﻰ
ﺸﻜل !
ﺸﻜل : mtConfirmationﻴﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﺃﻴﻘﻭﻨﺔ ﻋﻠﻰ ! : mtCustomﻻ ﻴﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﺃﻴﻘﻭﻨﺔ .
ﺩﺍﺨﻠﻬﺎ ﺇﺸﺎﺭﺓ ﺘﻌﺠﺏ . ﺩﺍﺨﻠﻬﺎ ﺇﺸﺎﺭﺓ ? .
ﻴﻌﺘﻤﺩ ﻨﻭﻉ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﻤﺭﺍﺩ ﺇﻅﻬﺎﺭﻫﺎ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻫل ﻫـﻲ ﻟﻠﺘﻨﺒﻴـﻪ ﺃﻭ ﻹﻋـﻼﻡ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺒﺤﺼﻭل ﺨﻁﺄ ﻤﺎ ﺃﻭ ﺇﻋﻁﺎﺀﻩ ﻤﻌﻠﻭﻤﺔ ﺠﺩﻴﺩﺓ . .... : Buttons ﺘﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺭﺴﺎﻟﺔ ﻭﺘﺄﺨﺫ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ : 22
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbNoToAll,mbYesT oAll, mbHelp ﺘﻭﻀﻊ ﺍﻷﺯﺭﺍﺭ ﺒﻴﻥ ﻗﻭﺴﻴﻥ ] [ ﻭﺘﻭﻀﻊ ﺒﻴﻨﻬﻤﺎ ﻓﺎﺼﻠﺔ . :HelpCtxﺘﻭﻀﻊ ﻓﻴﻪ ﺭﻗﻡ ﺍﻟﺴﻁﺭ ﻓﻲ ﻤﻠﻑ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﻤﺭﺘﺒﻁ ﻤﻊ ﺍﻟﺯﺭ ) ﺴﻴﺸﺭﺡ ﻤﻠﻑ ﺍﻟﻤﺴﺎﻋﺩﺓ *.HLPﻻﺤﻘﹰﺎ (. ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﻗﻴﻤﺔ ﺘﺘﺒﻊ ﻟﻠﺯﺭ ﺍﻟﺫﻱ ﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺴﺏ ﺍﻟﺠـﺩﻭل ﺍﻟﺘﺎﻟﻲ :ﺃﻱ ﺃﻨﻪ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ OKﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ mrok .
ﻭﻫﻜﺫﺍ .
ﻤﺜﺎل ) : ( 1
ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﻀﻊ ﻋﻠﻴﻪ ﺍﻟﺯﺭ Buttonﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴـﺔ ﻋﻨﺩ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ : ',mtConfirmationﻫل ﺘﺭﻴﺩ ﺇﻏـﻼﻕ ﺍﻟﺒﺭﻨـﺎﻤﺞ'(if MessageDlg ;,[mbyes,mbno],0)= mryes then close ﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺼﻨﺩﻭﻕ ﺍﻟﺘﺎﻟﻲ ﻤـﻊ
mrOk mrCancel mrYes mrNo mrAbort mrRetry mrIgnore mrAll mrNoToAll
mbOK mbCancel mbYes mbNo mbAbort mbRetry mbIgnore mbAll
mbNoToAll mbYesToAll mrYesToAll
ﺍﻟﺯﺭﻴﻥ Yesﻭ Noﻭﺘﻐﻠﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ
ﺤﺎل ﺘﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ . Yes
ﺃﻀﻑ ﺯﺭ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟـﺴﺎﺒﻕ
ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻨﺩ ﺤﺩﺙ ﺍﻟـﻀﻐﻁ
ﻤﺜﺎل : 2 ﻋﻠﻴﻪ:
; )',mterror,[mball,mbyestoall,mbNoToAll,mbIgnore],0ﺘﺠﺭﺒﺔ ' (messagedlg
3ﺍﻟﺼﻨﺩﻭﻕ : InputBox
ﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻋﻠﻰ ﺸﻜل ﻨﺎﻓﺫﺓ ﻓﻴﻬﺎ ﻋﻨﺼﺭ Editﻤﻊ ﺍﻟﺯﺭﻴﻥ Okﻭ Cancelﻭﻟﻪ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : ; InputBox( const ACaption, APrompt, ADefault: string ): string ﺤﻴﺙ : ACaptionﻫﻭ ﻋﻨﻭﺍﻥ ﺍﻟﺼﻨﺩﻭﻕ . : Apromptﻨﺹ ﺍﻟﺭﺴﺎﻟﺔ .
: ADefaultﻗﻴﻤﺔ ﺍﻓﺘﺭﺍﻀﻴﺔ ﺘﻅﻬﺭ ﻓﻲ ﺍﻟﺼﻨﺩﻭﻕ . ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻨﺹ ﺍﻟﻤﺩﺨل ﻓﻲ ﺍﻟﻌﻨﺼﺭ . Edit ﻤﺜﺎل :ﺃﻀﻑ ﺯﺭ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;)'ﺠﺩﻴﺩ '',ﺃﺩﺨل ﺃﺴﻤﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻟﻠﻨﻤﻭﺫﺝ'',ﺘﻐﻴﺭ ﻋﻨﻭﺍﻥ ﺍﻟﻨﻤﻭﺫﺝ'(form1.Caption := inputbox
23
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺨﺎﻤﺴﺔ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﻤﺫﻜﺭﺓ : Memo ﻴﺴﺘﺨﺩﻡ ﻋﻨﺼﺭ ﺍﻟﻤﺫﻜﺭﺓ ﻟﻜﺘﺎﺒﺔ ﻨﺹ ﻁﻭﻴل ) ﺃﻜﺜﺭ ﻤﻥ 256ﺤﺭﻑ ( ﻜﻤﺎ ﻴﻤﻜﻥ ﻓﻴﻪ ﻜﺘﺎﺒﺔ ﻨﺹ ﻤﻥ ﻋﺩﺓ ﺴﻁﻭﺭ . ﺘﺘﻡ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﻤﺫﻜﺭﺓ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ Linesﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ،ﻜﻤﺎ ﻟﻬﺎ ﺒﻌـﺽ ﺍﻟﺨـﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﻤﺜل : : WordWrapﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ Trueﻴﻘﻭﻡ ﺍﻟﻤﺅﺸﺭ ﺒﺎﻹﻨﺘﻘﺎل ﺇﻟﻰ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻋﻨـﺩ ﺍﻟﻭﺼـﻭل ﺇﻟﻰ ﺁﺨﺭ ﺍﻟﺴﻁﺭ ﺍﻟﺤﺎﻟﻲ .
: WantTabsﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ Trueﻓﺈﻨﻪ ﺴﺘﺘﻡ ﺇﻀﺎﻓﺔ 6ﻓﺭﺍﻏﺎﺕ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ
Tab
ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ .
: Wantreturnsﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ Trueﺴﻴﺘﻡ ﺇﻀﺎﻓﺔ ﺴﻁﺭ ﺠﺩﻴﺩ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Enter ﻭﺴﺘﺘﻡ ﺍﻟﻜﺘﺎﺒﺔ ﻋﻠﻰ ﺴﻁﺭ ﻭﺍﺤﺩ ﻓﻲ ﺤﺎل ﻗﻴﻤﺘﻬﺎ . False
: ReadOnlyﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ Trueﻻ ﻴﻤﻜﻥ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﻌﻨﺼﺭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . : Alignmentﺘﻅﻬﺭ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﻨﺹ ﻓﻲ ﺍﻟﻤﺫﻜﺭﺓ ﻭﺘﺄﺨﺫ ﺇﺤﺩﻯ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ : : taRightJustifyﻴﻅﻬﺭ ﺍﻟﻨﺹ ﻓﻲ ﺍﻟﺠﻬﺔ ﺍﻟﻴﻤﻴﻨﻴﺔ) ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺨﺎﺼﺔ BiDiModeﺘﺴﺎﻭﻱ bdRightToLeft
(
BiDiModeﺘﺴﺎﻭﻱ bdRightToLeft
(
: taLeftJustifyﻴﻅﻬﺭ ﺍﻟﻨﺹ ﻓﻲ ﺍﻟﺠﻬﺔ ﺍﻟﻴﺴﺎﺭﻴﺔ ) ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺨﺎﺼﺔ : taCenterﻴﻅﻬﺭ ﺍﻟﻨﺹ ﻓﻲ ﻭﺴﻁ ﺍﻟﻌﻨﺼﺭ . ﻤﺜﺎل :ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭ ﻤﺫﻜﺭﺓ Memoﻭﺯﺭﻴﻥ ، Buttonﺃﻋـﻁ ﺍﻟـﺯﺭ ﺍﻷﻭل ﺍﻟﺨﺎﺼـﺔ " Captionﺤﻔﻅ " ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻌﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ : ; )'Memo1.Lines.SaveToFile( 'c:\a.txt ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺤﻔﻅ ﺍﻟﻨﺹ ﺍﻟﻤﻜﺘﻭﺏ ﺩﺍﺨل ﻋﻨﺼﺭ ﺍﻟﻤﺫﻜﺭﺓ )ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ( ﺇﻟﻰ ﺍﻟﻤﻠﻑ ﺍﻟﻤﺤﺩﺩ ﺒﻴﻥ ﺍﻟﻘﻭﺴﻴﻥ ) ﻫﻨـﺎ . ( a.txt ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺍﻟﺨﺎﺼﺔ " Captionﻓﺘﺢ " ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻌﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ : ; )'Memo1.lines.LoadFromFile ('c:\a.txt ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﺤﻤﻴل ﺍﻟﻨﺹ ﻤﻥ ﺍﻟﻤﻠﻑ ) ﺍﻟﻤﺫﻜﻭﺭ ﺍﺴﻤﻪ ﺒﻴﻥ ﺍﻟﻘﻭﺴﻴﻥ ( ﺇﻟﻰ ﺍﻟﻤﺫﻜﺭﺓ . ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﺯﺭ : Bitbtn
ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻋﻨﺼﺭ ﺍﻟﺯﺭ ﺇﻟﻰ ﺤﺩ ﺒﻌﻴﺩ ﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﻓﻲ : 1ـ ﺇﻤﻜﺎﻨﻴﺔ ﺘﻐﻴﺭ ﻟﻭﻥ ﺨﻁ ﺍﻟﻌﻨﻭﺍﻥ ) . ( Caption 2ـ ﺇﻤﻜﺎﻨﻴﺔ ﺇﻀﺎﻓﺔ ﺼﻭﺭﺓ ﻟﻬﺫﺍ ﺍﻟﺯﺭ ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ : ﺃ ـ ﺍﻟﺼﻭﺭ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺨﺎﺼﺔ . Kind 24
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺏ ـ ﺍﻟﺨﺎﺼﺔ Glyphﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻨﺨﺘﺎﺭ ﻤﻨﻬﺎ ﺼﻭﺭﺓ ﻤﺎ ﻟﻠﺯﺭ ) ﻴﻭﺠﺩ ﺒﻌﺽ ﺼﻭﺭ ﻟﻸﺯﺭﺍﺭ ﻓﻲ ﺍﻟﻤﺠﻠﺩ C:\Program Files\Common Files\Borland Shared\Images\Buttons ﻴﻤﻜﻥ ﺘﻐﻴﺭ ﺼﻭﺭﺓ ﺍﻟﺯﺭ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺒﺎﺨﺘﻴﺎﺭ ﺍﻟﺼﻭﺭﺓ Glyphﻋﺒﺎﺭﺓ ﻋﻥ ﺜﻼﺙ ﺼﻭﺭ ﻤﺘﺠﺎﻭﺭﺓ ﺒﻨﻔﺱ ﺍﻟﺤﺠﻡ ﻜﻤﺎ ﻓﻲ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﻭﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ NumGlyphﺇﻟﻰ ، 3ﺤﻴﺙ ﺘﻜﻭﻥ ﺍﻟﺼﻭﺭﺓ ﺍﻷﻭﻟﻰ ﻟﻠﺯﺭ
ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻭﺍﻟﺼﻭﺭﺓ ﺍﻟﺜﺎﻨﻴﺔ ﻓﻲ ﺤﺎﻟﺔ ﻜﺎﻨﺕ ﺍﻟﺨﺎﺼﺔ Enabeledﺘﺴﺎﻭﻱ Falseﻭﺍﻟﺼﻭﺭﺓ ﺍﻟﺜﺎﻟﺜﺔ ﺘﻅﻬﺭ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ .
ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺴﺭﻴﻌﺔ : SpeedButton
ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﺯﺭﺍﺭ ﺘﺴﺘﺨﺩﻡ ﻓﻲ ﺃﺸﺭﻁﺔ ﺍﻷﺩﻭﺍﺕ ﻭﻟﻬﺎ ﺨﺼﺎﺌﺹ ﺍﻟﺯﺭ BitBtnﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : 1ـ : Flatﺘﻌﻁﻲ ﻤﻅﻬﺭ ﻤﺴﺘﻭﻱ ﻟﻠﺯﺭ ﻭﻴﺼﺒﺢ ﺍﻟﻤﻅﻬﺭ ﺜﻼﺜﻲ ﺍﻟﺒﻌﺩ ﻋﻨﺩ ﻤﺭﻭﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻗﻪ . 2ـ : GroupIndexﻋﻨﺩ ﺇﻋﻁﺎﺀ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﺴﺭﻋﺔ ﻗﻴﻤﺔ ﻭﺍﺤﺩﺓ ﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﻜﺒﺭ ﻤﻥ ﺍﻟﺼﻔﺭ ﺘﻌﻤـل ﻫﺫﻩ ﺍﻷﺯﺭﺍﺭ ﻜﺄﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ . ﻤﺜﺎل :
ﺃﻨﺸﺄ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺃﻟﻴﻪ ﺃﺭﺒﻊ ﺃﺯﺭﺍﺭ Speedbuttonﺃﻀﻑ ﻟﻜل ﺯﺭ ﺼﻭﺭﺓ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ Glyph ﻭﺃﻋﻁ ﺠﻤﻴﻊ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺨﺎﺼﺔ GroupIndexﺍﻟﻘﻴﻤﺔ ،1ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺃﻨﻪ ﻻ ﻴﻤﻜﻥ ﻷﻜﺜﺭ ﻤﻥ ﺯﺭ ﻤﻥ ﻫـﺫﻩ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺃﻥ ﻴﻜﻭﻥ ﻤﻀﻐﻭﻁﹰﺎ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ . ﺃﻨﻭﺍﻉ ﺍﻟﻨﻤﺎﺫﺝ ) SDIﻭ : ( MDI ﺘﻘﺴﻡ ﻜل ﻭﺍﺠﻬﺎﺕ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻨﺼﻤﻤﻬﺎ ﺇﻟﻰ ﻨﻭﻋﻴﻥ ﻫﻤﺎ :ﻭﺍﺠﻬﺔ ﺍﻟﻭﺜﻴﻘﺔ ﺍﻟﻭﺍﺤﺩﺓ SDIﺃﻱ ﺇﻅﻬﺎﺭ ﻨﺎﻓـﺫﺓ ﻭﺍﺤـﺩﺓ
ﻟﻠﺒﺭﻨﺎﻤﺞ ،ﻭﻭﺍﺠﻬﺔ ﺍﻟﻭﺜﺎﺌﻕ ﺍﻟﻤﺘﻌﺩﺩﺓ : MDIﻭﺘﻌﺘﻤﺩ ﻋﻠﻰ ﻋﺩﺩ ﻤﻥ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺒﻨﺎﺀ ﺘﻅﻬﺭ ﻀﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ . ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺘﻁﺒﻴﻕ ﺍﻟﺫﻱ ﻨﺼﻤﻤﻪ ﻤﻥ ﺨﻼل ﺍﻟﺨﺎﺼﺔ FormStyleﻭﺍﻟﺘﻲ ﺘﺄﺨﺫ ﺇﺤﺩﻯ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ : FormStyle ﻤﻼﺤﻅﺎﺕ ﻋﻤﻠﻬﺎ fsNormal
ﻼ ﻭﺤﻴﺩﹰﺍ ﻤﻥ ﺍﻟﻨﻭﻉ SDI ﺘﻨﺸﺊ ﺸﻜ ﹰ ﻴﻤﻜﻥ ﻟﻬﺫﺍ ﺍﻟﺸﻜل ﺃﻥ ﻴﺤﺘﻭﻱ ﻋﻠﻰ
fsMDIForm
ﻼ ﺃﺒﹰﺎ )ﺸﻜل ﺭﺌﻴﺴﻲ ﻟﻠﺘﻁﺒﻴﻕ( ﺘﻨﺸﺊ ﺸﻜ ﹰ
fsMDIChild
ﻼ ﻭﻟﺩﹰﺍ ،ﺃﻱ ﺸـﻜل ﺜـﺎﻨﻭﻱ ﻫﺫﺍ ﺍﻟﺸﻜل ﺴﻭﻑ ﻴﺤﺘﻭﻱ ﻤﻥ ﻗﺒل ﺘﻨﺸﺊ ﺸﻜ ﹰ
ﺃﺸﻜﺎل ﺃﺨﺭﻯ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . ﺍﻟﺸﻜل ﺍﻷﺏ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ.
ﻤﺘﻌﻠﻕ ﺒﺸﻜل ﺁﺨﺭ ﻼ ﻭﺤﻴﺩﹰﺍ ﻴﺒﻘﻰ ﻅـﺎﻫﺭﹰﺍ ﻓـﻲ fsStayOnTopﺘﻨﺸﺊ ﺸﻜ ﹰ ﺍﻷﻤﺎﻡ ﻤﻬﻤﺎ ﻜﺎﻨﺕ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﻤﻔﺘﻭﺤﺔ
ﻼ ﻭﻟﺩﹰﺍ ﺴﻨﻘﻭﻡ ﺒﻤﺎ ﻴﻠﻲ : ﻭﺤﺘﻰ ﻨﺸﺭﺡ ﻜﻴﻑ ﻴﺴﺘﻁﻴﻊ ﺍﻟﺸﻜل ﺍﻷﺏ ﻤﻥ ﺍﻟﻨﻭﻉ MDIﺃﻥ ﻴﺤﺘﻭﻱ ﺸﻜ ﹰ 1ـ ﻨﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﻨﻌﻁﻲ ﺍﻟﺨﺎﺼﺔ Formstyleﻟﻠﻨﻤﻭﺫﺝ Form1ﺍﻟﻘﻴﻤﺔ . fsMDIForm 2ـ ﻨﻀﻴﻑ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻟﻠﻤﺸﺭﻭﻉ ﻭﻨﻌﻁﻲ ﺍﻟﺨﺎﺼﺔ Formstyleﻟﻪ ﺍﻟﻘﻴﻤﺔ . fsMDIChild 3ـ ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺃﻥ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﻴﻅﻬﺭ ﻀﻤﻥ ﺤﺩﻭﺩ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﻻ ﻴﻤﻜﻥ ﺘﺤﺭﻴﻜﻪ ﺨﺎﺭﺠﻪ . 25
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻴﺸﺭﺡ ﺍﻟﺨﺎﺼﺔ : fsStayOnTop ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Formstyleﻟﻠﻨﻤﻭﺫﺝ Form1ﺍﻟﻘﻴﻤـﺔ ، fsStayOnTopﻨﻔـﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻼ ﻓـﺘﺢ ﻨﺎﻓـﺫﺓ ﺠﻬـﺎﺯ ﻭﻻﺤﻅ ﺃﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺴﺘﻅﻬﺭ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻭﻻ ﻴﻤﻜﻥ ﻷﻱ ﻨﺎﻓﺫﺓ ﺃﺨﺭﻯ ﺍﻟﻅﻬﻭﺭ ﻓﻭﻗﻬﺎ ) ﺤﺎﻭل ﻤﺜ ﹰ
ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﺃﻭ ﻨﺎﻓﺫﺓ ﺴﻠﺔ ﺍﻟﻤﺤﺫﻭﻓﺎﺕ ﻭﻻﺤﻅ ﺃﻥ ﻫﺫﻩ ﺍﻟﻨﻭﺍﻓﺫ ﺴﺘﻅﻬﺭ ﺨﻠﻑ ﻨﺎﻓﺫﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ( .
26
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﻨﺸﺎﺀ ﻗﻭﺍﺌﻡ ﻟﻠﻨﻤﺎﺫﺝ : ﺘﻌﻁﻲ ﺍﻟﻘﻭﺍﺌﻡ ﻁﺭﻴﻘﺔ ﺴﻬﻠﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻋﺩﺩ ﻤﻥ ﺍﻷﻭﺍﻤﺭ ﻭﻫﻨﺎﻙ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﻘﻭﺍﺌﻡ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺭﺌﻴﺴﻴﺔ ) ( Main Menuﻭﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺒﺜﻘﺔ ) . ( Popup Menu ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺭﺌﻴﺴﻴﺔ ) : ( Main Menuﻟﻠﻘﺎﺌﻤﺔ ﺍﻟﺭﺌﻴﺴﻴﺔ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : ﻋﻨﺎﺻﺮ اﻟﻘﻮاﺋﻢ ﺿﻤﻦ ﺷﺮﻳﻂ اﻟﻘﻮاﺋﻢ
أواﻣﺮ اﻟﻘﺎﺋﻤﺔ
أﻣﺮ ﻳﻔﺘﺢ ﻗﺎﺋﻤﺔ ﻓﺮﻋﻴﺔ
ﻣﻔﺘﺎح ﺗﺴﺮﻳﻊ
اﺧﺘﺼﺎرات ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﻴﺢ
ﺷﺮﻳﻂ ﻓﺎﺻﻞ
ﻤﺜﺎل : 1ـ ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻨﺼﺭ MainMenuﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Standered 2ـ ﺍﻓﺘﺢ ﻤﺼﻤﻡ ﺍﻟﻘﻭﺍﺌﻡ ) ( Menu Desigenrﻋﻥ ﻁﺭﻴﻕ : ﺍﻟﻴﻤﻴﻨﻲ
ﺍﻟﺨﺎﺼﺔ Itemsﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﺃﻭ ﺍﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ﺒﺎﻟﺯﺭ ﻭﺍﺨﺘﺭ Menu Desigenrﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﻋﻨﺩ ﺫﻟﻙ ﺴﻴﻅﻬﺭ ﻤﺼﻤﻡ ﺍﻟﻘﻭﺍﺌﻡ ﻭﻓﻴﻪ ﻋﻨﺼﺭ ﻗﺎﺌﻤﺔ ) Menu Item
( ﻓﺎﺭﻍ ﻤﻀﺎﺀ ﻭﺴﺘﻀﺎﺀ ﺃﻴﻀﹰﺎ ﺍﻟﺨﺎﺼﺔ Captionﻀﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ . 3ـ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Captionﺍﻟﻘﻴﻤﺔ ) &ﻤﻠﻑ ( :ﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻭﻅﻬﻭﺭ ﺨﻁ ﺼﻐﻴﺭ ﺘﺤـﺕ ﺍﻟﺤﺭﻑ ﻡ ﻓﻲ ﻜﻠﻤﺔ ﻤﻠﻑ ﻭﺫﻟﻙ ﻷﻨﻨﺎ ﻭﻀﻌﻨﺎ ﺍﻟﺭﻤﺯ & ﻗﺒل ﻫﺫﺍ ﺍﻟﺤﺭﻑ ﻓﻲ ﺍﻟﺨﺎﺼﺔ . Caption 4ـ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Captionﻟﻠﺯﺭ ﺍﻟﻅﺎﻫﺭ ﺘﺤﺕ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﺍﻟﻘﻴﻤﺔ ) &ﺠﺩﻴﺩ ( .
5ـ ﻭﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺯﺭ ﺠﺩﻴﺩ ﺘﺤﺕ ﺍﻟﺯﺭ ﺍﻟﺴﺎﺒﻕ ﺃﻋﻁﻪ & ) Captionﻓﺘﺢ ( . 6ـ ﺃﻋﻁ ﺍﻟـ Captionﻟﻠﺯﺭ ﺍﻷﺨﻴﺭ ﺍﻟﻘﻴﻤﺔ – ﻭﺫﻟﻙ ﻹﻅﻬﺎﺭ ﺨﻁ ﻓﺎﺼل ﺒﻴﻥ ﺃﻭﺍﻤﺭ ﺍﻟﻘﺎﺌﻤﺔ . 27
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
7ـ ﺃﻋﻁ ﺍل Captionﻵﺨﺭ ﺯﺭ ﻨﺎﺘﺞ ﺍﻟﻘﻴﻤﺔ & ﺇﻏﻼﻕ . 8ـ ﺃﺨﺘﺭ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﺠﻭﺩ ﺒﺠﺎﻨﺏ ﺍﻟﻌﻨﺼﺭ ﻤﻠﻑ ﻭﺃﻋﻁﻪ ﺍﻟـ & Captionﺘﺤﺭﻴﺭ .
9ـ ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﺘﺤﺘﻪ ﺍﻟـ Captionﺍﻟﻘﻴﻤﺔ ﻨﺴﺦ ،ﻭﺍﻟﺨﺎﺼﺔ Shortcutﺍﻟﻘﻴﻤﺔ Ctrl + cﻭﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻋﻨﺩ ﻁﺭﻴﻕ ﺍﺴﺘﺨﺩﺍﻡ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ . 10ـ ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻟـ Captionﻗﺹ ،ﻭﺍﻟﺨﺎﺼﺔ Shortcutﺍﻟﻘﻴﻤﺔ . Ctrl + X 11ـ ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻟـ Captionﻟﺼﻕ ،ﻭﺍﻟﺨﺎﺼﺔ Shortcutﺍﻟﻘﻴﻤﺔ . Ctrl + V ﺇﻨﺸﺎﺀ ﻗﺎﺌﻤﺔ ﻓﺭﻋﻴﺔ ﻟﻘﺎﺌﻤﺔ ﺭﺌﻴﺴﻴﺔ :
12ـ ﺃﻋﻁ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻲ ﺍﻟﺯﺭ ﻟﺼﻕ ﺍﻟــ Captionﻨﻤـﻁ ﺍﻟﺨـﻁ ،ﺍﻀـﻐﻁ ﻋﻠﻴـﻪ ﺒـﺯﺭ ﺍﻟﻔـﺄﺭﺓ ﺍﻟﻴﻤﻴﻨـﻲ ﻭﺍﺨﺘﺭ Create SubMenuﺴﺘﻅﻬﺭ ﻋﻨﺩﺌﺫ ﻗﺎﺌﻤﺔ ﻓﺭﻋﻴﺔ ﺃﻋﻁ ﻓﻴﻬﺎ ﺍﻷﻭﺍﻤﺭ ﺍﻟﺜﻼﺙ ﺍﻟﺘﺎﻟﻴﺔ :
ﻏﺎﻤﻕ ،ﻤﺎﺌل ،ﺘﺤﺘﻪ ﺨﻁ .
ﺍﻟﻌﻤل ﻤﻊ ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ : 1ـ ﻟﺤﺫﻑ ﻋﻨﺼﺭ ﻗﺎﺌﻤﺔ ﻨﺨﺘﺎﺭ ﺃﻱ ﻋﻨﺼﺭ ﻭﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Deleteﺃﻭ ﻨﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔـﺄﺭﺓ ﺍﻷﻴﻤـﻥ ﻭﻨﺨﺘـﺎﺭ Deleteﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ .
2ـ ﻹﻀﺎﻓﺔ ﻋﻨﺼﺭ ﺠﺩﻴﺩ ﺒﻴﻥ ﻋﻨﺼﺭﻴﻥ ﻨﺨﺘﺎﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺴﻔﻠﻲ ﻭﻨﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﻤﻥ ﻭﻨﺨﺘـﺎﺭ Insertﻤـﻥ
ﺍﻟﻘﺎﺌﻤﺔ . 3ـ ﻟﺘﻐﻴﻴﺭ ﻤﻭﻗﻊ ﻋﻨﺼﺭ ﻗﺎﺌﻤﺔ ﺃﻭ ﻹﻋﺎﺩﺓ ﺘﺭﺘﻴﺏ ﻗﺎﺌﻤﺔ ﻨﺴﺤﺏ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻨﺭﻴﺩ ﻨﻘﻠﻪ ) ﻨﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔـﺄﺭﺓ ﻋﻠـﻰ ﺍﻟﻌﻨﺼﺭ ﻭﻨﺒﻘﻴﻪ ﻤﻀﻐﻭﻁﹰﺎ ( ﺜﻡ ﻨﺤﺭﺭ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻟﻴﺘﻭﻀﻊ ﻓﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺠﺩﻴﺩ . 4ـ ﻹﻅﻬﺎﺭ ﻋﻨﺎﺼﺭ ﻗﺎﺌﻤﺔ ﻤﺘﺠﺎﻭﺭﻴﻥ ﺃﻓﻘﻴﹰﺎ ﻨﻐﻴﺭ ﺍﻟﺨﺎﺼﺔ Breakﻷﻤﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻁﻠﻭﺏ ﺇﻟﻰ mbBreakﺃﻭ ﺇﻟـﻰ
mbBarBreakﻭﺤﻴﺙ ﺘﻅﻬﺭ ﺍﻟﺜﺎﻨﻴﺔ ﺨﻁ ﻋﻤﻭﺩﻱ ﺒﻴﻥ ﺍﻷﻭﺍﻤﺭ ،ﻭﻹﻋﺎﺩﺓ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻟﻰ ﺍﻟﺤﺎﻟـﺔ ﺍﻻﻓﺘﺭﺍﻀـﻴﺔ ﻨﺨﺘـﺎﺭ . mbNone ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻋﻨﺼﺭ ﻗﺎﺌﻤﺔ : 5ـ ﺘﺴﺘﺨﺩﻡ ﺍﻟﻘﻭﺍﺌﻡ ﻟﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﻤﻌﻴﻨﺔ ﻭﻟﻜﺘﺎﺒﺔ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻷﻤﺭ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺃﻭ ﻨﺨﺘﺎﺭﻩ ﻭﻨـﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺤﺩﺙ OnClickﻤﻥ ﺍﻟﺼﻔﺤﺔ Eventﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ .
6ـ ﻏﺎﻟﺒﹰﺎ ﻤﺎ ﺘﺴﺘﺨﺩﻡ ﺍﻟﻘﻭﺍﺌﻡ ﻤﻊ ﺍﻟﺒﺭﺍﻤﺞ ﻤﺘﻌﺩﺩﺓ ﺍﻟﻭﺜﻴﻘﺔ MDIﻭﻴﻤﻜﻥ ﺩﻤﺞ ﻗﻭﺍﺌﻡ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺒﻥ ﻤﻊ ﻨﻭﺍﻓﺫ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﻭﺴﻨﺩﺭﺱ ﺫﻟﻙ ﻻﺤﻘﹰﺎ.
ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺒﺜﻘﺔ ) : ( Popup Menu
ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻗﺎﺌﻤﺔ ﺘﻅﻬﺭ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﻴﻤﻜﻥ ﺭﺒﻁﻬﺎ ﻤﻊ ﺍﻟﻨﻤـﻭﺫﺝ ﺃﻭ ﺃﻱ ﻋﻨـﺼﺭ ﺁﺨـﺭ ﻭﺘﺼﻤﻴﻬﻤﺎ ﻤﺸﺎﺒﻪ ﻟﺘﺼﻤﻴﻡ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺭﺌﻴﺴﻴﺔ . Main Menu ﻤﺜﺎل :
ﺃﻀﻑ ﻋﻨﺼﺭﻱ ﻗﺎﺌﻤﺔ ﻤﻨﺒﺜﻘﺔ PopUpMenuﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺃﻀﻑ ﻋﻨﺼﺭ Panelﻜﺫﻟﻙ . ﺃﻀﻑ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻷﻭﻟﻰ ﺍﻷﻭﺍﻤﺭ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﻷﻤﺭ ﺍﻷﻭل ،ﺍﻷﻤﺭ ﺍﻟﺜﺎﻨﻲ ،ﺍﻷﻤﺭ ﺍﻟﺜﺎﻟﺙ . ﺃﻀﻑ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺍﻷﻭﺍﻤﺭ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﻟﺭﺍﺒﻊ ،ﺍﻟﺨﺎﻤﺱ .
ﻋﻠﻰ اﻷﻣﺮ اﻷول ﻣﻦ اﻟﻘﺎﺋﻤﺔ' 'اﻷوﻟﻰ 'ﻟﻘﺪ ﺿﻐﻄﺖ 28
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻷﻤﺭ ﺍﻷﻭل ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ: ;) "Showmessage ( "you click the first button ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻷﻤﺭ ﺍﻟﺜﺎﻨﻲ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;) " Showmessage ( "you click over the second button ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺭﺍﺒﻊ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : )"Showmessage ("you click over the third button ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺨﺎﻤﺱ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ) "Showmessage ("you click over the fifth button ﺍﺨﺘﺭ ﺍﻟﺨﺎﺼﺔ PopUpMenuﺍﻟﺘﺎﺒﻌﺔ ﻟﻠﻨﻤﻭﺫﺝ ﻭﺃﻋﻁﻬﺎ ﺍﻟﻘﻴﻤﺔ . PopUpMenu1 ﺍﺨﺘﺭ ﺍﻟﺨﺎﺼﺔ PopUpMenuﺍﻟﺘﺎﺒﻌﺔ ﻟﻠـ Panelﻭﺃﻋﻁﻬﺎ ﺍﻟﻘﻴﻤﺔ .PopUpMenu2 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺎﺭﺓ ﺍﻷﻴﻤﻥ ﻋﻠﻰ ﻜل ﻤﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺍﻟـ . Panel ﺇﻀﺎﻓﺔ ﻤﻼﺤﻅﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ): ( Comments ﻼ ﻓـﻲ ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﺒﺭﻤﺞ ﺍﻟﻤﻼﺤﻅﺎﺕ ﻟﻴﺘﺫﻜﺭ ﻋﻤل ﻤﻘﻁﻊ ﺒﺭﻤﺠﻲ ﻤﺤﺩﺩ ،ﻭﻟﻴﺘﺭﻙ ﻓﻜﺭﺓ ﻋﻤﺎ ﻴﺭﻴﺩ ﺃﻥ ﻴﻁـﻭﺭﻩ ﻤـﺴﺘﻘﺒ ﹰ ﺴﻁﻭﺭ ﺒﺭﻤﺠﻴﺔ ﻤﻌﻴﻨﻪ .
ﻴﻤﻜﻥ ﺇﻀﺎﻓﺔ ﻤﻼﺤﻅﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ : 1ـ } ﺃﻜﺘﺏ ﺃﻱ ﻨﺹ ﺘﺭﻴﺩﻩ ﺒﻴﻥ ﻫﺫﻴﻥ ﺍﻟﻘﻭﺴﻴﻥ ،ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﻋﻠﻰ ﻋﺩﺓ ﺃﺴﻁﺭ { . 2ـ )* ﺃﻜﺘﺏ ﺃﻱ ﻨﺹ ﺘﺭﻴﺩﻩ ﺒﻴﻥ ﺇﺸﺎﺭﺘﻲ ﺍﻟﻘﻭﺱ ﻭﺍﻟﻨﺠﻤﺔ ،ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﻋﻠﻰ ﻋﺩﺓ ﺍﺴﻁﺭ *( . 3ـ //ﺃﻜﺘﺏ ﺃﻱ ﻨﺹ ﺘﺭﻴﺩﻩ ﺒﻌﺩ ﻫﺫﻴﻥ ﺍﻹﺸﺎﺭﺘﻴﻥ ،ﺍﻟﻨﺹ ﻋﻠﻰ ﺴﻁﺭ ﻭﺍﺤﺩ ﻓﻘﻁ .
ﻟﻜﺘﺎﺒﺔ ﺍﻟﻤﻼﺤﻅﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ :ﺍﻀﻐﻁ ﺒﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﻤﻥ ﻓﻲ ﻭﺴﻁ ﻤﺤﺭﺭ ﺍﻟـﺸﻴﻔﺭﺓ ﻭﺍﺨﺘـﺭ ﻤـﻥ ﺍﻟﻘﺎﺌﻤـﺔ propertiesﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ Property Editorsﺃﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺼﻔﺤﺔ Displayﻭﻏﻴﺭ ﺍﻟﺨﺎﺼﺔ Editor Fontﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ ) ، Courier New ( Arabicﺍﻀﻐﻁ ﻋﻠﻰ ... Ok ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ :Data Types
ﺘﻤﻠﻙ ﻟﻐﺔ ﺒﺎﺴﻜﺎل ﺍﻟﻬﺩﻓﻴﺔ ) (Object Pascalﻋﺩﺩﹰﺍ ﻤﻥ ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﺴﺒﻘﺔ ﺍﻟﺘﻌﺭﻴﻑ ﺒﺤﻴﺙ ﺘﻤﻜﻨﻨﺎ ﻤﻥ ﺍﻟﺘﺼﺭﻴﺢ ﻤﺒﺎﺸﺭﺓ ﻋﻥ ﻤﺘﺤﻭﻻﺕ ﺘﻨﺘﻤﻲ ﻟﻬﺫﻩ ﺍﻷﻨﻭﺍﻉ .ﻭﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻴﻌﺭﺽ ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﺴﺒﻘﺔ ﺍﻟﺘﻌﺭﻴﻑ ﻓﻲ ﻫﺫﻩ ﺍﻟﻠﻐﺔ:
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺼﺤﻴﺤﺔ : ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ Integer
ﻭﺼﻔﻬﺎ ﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ .ﺘﻘﻊ ﻫﺫﻩ ﺍﻷﻋﺩﺍﺩ ﻀﻤﻥ ﺍﻟﻤﺠﺎل ﻤﻥ ) (2147483648-ﻭﺤﺘﻰ ) ، (2147483647ﻭﺘﺘﻁﻠﺏ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻨﻬﺎ ) ﻜﺎﻥ ﺤﺠﻤﻪ ﻓﻲ ﺘﺭﺒﻭ ﺒﺎﺴﻜﺎل 2ﺒﺎﻴﺕ ( ﻟﺫﻟﻙ ﻟﻴﺱ ﻤﻥ ﺍﻟﻀﺭﻭﺭﻱ ﺍﻥ ﺘﺘﻁﺎﺒﻕ ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺩﻟﻔﻲ ﻭ ﺘﺭﺒﻭ ﺒﺎﺴﻜﺎل( .
Shortint
ﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ .ﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ ) (128-ﻭﺤﺘﻰ) (127ﻭﺘﺘﻁﻠﺏ ﺒﺎﻴﺘ ﹰﺎ ﻭﺍﺤﺩﹰﺍ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
Smallint
ﻭﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ )(32768-ﻭﺤﺘﻰ ) (32767ﻭﺘﺘﻁﻠﺏ 29
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻨﻬﺎ Longint
ﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ،ﻭﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ)(-2147483648ﻭﺤﺘﻰ )(2147483647ﻭﺘﺘﻁﻠﺏ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻨﻬﺎ
Byte
ﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺒﺩﻭﻥ ﺇﺸﺎﺭﺓ ﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ ) (0ﻭﺤﺘﻰ )(225ﻭﺘﺘﻁﻠﺏ ﺒﺎﻴﺘﹰﺎ ﻭﺍﺤﺩﹰﺍ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
Word
ﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺒﺩﻭﻥ ﺇﺸﺎﺭﺓ ﻭﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ )(0ﻭﺤﺘﻰ)(65535ﻭﺘﺤﺘﺎﺝ ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ.
Cardinal
ﻭﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺒﺩﻭﻥ ﺇﺸﺎﺭﺓ ﻭﺘﻘﻊ ﻓﻲ ﺍﻟﻤﺠﺎل ﺒﻴﻥ) (0ﻭﺤﺘﻰ ) (2147483647ﻭﺘﺤﺘﺎﺝ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻟﺘﺨﺯﻴﻨﻬﺎ.
Int64
ﻭﻫﻲ ﺃﻋﺩﺍﺩ ﺒﺩﻭﻥ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺘﻘﻊ ﻀﻤﻥ ﺍﻟﻤﺠﺎل ) ( -2*1063ﻭﺤﺘﻰ ﺍﻟﻤﺠﺎل ) 2*1063-1
( ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺜﻤﺎﻥ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺤﻘﻴﻘﻴﺔ Single ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 7ﺃﻭ ) ( 8ﺃﺭﻗﺎﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل ﻤﻥ 1.5* 10-45ﻭﺤﺘﻰ 3.4*1038ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
Real
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 11ﺃﻭ ) ( 12ﻭﺘﻘﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل
2.9*10-39ﺇﻟﻰ 1.7*1038ﻭﻫﻲ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺴﺕ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺘﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻨﺴﺦ ﺒﺎﺴﻜﺎل ﺍﻟﻘﺩﻴﻤﺔ ﻭﺇﻻ ﻓﺈﻥ ﺍﺴﺘﺨﺩﺍﻡ Extendedﺃﻭ Doubleﺃﻭﻟﻰ Double
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 15ﺃﻭ ) ( 16ﻭﺘﻘﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل 5.0*10-324ﺇﻟﻰ 1.7*10308ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺜﻤﺎﻨﻲ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
Extended
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) (19ﺃﻭ ) ( 20ﺭﻗﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل 3.4*10-4932ﻭﺤﺘﻰ 1.1*104932ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﻋﺸﺭﺓ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
Currency
ﻭﻫﻲ ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ ﺫﺍﺕ ﻓﺎﺼﻠﺔ ﺜﺎﺒﺘﺔ ﺒﺨﻼﻑ ﺒﺎﻗﻲ ﺍﻷﻨﻭﺍﻉ ﺫﺍﺕ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ ،ﻭﻫﻲ ﻤﻼﺌﻤـﺔ ﻟﻠﺤﺴﺎﺒﺎﺕ ﺍﻟﻤﺎﻟﻴﺔ ﻭﺘﻤﻠﻙ ﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻤـﻥ ) ( 19ﺃﻭ ) 20ﺭﻗـﻡ ( ﻭﺘﻘـﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل -922337203685477.5808ﻭﺤﺘﻰ 922337203685477ﻭﻴﺘﻁﻠﺏ ﺘﺨﺯﻴﻨﻬﺎ ﺜﻤﺎﻥ ﺒﺎﻴﺘﺎﺕ .
Comp
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) (19ﺃﻭ ) ( 20ﺭﻗﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل -9.2*1018ﻭﺤﺘﻰ 9.2*1018ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺜﻤﺎﻥ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
30
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺒﻭﻟﻴﺎﻨﻴﺔ : Boolean ﻫﻭ ﻨﻭﻉ ﻤﻨﻁﻘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻨﺘﻤﻴﺔ ﺇﻟﻴﻪ ﺇﺤﺩﻯ ﻗﻴﻤﺘﻴﻥ Trueﺃﻭ Falseﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ . ByteBool
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ
Wordbool
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
Longbool
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ
ﺍﻟﺫﺍﻜﺭﺓ
ﺍﻟﺫﺍﻜﺭﺓ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺭﻤﺯﻴﺔ : AnsiCharﻫﻭ ﻨﻭﻉ ﺭﻤﺯﻱ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻥ ﺸﻴﻔﺭﺓ ﺃﺴﻜﻲ ﺍﻟﻤﻘﺎﺒﻠﺔ ﻟﺭﻤﺯ ﻤﻌﻴﻥ . Character WideChar
ﻫﻭ ﻨﻭﻉ ﺭﻤﺯﻱ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻥ ﺭﻤﺯ ﺒﺎﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ ) Unicode ﺍﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ ﺘﻡ ﺍﻋﺘﻤﺎﺩﻫﺎ ﻤﻨﺫ ﻓﺘﺭﺓ ﻓﻲ ﺃﻨﻅﻤﺔ ﺍﻟﺘﺸﻐﻴل Windows 2000,Xpﻭﻫﻲ ﻋﺒﺎﺭﺓ
ﺘﻤﺜﻴل ﻴﻀﻡ ﺠﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻟﻌﺎﻟﻡ ) ﻋﺩﻯ ﻟﻐﺎﺕ ﺸﺭﻕ ﺁﺴﻴﺎ ( ﻭﻴﺤﺘﺎﺝ ﻜل ﺭﻤﺯ ﻓﻴﻬﺎ ﺇﻟﻰ 16ﺒﺕ . Char
ﻫﻭ ﻨﻔﺱ ﺍﻟﻨﻭﻉ AnsiCharﺘﺤﺕ ﺒﻴﺌﺔ Windows 98,Meﻭﻟﻜﻨﻪ ﻗﺩ ﻴﺸﻴﺭ ﺇﻟﻰ WideChar
ﻓﻲ ﺒﻴﺌﺔ . Windows 2000,Xp
ﺃﻨﻭﺍﻉ ﺍﻟﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ : AnsiStringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﻏﻴﺭ ﻤﺤﺩﻭﺩﺓ ﺍﻟﻁﻭل ﻴﺒﺩﺃ ﺤﺠﻤﻬﺎ 4ﺒﺎﻴﺕ ﻭﻴﻨﺘﻬﻲ ﺒـ 2ﺠﻴﻐﺎ ﺒﺎﻴﺕ
ﻭﺘﺒﺩﺃ ﺭﻤﻭﺯﻫﺎ ﻤﻥ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ) 1ﻻ ﻭﺠﻭﺩ ﻟﻠﺤﺠﺭﺓ . ( 0
Sortstringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﺤﺩﻫﺎ ﺍﻷﻗﺼﻰ 256ﺭﻤﺯ ﻭﻴﺄﺨﺫ ﺤﺠﻤﻬﺎ ﺒﻴﻥ 2ﺒﺎﻴﺕ ﻭ 256ﺒﺎﻴﺕ ﻭﻴﺨﺯﻥ ﻓﻲ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ﻤﻨﻬﺎ ) ﺍﻟﺤﺠﺭﺓ ﺭﻗﻡ ( 0ﻁﻭل ﺍﻟﻤﺼﻔﻭﻓﺔ
WideStringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﺒﺎﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ Unicodeﻴﺒﺩﺃ ﺤﺠﻤﻬﺎ 4ﺒﺎﻴﺕ ﻭﻴﻨﺘﻬﻲ ﺒـ 2ﺠﻴﻐﺎ ﺒﺎﻴﺕ ﻭﺘﺒﺩﺃ ﺭﻤﻭﺯﻫﺎ ﻤﻥ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ) 1ﻻ ﻭﺠﻭﺩ ﻟﻠﺤﺠﺭﺓ . ( 0 String ﺒﺸﻜل ﺍﻓﺘﺭﺍﻀﻲ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل ﻤﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻴﻜﺎﻓﺊ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل AnsiStringﺃﻭ WideStringﺤﺴﺏ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ،ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺸﻴﺭ ﺇﻟﻰ Shortstringﻓﻲ ﺤﺎل ﺃﻀﻔﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﻘﺴﻡ implementation
31
}{$H-
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ ﺍﻟﻤﻨﺘﻬﻴﺔ ﺒﻼ ﺸﻲﺀ ) . ( Null PAnsiCharﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻨﻭﻉ ﻤﻌﻁﻴﺎﺕ ﻤﺅﺸﺭ ﻴﺅﺸﺭ ﺇﻟﻰ ﻋﻠﻰ ﺴﻼﺴل ﺭﻤﺯﻴـﺔ ﻤﻨﺘﻬﻴـﺔ ﺒﺭﻤـﺯ Null ﻭﺭﻤﻭﺯ ﻫﺫﻩ ﺍﻟﺴﻠﺴﺔ ﻤﻥ ﺍﻟﻨﻭﻉ AnsiChar PWideCharﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻨﻭﻉ ﻤﻌﻁﻴﺎﺕ ﻤﺅﺸﺭ ﻴﺅﺸﺭ ﺇﻟﻰ ﻋﻠﻰ ﺴﻼﺴل ﺭﻤﺯﻴـﺔ ﻤﻨﺘﻬﻴـﺔ ﺒﺭﻤـﺯ Null ﻭﺭﻤﻭﺯ ﻫﺫﻩ ﺍﻟﺴﻠﺴﺔ ﻤﻥ ﺍﻟﻨﻭﻉ WideChar
Pchar ﺍﻟﻤﺅﺸﺭ Pointer
ﻨﻔﺱ ﺍﻟﻨﻭﻋﻴﻥ ﺍﻟﺴﺎﺒﻘﻴﻥ ﻭﻴﺅﺸﺭ ﻋﻠﻰ ﺍﻟﻨﻭﻉ Char ﻭﻫﻭ ﻤﺅﺸﺭ ﻏﻴﺭ ﻤﺤﺩﺩ ﺍﻟﻨﻭﻉ ﺃﻱ ﻴﺅﺸﺭ ﺇﻟﻰ ﺃﻱ ﻨﻭﻉ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺤﺠﺭﺍﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
ﺍﻟﻨﻭﻉ ﺍﻟﻤﺘﻨﻭﻉ ) ﺍﻟﻤﺘﻐﻴﺭ ( Variant ﻨﻭﻉ ﻤﺘﻐﻴﺭ ﻤﺘﻭﺍﻓﻕ ﻤﻊ ﺠﻤﻴﻊ ﺍﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺨﺯﻥ ﻗﻴﻤﹰﺎ ﻭﻓﻕ ﺃﻱ ﻨﻭﻉ . ﺃﻤﺜﻠﺔ : 1ـ ﺍﻟﻨﻭﻉ : Boolean ﺃﻨﺸﺄ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭ Buttonﻭﻋﻨﺼﺭﻱ Editﻭﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ;var a:Boolean ;i,j:integer begin ;)i:=strtoint(edit1.text ;)j:= strtoint(edit2.text ;a:= i>j )'ﺍﻟﻌﺩﺩ ﺍﻟﺜـﺎﻨﻲ ﺃﻜﺒـﺭ ﻤـﻥ ' ) else showmessageﺍﻟﻌﺩﺩ ﺍﻟﻸﻭل ﺃﻜﺒﺭ ﻤﻥ ﺍﻟﺜﺎﻨﻲ'( if a then showmessage ﺍﻷﻭل'(؛
2ـ ﺍﻟﻨﻭﻉ : Shortstring
ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭﻱ Labelﻭ ﻋﻨﺼﺭ Editﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ :ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : ;var a:shortstring begin ;a:=edit1.text ;)]form1.Caption := inttostr(word(a[0 if word(a[0]) >= 4 then ;]label1.Caption := a[3]+a[4 ﻼ )' Word('Aﻴﺴﺎﻭﻱ 65ﻭﺍﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻷﻥ ﻁـﻭل ﻴﻘﻭﻡ ﺍﻟﺘﺎﺒﻊ Wordﺒﺈﻋﺎﺩﺓ ﺸﻴﻔﺭﺓ ﺍﻷﺴﻜﻲ ﻟﺭﻤﺯ ﻤﻌﻴﻥ ﻤﺜ ﹰ ﺍﻟﺴﻠﺴﺔ ﻤﺨﺯﻥ ﻜﺭﻤﺯ ﻭﻟﻴﺱ ﻜﺭﻗﻡ .
32
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺴﺎﺩﺴﺔ 2ـ ﺍﻟﻨﻭﻉ : String ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﻁﻭل ﺴﻠﺴﻠﺔ ﺭﻤﺯﻴﺔ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﺎﺒﻊ )' Length('sﺤﻴﺙ Sﻫﻭ ﺍﻟﺴﻠﺴﺔ ﺍﻟﻤﻁﻠﻭﺏ ﺤﺴﺎﺏ ﻁﻭﻟﻬﺎ ﻤﺜﺎل :
ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ labelﻭ Editﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻨﺩ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : ;var a:string begin ;a:=edit1.text ;)label1.Caption := inttostr(length(A ;)'label2.Caption :=inttostr(length('asdfgh 3ـ ﺍﻟﻨﻭﻉ : Pchar ﻟﻨﻔﺭﺽ ﺃﻨﻪ ﻋﺭﻓﻨﺎ ﻤﺘﺤﻭل Pﻤﻥ ﺍﻟﻨﻭﻉ : Pchar
;Var P:pchar
ﺜﻡ ﻜﺘﺒﻨﺎ ﻓﻲ ﺍﻟﻘﺴﻡ Beginﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴـﺔ : 'p:= All……. ﻫﺫﺍ ﻴﻜﺎﻓﺊ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
;Form1.Caption := p
'Hello
;s: string begin s:= 'HELLO ALL......'#0 ; ;]p:= @s[1 ;form1.Caption := p ﺤﻴﺙ #0ﻫﻭ ﺭﻤﺯ ﺍﻷﺴﻜﻲ ﻟـ Nullﻭﻭﻀﻌﻪ ﻫﻨﺎ ﻴﻨﻬﻲ ﺍﻟﺴﻠﺴﻠﺔ sﺒـ . Null @ ﻴﻌﻴﺩ ﻋﻨﻭﺍﻥ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺨﺯﻥ ﻓﻴﻪ ﺍﻟﺤﺭﻑ ﺍﻷﻭل ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ . s
4ـ ﺍﻟﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭ ) ﺍﻟﻤﺘﻨﻭﻉ ( : Variant ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ : ;var v1,v2,v3 :variant begin ;v1:= 5 ;v2:= 20 ; v3 := v1+v2 ;form1.Caption := v3 ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻌﻁﻲ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﻤﻥ ﺍﻟﻨﻭﻉ : EvariantError ;
;v1:= 5 ;'v2:= 'asd v3 := v1+v2
ﻭﻟﻜﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻻ ﺘﻌﻁﻲ ﻫﺫﺍ ﺍﻟﺨﻁﺄ :
; 33
;v1:= 5 ;'v2:= '123 v3 := v1+v2
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﻤﺎﺫﺍ ﻻ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻨﻭﻉ Variantﺩﺍﺌﻤﹰﺎ :ﻻﺤﻅ ﺃﻥ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻀﺩ ﺍﻟﺘﻭﺠﻪ ﺍﻟﻌﺎﻡ ﻟﻠﻐﺔ ﺒﺎﺴﻜﺎل ﻭ ﻀـ ﺩ ﺃﻋـﺭﺍﻑ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﺠﻴﺩﺓ ،ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻴﺘﻡ ﻓﺤﺹ ﻨﻭﻋﻪ ﻭ ﻴﺘﻡ ﺤﺴﺎﺒﻪ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل ،ﻭﺍﻟﻤﺠﻤﻊ compilerﻟﻥ ﻴﺤﺫﺭﻙ ﻤﻥ ﺍﺤﺘﻤﺎﻻﺕ ﺍﻷﺨﻁﺎﺀ ،ﻭ ﺍﻟﺘﻲ ﻟﻥ ﻴﺴﺘﺩ ّ ل ﻋﻠﻴﻬﺎ ﺇﻻ ﺒﻌﺩ ﺍﺠﺭﺍﺀ ﺍﺨﺘﺒﺎﺭﺍﺕ ﻤﻜﺜﻔﺔ ،ﺒﺼﻭﺭﺓ ﻋﺎﻤﺔ ،ﻴﻤﻜﻨﻙ ﺍﻋﺘﺒـﺎﺭ ﺃﺠـﺯﺍﺀ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻫﻲ ﺘﺭﺠﻤﺔ ﻓﻭﺭﻴﺔ ،interpretedﻷﻨﻪ ،ﻤﺜل ﺃﻱ ﻟﻐﺔ ﺘﻔﺴﻴﺭﻴﺔ ،ﺍﻟﻌﺩﻴـﺩ ﻤـﻥ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻻ ﻴﻤﻜﻥ ﺍﻟﺘﻘﺭﻴﺭ ﺒﺸﺄﻨﻬﺎ ﻭﺤﻠﹼﻬﺎ ﺇﻻ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل ،ﻫﺫﺍ ﻴﺅﺜﺭ ﺒﺼﻔﺔ ﺨﺎﺼﺔ ﻓﻲ ﺴﺭﻋﺔ ﺍﻟﺘﻨﻔﻴﺫ. ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻌﺎﻤﺔ ﻭﺍﻟﺨﺎﺼﺔ : ﻴﻭﺠﺩ ﻓﻲ ﺍﻟﻘﺴﻡ Interfaceﻟﻜل ﻭﺤﺩﺓ ﻗﺴﻡ ﺨﺎﺹ ﺒﺎﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤـﺴﺘﺨﺩﻤﺔ ﺩﺍﺨـل ﺍﻟﻭﺤـﺩﺓ ﻨﻔـﺴﻬﺎ ﻭﻴـﺩﻋﻰ privateﻭﺍﻟﻤﺘﺤﻭل ﺍﻟﻤﻌﺭﻑ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻓﻲ ﺠﻤﻴﻊ ﺇﺠﺭﺍﺀﺍﺕ ﻭﺘﻭﺍﺒﻊ ﻫﺫﻩ ﺍﻟﻭﺤـﺩﺓ ﻟﻜـﻥ ﻻ ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﻤﻥ ﺨﺎﺭﺠﻬﺎ .
ﻭﻫﻨﺎﻙ ﻗﺴﻡ ﺁﺨﺭ ﻴﺸﺒﻪ ﺍﻟﻘﺴﻡ ﺍﻟﺴﺎﺒﻕ ﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﻤﻥ ﻭﺤﺩﺍﺕ ﺨﺎﺭﺠﻴﺔ ﻤﺭﺘﺒﻁﺔ ﻤـﻊ ﺍﻟﻭﺤـﺩﺓ ﺍﻟﻤﻌﺭﻑ ﻓﻴﻬﺎ ﻫﺫﺍ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻴﺩﻋﻰ . Public ﻤﺜﺎل : ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﹰﺍ ﻭﻋﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Privateﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ : private ;I :integer ﻭﻋﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Publicﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ : public ;x:integer ﺃﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺤﺩﺙ OnCreateﺍﻟﺨﺎﺹ ﺒﺎﻟﻨﻤﻭﺫﺝ ﻭﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺤﺩﺙ
;I := 4 ; X := 24 OnCreateﻴﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻋﻨﺩ ﻴﻘﻭﻡ ﻭﻴﻨﺩﻭﺯ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻌﻁﻲ ﻗﻴﻡ ﺍﺒﺘﺩﺍﺌﻴﺔ ﻟﻠﻤﺘﺤـﻭﻟﻴﻥ
) X,Iﻻﺤﻅ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻴﻥ ﺍﻟﻤﺘﺤﻭﻟﻴﻥ ﻀـﻤﻥ ﺍﻹﺠـﺭﺍﺀ TForm1.FormCreate ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻀﻤﻥ ﺃﻱ ﺠﺯﺀ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ( .
procedureﺃﻱ
ﺃﻀﻑ ﻨﻤﻭﺫﺠﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﹰﺍ ﺍﻵﻥ ﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ ﺍﻟﺯﺭ : ; form2.Show ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺤﺘﻰ ﻴﺘﻡ ﺭﺒﻁ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻊ ﺍﻷﻭﻟﻰ ﺒﺸﻜل ﺁﻟﻲ ) ﺃﻭ ﺍﻜﺘﺏ ﺃﺴﻡ ﺍﻟﻭﺤﺩﺓ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﻘﺴﻡ . ( Uses ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; )Form2.Caption := inttostr ( Form1.X ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﺭﺒﻁ ﺍﻟﻭﺤﺩﺍﺕ ﻤﻊ ﺒﻌﻀﻬﺎ ﺁﻟﻴﹰﺎ ﺜﻡ ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺍﻟﺯﺭ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﻭﻟﻰ ﺴﻴﻘﻭﻡ ﺒﺈﻅﻬﺎﺭ ﺍﻟﻨﺎﻓـﺫﺓ ﺍﻟﺜﺎﻨﻴـﺔ، ﻭﺍﻟﺯﺭ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺜﺎﻨﻴﺔ ﺴﻴﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ Xﻤﻥ ﺍﻟﻭﺤﺩﺓ ﺍﻷﻭﻟﻰ ﻭﻴﻀﻌﻬﺎ ﻓﻲ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ . ﻫﻨﺎﻙ ﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ ﻟﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل ﺨﺎﺹ ﺒﺎﻟﻭﺤﺩﺓ ﻋﻥ ﻁﺭﻴﻕ ﺘﻌﺭﻴﻔﻪ ﺒﺎﻟﻘﺴﻡ Varﻗﺒل Implementation ﻭﻴﺘﻤﻴﺯ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﺤﻭل ﻫﻨﺎ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻤﺒﺩﺌﻴﺔ ﻟﻪ ﻤﺒﺎﺸﺭﺓ . 34
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﺜﺎل :ﻋﺭﻑ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﻘﺴﻡ Varﻗﺒل Implementation ;Y: string = 'abcd'; F : double = 55 ﺍﻟﺜﻭﺍﺒﺕ : Const ﺍﻟﺜﺎﺒﺕ ﻫﻭ ﺤﺠﺭﺓ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺘﺤﻤل ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ ﻁﻭﺍل ﻓﺘﺭﺓ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ : ﻴﻤﻜﻥ ﺘﻌﺭﻴﻑ ﺍﻟﺜﻭﺍﺒﺕ ﺨﺎﺭﺝ ﺍﻟﻘﺴﻡ Typeﻗﺒل Implementationﻓﺘﻜﻭﻥ ﺜﻭﺍﺒﺕ ﻋﺎﻤﺔ ،ﻭﻴﻤﻜﻥ ﺘﻌﺭﻴﻔﻬـﺎ
ﻓﻲ ﺍﻟﻘﺴﻡ Implementationﻭﺘﻜﻭﻥ ﺜﻭﺍﺒﺕ ﺨﺎﺼﺔ ﺒﺎﻟﻭﺤﺩﺓ .ﻭﻴﻜﻭﻥ ﺘﻌﺭﻴﻔﻬﺎ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ :
Const ;pi=3.14 ;pi2=22/7 ;'programmer = 'Khaled ﻭﻴﻤﻜﻥ ﺘﻌﺭﻴﻔﻬﺎ ﺒﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ : Const ;Pi :Real = 3.14 ;pi2:single =22/7 ;'programmer :string= 'Khaled ﺍﻹﺠﺭﺍﺀﺍﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ : ﻤﺒﺩﺌﻴﺎ ﻫﻲ ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺤﺕ ﺍﺴﻡ ﺨﺎﺹ ،ﻭ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫﻫﺎ ﻓﻲ ﻜل ﻤﺭﺓ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﺴﻤﻬﺎ ،ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ
ﺘﺘﺠﻨﺏ ﻤﻌﺎﻭﺩﺓ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﺭﺓ ﺒﻌﺩ ﺃﺨﺭﻯ ،ﻓﺘﺘﺤﺼل ﻋﻠﻰ ﻤﺠﻤﻭﻋﺔ ﻭﺍﺤﺩﺓ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻴﻤﻜﻨﻙ ﺍﺴﺘﺩﻋﺎﺌﻬﺎ ﻓﻲ ﻜﺎﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ. ﻓﻲ ﺩﻟﻔﻲ ﺍﻹﺠﺭﺍﺌﻴﺔ routineﻴﻤﻜﻥ ﺍﻓﺘﺭﺍﻀﻬﺎ ﺒﺸﻜﻠﻴﻥ :ﺇﺠﺭﺍﺀ procedureﻭ ﺘﺎﺒﻊ function ﻨﻅﺭﻴﺎ ،ﻴﺴﺘﺨﺩﻡ ﺍﻹﺠﺭﺍﺀ ﻋﻨﺩﻤﺎ ﻨﺭﻴﺩ ﻤﻥ ﺍﻟﺤﺎﺴﺏ ﺍﻟﻘﻴﺎﻡ ﺒﻌﻤل ﻤﺎ ﺩﻭﻥ ﺃﻥ ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ ،ﻭﺍﻟﺘﺎﺒﻊ ﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﺇﺠﺭﺍﺀ ﻴﻨﻔﺫ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻟﻴﻌﻴﺩ ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ ﻴﻁﻠﺒﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ .ﻫﺫﺍ ﺍﻟﻔﺭﻕ ﻴﺅﻜﹼﺩﻩ ﺤﻘﻴﻘﺔ ﺃﻥ ﺍﻟﺘﺎﺒﻊ ﻟﻪ ﻨﺘﻴﺠﺔ
،resultﻗﻴﻤﺔ ﻤﺴﺘﺭﺠﻌﺔ ،ﺒﻴﻨﻤﺎ ﺍﻹﺠﺭﺍﺀ ﻟﻴﺱ ﻜﺫﻟﻙ ،ﻜﻼ ﺍﻟﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻻﺠﺭﺍﺌﻴﺎﺕ ﻴﻜﻤﻥ ﺃﻥ ﻴﻜﻭﻥ ﻟﻬﻤﺎ ﻋﺩﺓ ﻤﺘﺤﻭﻻﺕ ، parametersﻤﻥ ﺃﻨﻭﺍﻉ ﺒﻴﺎﻨﺎﺕ ﺘﻌﻁﻰ ﻟﻬﺎ .
ﻋﻤﻠﻴﹰﺎ ،ﺍﻟﻔﺭﻕ ﻋﻤﻭﻤﺎ ﺒﻴﻥ ﺍﻟﺘﻭﺍﺒﻊ ﻭ ﺍﻹﺠﺭﺍﺀﺍﺕ ﻤﺤﺩﻭﺩ ﺠﺩﺍ :ﻴﻤﻜﻨﻙ ﺍﺴﺘﺩﻋﺎﺀ ﺘﺎﺒﻊ ﻹﻨﺠﺎﺯ ﻋﻤل ﻤﺎ ﺜﻡ ﺘﺘﺨﻁﹼﻰ ﺍﻟﻨﺘﻴﺠﺔ )ﺍﻟﺘﻲ ﻗﺩ ﺘﻜﻭﻥ ﺭﻤﺯ ﺨﻁﺄ ﺍﺨﺘﻴﺎﺭﻱ ﺃﻭ ﻤﺎ ﺸﺎﺒﻪ( ﻜﻤﺎ ﺒﺎﻤﻜﺎﻨﻙ ﺍﺴﺘﺩﻋﺎﺀ ﺇﺠﺭﺍﺀ ﻴﻤﺭﺭ ﻨﺘﻴﺠﺘﻪ ﻀﻤﻥ ﻤﺘﺤﻭﻻﺘﻪ. ﻭﻫﺫﺍ ﻤﺜﺎل ﻟﺘﻌﺭﻴﻑ ﺇﺠﺭﺍﺀ : ;procedure Hello begin ;)'ﻤﺭﺤﺒﹰﺎ ﺒﻜﻡ ﻓﻲ ﺩﻟﻔﻲ'( ShowMessage ;end ﻭﻫﺫﺍ ﻤﺜﺎل ﻟﺘﻌﺭﻴﻑ ﺘﺎﺒﻊ : ;function Double (Value: Integer) : Integer begin ;Double := Value * 2 ;end 35
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﻜﺘﺏ ﻫﺫﻩ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺃﻭ ﺍﻟﺘﻭﺍﺒﻊ ﻓﻲ ﺍﻟﻘﺴﻡ Implementationﻭﻻﺴﺘﺩﻋﺎﺌﻬﺎ ،ﺃﻀﻑ ﺯﺭﻴﻥ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل : Hello ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻨﻘﺭ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ : ;))Form1.caption := inttostr( Double(6 ﺍﻟﻤﺘﺤﻭﻻﺕ ﺩﺍﺨل ﺇﺠﺭﺍﺀ ﺃﻭ ﺘﺎﺒﻊ :
1ـ ﺍﻟﺤﺎﻟﺔ ﺍﻟﻌﺎﻤﺔ anytype ;
var1,var2,var3:
Procedure ProcedureName ; )var4,var5:any type Begin …. … ;end
(
ﻤﺜﺎل : ; )Procedure Add( x,y : integer Begin ; Y:= x+y ;End ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭﻱ Labelﻭﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var i,j:integer begin ;i:=1;j:=2 ;)add(i,j ;)label1.Caption := inttostr(i ;)label2.Caption := inttostr(j ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﺘﺩﻋﺎﺀ ﺍﻟﺘﺎﺒﻊ Addﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﺈﻀﺎﻓﺔ xﺇﻟﻰ yﻭﻟﻜﻨﻪ ﻻ ﻴﻌﻴﺩ ﺃﻱ ﻨﺘﻴﺠﺔ . 2ـ ﺍﻟﻤﺘﺤﻭﻻﺕ ) ﺍﻟﻭﺴﻁﺎﺀ ( ﺍﻟﻤﺘﻐﻴﺭﺓ : var1,var2,var3: anytype ;var
(
Procedure ProcedureName ; )var4,var5:any type Begin …. … ;end
ﻤﺜﺎل : ﻋﺩل ﺍﻹﺠﺭﺍﺀ Addﻟﻴﺼﺒﺢ ﻜﺘﺎﻟﻲ ﻭﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ;)procedure add(x:integer;var y:integer begin ;y:= x+y ;end ﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﺘﺩﻋﺎﺀ ﺍﻹﺠﺭﺍﺀ Addﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﺈﻀﺎﻓﺔ xﺇﻟﻰ yﻭﻟﻜﻨﻪ ﻴﻌﻴﺩ ﻗﻴﻤﺔ yﻭﺒﺎﻟﺘﺎﻟﻲ ﺘﺘﻐﻴﺭ ﻗﻴﻤﺔ . j 36
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﻼﺤﻅﺎﺕ : ﺃ ـ ﻴﻤﻜﻥ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻹﺠﺭﺍﺀ Addﺍﻟﻤﻌﺩل ﺒﺎﻟﺸﻜل ) Add( 1,jﻭﻟﻜﻥ ﻻ ﻴﻤﻜﻥ ﺍﺴﺘﺩﻋﺎﺌﻪ ﺒﺎﻟـﺸﻜل ) I,2ﺃﻭ ﺒﺎﻟﺸﻜل )1,2
ﺍﻟﻨﺘﻴﺠﺔ ﻓﻴﻪ .
( Add
( Addﻭﺫﻟﻙ ﻷﻥ ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ ﻟﻬﺫﺍ ﺍﻹﺠﺭﺍﺀ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﻤﺘﺤﻭل ﺤﺘﻰ ﺘﺘﻡ ﺇﻋـﺎﺩﺓ
ﺏ ـ ﻗﺩ ﻴﺘﺒﺎﺩﺭ ﺇﻟﻰ ﺍﻟﺫﻫﻥ ﻫﻨﺎ ﺍﻟﺴﺅﺍل ﺍﻟﺘﺎﻟﻲ ﺒﻤﺎ ﺃﻨﻨﻲ ﺃﺭﻴﺩ ﻤﻥ ﺍﻹﺠﺭﺍﺀ ﺃﻥ ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﻤﺎ ﻓﻠﻤـﺎﺫﺍ ﻻ ﺃﺴـﺘﺨﺩﻡ ﺘـﺎﺒﻊ؟ ﻭﺍﻟﺠﻭﺍﺏ ﻫﻨﺎ ﺃﻨﻪ ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻴﺩ ﺍﻹﺠﺭﺍﺀ ﺃﻜﺜﺭ ﻤﻥ ﻗﻴﻤﺔ ﺒﻴﻨﻤﺎ ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﻗﻴﻤﺔ ﻭﺤﻴﺩﺓ ،ﻋﻠﻰ ﻜل ﺤﺎل ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﻤﻊ ﺍﻹﺠﺭﺍﺀﺍﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ ﻋﻠﻰ ﺤﺩ ﺴﻭﺍﺀ ﺃﻱ ﺍﻨﻪ ﻴﻤﻜﻥ ﺃﻥ ﻨﻌﺭﻑ ﺘﺎﺒﻊ ﻴﻌﻴﺩ ﻗﻴﻤـﺔ ﻤـﺎ ﻋـﻥ ﻁﺭﻴﻕ ﺇﺴﻤﻪ ﻭﻗﻴﻡ ﺃﺨﺭﻯ ﻋﻥ ﻁﺭﻴﻕ ﻤﺘﺤﻭﻻﺘﻪ ) ﻭﺴﻁﺎﺀﻩ ( .
3ـ ﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﺜﺎﺒﺘﺔ : ; Procedure ProcedureName ( const var1,var2,var3: anytype ; )var4,var5:any type Begin …. … ;end ﻋﻨﺩﻤﺎ ﻻ ﻨﻜﻭﻥ ﺒﺤﺎﺠﺔ ﻟﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﻭﺴﻴﻁ ﻀﻤﻥ ﺍﻟﺘﺎﺒﻊ ﻴﻤﻜﻥ ﺃﻥ ﻨﻌﺭﻓﻪ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺜﺎﺒﺕ Constﻭﻻ ﻴﻔﻴﺩ ﺫﻟـﻙ ﺇﻻ
ﻓﻲ ﺯﻴﺎﺩﺓ ﺴﺭﻋﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﻋﺩل ﺍﻟﺘﺎﺒﻊ Addﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;)procedure add(const x:integer;var y:integer begin ;y:= x+y ;end ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻟﻥ ﺘﻼﺤﻅ ﺃﻱ ﻓﺭﻕ ﻓﻲ ﺍﻟﻨﺘﺎﺌﺞ . ﺃﻤﺎ ﺇﺫﺍ ﻋﺩل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل ;)procedure add(const x:integer;const y:integer begin ;y:= x+y ;end ﻓﺴﻴﻌﻁﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺭﺴﺎﻟﺔ ﺍﻟﺨﻁﺄ ﺍﻟﺘﺎﻟﻴﺔ Left side cannot be assigned to :ﻭﺘﻌﻨـﻲ ﺃﻨﻪ ﻻ ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻟـ Yﻷﻨﻬﺎ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺜﺎﺒﺕ . 5ـ ﺇﺠﺭﺍﺀﺍﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ :
ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻭﺴﻴﻁ ﻤﺎ ﻗﻴﻤﺔ ﺇﻓﺘﺭﺍﻀﻴﺔ ﻭﺍﻻﺴﺘﻐﻨﺎﺀ ﻋﻥ ﺘﻤﺭﻴﺭ ﻗﻴﻤﻪ ﻟﻪ ﻋﻨﺩ ﺍﻟﻁﻠﺏ : Procedure ProcedureName(var1,var2,var3: anytype ; var4: ; )anytype = Value ; var5:anytype= value Begin …. … ;end 37
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﺜﺎل :ﻋﺩل ﺍﻹﺠﺭﺍﺀ Addﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل ;)procedure add(var x:integer;var y:integer=5 begin ;x:= x+y ;end ﺍﻵﻥ ﻴﻤﻜﻥ ﺃﻥ ﻨﻁﻠﺏ ﺍﻹﺠﺭﺍﺀ Addﺒﺄﺤﺩ ﺍﻟﺸﻜﻠﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ : ) Add ( I,j) or Add( I ﻓﻲ ﺍﻟﺤﺎﻟﺔ ﻭﺍﻟﺜﺎﻨﻴﺔ ﺴﻴﻘﻭﻡ ﺍﻹﺠﺭﺍﺀ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﺍﻟﻤﻌﻁﺎﻩ ﻓﻲ ﺘﻌﺭﻴﻑ ﺍﻹﺠﺭﺍﺀ . ﻤﻼﺤﻅﺔ :ﺍﻟﻭﺴﻁﺎﺀ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺁﺨﺭ ﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺍﻟﺘﺎﺒﻊ 4ـ ﺘﻌﺭﻴﻑ ﺘﺎﺒﻊ ﻓﻭﻕ ﺘﺎﺒﻊ ﺃﻭ ﺇﺠﺭﺍﺀ ﻓﻭﻕ ﺇﺠﺭﺍﺀ : overload
ﺘﻤﻜﻨﻨﺎ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻤﻥ ﺘﻌﺭﻴﻑ ﻤﺠﻤﻭﻋﺔ ﺘﻭﺍﺒﻊ ﻟﻬﺎ ﻨﻔﺱ ﺍﻷﺴﻡ ﻭﻟﻜل ﻤﻨﻬﺎ ﻭﻅﻴﻔﺔ ﻤﺤﺩﺩﺓ . ﻤﺜﺎل :ﺃﻀﻑ ﺜﻼﺜﺔ ﺃﺯﺭﺍﺭ ﻭﻋﻨﺼﺭﻱ Labelﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ;procedure change( i :integer; var s :string) ; overload begin ;)s:=inttostr(i ;end ;procedure change( i:tdatetime; var s :string) ; overload begin )s:= datetostr(i ;end procedure (change ;i:tdatetime var s1,s2 ):string ; ;overload begin ;)S1:= datetostr(i ;)S2 := datetostr( i+1 ;end ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻻﻭل ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Var a:string begin ; )change ( 5,a ;Label1.Caption := a ; end ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : Var B:String ; begin ;)Change ( date,b ;Label2.Caption := b; End ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻟﺙ ﺃﻜﺘﺏ ﻤﺎ ﻴﻠﻲ : Var A,B:string; begin 38
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)Change ( date,a,b ;Label1.Caption := A; Label2.Caption := B; end 6ـ ﻤﺘﺤﻭل ﺍﻟﻨﺘﻴﺠﺔ : Result Resultﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺘﺤﻭل ﺍﻓﺘﺭﺍﻀﻲ ﻓﻲ ﺒﻴﺌﺔ ﺩﻟﻔﻲ ﺘﻭﻀﻊ ﻗﻴﻤﺔ ﺍﻟﺘﺎﺒﻊ : ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺍﻟﺘﺎﺒﻊ Addﺒﺄﺤﺩ ﺍﻟﺸﻜﻠﻴﻥ : Function add( x,y:integer) : Function add( x,y:integer) : ;integer ;integer Begin Begin ;Add := x+y ;result := x+y ;End ;End
ﺠﻌل ﺍﻹﺠﺭﺍﺀ ﻤﺭﺌﻲ ﻤﻥ ﻗﺒل ﻭﺤﺩﺍﺕ ﺃﺨﺭﻯ : ﻨﻌﻠﻡ ﺃﻨﻪ ﻜﻲ ﻨﺴﺘﻁﻴﻊ ﺍﺴﺘﺩﻋﺎﺀ ﻤﺘﺤﻭل ﺃﻭ ﺘﺎﺒﻊ ﻤﻥ ﻭﺤـﺩﺓ ﺇﻟـﻰ ﺃﺨـﺭﻯ ﻴﺠـﺏ ﺃﻥ ﺘﻜـﻭﻥ ﻤﻭﺠـﻭﺩﺓ ﻓـﻲ ﺍﻟﻘـﺴﻡ . Interface
ﻼ: 1ـ ﻭﻀﻊ ﺃﺴﻡ ﺍﻹﺠﺭﺍﺀ ﻓﻲ ﺍﻟﻘﺴﻡ Interfaceﻗﺒل Varﻤﺜ ﹰ ; )Procedure Add( x,y : integer ﺜﻡ ﻨﻜﺘﺏ ﺍﻹﺠﺭﺍﺀ ﻤﻊ ﺠﺴﻤﻪ ) ( Begin… endﻓﻲ ﺍﻟﻘﺴﻡ : Implementation ; )Procedure Add( x,y : integer Begin ; Y:= x+y ;End ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻨﺴﺘﻁﻴﻊ ﻁﻠﺏ ﺍﻹﺠﺭﺍﺀ ﻤﻥ ﺃﻱ ﻭﺤﺩﺓ ﺃﺨﺭﻯ ﻤﺭﺘﺒﻁﺔ ﺒﺎﻟﻭﺤﺩﺓ ﺍﻟﺘﻲ ﻋﺭﻑ ﻓﻲ ﺍﻹﺠﺭﺍﺀ ﻋﻥ ﻁﺭﻴﻕ ﺫﻜـﺭ ﺍﺴﻤﻪ ﻓﻘﻁ .
2ـ ﻴﻤﻜﻥ ﺃﻥ ﻨﻀﻴﻑ ﺍﺴﻡ ﺍﻹﺠﺭﺍﺀ ﻤﻊ ﻭﺴﻁﺎﺌﻪ ﺇﻟﻰ ﺍﻟﻘﺴﻡ . Type
ﻤﺜﺎل :ﺃﻀﻑ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ Typeﻗﺒل Private ; )Procedure Add( x,y : integer ﻋﻠﻰ ﺃﻥ ﻨﻌﺭﻑ ﺍﻹﺠﺭﺍﺀ Addﻓﻲ ﺍﻟﻘﺴﻡ Implementationﺒﺎﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : ; )Procedure Tform1.Add( x,y : integer Begin ; Y:= x+y ;End ﺃﻀﻑ ﻭﺤﺩﺓ ﺃﺨﺭﻯ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺃﻁﻠﺏ ﻤﻨﻬﺎ ﺍﻟﺘﺎﺒﻊ Addﺍﻟﻌﺎﺌﺩ ﻟل Form1ﺒﺎﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : ; ) Form1.add ( x,y
39
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺴﺎﺒﻌﺔ ﺍﻟﺘﻭﺍﺒﻊ ﺫﺍﺕ ﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﻤﺘﻌﺩﺩﺓ : Procedure procedureName ( var parameter1 : array of anytype ;) ; par2,par3:anytype Begin …………………… …… ;end ﻴﻌﺭﻑ ﻓﻲ ﻫﺫﻩ ﺍﻹﺠﺭﺍﺀﺍﺕ ) ﺍﻟﺘﻭﺍﺒﻊ ( ﻭﺴﻴﻁ ﻋﻠﻰ ﺃﻨﻪ ﻤﻥ ﻨﻭﻉ ﻤﺼﻔﻭﻓﺔ ﻏﻴﺭ ﻤﺤﺩﻭﺩﺓ ﺍﻟﻌﻨﺎﺼﺭ ﻤﺜﺎل :
; Function add( a:array of integer): string ;var h,i,s : integer begin ;s:=0 ;)h := high(a ;]for i:= 0 to h do s:= s + a[i ;)result:= inttostr(s ;end ﺍﺴﺘﺨﺩﻤﻨﺎ ﻫﻨﺎ ﺍﻟﺘﺎﺒﻊ Highﺍﻟﺫﻱ ﻴﻌﻴﺩ ﺭﻗﻡ ﺁﺨﺭ ﻋﻨﺼﺭ ﻓﻲ ﻤﺼﻔﻭﻓﺔ ) ﺇﻱ ﺇﺫﺍ ﻋﺭﻓﻨﺎ ﻤﺼﻔﻭﻓﺔ ﻤﺎ ﺒﺎﻟﺸﻜل ] [0..3ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ 3ﻭﺇﺫﺍ ﻋﺭﻓﻨﻬﺎ ﺒﺎﻟﺸﻜل ] [2..3ﺴﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ 3ﻭﺇﺫﺍ ﻋﺭﻓﺕ ﺒﺎﻟﺸﻜل ] [22..88ﺴﻴﻌﻴﺩ . 88
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : )]form1.Caption := add([1,3,4,89 ﺴﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺠﻤﻊ ﺍﻷﻋﺩﺍﺩ ﻭﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ
ﻤﻼﺤﻅﺔ :ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﺍﻟﻤﺘﻐﻴﺭﺓ ﺘﺒﺩﺃ ﺩﺍﺌﻤﹰﺎ ﺒﺎﻟﻌﻨﺼﺭ ﺭﻗﻡ ﺼﻔﺭ ﺃﻱ ] A[0ﻭﺘﻨﺘﻬﻲ ﺒﺤﺴﺏ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺃﺩﺨﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ) ﻟﺫﻟﻙ ﺒﺩﺃﺕ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺘﺎﺒﻊ Addﻤﻥ ﺍﻟﺼﻔﺭ . ﺸﺭﻴﻁ ﺍﻟﻌﻤل
: ProgressBar
ﻫﻭ ﺸﺭﻴﻁ ﻴﺅﺸﺭ ﺇﻟﻰ ﻜﻤﻴﺔ ﺇﻨﺠﺎﺯ ﺍﻟﻌﻤل ﺤﺘﻰ ﻟﺤﻅﺔ ﻤﻌﻴﻨﺔ ) ﻨﻔﺱ ﺍﻟﺸﺭﻴﻁ ﺍﻟﺫﻱ ﻴﻅﻬﺭ ﻋﻨﺩ ﺒﺩﺃ ﺘﻨﺼﻴﺏ Setupﺃﻱ ﺒﺭﻨﺎﻤﺞ ( ﻜﻤﺎ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻹﻅﻬﺎﺭ ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ . ﻤﺜﺎل :
ﺃﻀﻑ
Progress Barﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭ Timerﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ :
ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Intervalﻟﻠﻤﺅﻗﺕ ﺍﻟﻘﻴﻤﺔ 100ﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnTimerﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : if progressbar1.Position < 100 then ;progressbar1.Position := progressbar1.Position+1 ProgressBarﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ﻟـ 1ـ : Positionﺘﻌﻁﻲ ﻤﻭﻗﻊ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﺩﺍﺨل . Max 40
ProgressBarﻭﺘﺄﺨﺫ ﻗﻴﻤﺔ ﺒﻴﻥ Minﻭ
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ : Minﺘﺤﺩﺩ ﺃﺼﻐﺭ ﻗﻴﻤﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫﻫﺎ ﺍﻟﺨﺎﺼﺔ . Postion 3ـ : Maxﺘﺤﺩﺩ ﺃﻜﺒﺭ ﻗﻴﻤﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫﻫﺎ ﺍﻟﺨﺎﺼﺔ . Postion
4ـ : Stepﻁﻭل ﺍﻟﺨﻁﻭﺓ ﻭﺘﺤﺩﺩ ﺍﻟﻤﺴﺎﻓﺔ ﺍﻟﺘﻲ ﻴﻘﻁﻌﻬﺎ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﻓﻲ ﻜل ﻤﺭﺓ ﺘﻨﻔﺫ ﻓﻴﻬﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ : ;progressbar1.Position := progressbar1.Position+1 5ـ : Smoothﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻴﻅﻬﺭ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﺒﺩﻭﻥ ﺘﻘﻁﻴﻌﺎﺕ .
6ـ : orientationﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ ، pbVerticalﺍﻟـ ﻋﻤﻭﺩﻱ ) ﻟﻤﻼﺤﻅﺔ ﺫﻟﻙ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Heightﻟـ
ﺸﺭﻴﻁ ﺍﻟﻘﻴﻤﺔ : TrackBar:
ProgressBarﻴﻌﻤل ﺒﺸﻜل
ﻼ( ProgressBarﻗﻴﻤﺔ ﻜﺒﻴﺭﺓ 100ﻤﺜ ﹰ
ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﺸﺭﻴﻁ ﺍﻟﺸﺭﻴﻁ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻨﻪ ﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺘﺤﺭﻴﻙ ﻤﺅﺸﺭﻩ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻔﺄﺭﺓ ﻭﻤﻜﺎﻥ ﺍﻟﻤﺅﺸﺭ ﺴﻴﻌﻴﺩ ﻗﻴﻤﺔ ﻟﻴﺴﺘﺨﺩﻤﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻤﺜﺎل :ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟﺴﺎﺒﻕ TrackBarﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Maxﺍﻟﻘﻴﻤﺔ 1000 ﻭﺍﻟﺨﺎﺼﺔ Minﺍﻟﻘﻴﻤﺔ 1
ﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ Onchangeﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ; timer1.Interval := trackbar1.Position ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﻐﻴﺭ ﺍﻟﺨﺎﺼﺔ Intervalﻜﻠﻤﺎ ﺘﻐﻴﺭ ﻤﻭﻗﻊ ﻤﺅﺸﺭ ﺍﻟـ trackbar1 ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ontimerﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : if progressbar1.Position < 100 then progressbar1.Position := progressbar1.Position+1 ;else progressbar1.Position := 0 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺤﺭﻙ ﺍﻟﻤﺅﺸﺭ ﻟﺘﻼﺤﻅ ﻜﻴﻑ ﻴﻤﻜﻥ ﺃﻥ ﻨﺘﺤﻜﻡ ﺒﺴﺭﻋﺔ ﺍﻟﻤﺅﻗﺕ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ. ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﻠﻘﺎﺕ :
ﻟﻥ ﺃﺸﺭﺡ ﻫﻨﺎ ﺍﻟﺤﻠﻘﺎﺕ ﻭﻟﻜﻥ ﺴﺄﺘﻌﺭﺽ ﻟﺒﻌﺽ ﺍﻟﺤﻠﻘﺎﺕ ﻭﻤﺸﺎﻜﻠﻬﺎ : ﺤﻠﻘﺔ ﺍﻟﺘﺄﺨﻴﺭ ﺍﻟﺯﻤﻨﻲ :
ﺤﻠﻘﺔ ﺍﻟﺘﺄﺨﻴﺭ ﺍﻟﺯﻤﻨﻲ ﻴﻤﻜﻥ ﺘﻤﺜﻴﻠﻬﺎ ﺒﺄﻱ ﻨﻭﻉ ﻤﻥ ﺍﻟﺤﻠﻘﺎﺕ ) ( For ,Repeat ,Whileﻭﺍﻟﻬﺩﻑ ﻤﻨﻬﺎ ﺘﺄﺨﻴﺭ ﻋﻤل ﻤﺎ ﻟﻔﺘﺭﺓ ﺯﻤﻨﻴﺔ ﺒﺴﻴﻁﺔ ﻤﺜﺎل :ﺃﻀﻑ ﺯﺭ ﻭ progressbarﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : ;var i :integer begin for i := 0 to 100 do progressbar1.Position := i ﻨﻼﺤﻅ ﺃﻥ ﻤﺅﺸﺭ ﺍﻟﺨﻁ ﺍﻷﺯﺭﻕ ﻗﺩ ﺘﺤﺭﻙ ﺒﺴﺭﻋﺔ ﻜﺒﻴﺭﺓ ) ﻏﻴﺭ ﻤﻠﺤﻭﻅﺔ ( ﻟﺫﻟﻙ ﻨﻀﻴﻑ ﺤﻠﻘﺔ ﻟﻠﺘﺄﺨﻴﺭ ﺍﻟﺯﻤﻨﻲ ) ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻜﻤﺎ ﻴﻠﻲ: ;var i,j :integer begin for i := 0 to 100 do begin ; for j := 0 to 90000 do 41
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
progressbar1.Position := i ;end ﻨﻼﺤﻅ ﺃﻥ ﺍﻟﺤﻠﻘﺔ ; for j := 0 to 10000 doﻻ ﺘﻨﻔﺫ ﺸﻲﺀ ﻟﻜﻨﻬﺎ ﺘﻌﻴﻕ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻌﺽ ﺍﻟﻭﻗﺕ . ﺃﻀﻑ ﺍﻵﻥ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﺯﺭ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;Form1.color := clred ﺤﺎﻭل ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻟﺤﻠﻘﺔ ) ﺇﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﺜﻡ ﺍﻟﺜﺎﻨﻲ ( ﻭﻻﺤﻅ ﺃﻨﻪ ﻻ ﻴﻤﻜﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺤﺘﻰ ﻴﻨﺘﻬﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺤﻠﻘﺔ . ﻋﻨﺩﻤﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﺅﻗﺕ ﻟﺘﺤﺭﻴﻙ ﺍﻟـ progressbarﻻ ﻴﺅﺜﺭ ﺜﻠﻙ ﻋﻠﻰ ﺒﻘﻴﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻟﻜﻥ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺤﻠﻘﺎﺕ ﻻ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺤﺩﺙ ﺠﺩﻴﺩ ﺤﺘﻰ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺤﻠﻘﺔ ﻭﻟﺤل ﻫﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ ﺃﻀﺎﻓﺕ ﺩﻟﻔﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﻠﻘﺔ ﺍﻟﺘﺄﺨﻴﺭ ﺍﻟﺯﻤﻨﻲ
For j := 0 to 90000000 do ; Application.ProcessMessages ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺭﺴﺎﻟﺔ ﺒﺈﻋﻁﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﺭﺼﺔ ﻟﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺃﺨﺭﻯ ﺨﺎﺭﺝ ﺍﻟﺤﻠﻘﺎﺕ ) ﺃﻱ ﻴﻤﻜﻨﻙ ﺍﻵﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ
ﺍﻟﺜﺎﻨﻲ ﻭﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺭﺘﺒﻁﺔ ﺒﻪ ﻋﻠﻰ ﺍﻟﺭﻏﻡ ﻤﻥ ﺃﻥ ﺍﻟﺤﻠﻘﺔ ﺘﻌﻤل ( .
42
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻤﻨﺔ ﺒﻌﺽ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺩﻟﻔﻲ : ًﺃ ـ ﺘﻭﺍﺒﻊ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﻋﺩﺍﺩ : ﻤﻌﻅﻡ ﻫﺫﻩ ﺍﻟﺘﻭﺍﺒﻊ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﺤﺩﺓ Mathﻟﺫﻟﻙ ﻴﺠﺏ ﺇﻀﺎﻓﺘﻬﺎ ﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻠﻭﺤﺩﺓ ﺍﻟﺘﻲ ﺘﺴﺘﺩﻋﻲ ﻫﺫﻩ
ﺍﻟﺘﻭﺍﺒﻊ .
ﻋﻤﻠﻪ
ﺃﺴﻡ ﺍﻟﺘﺎﺒﻊ )Abs(x
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻁﻠﻘﺔ ﻟﻌﺩﺩ ﻤﻌﻁﻰ x
)Exp(x
ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ eX
)Floor(x
ﻴﻌﻴﺩ ﺃﻗﺭﺏ ﻋﺩﺩ ﻁﺒﻴﻌﻲ ﺃﻗل ﺃﻭ ﻴﺴﺎﻭﻱ Xﻤﺜﺎل Floor (2.8) = 2; : Floor(-2.8) = -3 ﻴﻌﻴﺩ ﺍﻟﺠﺯﺀ ﺍﻟﻌﺸﺭﻱ ﻟﻠﻌﺩﺩ Xﻤﺜﺎل Frac(234.987)= 0.987:
)Int(x
ﺘﻌﻴﺩ ﺍﻟﻘﺴﻡ ﺍﻟﻁﺒﻴﻌﻲ ﻤﻥ ﻋﺩﺩ ﺤﻘﻴﻘﻲ Int(234.987)= 234
)IntPower(X,y
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ XYﻤﺜﺎل intpower(2,3)=8;intpower(2,2)=4 ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Trueﻓﻲ ﺤﺎل ﻜﺎﻥ Xﻴﺴﻌﻰ ﺇﻟﻰ ﺍﻟﻼﻨﻬﺎﻴﺔ ).ﻻ ﺤﻅ ﺍﻟﻤﺜﺎل ﻓﻲ
)Frac(x
)Isinfinite(X
ﺍﻷﺴﻔل ( )LdExp(x,y
ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻡ X*2Y
)Ln(x
ﻴﻌﻴﺩ ﺍﻟﻠﻭﻏﺎﺭﻴﺘﻡ ﺍﻟﻁﺒﻴﻌﻲ ﻟﻠﻌﺩﺩ Len(e) = 1 : X
)Log10(X
ﻴﻌﻴﺩ ﺍﻟﻠﻭﻏﺎﺭﻴﺘﻡ ﺍﻟﻌﺸﺭﻱ ﻟﻠﻌﺩﺩ Log10(10) = 1 : X
)LogN(Y,X
ﻴﻌﻴﺩ ﻟﻭﻏﺎﺭﻴﺘﻡ ﺍﻟﻘﻴﻤﺔ Xﺒﺎﻟﻨﺴﺒﺔ ﻟﻸﺴﺎﺱ Y
)Max(X,Y
ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﺍﻟﺭﻗﻡ ﺍﻷﻜﺒﺭ Max(3,6) = 6 :
)Min ( X,Y
ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﺍﻟﻌﺩﺩ ﺍﻷﺼﻔﺭ Min(3,6) = 3:
Pi
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ 3.14159265358932358
Poly ( x,y:array )of double
ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﺍﻟﺴﻠﺴﺔ
Y[0]*X0+Y[1]*X1+…..+Y[n]*Xnﻻﺤﻅ
ﺍﻟﻤﺜﺎل ﻓﻲ ﺍﻷﺴﻔل
)Power ( X,Y
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ XY
)Round ( X
ﻴﻌﻴﺩ ﺘﺩﻭﻴﺭ ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ Round ( 1.5) = : X 2;Round(1.4)=1;Round(1.6) =2 ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ 1ﺇﺫﺍ ﻜﺎﻥ Xﻤﻭﺠﺒﹰﺎ ﻭ -1ﺇﺫﺍ ﻜﺎﻥ Xﺴﺎﻟﺒﹰﺎ ﻭ 0ﺇﺫﺍ ﻜﺎﻥ X=0
)Sqr(x
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ X2
)Sqrt(x
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ X
)Trunc(x
ﻴﻌﻴﺩ ﺍﻟﺠﺯﺀ ﺍﻟﻁﺒﻴﻌﻲ ﻤﻥ ﺍﻟﻌﺩﺩ Trunc(5.022) = : X
)Sing(X
43
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
5;Trunc(5.999)=5 ﻤﺜﺎل : 1ـ ): Isinfinite(X ﺃﻀﻑ ﺯﺭ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var v: variant ;x:double begin ;x:=1/0 ;)v:= isinfinite(x if v then ;'form1.Caption := 'true ﻻﺤﻅ ﺃﻨﻨﺎ ﻭﻀﻌﻨﺎ ﻓﻲ Xﺍﻟﻘﻴﻤﺔ 1/0ﻭﺍﻟﺘﻲ ﻟﻥ ﺘﻘﺒل ﻓﻲ ﺤﺎل ﻜﻭﻥ Xﻤﻥ ﺍﻟﻨﻭﻉ . Integer 2ـ ): Poly ( x,y:array of double
ﺃﻀﻑ ﺯﺭ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var v: variant begin ;)]v:= poly (4,[2,3,4,5 ;form1.Caption := v ً 2ـ ﺘﻭﺍﺒﻊ ﻗﻠﺏ ﻭﺘﺤﻭﻴل ﺍﻷﻨﻭﺍﻉ :ﺘﺭﻓﺽ ﻟﻐﺔ ﺩﻟﻔﻲ ﺇﻟﺤﺎﻕ ﺍﻷﻨﻭﺍﻉ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺒﻌﻀﻬﺎ ﺒﺒﻌﺽ ﻟﺫﻟﻙ ﻭﺠﺩﺕ ﺒﻌﺽ ﺍﻟﺘﻭﺍﺒﻊ ﻭﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﺘﻲ ﺘﻘﻭﻡ ﺒﻘﻠﺏ ﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﻟﻬﺎ ﻨﻔﺱ ﺍﻟﺤﺠﻡ ﻭﻤﻥ ﻫﺫﻩ ﺍﻟﺘﻭﺍﺒﻊ : ;Integer ('A') = 65; Integer ('a') = 97 ;'Char ( 97 ) = 'a'; Char (48) = '0'; char (65)= 'A ;Boolean(0) = false; Boolean ( 1 ) = true ﻜﻤﺎ ﻴﻤﻜﻥ ﺍﻟﺘﺤﻭﻴل ﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ ﺍﻟﺤﺠﻡ ﺒﻭﺍﺴﻁﺔ ﺘﻭﺍﺒﻊ ﻤﻌﺭﻓﺔ ﻤﺴﺒﻘﹰﺎ : ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻴﻭﻀﺢ ﺒﻌﺽ ﺘﻭﺍﺒﻊ ﺘﺤﻭﻴل ﺍﻷﻨﻭﺍﻉ :
ﺃﺴﻡ ﺍﻟﺘﺎﺒﻊ Strtoint64
ﻋﻤﻠﻪ ﻴﺸﺒﻪ ﺍﻟﺘﺎﺒﻊ Strtointﻭﻟﻜﻨﻪ ﻴﺤﻭل ﺍﻟﻨﺹ ﺍﻟﻤﻌﻁﻰ ﺇﻟﻰ ﺍﻟﻨﻭﻉ int64
)Floattostr(X ﻴﺤﻭل ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ Xﺇﻟﻰ ﻨﺹ : 'Floattostr(5.5e3)='5500';Floattostr(5.5)='5.5 ) FloattostrF(x,,,,ﻴﺤﻭل ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ Xﺇﻟﻰ ﻨﺹ ﻭﻟﻜﻥ ﺒﺸﻜل ﻤﺤﺩﺩ ) ﺃﻨﻅﺭ ﺍﻷﻤﺜﻠﺔ ﻓﻲ ﺍﻷﺴﻔل ( . )Strtofloat(s ﻴﺤﻭل ﺍﻟﻨﺹ Sﺇﻟﻰ ﺭﻗﻡ ﺫﻭ ﻓﺎﺼﻠﺔ ﻋﺎﺌﻤﺔ Strtofloat(3.3)= 3.3; : )Strtocurr(S
Strtofloat( 3.3e4)=33000 ﻴﺤﻭل ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻨﺹ Sﺇﻟﻰ ﺭﻗﻡ ﻤﻥ ﺍﻟﻨﻭﻉ ﻋﻤﻠﺔ .
)Inttohex(X,y
ﻴﺤﻭل ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ Xﺇﻟﻰ ﻋﺩﺩ ﺴﺕ ﻋﺸﺭﻱ ﻭﺘﻤﺜل yﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻟﻨﺘﻴﺠﺔ ﻻ ﺤﻅ ﺍﻟﻤﺜﺎل :
44
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺃﻤﺜﻠﺔ : function FloatToStrF(Value: Extended; Format: ﺍﻟﺘﺎﺒﻊ : ; TFloatFormat ; Precision, Digits: Integer):string 1ـ ﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ Valueﺒﻌﺩﺓ ﻁﺭﻕ ﺤﺴﺏ ﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﻤﻌﻁﺎﻩ ﻓﻲ ﺍﻟﺘﺎﺒﻊ ﻭﺨﺎﺼﺔ ﺍﻟﻭﺴﻴﻁ Formatﺍﻟﺫﻱ ﻴﺄﺨﺫ ﻋﺩﺓ ﻗﻴﻡ ﺴﻴﺘﻡ ﺸﺭﺤﻬﺎ ﻤﻊ ﺍﻷﻤﺜﻠﺔ : ﻤﺜﺎل ) : ( 1
1ـ Format = FFGeneral ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﺤﻭﻴل ﺍﻟﻌﺩﺩ Valueﺇﻟﻰ ﺃﻗﺭﺏ ﻋﺩﺩ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﺜﺎﺒﺘﺔ ﺃﻭ ﺍﻟﻌﺎﺌﻤﺔ ﻤﻊ ﺇﺯﺍﻟﺔ ﻜﺎﻓﺔ ﺍﻷﺼﻔﺎﺭ ﻋﻠﻰ ﻴﺴﺎﺭ ﺍﻟﻔﺎﺼﻠﺔ ﻭﺘﺘﺄﺜﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﻘﻴﻤﺔ Precisionﺍﻟﺘﻲ ﺘﺤﺩﺩ ﺍﻟﻌﺩﺩ ﺍﻷﻋﻅﻤﻲ ﻷﺭﻗﺎﻡ ﺍﻟﻨﺘﻴﺠﺔ .ﻭﺍﻟﻘﻴﻤﺔ Digitsﺍﻟﺘﻲ ﺘﺤﺩﺩ ﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻷﺱ ﺃﻀﻑ ﺇﻟﻰ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;)form1.caption := floattostrf(55.2723e+3, ffgeneral,5,2 ﺴﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ 55272ﻤﺘﺠﺎﻫ ﹰ ﻼ ﺍﻟﻘﻴﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ ﻷﻨﻪ ﺍﻟﻭﺴﻴﻁ Precisionﻴﺴﺎﻭﻱ ، 5ﻏﻴﺭ ﺍﻵﻥ ﺍﻟﺭﻗﻡ 5ﺇﻟﻰ 7ﻭﻻﺤﻅ ﺘﻐﻴﺭ ﺍﻟﻨﺘﻴﺠﺔ ﺇﻟﻰ ﺍﻟﺸﻜل ، 55272.3ﻏﻴﺭ ﺍﻟﺭﻗﻡ ﺍﻟﺴﺎﺒﻕ ﺇﻟﻰ 4ﻭﻻﺤﻅ ﻅﻬﻭﺭ ﺍﻟﻨﺘﻴﺠﺔ ﺒﺎﻟﺸﻜل . 527e4 :
2ـ Format = FFExponent ﺴﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﺤﻭﻴل ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ ﺇﻟﻰ ﻋﺩﺩ ﺫﻱ ﻓﺎﺼﻠﺔ ﻋﺎﺌﻤﺔ ﻤﻥ ﺍﻟﺸﻜل ) (ddd.eddﻭﺘﺤﺩﺩ ﺍﻟﺨﺎﺼﺔ Precisionﻫﻨﺎ ﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻟﻨﺘﻴﺠﺔ ﻭﺍﻟﻘﻴﻤﺔ Digitsﺘﺘﺭﺍﻭﺍﺡ ﺒﻴﻥ 0..4ﻭﺘﺤﺩﺩ ﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻷﺱ . ;)form1.caption := floattostrf(52.34, ffexponent,8,3 ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻨﺘﻴﺠﺔ 5.2340000e+001ﻓﻲ ﺤﺎل ﺘﻐﻴﺭ ﺍﻟﺭﻗﻡ 8ﺇﻟﻰ 4ﻭﺍﻟﺭﻗﻡ 3ﺇﻟﻰ 2ﺘﺼﺒﺢ ﺍﻟﻨﺘﻴﺠﺔ : 5.234E+01 3ـ Format = fffixed ﺴﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﺤﻭﻴل ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ ﺇﻟﻰ ﻋﺩﺩ ﺫﻭ ﻓﺎﺼﻠﺔ ﺜﺎﺒﺘﺔ ﺤﻴﺙ ﻴﺤﺩﺩ ﻋﺩﺩ ﺍﻷﺭﻗﺎﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ ﺒﺎﻟﻘﻴﻤﺔ : Digits ;)form1.caption := floattostrf(100.36, fffixed,6,1 ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ 100.4ﻷﻨﻪ ﻹﻅﻬﺎﺭ ﺭﻗﻡ ﻭﺍﺤﺩ ﺒﻌﺩ ﺍﻟﻨﺘﻴﺠﺔ ﻗﺎﻡ ﺍﻟﺘﺎﺒﻊ ﺒﺘﺩﻭﻴﺭ ﺍﻟﻨﺘﻴﺠﺔ . ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻗﻴﻤﺔ Precisionﺃﺼﻐﺭ ﻤﻥ ﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻟﻌﺩﺩ ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻨﺘﻴﺠﺔ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ . 4ـ Format = ffNumber
ﺘﺸﺒﻪ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻭﻟﻜﻥ ﻤﻊ ﺇﻅﻬﺎﺭ ﻓﻭﺍﺼل ﺒﻴﻥ ﺍﻵﻻﻑ ﻤﻊ ﺘﻘﺭﻴﺏ ﺍﻟﻨﺘﻴﺠﺔ . ;)form1.caption := floattostrf(195784430.36, ffnumber,10,5 ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ . 195,784,430.4000
45
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
5ـ : Format = ffcurrency ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﻨﻔﺱ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻭﻟﻜﻥ ﻤﻊ ﺫﻜﺭ ل.ﺱ ﺒﺠﺎﻨﺏ ﺍﻟﻨﺎﺘﺞ ) ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﺴﻡ ﺍﻟﻌﻤﻠﺔ ﺍﻟﻤﺤﺩﺩﺓ ﻓﻲ ﺍﻟﺠﻬﺎﺯ ﻋﻥ ﻁﺭﻴﻕ ﺍﻋﺩﺍﺩﺍﺕ ﺇﻗﻠﻴﻤﻴﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ( . ;)form1.caption := floattostrf(195784430.36, ffcurrency,10,5 ل.ﺱ 195,784,430.4000 ﺍﻟﺘﺎﺒﻊ): Inttohex(X,Y
ﻤﺜﺎل inttohex(2345,1); :ﺴﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ 929ﺍﻟﺘﻲ ﺘﻜﺎﻓﺊ ﺍﻟﻌﺩﺩ ﺍﻟﻌﺸﺭﻱ 2345 ﻻ ﺤﺎﺠﺔ ﻟﺘﺤﻭﻴل ﺍﻟﻌﺩﺩ ﺍﻟﺴﺕ ﻋﺸﺭﻱ ﺇﻟﻰ ﻋﺩﺩ ﻁﺒﻴﻌﻲ ﻓﻲ ﺩﻟﻔﻲ ﻷﻨﻪ ﻴﻤﻜﻥ ﺇﻟﺤﺎﻕ ﺍﻹﻋﺩﺍﺩ ﺍﻟﺴﺕ ﻋﺸﺭﻴﺔ ﻤﺒﺎﺸﺭﺓ ﻓﻲ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻁﺒﻴﻌﻴﺔ Integerﺃﻭ ﺍﻟﺤﻘﻴﻘﻴﺔ I:= $929 ) ...ﺘﻜﺎﻓﺊ I:=2345ﻭ J:=$Fﺘﻜﺎﻓﺊ ( J=15
ﻫﻨﺎﻙ ﺁﻻﻑ ﺍﻟﺘﻭﺍﺒﻊ ﻭﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺩﻟﻔﻲ ﻭﻻ ﻴﻤﻜﻥ ﺸﺭﺤﻬﺎ ﻜﻠﻬﺎ ﻟﺫﻟﻙ ﺴﻨﺘﻌﺭﻑ ﺍﻵﻥ ﻋﻠﻰ ﻁﺭﻕ ﺍﻟﺒﺤﺙ ﻋﻥ
ﺘﺎﺒﻊ ﻤﻠﻔﺎﺕ ﻓﻲ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺩﻟﻔﻲ : ﺍﻟﺤﺎﻟﺔ ﺍﻷﻭﻟﻰ :ﺍﻟﺘﺎﺒﻊ ﻤﻌﺭﻭﻑ ﻭﻟﻜﻨﻨﺎ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺘﺫﻜﺭ ﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﺘﺎﺒﻌﺔ ﻟﻪ : ﺍﻜﺘﺏ ﺇﺴﻡ ﺍﻟﺘﺎﺒﻊ ﻓﻲ ﺃﻱ ﻤﻜﺎﻥ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻭﺇﻀﻐﻁ F1ﺴﻴﻅﻬﺭ ﺸﺭﺡ ﻜﺎﻤل ﻟﻠﺘﺎﺒﻊ ﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ،ﺇﺫﺍ ﻜﺎﻥ ﻷﺤﺩ ﺍﻟﻭﺴﻁﺎﺀ ﻋﺩﺓ ﻗﻴﻡ ) ﻜﻤﺎ ﻫﻲ ﺍﻟﺤﺎﻟﺔ ﻓﻲ ﺍﻟﻭﺴﻴﻁ Formatﻟﻠﺘﺎﺒﻊ ( Floattostrfﺴﻴﻅﻬﺭ ﻨﻭﻉ ﻫﺫﺍ
ﺍﻟﻭﺴﻴﻁ ﺒﺎﻟﻠﻭﻥ ﺍﻷﺨﻀﺭ ﻴﻤﻜﻨﻨﺎ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻻﻨﺘﻘﺎل ﻟﺼﻔﺤﺔ ﺘﺸﺭﺡ ﻫﺫﻩ ﺍﻟﻘﻴﻡ . ﺍﻟﺤﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ :ﺍﻟﺘﺎﺒﻊ ﻏﻴﺭ ﻤﻌﺭﻭﻑ ﻭﻟﻜﻨﻨﺎ ﻨﺘﺫﻜﺭ ﺘﺎﺒﻊ ﻗﺭﻴﺏ ﺃﻭ ﻤﺸﺎﺒﻪ ﻟﻪ :
ﻓﺭﻀ ﹰﺎ ﺃﺭﻴﺩ ﺃﻥ ﺃﺠﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺫﻱ ﻴﺤﻭل ﺍﻟﻨﺹ ﺇﻟﻰ ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ ﻤﻥ ﻨﻭﻉ ﻋﻤﻠﺔ ، Currencyﻨﺤﻥ ﻨﻌﻠﻡ ﺒﻭﺠﻭﺩ ﺘﺎﺒﻊ ﻴﺤﻭل ﺍﻟﻨﺹ ﺇﻟﻰ ﻋﺩﺩ ﺤﻘﻴﻘﻲ ﻭﻫﻭ Strtofloatﻟﺫﻟﻙ ﻨﻜﺘﺏ ﺍﺴﻡ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻭﻨﻀﻐﻁ ، F1ﺴﻴﻅﻬﺭ ﺍﻵﻥ ﺸﺭﺡ ﻟﻠﺘﺎﺒﻊ ، Strtofloatﺴﺘﻼﺤﻅ ﺍﻵﻥ ﻭﺠﻭﺩ ﺍﻟﻜﻠﻤﺔ See Alsoﺒﺎﻟﻠﻭﻥ ﺍﻷﺨﻀﺭ
ﻓﻲ ﺃﻋﻠﻰ ﺍﻟﺼﻔﺤﺔ ،ﻓﻲ ﺤﺎل ﺍﻟﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺴﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﻭﺼﻠﺔ ﻗﺎﺌﻤﺔ ﺒﺎﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﺎﻟﺘﺎﺒﻊ ﺍﻟﻤﺫﻜﻭﺭ ﺃﻭ ﺍﻟﺘﻭﺍﺒﻊ
ﺍﻟﻤﺸﺎﺒﻬﺔ ﻟﻪ ) ﻴﻤﻜﻥ ﺃﻥ ﻨﺨﺘﺎﺭ ﻤﻨﻬﺎ ،( Strtocurrﻜﻤﺎ ﻴﻭﺠﺩ ﺃﺤﻴﺎﻨﹰﺎ ﺍﻟﻭﺼﻠﺔ ﺒﻌﺩ ﺍﻟﻌﻨﻭﺍﻥ ) Categoryﻓﻲ ﻤﺜﺎﻟﻨﺎ ( Floating point Conversion Routinesﺒﺎﻟﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺴﺘﻅﻬﺭ ﻜل ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺘﺼﻠﺔ ﺒﻤﻭﻀﻭﻉ ﺍﻟﺘﺎﺒﻊ Strtofloatﻓﻲ ﻤﺜﺎﻟﻨﺎ ) ﺴﺘﻅﻬﺭ ﻜل ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﺘﺤﻭﻴل ﺍﻟﻌﺩﺩ ﺍﻟﺤﻘﻴﻘﻲ ﺇﻟﻰ ﺼﻴﻐﺔ ﺃﺨﺭﻯ ( .
ﺍﻟﺤﺎﻟﺔ ﺍﻟﺜﺎﻟﺜﺔ :ﻨﺭﻴﺩ ﺃﻥ ﻨﺒﺤﺙ ﻋﻥ ﺘﺎﺒﻊ ﻟﻪ ﺼﻔﺔ ﻤﻌﻴﻨﺔ :
) ﻓﺭﻀﹰﺎ ﻨﺭﻴﺩ ﺃﻥ ﻨﺒﺤﺙ ﻋﻥ ﺘﺎﺒﻊ ﺭﻴﺎﻀﻲ ( ﻤﻥ ﺍﻟﻤﻌﺭﻭﻑ ﺃﻥ ﻤﻌﻅﻡ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﺭﻴﺎﻀﻴﺔ ﺘﻨﺘﻤﻲ ﺇﻟﻰ ﺍﻟﻭﺤﺩﺓ Math ﻼ ( ﻭﻨﻀﻐﻁ F1ﺴﻴﻅﻬﺭ ﺸﺭﺡ ﺍﻟﺘﺎﺒﻊ ﻟﺫﻟﻙ ﻴﻤﻜﻥ ﺃﻥ ﻨﻜﺘﺏ ) ﺃﻱ ﺘﺎﺒﻊ ﻴﻨﺘﻤﻲ ﻟﻠﻭﺤﺩﺓ ) mathﺍﻟﺘﺎﺒﻊ Powerﻤﺜ ﹰ Powerﻤﻊ ﻅﻬﻭﺭ ﺃﺴﻡ ﺍﻟﻭﺤﺩﺓ ﻓﻲ ﺍﻷﻋﻠﻰ ) ﺒﺎﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺘﻅﻬﺭ ﻗﺎﺌﻤﺔ ﺒﺠﻤﻴﻊ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﺤﺩﺓ .( math
ﻤﻼﺤﻅﺔ :ﻤﻌﻅﻡ ﺘﻭﺍﺒﻊ ﺍﻟﺘﺤﻭﻴل ) ( ..... Strtointﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﺤﺩﺓ . Sysutil 46
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺤﺎﻟﺔ ﺍﻟﺭﺍﺒﻌﺔ :ﻻﻨﻌﺭﻑ ﺃﻱ ﺸﻲﺀ ﻤﻥ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺴﺎﺒﻘﺔ : ﻼ ( ﻤﻥ ﻗﻭﺍﺌﻡ ﺍﻟﺩﻟﻔﻲ ﻨﺨﺘﺎﺭ Help Æ ﻨﺭﻴﺩ ﺃﻥ ﻨﻭﺠﺩ ﺘﺎﺒﻊ ﻤﺎ ﻴﻘﻭﻡ ﺒﻌﻤﻠﻴﺔ ﻤﻌﻴﻨﺔ ) ﺘﺎﺒﻊ ﺍﻟﺠﻴﺏ ﺠﺏ ) ﻴﻪ ( ﻤﺜ ﹰ Delphi help ﻨﺨﺘﺎﺭ ﺒﻌﺩﻫﺎ ﺍﻟﺼﻔﺤﺔ ) Findﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺼﻔﺤﺔ Findﻷﻭل ﻤﺭﺓ ﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻟﺘﺤﺩﻴﺩ ﻁﺭﻕ ﺍﻟﺒﺤﺙ )ﺃﺨﺘﺭ ﺍﻟﺨﻴﺎﺭﺍﺕ ﺍﻷﻓﺘﺭﺍﻀﻴﺔ(
ﻴﻅﻬﺭ ﺒﻌﺩﻫﺎ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻨﻜﺘﺏ ﻓﻴﻪ ﺍﺴﻡ ﺍﻟﺘﺎﺒﻊ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ) Sinﻓﻲ ﻤﺜﺎﻟﻨﺎ ( ﻓﻴﻅﻬﺭ ﻓﻲ ﺍﻷﺴﻔل ﺠﻤﻴﻊ
ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﻤﻜﺘﻭﺒﺔ ﻓﻲ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺴﺎﻋﺩﺓ ﻭﺍﻟﺘﻲ ﺘﺒﺩﺃ ﺒﺎﻷﺤﺭﻑ ﺍﻟﻤﻜﺘﻭﺒﺔ ) ( Sinﻭﻴﻅﻬﺭ ﺃﺴﻔل ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ ﻗﺎﺌﻤﺔ ﺃﺨﺭﻯ ﺒﺎﻟﻌﻨﻭﺍﻨﻴﻥ ﺍﻟﺘﻲ ﺘﺤﻭﻱ ﻫﺫﻩ ﺍﻟﻜﻠﻤﺔ ﺤﺎﻭل ﺃﻥ ﺘﺨﺘﺎﺭ ﻤﻨﻬﺎ ﻁﻠﺒﻙ ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﻤﺭﺘﻴﻥ ﻓﻴﻅﻬﺭ ﻨﺹ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﻤﺭﺘﺒﻁ ﺒﻬﺫﺍ ﺍﻟﻌﻨﻭﺍﻥ ) ﻓﻲ ﻤﺜﺎﻟﻨﺎ Other Standard routineﻭﻟﻠﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﻘﺎﺌﻤﺔ ﺃﺨﺘﺭ ﺍﻟﺴﺎﺒﻘﺔ . ( topic ﻤﻼﺤﻅﺎﺕ :
ﻟﻤﻌﺭﻓﺔ ﻋﻤل ﺃﻱ ﻋﻨﺼﺭ ﻓﻲ ﺩﻟﻔﻲ ﺃﺨﺘﺭﻩ ﻭﺃﻀﻐﻁ ﻋﻠﻰ . F1 ﻟﻤﻌﺭﻓﺔ ﻋﻤل ﺃﻱ ﺨﺎﺼﺔ ﺘﺎﺒﻌﺔ ﻟﻌﻨﺼﺭ ﻤﺎ ﻓﻲ ﺩﻟﻔﻲ ﺃﺨﺘﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻭﺍﻀﻐﻁ ﻋﻠﻰ .... F1
47
Help
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺘﺎﺴﻌﺔ ﺼﻨﺎﺩﻴﻕ ﺍﻟﺤﻭﺍﺭ : Dialog ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺼﻨﺎﺩﻴﻕ ﺠﺎﻫﺯﺓ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Dialogsﻭﻤﻬﻤﺘﻬﺎ ﻓﺘﺢ ﻨﻭﺍﻓﺫ ﺨﺎﺼﺔ ﺒﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ) ﻟﻔـﺘﺢ ﻭﺤﻔﻅ ﻤﻠﻑ ﻭﻟﺘﺤﺩﻴﺩ ﻟﻭﻥ ﻭﻟﻔﺘﺢ ﻤﻠﻑ ﺼﻭﺭﺓ ﻭﻟﻠﻁﺒﺎﻋﺔ ﻭﻟﻠﺒﺤﺙ ( ....ﻭﺴﻨﺩﺭﺱ ﺒﻌﺽ ﻫﺫﻩ ﺍﻟﺼﻨﺎﺩﻴﻕ ﺒﺎﻟﺘﻔﺼﻴل :
ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﻓﺘﺢ ﻤﻠﻑ : OpenDialog
ﻴﺴﺘﺨﺩﻡ ﻟﻔﺘﺢ ﻤﻠﻑ ﻤﺎ ،ﺤﻴﺙ ﻴﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﻌﺭﻭﻓﺔ ﻟﻔﺘﺢ ﻤﻠﻑ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﻴﻨﺩﻭﺯ ﻭﺤﻴﺙ ﻴﻤﻜﻨﻨـﺎ ﻤـﻥ ﻫـﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻤﻠﻑ ﻭﺍﻟﻀﻐﻁ ﻋﻠـﻰ ﻓـﺘﺢ ) ( Open ﻭﺴﻴﻌﻴﺩ ﺍﻟﻌﻨـﺼﺭ ﺃﺴـﻡ ﺍﻟﻤﻠـﻑ ﺍﻟﻤﺨﺘـﺎﺭ ﺒﺎﻟﺨﺎﺼـﺔ FileName ـ ﺴﻨﺒﺩﺃ ﺒﻤﺜﺎل ﺒﺴﻴﻁ ﻭﺴﻨﺤﺎﻭل ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻌﻨـﺼﺭ ﺒﺸﻜل ﺃﻓﻀل ﻻﺤﻘﹰﺎ :
ﻤﺜﺎل :ﺃﻀﻑ ﻋﻨﺼﺭ ﻤﺫﻜﺭﺓ Memoﻭﺯﺭ ﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ Opendialog ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : IF Opendialog1.Execute then ; ) memo1.Lines.LoadFromFile(opendialog1.FileName ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺴﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺃﺨﺘﺭ ﺃﻱ ﻤﻠﻑ ﻨﺼﻲ ) ( TXTﻭﺍﻀـﻐﻁ ﻋﻠـﻰ open ﺴﻴﻤﻜﻨﻙ ﺍﻵﻥ ﻤﺸﺎﻫﺩﺓ ﻤﺤﺘﻭﻴﺎﺕ ﺍﻟﻤﻠﻑ ﻓﻲ ﺍﻟﻤﺫﻜﺭﺓ . ﺍﻟﺘﻌﻠﻴﻤﺔ OpenDialog1.Executeﺘﻘﻭﻡ ﺒﺈﻅﻬﺎﺭ ﻨﺎﻓﺫﺓ ﺍﻟﺤﻭﺍﺭ ﻓﺘﺢ ﻤﻠﻑ ﻭﺘﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Trueﻓـﻲ ﺤـﺎل ﺍﺨﺘــﺎﺭ ﺍﻟﻤــﺴﺘﺨﺩﻡ ﺃﺤــﺩ ﺍﻟﻤﻠﻔــﺎﺕ ﻭﻀــﻐﻁ ﻋﻠــﻰ ﺍﻟــﺯﺭ ﻓــﺘﺢ ) ( Openﻭﻓــﻲ ﻫــﺫﻩ ﺍﻟﺤﺎﻟــﺔ opendialog1.FileNameﺴﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ،ﻭﺘﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Falseﻓﻲ ﺤﺎل ﺃﻏﻠﻕ ﺍﻟﻤـﺴﺘﺨﺩﻡ
ﺼــﻨﺩﻭﻕ ﺍﻟﺤــﻭﺍﺭ ﺃﻭ ﻀــﻐﻁ ﻋﻠــﻰ ﺍﻟــﺯﺭ ﺇﻟﻐــﺎﺀ ﺍﻷﻤــﺭ) ( Cancelﻭﻓــﻲ ﻫــﺫﻩ ﺍﻟﺤﺎﻟــﺔ opendialog1.FileNameﺴﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻓﺭﺍﻍ. ﺍﻟﺨﺎﺼﺔ : Filterﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻨﻭﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ،ﺍﺨﺘـﺭ ﺍﻟﺨﺎﺼـﺔ Filterﻤـﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻨﻘﺎﻁ ﺍﻟﺜﻼﺙ ...ﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺘﺤﺩﺩ ﻨﻭﻉ ﺍﻟﻤﻠﻔﺎﺕ ﻓـﻲ ﺍﻟﻌﻤـﻭﺩ
Filter
Nameﺃﻜﺘﺏ ﻤﻠﻑ ﻨﺹ ،ﻭﺍﻟﻌﻤﻭﺩ Filterﺃﻜﺘﺏ *.txtﺃﻏﻠﻕ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺴـﺘﻼﺤﻅ ﺃﻥ ﺼـﻨﺩﻭﻕ
ﺍﻟﺤﻭﺍﺭ ﻻ ﻴﻅﻬﺭ ﺇﻻ ﺍﻟﻤﺠﻠﺩﺍﺕ ﻭﺍﻟﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﻨﺼﻲ ، Txtﻭﺴﺘﻅﻬﺭ ﻓﻲ ﺃﺴﻔل ﺍﻟﺼﻨﺩﻭﻕ ﻓﻲ ﺍﻟﻌﻨـﻭﺍﻥ ﺍﻟـﺫﻱ ﻴﺸﻴﺭ ﺇﻟﻰ ﻨﻭﻉ ﺍﻟﻤﻠﻔﺎﺕ " Files Typeﻤﻠﻑ ﻨﺹ " ،ﻋﺩ ﺇﻟﻰ ﺍﻟﺨﺎﺼﺔ Filterﺃﺩﺨل ﻓﻲ ﺍﻟـﺴﻁﺭ ﺍﻟﺜـﺎﻨﻲ
ﻟﻠﻌﻤﻭﺩ " Filter Nameﻤﻠﻑ ﺩﻓﻌﻲ "ﻭﻓﻲ ﺍﻟﻌﻤﻭﺩ "*.Bat " Filterﺜﻡ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻭل " ﺠﻤﻴﻊ ﺍﻟﻤﻠﻔﺎﺕ " ﻭﺒﺠﺎﻨﺒﻪ " *. " *.
48
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺴﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﻓﺘﺢ ﺍﻟﻤﻠﻔﺎﺕ ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺍﻵﻥ ﺍﺨﺘﻴﺎﺭ ﻨـﻭﻉ ﺍﻟﻤﻠﻔـﺎﺕ ﺍﻟﺘـﻲ ﺴﺘﻅﻬﺭ ﻋﻥ ﻁﺭﻴﻕ . Files Type
ﺍﻟﺨﺎﺼﺔ : FilterIndexﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻭﺘﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ 1ﻟﺘـﺸﻴﺭ ﺇﻟـﻰ
ﺍﻟﻔﻠﺘﺭ ﺍﻷﻭل ﻭ 2ﺇﻟﻰ ﺍﻟﺜﺎﻨﻲ ....
ﺍﻟﺨﺎﺼﺔ : InitialDirﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺘﺤﺩﻴﺩ ﺍﻟﻔﻬﺭﺱ ﺍﻻﺒﺘﺩﺍﺌﻲ ﺍﻟﺫﻱ ﺴﻴﻌﻤل ﻓﻴﻪ ﺍﻟﺼﻨﺩﻭﻕ ﺃﻜﺘﺏ ﻓﻲ ﻫﺫﻩ
ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ \ C:ﻭﺴﻴﻔﺘﺢ ﻋﻨﺩﻫﺎ ﺍﻟﺼﻨﺩﻭﻕ ﻓﻲ ﺍﻟﻔﻬﺭﺱ \... C:
ﺍﻟﺨﺎﺼﺔ : Titleﺘﻤﻜﻨﻙ ﺇﻅﻬﺎﺭ ﺍﻟﺨﺎﺼﺔ ﻤﻥ ﺇﻅﻬﺎﺭ ﻨﺹ ﻤﻌﻴﻥ ﻓﻲ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ ﻟﻨﺎﻓﺫﺓ ﻓﺘﺢ ﺍﻟﻤﻠﻔﺎﺕ ﺍﺩﺨل ﺍﻟﻘﻴﻤﺔ
"ﺃﺨﺘﺭ ﻤﻠﻑ ﻤﺎ ﻟﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻔﺘﺤﻪ ".
ﺍﻟﺨﺎﺼﺔ : Optionﻴﻨﺒﺜﻕ ﻋﻥ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺨﻭﺍﺹ ﺤﺎﻭل ﻤﺭﺍﺠﻌﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺩﻟﻔـﻲ ﻟﻠﺤـﺼﻭل ﻋﻠـﻰ
ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻋﻤل ﻜل ﺨﺎﺼﺔ. ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﻤﻠﻑ : SaveDialog
ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﺒﻔﺘﺢ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﻤﻠﻑ ﻭﻫﻭ ﻴﺸﺒﻪ ﺍﻟﺼﻨﺩﻭﻕ ﺍﻟﺴﺎﺒﻕ ﺒﻁﺭﻴﻘﺔ ﺍﻻﺴﺘﺩﻋﺎﺀ ﻭﺍﻟﺨﺼﺎﺌﺹ ﻟﺫﻟﻙ ﻻ ﺩﺍﻋﻲ ﻹﻋﺎﺩﺓ ﺸﺭﺡ ﺍﻟﺨﺼﺎﺌﺹ .
ﻤﺜﺎل :
ﺃﻀﻑ ﺯﺭ ﻭ SaveDialogﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ
Captionﻟﻠﺯﺭ ﺍﻟﻘﻴﻤﺔ " ﺤﻔﻅ " ﺜﻡ ﺃﻋﻁ
SaveDialogﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
1ـ ﺍﻟﺨﺎﺼﺔ : Filterﻤﻠﻑ ﻨﺹ *.txt ........ :ﻤﻠﻑ ﺩﻓﻌﻲ *.bat ....... 2ـ ﺍﻟﺨﺎﺼﺔ : Defaultextﺍﻟﻘﻴﻤﺔ : .Txtﻫﺫﻩ ﺍﻟﻘﻴﻤﺔ ﻀﺭﻭﺭﻴﺔ ﻟﺘﺤﺩﻴﺩ ﺍﻤﺘﺩﺍﺩ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺤﻔﻅﻪ . ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : if savedialog1.Execute then ) memo1.Lines.SaveToFile(savedialog1.FileName ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺤﻔﻅ ﻭﺍﻜﺘﺏ ﺍﻻﺴﻡ ﺍﻟﺫﻱ ﺘﺭﻴﺩ .... ﺇﺤﺩﻯ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻭﺍﻟﺘﺎﺒﻌﺔ ﻟﻠﺨﺎﺼﺔ
Optionﻫﻲ ﺍﻟﺨﺎﺼﺔ OfOverwritePrompt
ﺃﻋﻁ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Tureﻟﻜﻲ ﻴﺘﻡ ﺘﻨﺒﻴﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﺒل ﺃﻥ ﻴﺤﻔﻅ ﻤﻠﻑ ﻓﻭﻕ ﻤﻠﻑ ﻤﻥ ﻨﻔﺱ ﺍﻹﺴﻡ . ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ : OpenPictureDialog
ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﻫﺫﺍ ﻴﺸﺒﻪ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﻓﺘﺢ ﻤﻠﻑ ﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﻅﻬﻭﺭ ﻗﺴﻡ ﻴﺠﺎﻨﺏ ﺍﻟﻤﻠﻔﺎﺕ ﻹﻅﻬﺎﺭ ﺍﻟﺼﻭﺭ ﻗﺒـل ﻓﺘﺤﻬﺎ ،ﻤﻥ ﺍﻟﻤﻼﺤﻅ ﺃﻥ ﺍﻟﺨﺎﺼﺔ Filterﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﺠﻬﺯﺓ ﺒﺄﻨﻭﺍﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﻟﻠﺩﻟﻔﻲ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ . ﻤﺜﺎل:
ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ Imageﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻭﺃﻀﻑ ﻜﺫﻟﻙ ﺍﻟﻌﻨﺼﺭ . OpenPictureDialog ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : if OpenPictureDialog1.Execute then ) image1.Picture.LoadFromFile(OpenPictureDialog1.FileName 49
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻭﺍﺨﺘﺭ ﺃﻱ ﺼﻭﺭﺓ ﻟﺘﻼﺤﻅ ﻅﻬﻭﺭﻫﺎ ﺇﻟﻰ ﻴﻤﻴﻥ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﻭﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟـﺯﺭ Openﺴﺘﻅﻬﺭ ﺍﻟﺼﻭﺭﺓ ﻓﻲ ﺍﻟﻌﻨﺼﺭ . Image
ﻤﻼﺤﻅﺔ :ﺭﻏﻡ ﻭﺠﻭﺩ ﻤﻠﻔﺎﻥ ﻤﻥ ﺍﻟﻨﻭﻉ Jpgﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﻻ ﺘﻅﻬﺭ ﺍﻟﻤﻠﻔﺎﺕ *.jpgﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴـﺫ ﻭﺇﺫﺍ
ﺃﺭﺩﺕ ﺇﻅﻬﺎﺭﻫﺎ ﻗﻡ ﺒﺈﻀﺎﻓﺔ ﺍﺴﻡ ﺍﻟﻭﺤﺩﺓ Jpegﺇﻟﻰ ﺍﻟﻘﺴﻡ . Uses ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ : SavePictureDialog
) ..........................................................................................ﻨﻔﺱ ﺍﻟﻜﻼﻡ ﺍﻟﺴﺎﺒﻕ ( ............. ﻤﺜﺎل : ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ SavePictureDialogﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻭ ﺃﻋﻁ SavePictureDialog ﺍﻟﺨﺎﺼﺔ DefaultExtﺍﻟﻘﻴﻤﺔ .Bmpﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : if SavePictureDialog1.Execute then )image1.Picture.SaveToFile(SavePictureDialog1.FileName ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺜﻡ ﺍﻓﺘﺢ ﺼﻭﺭﺓ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺯﺭ ﺍﻷﻭل ﻭﺍﺤﻔﻅﻬﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ) ﻴﻤﻜﻨﻙ ﺃﻴﻀﹰﺎ ﺘﻐﻴﺭ ﺍﻤﺘﺩﺍﺩ ﻤﻠﻑ ﺍﻟﺼﻭﺭﺓ ﺃﻱ ﺘﻐﻴﺭ ﻨﻭﻋﻬﺎ ﻋﻥ ﻁﺭﻴﻕ ﺘﻐﻴﺭ ﺍﻻﻤﺘﺩﺍﺩ ﻓﻲ ﺃﺴﻔل ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ . ( Save As Type ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺍﻟﺨﻁﻭﻁ : FontDialog
ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺒﺈﻅﻬﺎﺭ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺍﺨﺘﻴﺎﺭ ﺨﻁ ﺤﻴﺙ ﻴﻤﻜﻨﻨﺎ ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻤﻥ ﺘﺤﺩﻴﺩ ﻨﻭﻉ ﻭﻨﻤﻁ ﻭﺤﺠﻡ ﻭﻟـﻭﻥ ﺍﻟﺨﻁ . ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ Labelﻭ ﻋﻨﺼﺭ FontDialogﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟـﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : if Fontdialog1.Execute then ; label1.Font := fontdialog1.Font ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺘﺤﺩﻴﺩ ﻟﻭﻥ : ColorDialog ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺒﺈﻅﻬﺎﺭ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻻﺨﺘﻴﺎﺭ ﻟﻭﻥ ﺤﻴﺙ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻠﻭﻥ ﻤﻥ ﻋﺩﺩ ﻜﺒﻴﺭ ﺠﺩﹰﺍ ﻤﻥ ﺍﻷﻟﻭﺍﻥ . ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ ColorDialogﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : if colorDialog1.Execute then ; form1.Color := colordialog1.Color ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ColorDialogﻴﻅﻬﺭ ﻓﻴﻪ ﺯﺭ ﻋﻨﻭﺍﻨﻪ Define Custom colorsﺒﺎﻟﻀﻐﻁ ﻋﻠﻴـﻪ ﻴﻅﻬﺭ ﻟﻭﺡ ﺍﻷﻟﻭﺍﻥ ﺍﻟﺫﻱ ﻴﻤﻜﻥ ﻤﻥ ﺨﻼﻟﻪ ﺘﺤﺩﻴﺩ ﺍﻟﻠﻭﻥ ﺃﻭ ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ RGBﻜﺘﺎﺒﺔ ﻓﻲ ﺤﺎل ﻤﻌﺭﻓﺘﻬﺎ .
ﻤﻼﺤﻅـﺔ :ﺘﺘﺒﻊ ﺠﻤﻴﻊ ﺼﻨﺎﺩﻴﻕ ﺍﻟﺤﻭﺍﺭ Dialogﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﺍﻟﻤﺴﺘﺨﺩﻡ ،ﺃﻱ ﺃﻨﻬﺎ ﺴﺘﺨﺘﻠﻑ ﺤﺴﺏ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻓﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﻓﺘﺢ ﻤﻠﻑ ﻓﻲ ﻭﻴﻨﺩﻭﺯ 98ﻴﺨﺘﻠﻑ ﻋﻨﻪ ﻓﻲ ﻭﻴﻨﺩﻭﺯ Xpﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﻴﺨﺘﻠﻑ ﺸﻜل ﺍﻟﺼﻨﺩﻭﻕ ﻤﻥ ﻨﻅـﺎﻡ ﺘﺸﻐﻴل ﺇﻟﻰ ﺁﺨﺭ ﻭﻟﻜﻨﻪ ﺴﻴﺅﺩﻱ ﻨﻔﺱ ﺍﻟﻭﻅﻴﻔﺔ ﺒﻨﻔﺱ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ،ﻜﻤﺎ ﺘﺘﺄﺜﺭ ﻫﺫﻩ ﺍﻟﺼﻨﺎﺩﻴﻕ ﺒﻠﻐﺔ ﺍﻟﻨﻅﺎﻡ ﺃﻱ ﺃﻨﻬﺎ ﺴـﺘﻅﻬﺭ
50
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻭﺍﺠﻬﺎﺕ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻌﺭﺒﻴﺔ ﻭﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻓﻲ ﺤﺎل ﻜﺎﻨـﺕ ﻭﺍﺠﻬـﺎﺕ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ .
51
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﻌﺎﺸﺭﺓ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ) : MaskEditﺍﻟﺼﻔﺤﺔ ( Additional ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ Editﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺘﺤﺩﻴﺩ ﺸﻜل ﺍﻟﻨﺹ ﺍﻟﻤﺩﺨل ﻭﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﻫﺫﻩ ﺍﻤﻴـﺯﺓ
ﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺨﺎﺼﺔ Editmaskﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ...ﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﲢﺪﻳﺪ ﺍﻟﻘﻨﺎﻉ ﺃﻗﻨﻌﺔ ﺟﺎﻫﺰﺓ ) ﺃﻣﺜﻠﺔ (
ﺍﻟﺮﻣﺰ ﺍﻟﺬﻱ ﺳﻴﻈﻬﺮ ﻣﻜﺎﻥ ﺍﻟﻔﺮﺍﻍ
ﻟﺘﺠﺮﺑﺔ ﺍﻟﻨﺺ ﺍﳌﺪﺧﻞ
ﲢﻤﻴﻞ ﺃﻗﻨﻌﺔ ﺟﺎﻫﺰﺓ
ﻤﺜﺎل : 1ـ ﺃﻀﻑ ﻋﻨﺼﺭ MaskEditﻤﻥ ﺍﻟﺼﻔﺤﺔ Additionalﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﺨﺘﺭ ﺍﻟﺨﺎﺼـﺔ Editmaskﻤـﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ﻓﻲ ﺍﻟﻘﺴﻡ ) Date ( Sample Masksﻭﺍﻀﻐﻁ ﻋﻠﻰ Okﻋﻨﺩﻫﺎ ﺴﻴﻅﻬﺭ ﺍﻟﻌﻨﺼﺭ ﺒﺎﻟﺸﻜل __ __/__/ﺍﻵﻥ ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺤﺎﻭل ﺍﻹﺩﺨﺎل ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ﻭﻻﺤﻅ ﺃﻨﻪ ﻻ ﻴﻤﻜﻨـﻙ ﺇﺩﺨـﺎل ﺴـﻭﻯ ﺍﻷﺭﻗﺎﻡ .
ﺘﺤﺩﻴﺩ ﺍﻟﻘﻨﺎﻉ : ﻨﻼﺤﻅ ﺃﻥ ﺍﻟﻘﻴﻡ ﻓﻲ ﺍﻟﺤﻘل ﺘﺤﺩﻴﺩ ﺍﻟﻘﻨﺎﻉ ﻋﺒﺎﺭﺓ ﻋﻥ 0ﺃﻭ 9ﺃﻭ Lﺃﻭ … ﻓﻤﺎﺫﺍ ﺘﻌﻨﻲ ﻫﺫﻩ ﺍﻟﺭﻤﻭﺯ : : 9ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺭﻗﻡ ﻓﻲ ﻤﻜﺎﻥ ﻫﺫﺍ ﺍﻟﺭﻤﺯ ﻭﻻ ﻴﻤﻜﻥ ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ ﻤﻊ ﺇﻤﻜﺎﻨﻴﺔ ﻋﺩﻡ ﺇﺩﺨﺎل ﺃﻱ ﺭﻗـﻡ ) ﻤﺜ ﹰ ﻼ ﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻘﻨﺎﻉ ، 99999ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﻋﺩﺩ ﻤﻜﻭﻥ ﻤﻥ ﺨﻤﺱ ﺃﺭﻗﺎﻡ ﺃﻭ ﺃﺭﺒﻊ ﺃﻭ ﺜﻼﺙ ....ﻭﻻ ﻴﺴﺘﻁﻴﻊ ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ (
: 0ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺭﻗﻡ ﻓﻲ ﻤﻜﺎﻥ ﻫﺫﺍ ﺍﻟﺭﻤﺯ ﻭﻻ ﻴﻤﻜﻥ ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ ) ﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻘﻨـﺎﻉ ، 00000 ﻓﻌﻠﻰ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺨﻤﺱ ﺃﺭﻗﺎﻡ ﺤﺼﺭﹰﺍ ﻭﻻ ﻴﻤﻜﻥ ﺃﺭﺒﻌﺔ (...ﻭﻓﻲ ﺤﺎل ﺍﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﺭﺒﻌﺔ ﺴﻴﺼﺩﺭ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﻋﻥ ﺨﺭﻭﺝ ﺍﻟﻤﺅﺸﺭ ﻤﻥ ﺍﻟﻌﻨﺼﺭ . : Lﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ،ﺇﺩﺨﺎل ﺃﺤﺭﻑ ﻤﻜﺎﻥ ﻫﺫﺍ ﺍﻟﺭﻤﺯ ﻭﻻ ﻴﻤﻜﻥ ﺇﺩﺨﺎل ﺍﻷﺭﻗﺎﻡ ) ﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻘﻨﺎﻉ LLLLﻓﻌﻠﻰ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺃﺭﺒﻊ ﺃﺤﺭﻑ ﺤﺼﺭﹰﺍ (.
: lﺇﺩﺨﺎل ﺃﺤﺭﻑ ﻓﻘﻁ ﻤﻊ ﺇﻤﻜﺎﻨﻴﺔ ﻋﺩﻡ ﺍﻹﺩﺨﺎل ..... 52
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: aﺇﺩﺨﺎل ﺃﺤﺭﻑ ﻤﻊ ﺃﺭﻗﺎﻡ ﻤﻊ ﺇﻤﻜﺎﻨﻴﺔ ﻋﺩﻡ ﺍﻹﺩﺨﺎل .... : Aﺇﺩﺨﺎل ﺃﺤﺭﻑ ﻤﻊ ﺃﺭﻗﺎﻡ ...ﺤﺼﺭﹰﺍ .
ﻴﻭﺠﺩ ﻤﺠﻤﻭﻋﺔ ﺃﺨﺭﻯ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﻴﻤﻜﻥ ﻤﺭﺍﺠﻌﺘﻬﺎ ﻓﻲ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﺘﺎﺒﻌﺔ ﻟﻠﺩﻟﻔﻲ ............ ﺍﻟﻌﻨﺼﺭ ) : MonthCalendarﺍﻟﺼﻔﺤﺔ ( Win32
ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻹﻅﻬﺎﺭ ﺍﻟﺘﺎﺭﻴﺦ ،ﻭﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺍﻟﺘﺎﺭﻴﺦ ﻋﺒﺭﻩ ... ﻓﻲ ﺤﺎل ﺃﺭﺩﻨﺎ ﻤﻥ ﺍﻟﻌﻨﺼﺭ ﺇﻅﻬﺎﺭ ﺘﺎﺭﻴﺦ ﺍﻟﻴﻭﻡ ﻓﻲ ﻜل ﻤﺭﺓ ﻨﻔﺘﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻋﻠﻴﻨﺎ ﺇﺩﺨﺎل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓـﻲ ﺍﻟﺤـﺩﺙ ـﺼﺭ : ـﻭﻱ ﺍﻟﻌﻨـــ ـﻲ ﺘﺤـــ ـﺫﺓ ﺍﻟﺘـــ OnCreateﻟﻠﻨﺎﻓـــ ;MonthCalendar1.Date := date ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﺘﺎﺭﻴﺦ ﺍﻟﻤﺩﺨل ﻤﻥ ﻗﺒل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺃﻭ ﺤﺩﺙ ﺍﻟـﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ﻨﻔﺴﻪ : ;)form1.Caption := datetostr(MonthCalendar1.Date ﻋﻥ ﺇﻋﻁﺎﺀ ﺍﻟﺨﺎﺼﺔ Alignﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻘﻴﻤﺔ alClientﻴﻅﻬﺭ ﻤﻔﻜﺭﺓ ﺒﻌﺩﺓ ﺃﺸﻬﺭ ) ﺤﺴﺏ ﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ ( .. ﻤﻼﺤﻅﺔ :ﻴﻭﺠﺩ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Sampleﺍﻟﻌﻨﺼﺭ Calendarﻭﻫﻭ ﻴﺸﺒﻪ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺴﺎﺒﻕ ﺇﻟﻰ ﺤﺩ ﻤﺎ . ﺍﻟﻌﻨﺼﺭ ) : DateTimePickerﺍﻟﺼﻔﺤﺔ ( Win32
ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻹﻅﻬﺎﺭ ) ﺇﺩﺨﺎل ( ﺍﻟﺘﺎﺭﻴﺦ ﺃﻭ ﺍﻟﻭﻗﺕ : 1ـ ﻴﻅﻬﺭ ﺍﻟﺘﺎﺭﻴﺦ ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺨﺎﺼﺔ Kindﺘﺴﺎﻭﻱ dtkDateﻭﻴﻤﻜﻥ ﺘﻐﻴﺭ ﺍﻟﺘﺎﺭﻴﺦ ﻋﻥ ﻁﺭﻴﻕ ﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﻬﻡ ﺃﻭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺴﻬﻡ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﻌﻨﺼﺭ ﺤﻴﺙ ﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺸﻜل ﻤـﺸﺎﺒﻪ ﻟﻠﻌﻨـﺼﺭ MonthCalendar ﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﺍﻟﺘﺎﺭﻴﺦ ﻤﻥ ﺨﻼﻟﻪ ،ﻜﻤﺎ ﻴﻤﻜﻥ ﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ DateModeﺇﻟﻰ dmUpDownﻴﻅﻬﺭ ﺴﻬﻤﻴﻥ ﺃﻋﻠﻰ ﻭﺃﺴﻔل ﻹﺩﺨﺎل ﺍﻟﺘﺎﺭﻴﺦ ....
2ـ ﻴﻅﻬﺭ ﺍﻟﻭﻗﺕ ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺨﺎﺼﺔ Kindﺘﺴﺎﻭﻱ dtkTimeﻭﺤﺘﻰ ﻴﺘﻡ ﺘﺤﺩﻴﺙ ﺍﻟﻭﻗﺕ ﻴﺠﺏ ﺇﻀﺎﻓﺔ Timer
ﻭﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ : OnTimer ;DateTimePicker1.Time := time 3ـ ﻴﻤﻜﻥ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻭﻗﺕ ﻤﻥ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;) Form1.Caption := TimeToStr(DateTimePicker1.Time ﻭﻴﻜﻭﻥ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﺍﻟﺘﺎﺭﻴﺦ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ : ;) Form1.Caption := Datetostr(DateTimePicker1.date ﺍﻟﻌﻨﺼﺭ ) : PageControlﺍﻟﺼﻔﺤﺔ ( Win32 ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺒﺈﻅﻬﺎﺭ ﺼﻔﺤﺎﺕ ﻤﺴﺘﻘﻠﺔ ﻭﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺴﻨﺒﺩﺃ ﺒﻤﺜﺎل : ﻤﺜﺎل :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭ ﺍﻟﺼﻔﺤﺎﺕ PageControlﻤﻥ ﺍﻟﺼﻔﺤﺔ ،Win32ﺍﻀﻐﻁ ﻋﻠـﻰ ﺍﻟﻌﻨـﺼﺭ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺃﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ New Pageﻋﻨﺩﻫﺎ ﺴﺘﻅﻬﺭ ﺼﻔﺤﺔ ﺠﺩﻴﺩﺓ ﺒﺎﺴﻡ ، Tabsheet1ﺃﻋﺩ ﺍﻟﺨﻁـﻭﺓ ﺍﻷﺨﻴﺭﺓ ﻤﺭﺘﻴﻥ ﻹﻅﻬﺎﺭ TabSheet2ﻭ . TabSheet3
53
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺨﺘﺭ ﺍﻟﺼﻔﺤﺔ ﺍﻷﻭﻟﻰ Tabsheet1ﻭﺃﻋﻁﻬﺎ ﺍﻟﺨﺎﺼـﺔ " Captionﺍﻟﺘـﺎﺭﻴﺦ " ﻭﺃﻀـﻑ ﻓـﻲ ﺩﺍﺨﻠﻬـﺎ ﺍﻟﻌﻨـﺼﺭ . MonthCalendar
ـﺼﺭ ـﺎ ﺍﻟﻌﻨـ ـﻑ ﺇﻟﻴﻬـ ـﺕ " ﻭﺃﻀـ ـﺔ " Captionﺍﻟﻭﻗـ ـﺎ ﺍﻟﺨﺎﺼـ ـﺔ TabSheet2ﻭﺃﻋﻁﻬـ ـﺼﻔﺤﺔ ﺍﻟﺜﺎﻨﻴـ ـﺭ ﺍﻟـ ﺍﺨﺘـ DateTimePickerﻭﺃﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ Kindﺍﻟﻘﻴﻤﺔ dtkTimeﻭﻻ ﺘﻨﺱ ﺇﻀﺎﻓﺔ ﻤﺅﻗﺕ ﻟﺘﺤﺩﻴﺙ ﺍﻟﻭﻗﺕ... ﺍﺨﺘﺭ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺜﺎﻟﺜﺔ TabSheet3ﻭﺃﻋﻁﻬﺎ ﺍﻟﺨﺎﺼﺔ " Captionﺍﻟﺘـﺎﺭﻴﺦ ﻭﺍﻟﻭﻗـﺕ " ﻭﺃﻀـﻑ ﺇﻟﻴﻬـﺎ ﻋﻨـﺼﺭﻴﻥ DateTimePickerﺃﻋﻁ ﺇﺤﺩﺍﻫﻤﺎ ﺍﻟﺨﺎﺼﺔ Kindﺍﻟﻘﻴﻤﺔ .... dtkTime ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﻜﻴﻔﻴﺔ ﺍﻻﻨﺘﻘﺎل ﺒﻴﻥ ﺍﻟﺼﻔﺤﺎﺕ ..
ﺍﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ ) PageControlﻴﻤﻜﻥ ﺍﻻﻨﺘﻘﺎل ﻤﻥ ﻋﻨﺼﺭ ﺍﺒﻥ ﺇﻟﻰ ﻋﻨﺼﺭ ﺃﺏ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘـﺎﺡ ESCﻤـﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ( ﻭﺃﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ Alignﺍﻟﻘﻴﻤﺔ alClientﻋﻨﺩﻫﺎ ﺴﻴﺄﺨﺫ ﺍﻟﻌﻨﺼﺭ ﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺎﻟﻜﺎﻤل . ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ ImageListﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺍﻀﻐﻁ ﻋﻠﻴﺔ ﻤﺭﺘﻴﻥ ﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺤـﻭﺍﺭ ﺍﺨﺘـﺭ ﻤﻨـﻪ Add ﻹﻀﺎﻓﺔ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺼﻭﺭ ،ﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ،Okﻋﺩ ﺒﻌﺩﻫﺎ ﺇﻟﻰ ﺍﻟﻌﻨـﺼﺭ PageControlﻭﺃﻋـﻁ ﺍﻟﺨﺎﺼـﺔ Imagesﺍﻟﻘﻴﻤﺔ ImageList1ﻭﻋﻨﺩﻫﺎ ﺴﺘﻅﻬﺭ ﺍﻟﺼﻭﺭ ﺒﺠﺎﻨﺏ ﻋﻨﻭﺍﻨﻴﻥ ﺍﻟﺼﻔﺤﺎﺕ ،ﻨﺴﺘﻁﻴﻊ ﺍﺨﺘﻴﺎﺭ ﺼـﻭﺭ ﻤﺤـﺩﺩﺓ ﻟﺼﻔﺤﺔ ﻤﺎ ﺒﺎﺨﺘﻴﺎﺭ ﺍﻟﺼﻔﺤﺔ tabSheetﺜﻡ ﻜﺘﺎﺒﺔ ﺭﻗﻡ ﺍﻟﺼﻭﺭﺓ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ ... ImageIndex
ـ ﻴﻤﻜﻥ ﺘﺤﻭﻴل ﻤﻭﻀﻊ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺼﻔﺤﺎﺕ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ TapPositionﺤﻴﺙ ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﻓﻲ ﺍﻷﺴـﻔل ﺃﻭ ﻋﻠﻰ ﺍﻟﻴﻤﻴﻥ ﺃﻭ ﻋﻠﻰ ﺍﻟﻴﺴﺎﺭ ـ ﻴﻤﻜﻥ ﺘﺤﻭﻴل ﺸﻜل ﺍﻟﺼﻔﺤﺎﺕ ﺇﻟﻰ ﺃﺯﺭﺍﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ Styleﻟﻠﻌﻨﺼﺭ PageControlﺒﺈﻋﻁﺎﺌﻬـﺎ ﺍﻟﻘﻴﻤـﺔ tsButtonsﺃﻭ ) tsFlatButtonsﻻ ﺘﻌﻤل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺇﻻ ﺇﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ TapPositionﺘﺴﺎﻭﻱ tpTop
(.
ـ ﺍﻟﺨﺎﺼﺔ ActivePageﺘﺤﺩﺩ ﺍﻟﺼﻔﺤﺔ ﺍﻟﻔﻌﺎﻟﺔ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ . ـ ﺍﻟﺨﺎﺼﺔ : HotTrackﻋﻨﺩ ﺇﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﻴﺘﺤﻭل ﻟﻭﻥ ﺨﻁ ﻋﻨﻭﺍﻥ ﺍﻟﺼﻔﺤﺔ ﺇﻟﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺯﺭﻕ ﻋﻨﺩ ﻤﺭﻭﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻗﻪ ) ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﻨﻔﻴﺫ ( . ﺍﻟﻌﻨﺼﺭ ) : TabControlﺍﻟﺼﻔﺤﺔ ( Win32
ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻌﻨﺼﺭ PageControlﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﻜﻭﻨﻪ ﻻ ﻴﻌﻁﻲ ﺼﻔﺤﺎﺕ ﻤﺴﺘﻘﻠﺔ ﺤﻴﺙ ﺃﻨـﻪ ﻤﻜـﻭﻥ ﻤـﻥ ﺼﻔﺤﺔ ﻭﺍﺤﺩﺓ ) ﺃﻱ ﺃﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺘﻭﻀﻊ ﻓﻲ ﺼﻔﺤﺔ ﻭﺍﺤﺩﺓ ﻭﻴﺘﻡ ﺘﻁﺒﻴﻕ ﺘﻐﻴﺭﺍﺕ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻨـﺩﻤﺎ ﻴـﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺃﺯﺭﺍﺭ ﺍﻟﺼﻔﺤﺎﺕ : ﻤﺜﺎل :ﺴﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻌﻁﻲ ﺠﺩﻭل ﻀﺭﺏ ﺍﻟﻌﺩﺩ . 5 ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ ، TabControlﻓﻲ ﺍﻟﺨﺎﺼﺔ Tabsﺃﻜﺘﺏ ﺍﻟﻘﻴﻡ 1,2,3,4,5,6,7,8,9ﻜل ﻤﻨﻬﺎ ﻓﻲ ﺴﻁﺭ
ﺃﻀﻑ ﻋﻨﺼﺭﻱ Labelﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ . TabControl ﻤﺴﺘﻘل ﻭﻓﻲ ﺍﻟﺤﺩﺙ OnChangeﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var i :integer begin 54
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;) ]i := strtoint(tabcontrol1.Tabs[tabcontrol1.tabindex ;' = label1.Caption := inttostr(i) + ' * 5 ;)label2.Caption := inttostr(i * 5 ﺤﻴﺙ TabControl1.TabIndexﺘﻌﻴﺩ ﺭﻗﻡ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻲ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻴﻬﺎ . ﻭ ] [ Tabcontrol1.Tabsﺘﻌﻴﺩ ﻋﻨﻭﺍﻥ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻲ ﻴﻭﺠﺩ ﺭﻗﻤﻬﺎ ﺒﻴﻥ ﺍﻟﻘﻭﺴﻴﻥ ] [ . ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺼﻔﺤﺎﺕ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ ...
ﺒﺎﻟﻨﺴﺒﺔ ﻟﺒﺎﻗﻲ ﺍﻟﺨﺼﺎﺌﺹ ﻓﻬﻲ ﻤﺸﺎﺒﻬﺔ ﺘﻤﺎﻤﹰﺎ ﻟﺨﺼﺎﺌﺹ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺴﺎﺒﻕ . ﺍﻟﻌﻨﺼﺭ ) : UpDownﺍﻟﺼﻔﺤﺔ ( Win32
ﺃﻀﻑ ﻋﻨﺼﺭ UpDownﻭﻋﻨﺼﺭ Editﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴـﺩ ،ﺤـﺩﺩ ﺍﻟﻌﻨـﺼﺭ UpDown1ﻭﺍﻋـﻁ ﺍﻟﺨﺎﺼـﺔ Associateﺍﻟﻘﻴﻤﺔ ، Edit1ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺃﺴﻬﻡ ﺍﻟﻌﻨﺼﺭ UpDownﻭﻻﺤﻅ ﺘﻐﻴﺭ ﺍﻟﺭﻗﻡ ﺩﺍﺨل Edit
ﺍﻟﺨﺎﺼﺔ Incrementﻟﻠﻌﻨﺼﺭ ﺘﺤﺩﺩ ﻤﻘﺩﺍﺭ ﺍﻟﺯﻴﺎﺩﺓ ﺃﻭ ﺍﻟﻨﻘﺼﺎﻥ ﻓﻲ ﺍﻟﻌﺩﺩ ﺩﺍﺨل ﺍﻟـ . Edit ﺍﻟﺨﺎﺼﺘﺎﻥ Minﻭ Maxﺘﺤﺩﺩﺍﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺩﻨﻴﺎ ﻭﺍﻟﻌﻠﻴﺎ ﻟﻠﻌﺩﺩ ﺩﺍﺨل . Edit ﺍﻟﺨﺎﺼﺔ Positionﺘﺤﺩﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻟﻠﻌﻨﺼﺭ . ﺍﻟﺨﺎﺼﺔ Orientationﺘﺤﺩﺩ ﺍﺘﺠﺎﻩ ﺍﻷﺴﻬﻡ ) ﻋﺎﻤﻭﺩﻱ ﺃﻭ ﺃﻓﻘﻲ ( .
ﺍﻟﺨﺎﺼﺔ : Warpﻋﻨﺩ ﺇﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﻴﺘﺤﻭل ﺍﻟﻌﺩﺩ ﻤﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺴﻔﻠﻰ ﺇﻟﻰ ﺍﻟﻌﻠﻴﺎ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Downﺒﻌﻜﺱ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . Up
ﻤﻼﺤﻅﺔ :ﻴﻭﺠﺩ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Sampleﺍﻟﻌﻨﺼﺭﻴﻥ SpinEditﻭ SpinButtonﺍﻟﺫﻴﻥ ﻴﺸﺒﻬﺎﻥ ﻋﻤل ﻫـﺫﺍ ﺍﻟﻌﻨـﺼﺭ
ﺇﻟﻰ ﺤﺩ ﻤﺎ .
ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺴﻼﺴل ﺍﻟﻨﺼﻴﺔ :
1ـ ﺍﻟﺘﺎﺒﻊ : Concat Concat ( s1, [s2..sn]) :string ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﻭﺼل ﺍﻟﺴﻼﺴل S1..Snﻤﻊ ﺒﻌﻀﻬﺎ ﻤﺜﺎل : ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ : ;var s1,s2,s3 : string begin ;'s1:= 'abc ;'s2 := 'efg ;'s3:= 'hij )form1.caption:=concat(s1,s2,s3 ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻋﻤﻠﻴﺔ ﺠﻤﻊ ﺍﻟﺴﻼﺴل ﺍﻟﻨﺼﻴﺔ ﺃﻱ ﺃﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺴﺘﻜﻭﻥ ﻤﺸﺎﺒﻪ ﻟﻭ ﻜﺎﻨﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﺨﻴﺭﺓ ;Form1.Caption := s1+s2+s3 2ـ ﺍﻟﺘﺎﺒﻊ : Copy Copy ( S:string , Index,Count :Integer ) :String ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺴﻠﺴﻠﺔ ﺭﻤﺯﻴﺔ ﺠﺯﺌﻴﺔ ﻤﻥ ﺍﻟﺴﻠﺴﺔ Sﺘﺒﺩﺃ ﻤﻥ ﺍﻟﺤﺭﻑ ﺍﻟﺫﻱ ﺘﺭﺘﺒﻪ Indexﻭﺒﻁﻭل . Count 55
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
... Copy ( 'Hello All',5,1) = o ; Copy ( 'Hello All',2,6) = ello A
ﻤﺜﺎل :
3ـ ﺍﻹﺠﺭﺍﺀ : Delete ; ) Delete ( Var S:string ,Index,Count ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻹﺠﺭﺍﺀ ﻓﻲ ﺍﻟﻤﺘﺤﻭل Sﻗﻴﻤﺔ ﻨﻔﺱ ﺍﻟﺴﻠﺴﻠﺔ ﺒﻌﺩ ﺤﺫﻑ ﺍﻟﺭﻤﻭﺯ ﺍﺒﺘﺩﺍﺀ ﻤﻥ ﺍﻟﺭﻤﺯ ﺍﻟﺫﻱ ﺘﺭﺘﻴﺒﻪ Indexﻭﺒﻁﻭل Count ﻤﺜﺎل : ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var s1 : String Begin ; 's1:= 'Hello All ;)Delete (s1,1,3 ;Form1.Caption := s1 ﺴﺘﻜﻭﻥ ﻨﺘﻴﺠﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻘﻴﻤﺔ ، lo Allﻭﺇﺫﺍ ﻏﻴﺭﻨﺎ ﻭﺴﻁﺎﺀ ﺍﻹﺠﺭﺍﺀ ﺇﻟﻰ ﺍﻟـﺸﻜل ) Delete ( S1,4,3ﺴـﺘﻜﻭﻥ ﺍﻟﻨﺘﻴﺠﺔ . HelAll
4ـ ﺍﻟﺘﺎﺒﻊ : DupeString
ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ Sﻤﻜﺭﺭﺓ Countﻤﺭﺓ ﻤﺜﺎل :
;DupeString ( S: String ,Count :Integer) :String
DupeString( 'Ha ',5) = Ha Ha Ha Ha Ha
ﻤﻼﺤﻅﺔ ﻟﺘﻨﻔﻴﺫ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻨﺤﺘﺎﺝ ﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﻭﺤﺩﺓ StrUtils
5ـ ﺍﻷﺠﺭﺍﺀ : Insert
; ) Insert ( S1:String , var S:string ; Index :Integer ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻹﺠﺭﺍﺀ ﺒﺤﺸﺭ ﺍﻟﺴﻠﺴﺔ S1ﻓﻲ ﺍﻟﺴﻠﺴﺔ Sﺍﺒﺘﺩﺍﺀ ﻤﻥ ﺍﻟﺭﻤﺯ Indexﻓﻲ ﺍﻟﺴﻠﺴﺔ Sﻭﻴﻌﻴﺩ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ . S ﻤﺜﺎل :ﺘﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ : ;var s : string begin ; 's:= 'Hello Friends ;)insert ( 'All ' ,s,7 ;form1.Caption := s ﺍﻟﺘﺎﺒﻊ : StuffString ;StuffString( s:string , start, length :integer , S1:string ) :string ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺤﺸﺭ ﺍﻟﺴﻠﺴﺔ ﻗﻴﻤﺔ S1ﻓﻲ ﻗﻴﻤﺔ ﺍﻟﺴﻠﺴﻠﺔ Sﺍﺒﺘﺩﺍﺀ ﻤﻥ ﺍﻟﺭﻤﺯ ﺍﻟﺫﻱ ﺘﺭﺘﻴﺒﻪ Startﻤﻊ ﺤﺫﻑ ﻋﺩﺩ ﻤـﻥ ﺍﻟﺭﻤﻭﺯ ﻤﻥ ﻗﻴﻤﺔ Sﺒﻁﻭل : Length ﻤﺜﺎل stuffstring('Hello Friend',7,6,'all') = 'Hello all' :ﻗﺎﻡ ﺍﻟﺘﺎﺒﻊ ﺒﺤﺫﻑ ﺴﺘﺔ ﺃﺤﺭﻑ ﺍﺒﺘﺩﺍﺀ ﻤﻥ ﺍﻟﺤـﺭﻑ ﺍﻟﺴﺎﺒﻊ ﻭﺤﺸﺭ ﺍﻟﺴﻠﺴﺔ ، allﻓﻲ ﺤﺎل ﺘﻐﻴﺭ ﺍﻟﺭﻗﻡ 6ﺇﻟﻰ 0ﺴﻴﻌﻤل ﺍﻟﺘﺎﺒﻊ ﻋﻤل ﺍﻹﺠﺭﺍﺀ . Insert ﻴﺨﺘﻠﻑ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻋﻥ ﺴﺎﺒﻘﺔ ﺒـ : 56
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﺍﻟﺘﺎﺒﻊ ﻴﻘﻭﻡ ﺒﺤﺫﻑ ﻗﺴﻡ ﻤﻥ ﺍﻟﺴﻠﺴﺔ ﻭﺇﺩﺭﺍﺝ ﻏﻴﺭﻩ . 2ـ ﺍﻹﺠﺭﺍﺀ Insertﺒﺤﺎﺠﺔ ﺇﻟﻰ ﻤﺘﺤﻭل Sﺴﺘﻌﺎﺩ ﻗﻴﻤﺔ ﺍﻟﺘﺎﺒﻊ ﻓﻴﻪ ﺒﻴﻨﻤﺎ ﺍﻟﺘـﺎﺒﻊ StuffStringﻴﻌﻴـﺩ ﺍﻟﺴﻠـﺴﺔ ﺍﻟﻨﺘﻴﺠﺔ ﺒﺩﻭﻥ ﺍﻟﺘﺄﺜﻴﺭ ﻋﻠﻰ ﻭﺴﻁﺎﺀﻩ ( . ﻤﻼﺤﻅﺔ ﻟﺘﻨﻔﻴﺫ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻨﺤﺘﺎﺝ ﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﻭﺤﺩﺓ StrUtils ﺍﻟﺘﺎﺒﻊ : LeftStr LeftStr(S:String ,Count : integer) :string ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺴﻠﺴﻠﺔ ﻨﺼﻴﺔ ﺘﺒﺩﺃ ﻤﻥ ﻴﺴﺎﺭ ﺍﻟﺴﻠﺴﻠﺔ Sﻭﺒﻁﻭل : Count
ﻤﺜﺎل . LeftStr( 'Good Morning,4 ) = Good ، LeftStr( 'Hello Frind',6) = Hello :
ﺍﻟﺘﺎﺒﻊ : RightStrﻴﺸﺒﻪ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻨﻪ ﻴﻌﻴﺩ ﺍﺒﺘﺩﺍﺀ ﻤﻥ ﻨﻬﺎﻴﺔ ﺍﻟﺴﻠﺴﺔ : ﻤﺜﺎل Rightstr( 'Hello Friend',6)=Friend : ﺍﻟﺘﺎﺒﻊ : LowerCase
ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺴﻠﺴﻠﺔ Sﺒﻌﺩ ﺘﺤﻭﻴل ﺠﻤﻴﻊ ﺤﺭﻭﻓﻬﺎ ﺇﻟﻰ ﺤﺭﻭﻑ ﺼﻐﻴﺭﺓ ) ﺍﻷﺤﺭﻑ ﺍﻟﻼﺘﻴﻨﻴﺔ ( . ﻤﺜﺎل LowerCase(Hello Friend) = hello friend :
ﺍﻟﺘﺎﺒﻊ : UpperCase
ﻋﻜﺱ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺴﺎﺒﻕ ،ﻤﺜﺎل UpperCase (' Hello Friend') = HELLO FRIEND ﺍﻟﺘﺎﺒﻊ : Trim
ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺤﺫﻑ ﺍﻟﻔﺭﺍﻏﺎﺕ ﻤﻥ ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴﺔ ﺍﻟﺴﻠﺴﺔ S ﻤﺜﺎل : ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ Editﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;) edit1.Text:= Trim(edit1.Text ﺃﻜﺘﺏ ﻨﺼﹰﺎ ﻤﺎ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﻭﺤﺎﻭل ﺘﺭﻙ ﻓﺭﺍﻏﺎﺕ ﻓﻲ ﺒﺩﺍﻴﺔ ﻫﺫﻩ ﺍﻟﻨﺹ ﺃﻭ ﺁﺨﺭﺓ ' ' Hello Allﻭﺍﻀـﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻓﻴﻘﻭﻡ ﺍﻟﺘﺎﺒﻊ ﺒﺤﺫﻑ ﺍﻟﻔﺭﺍﻏﺎﺕ ﻭﺇﻋﺎﺩﺓ ﺍﻟﻘﻴﻤﺔ '. 'Hello All ﺍﻟﺘﺎﺒﻌﻴﻥ TrimLeftﻭ TrimRightﻟﻬﻤﺎ ﻨﻔﺱ ﺍﻟﺘﺄﺜﻴﺭ ﻏﻴﺭ ﺃﻨﻬﻤﺎ ﻴﺤﺫﻓﺎﻥ ﺍﻟﻔﺭﺍﻏﺎﺕ ﻤﻥ ﺒﺩﺍﻴﺔ ﺍﻟﺴﻠﺴﺔ ﺃﻭ ﻨﻬﺎﻴﺘﻬﺎ ﻋﻠﻰ ﺍﻟﺘﻭﺍﻟﻲ .
ﺍﻟﺘﺎﺒﻊ : Format ; ) Format ( S :String ; A:array of const ﺩﺍﺨﻠﻬﺎ ﻭﻓﻘﹰﺎ ﻟﺒﻌﺽ ﺍﻟﻤﻌﺎﻴﻴﺭ A...ﺒﻌﺩ ﺇﺩﺭﺍﺝ ﺍﻟﻘﻴﻡ ﻓﻲ Sﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺴﻠﺴﻠﺔ
ﻤﺜﺎل :
ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ : ;var s1:string ;var i,j :integer; z:real begin ;i:= 200;j:=5; z:= i/j 57
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)]s1:= format('If You Divide %d by %d the result will be %g',[i,j,z ;form1.Caption := s1 ﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ . If You Divide 200 by 5 the result will be 40 ﻗﺎﻡ ﺍﻟﺘﺎﺒﻊ ﺒﺈﻋﻁﺎﺀ ﻗﻴﻤﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﺔ )
( Iﺇﻟﻰ ﺍﻟﻭﺴﻴﻁ %dﻭﻗﻴﻤﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺜﺎﻨﻲ ﺇﻟﻰ ﺍﻟﻭﺴﻴﻁ %d
ﺍﻟﺜﺎﻨﻲ ﻭﻗﻴﻤﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺜﺎﻟﺙ Zﺇﻟﻰ ﺍﻟﻭﺴﻴﻁ . %g ﺇﺫﹰﺍ ﻴﻤﻜﻨﻙ ﺍﻟﺘﺎﺒﻊ Formatﻤﻥ ﺇﺩﺭﺍﺝ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺜﻭﺍﺒﺕ ﺩﺍﺨل ﺍﻟﺠﻤﻠﺔ ﻋﻥ ﻁﺭﻴﻕ ﻜﺘﺎﺒﺔ ﺍﻟﺭﻤﺯ %ﺩﺍﺨل ﺍﻟﺠﻤﻠـﺔ ﻤﻠﺤﻘﹰﺎ ﺒﺭﻤﺯ ﻴﺩل ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﻭﺴﻴﻁ ﺍﻟﻤﺭﺍﺩ ﺇﺩﺭﺍﺠﻪ ﺤﺴﺏ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ : ) d (decimalﻋﺸﺭﻱ ،ﻗﻴﻤﺔ ﺍﻟﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ ﻴﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻤﻥ ﺍﻟﺨﺎﻨﺎﺕ ﺍﻟﻌﺸﺭﻴﺔ. x )(hexadecimal
ﺴﺕ ﻋﺸﺭﻱ ،ﻗﻴﻤﺔ ﺍﻟﺭﻗﻡ ﺍﻟﺼﺤﻴﺢ ﺘﹸﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻤﻥ ﺍﻟﺨﺎﻨﺎﺕ ﺍﻟﺴﺕ ﻋﺸﺭﻴﺔ.
) p (pointerﻤﺅﺸﹼﺭ ،ﻗﻴﻤﺔ ﺍﻟﻤﺅﺸﺭ ﻴﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻤﻌﺒﺭ ﻋﻨﻬﺎ ﺒﺄﻋﺩﺍﺩ ﺴﺕ ﻋﺸﺭﻴﺔ. ) s (stringﻗﻴﻤﺔ ﺍﻟﺠﻤﻠﺔ ،ﺍﻟﺤﺭﻑ ،ﺃﻭ ﻨﻭﻉ PCharﻴﺘﻡ ﻨﺴﺨﻬﺎ ﻓﻲ ﻤﺨﺭﺠﺎﺕ ﺍﻟﺠﻤﻠﺔ. e )(exponential
ﻤﺭﻓﻭﻉ ﺍﻟﻘﻭﺓ ،ﻗﻴﻤﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺘﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻤﺒﻨﻴﺔ ﻋﻠﻰ ﺘﺭﻤﻴﺯ ﻤﺭﻓﻭﻉ ﺍﻟﻘﻭﺓ.
f (floating )point
ﻨﻘﻁﺔ ﻋﺎﺌﻤﺔ ،ﻗﻴﻤﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺘﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻤﺒﻨﻴﺔ ﻋﻠﻰ ﺘﺭﻤﻴﺯ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ.
)g (general
ﻋﺎﻡ ،ﻗﻴﻤﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺘﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻋﺸﺭﻴﺔ ﺒﺄﻗﺭﺏ ﻤﺎ ﻴﻤﻜﻥ ﻤﺴﺘﺨﺩﻤﺔ ﺇﻤﺎ ﺘﺭﻤﻴﺯ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺃﻭ ﻤﺭﻓﻭﻉ ﺍﻟﻘﻭﺓ.
) n (numberﺭﻗﻡ ،ﻗﻴﻤﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺘﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﻨﻘﻁﺔ ﻋﺎﺌﻤﺔ ﻟﻜﻨﻬﺎ ﺃﻴﻀﺎ ﺘﺴﺘﺨﺩﻡ ﻓﻭﺍﺼل ﺍﻵﻻﻑ. ﻨﻘﻭﺩ ،ﻗﻴﻤﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺘﺤﻭل ﺇﻟﻰ ﺠﻤﻠﺔ ﺘﻤﺜل ﻤﻘﺩﺍﺭ ﺍﻟﻌﻤﻠﺔ .ﺍﻟﺘﺤﻭﻴل ﻴﻌﺘﻤﺩ ﻋﻠﻰ ﺍﻟﺘﻭﺼﻴﻑ
) m (moneyﺍﻹﻗﻠﻴﻤﻲ ﻟﺒﻴﺌﺔ ﺍﻟﺘﺸﻐﻴل -ﺍﻨﻅﺭ ﻤﻠﻑ ﻤﺴﺎﻋﺩﺓ ﺩﻟﻔﻲ ﺘﺤﺕ ﻤﻭﻀﻭﻉCurrency and : .date/time formatting variables ﻤﺜﺎل : ﺃﻀﻑ ﻋﻨﺼﺭ Editﻭﺯﺭ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ،ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :
;))] %s',[Edit1.Textﻤﺭﺤﺒﺎﹰ'( ShowMessage( Format ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻜﺘﺏ ﺃﺴﻤﻙ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Editﻭﺃﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ......
58
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺤﺎﺩﻴﺔ ﻋﺸﺭﺓ ﺍﻟﻠﻭﺍﺌﺢ ﺍﻟﻨﺼﻴﺔ : ﻴﺴﺘﺨﺩﻡ ﺍﻟﻨﻭﻉ TSringsﻟﺘﻌﺭﻴﻑ ﺍﻟﻠﻭﺍﺌﺢ ﺍﻟﻨﺼﻴﺔ ﺤﻴﺙ ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﺒﺘﺨﺯﻴﻥ ﻋﺩﺩ ﻤﻥ ﺍﻟﺴﻼﺴل ﺍﻟﻨـﺼﻴﺔ ﻀـﻤﻥ
ﺴﻁﻭﺭ ﻭﻗﺩ ﺘﻌﺎﻤﻠﻨﺎ ﻤﻌﻪ ﻓﻲ ﺍﻟﺴﺎﺒﻕ ﻓﺎﻟﺨﺎﺼﺔ Itemsﺍﻟﺘﺎﺒﻌﺔ ﻟـ ListBoxﻭﺍﻟﺨﺎﺼﺔ Linesﺍﻟﺘﺎﺒﻌﺔ ﻟﻌﻨﺼﺭ ﺍﻟﻤﺫﻜﺭﺓ
Memoﻤﻥ ﺍﻟﻨﻭﻉ . Tstrings ﻴﺒﺩﺃ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻨﻭﻉ TStringsﺒﺎﻟﺘﻌﻠﻴﻤﺔ TStringList.Createﺍﻟﺘﻲ ﺘﻘﻭﻡ ﺒﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻬﺫﺍ ﺍﻟﻨﻭﻉ ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ، ﻋﻠﻤﹰﺎ ﺃﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻗﺩ ﻴﺄﺨﺫ ﻤﺠﺎل ﻜﺒﻴﺭ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺘﺒﻌﹰﺎ ﻟﺤﺠﻡ ﺍﻟﺴﻼﺴل ﺍﻟﻨﺼﻴﺔ ﺍﻟﻤﺭﺍﺩ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻴﻪ ،ﻭﻴﻨﺘﻬﻲ ﺍﺴـﺘﺨﺩﺍﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ Freeﻟﺘﺤﺭﻴﺭ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻤﻥ ﻗﺒل ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ . ﻤﻼﺤﻅﺔ :
ﻻ ﻋﻨﺩ ﺇﻨﻬﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Freeﺴﻴﺒﻘﻰ ﺤﻴﺯ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺤﺠﻭﺯ ﻤﻥ ﻗﺒل ﺍﻟﻤﺘﺤﻭل Tstringsﻤـﺸﻐﻭ ﹰ ﻤﻤﺎ ﻴﻌﻁل ﻤﻭﺍﺭﺩ ﺍﻟﺠﻬﺎﺯ ) ﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻤﻊ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺭﺒﻴﺔ ( . ﻭﺘﻘﺴﻡ ﺍﻟﻠﻭﺍﺌﺢ ﺍﻟﻨﺼﻴﺔ ﺇﻟﻰ ﻗﺴﻤﻴﻥ :
1ـ ﺍﻟﻠﻭﺍﺌﺢ ﺍﻟﻨﺼﻴﺔ ﻗﺼﻴﺭﺓ ﺍﻷﻤﺩ : ﺘﻜﻭﻥ ﺍﻟﻼﺌﺤﺔ ﻗﺼﻴﺭﺓ ﺍﻷﻤﺩ ﺇﺫﺍ ﺘﻡ ﺇﻨﺸﺎﺅﻫﺎ ﻭﺘﺤﺭﻴﺭﻫﺎ ﻓﻲ ﻨﻔﺱ ﺍﻹﺠﺭﺍﺀ ﺃﻭ ﺍﻟﺘﺎﺒﻊ . ﻤﺜﺎل :
ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ ListBoxﻭﺯﺭ ﻭﻋﻨﺼﺭ ، Editﺃﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟـﻀﻐﻁ ﻋﻠـﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
;var a:TStrings Begin ﺇﻨﺸﺎﺀ ﺍﻟﻼﺌﺤﺔ ﻭﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ a := TStringList.Create; // ﺇﻀﺎﻓﺔ ﺍﻟﻨﺹ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﻨﺹ ﺇﻟﻰ ﺍﻻﺌﺤﺔ a.Add(Edit1.text); //
ﻭﻀﻊ ﺍﻟﺴﻁﺭ ) ( 0ﻤﻥ ﺴﻁﻭﺭ ﺍﻟﻼﺌﺤﺔ ﻓﻲ ﻋﻨﻭﺍﻥ ﺍﻟﻨﻤﻭﺫﺝ Form1.Caption := a.Strings [0]; // a
ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺍﻟﻼﺌﺤﺔ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ
ListBox
ﺤﺎﻭل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺩﻭﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ TsrtingList.Create
ListBox1.Items.AddStrings(a); // ; a.Free ;end
2ـ ﺍﻟﻠﻭﺍﺌﺢ ﺍﻟﻨﺼﻴﺔ ﻁﻭﻴﻠﺔ ﺍﻷﻤﺩ :
ﺘﻜﻭﻥ ﺍﻟﻼﺌﺤﺔ ﻁﻭﻴﻠﺔ ﺍﻷﻤﺩ ﻋﻨﺩ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل ﻋﺎﻡ ﺃﻭ ﺨﺎﺹ ﻤﻥ ﺍﻟﻨﻭﻉ TStringsﻭﻫﻨﺎ ﻋﻠﻴﻨﺎ ﺘﺤﺭﻴﺭﻩ ﻋﻨﺩ ﺇﻏﻼﻕ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺫﻱ ﻗﺎﻡ ﺒﺈﻨﺸﺎﺌﻪ : ﻤﺜﺎل : ﺃﻀﻑ ﻤﺘﺤﻭل Aﻤﻥ ﺍﻟﻨﻭﻉ TStringsﻓﻲ ﺍﻟﻘﺴﻡ Puplicﻤﻥ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ . ﻓﻲ ﺍﻟﺤﺩﺙ OnCreatﻟﻠﻨﻤﻭﺫﺝ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;A := TStringList.Create 59
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻓﻲ ﺍﻟﺤﺩﺙ OnDestroyﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;A.Free ﺒﺈﻤﻜﺎﻨﻙ ﺍﻵﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻋﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ ﻓﻲ ﺃﻱ ﺠﺯﺀ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﺍﻟﺤﺩﺙ OnDestroyﻴﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻋﻨﺩ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ . ﻤﻼﺤﻅﺔ :ﻤﻌﻅﻡ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﺘﺤﺘﺎﺝ ﺇﻟﻰ Createﺘﺤﺘﺎﺝ ﺇﻟﻰ Freeﻋﻨﺩ ﺍﻨﺘﻬﺎﺀ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ،ﻭﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺘﺸﺒﻪ
ﻁﺭﻴﻘﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﺅﺸﺭﺍﺕ ﺤﻴﺙ ﻴﺠﺏ ﺇﻨﻬﺎﺀ ﺍﻟﻤﺅﺸﺭ ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻨﻪ . ﻤﻌﺎﻟﺠﺔ ﺍﻷﺨﻁﺎﺀ ﻓﻲ ﺩﻟﻔﻲ :
ﻴﺠﺏ ﻋﻠﻰ ﻜل ﺘﻁﺒﻴﻕ ﺠﻴﺩ ﺃﻥ ﻴﻌﺎﻟﺞ ﺠﻤﻴﻊ ﺍﺤﺘﻤﺎﻻﺕ ﺍﻷﺨﻁﺎﺀ ﻭﺃﻥ ﻴﻭﺠﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﻟﻰ ﺤل ﻤﺎ ﻟﻠﺨﺭﻭﺝ ﻤـﻥ ﺤﺎﻟـﺔ ﺍﻟﺨﻁﺄ ﺃﻭ ﻴﻘﻭﻡ ﺒﺈﻨﻬﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺄﺴﻠﻭﺏ ﺠﻴﺩ ﻋﻠﻰ ﺍﻷﻗل .... ﺘﺩﻋﻰ ﺤﺎﻻﺕ ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ ﻓﻲ ﺩﻟﻔﻲ ﺒﺎﻻﻋﺘﺭﺍﻀﺎﺕ Exceptionsﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﻫﺩﺍﻑ ) ﻤﺘﺤـﻭﻻﺕ ،ﺘﻭﺍﺒـﻊ ،
ﺇﺠﺭﺍﺀﺍﺕ ﻤﻌﺭﻓﺔ ( ﺘﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻭﻗﻭﻉ ﺍﻟﺨﻁﺄ ﻭﻤﻜﺎﻥ ﺤﺩﻭﺜﻪ.
ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Tryﻟﺤﻤﺎﻴﺔ ﻜﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﺘﻲ ﻟﻬﺎ ﺸﻜﻠﻴﻥ ﺴﻨﺸﺭﺡ ﻜل ﻤﻨﻬﻤﺎ ﺒﺎﻟﺘﻔﺼﻴل .
1ـ ﺍﻟﺘﻌﻠﻴﻤﺔ : Try. . . . . . Except
ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺘﻭﻗﻊ ﺤﺩﻭﺙ ﺨﻁﺄ ﻤﺎ ﻓﻲ ﻜﺘﻠﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ) ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ( ﻟﻤﻌﺎﻟﺠﺔ ﻫـﺫﺍ ﺍﻟﺨﻁـﺄ ﻨـﻀﻊ ﻫـﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻀﻤﻥ ﺍﻟﻜﺘﻠﺔ Tryﻭﺍﻟﺘﻲ ﺘﻨﺘﻬﻲ ﺒـ ، Endﻭﺘﺴﺘﺨﺩﻡ Exceptﻗﺒل Endﻟﺘﻭﺠﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﺘﻨﻔﻴﺫ ﻋﻤﻠﻴـﺎﺕ ﻤﺤﺩﺩﺓ ﻋﻨﺩ ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ .
ﻤﺜﺎل :
ﺃﻀﻑ ﺯﺭ ﻭ Editﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var i :integer begin ;)i:= strtoint(edit1.text ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻜﺘﺏ ﻨﺼﹰﺎ ﻓﻲ ) Editﻻ ﺘﻜﺘﺏ ﺃﺭﻗﺎﻡ ( ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺴﻴﺘﻭﻗﻑ ﻋﻨﺩﻫﺎ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﻅﻬـﺭ ﺩﻟﻔﻲ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺮﺳﺎﻟﺔ ﺍﳌﻮﺿﺤﺔ ﻟﺴﺒﺐ ﺍﻻﻋﺘﺮﺍﺽ
ﺃﺳﻢ ﺍﻹﻋﺘﺮﺍﺽ
60
أﺳﻢ ﺍﻟﱪﻧﺎﻣﺞ
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﺍﻟﺘﻲ ﺘﻌﻨﻲ ﺃﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻗﺩ ﺭﻓﻊ ﺍﻋﺘﺭﺍﻀﹰﺎ ﻤﻥ ﺍﻟﻨﻭﻉ EconvertErrorﻤﻊ ﺭﺴﺎﻟﺔ "ﺍﻟﻨﺹ ﺍﻟﺫﻱ ﺃﺩﺨﻠﺘﻪ " ﻟﻴﺱ ﻋـﺩﺩ ﺼﺤﻴﺢ ،ﺘﻡ ﺇﻴﻘﺎﻑ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻀﻐﻁ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﻤﺭﺓ ﺃﺨﺭﻯ ﻹﻜﻤﺎل ﻋﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺘﻅﻬﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ :
ﻭﺍﻟﺘﻲ ﺘﻌﻨﻲ ﺃﻥ ﺍﻟﻨﺹ ﺍﻟﻤﺩﺨل ﻟﻴﺱ ﻋﺩﺩ ﺼﺤﻴﺢ .. ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﻡ Exception1ﻭﻨﻔﺫﻩ ..ﺜﻡ ﺍﺫﻫﺏ ﺇﻟﻰ ﻓﻬﺭﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺸﻐل ﺍﻟﻤﻠﻑ ﺍﻟﺘﻨﻔﻴـﺫﻱ ، Exception1
ﺃﻜﺘﺏ ﻨﺼﹰﺎ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻓﻘﻁ ، ..ﺇﺫﹰﺍ ﻓﻬﺫﻩ ﻫﻲ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻟﻠﻤـﺴﺘﺨﺩﻡ ﻭﻋﻠﻰ ﻓﺭﺽ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻻ ﻴﻌﺭﻑ ﺍﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻓﺈﻨﻪ ﻻ ﻴﻔﻬﻡ ﺴﺒﺏ ﺍﻟﻤﺸﻜﻠﺔ ﻭﺴﻴﻌﺘﻘﺩ ﺃﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺴﻴﺊ . ﻟﻤﻌﺎﻟﺠﺔ ﻫﺫﺍ ﺍﻟﺨﻁﺄ ﻋﺩل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل :
;Var i :integer Begin Try ;) i:= strtoint(edit1.text Except ) ’ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ‘ ( Showmessage ;end ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻭﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻷﻭﻟﻰ ﻨﻔﺴﻬﺎ ) ﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﺭﺴﺎﻟﺔ ﻟﺘﻨﺒﻴﻪ ﺍﻟﻤﺒﺭﻤﺞ ﻋـﻥ ﻭﺠﻭﺩ ﺨﻁﺄ ﻫﻨﺎ ( ﻭﻟﻜﻥ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻟﻥ ﺘﻅﻬﺭ ﻭﻟﻜﻥ ﺴﺘﻨﻔﺫ ﻤﻜﺎﻨﻬﺎ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﻭﺭﺩﺕ ﺒﻌﺩ ﺍﻟﻘﺴﻡ Exceptﻤـﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ . Try
ﺃﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺃﻋﺩ ﺘﺸﻐﻴﻠﻪ ﻤﻥ ﻓﻬﺭﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .
ﻤﻼﺤﻅﺔ :ﻤﻥ ﺍﻟﻭﺍﻀﺢ ﺃﻥ ﺍﻟﻜﺘﻠﺔ Try . . Endﻟﻡ ﺘﻤﻨﻊ ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ ﻭﻟﻜﻨﻬﺎ ﺘﻌﺎﻤﻠﺕ ﻤﻊ ﺍﻟﺨﻁﺄ ﺒﺄﺴـﻠﻭﺏ ﻤﺘﻁـﻭﺭ ﻼ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻫﻨـﺎ ﻤـﻥ ﻭﺍﻟﺒﺭﺍﻤﺞ ﺍﻷﻗﻭﻯ ﻫﻲ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﻤﻨﻊ ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ ﻗﺩﺭ ﺍﻟﻤﺴﺘﻁﺎﻉ ﻗﺒل ﺍﻟﺘﻌﺎﻤل ﻤﻌﻪ ﻓﻤﺜ ﹰ
ﺍﻷﻓﻀل ﻤﻨﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ ﺩﺍﺨل Editﻭﺒﺎﻟﺘﺎﻟﻲ ﻟﻥ ﻴﺤﺩﺙ ﺍﻟﺨﻁﺄ. ﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺨﻁﺄ : ﻤﺜﺎل : 2 ﺃﻀﻑ ﻋﻨﺼﺭ Editﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻭﻋﺩﻟﻪ ﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;var i,j :integer;z:real Begin Try ;)i:= strtoint(edit1.text ;) j:= strtoint(edit2.text ;z:= i/j ;)edit3.Text := floattostr(z Except 61
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻨﻔﺫﻩ ﻭﻻﺤﻅ ﺘﻨﻔﻴﺫ ﺍﻟﻘﺴﻡ
;) ’ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ‘ ( Showmessage ;end Exceptﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ ﻋﻨﺩ ﺇﺩﺨﺎل ﻨـﺹ ﻓـﻲ Edit1ﺃﻭ ﻓـﻲ
Edit2ﺃﻱ ﺃﻥ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻴﻥ Tryﻭ Exceptﺴﻭﻑ ﺘﺨﻀﻊ ﻟﻠﻔﺤﺹ ﻭ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻴﻥ Exceptﻭ End ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﺨﻁﺄ .
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺃﺩﺨل ﻓﻲ Edit1ﺍﻟﻘﻴﻤﺔ /232/ﻭﺃﺩﺨل ﻓﻲ Edit2ﺍﻟﻘﻴﻤﺔ / 0 /ﻨﻔﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻭﺴـﺘﻅﻬﺭ ﺩﻟﻔـﻲ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﻤﻥ ﺍﻟﻨﻭﻉ EzeorDivideﻭﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺴﺘﻅﻬﺭ ﻤﻥ ﻗﺒل ﺒﺭﻨﺎﻤﺞ ) " ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ" ( ﺒﺎﻟﺭﻏﻡ ﻤﻥ ﻗﻴﺎﻤﻙ ﺒﺈﺩﺨﺎل ﻋﺩﺩ ﺼﺤﻴﺢ ﻟﺫﻟﻙ ﺃﻭﺠﺩﺕ ﺩﻟﻔﻲ ﺃﺴﻠﻭﺒﹰﺎ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺨﻁﺄ ﻭﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻠﺘﻌﺎﻤل ﻤﻌﻪ ،ﻋﺩل ﺍﻵﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;Var i,j :integer;z:real Begin Try ;)i:= strtoint(edit1.text ;)j:= strtoint(edit2.text ;z:= i/j ;)edit3.Text := floattostr(z Except ;) ’ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ‘ ( On Econverterror Do Showmessage ; ) 'ﻻ ﻴﻤﻜﻥ ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ ﺼﻔﺭ'(On EZeroDivide Do shOwmessage ;end ﺍﻟﺘﻌﻠﻴﻤﺔ On Econverterror Doﺘﻌﻨﻲ :ﻋﻨﺩ ﻭﻗﻭﻉ ﺨﻁﺄ ﻤﻥ ﺍﻟﻨﻭﻉ EconvertErrorﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻌﺩ Do ﻭﺒﺫﻟﻙ ﻨﺴﺘﻁﻴﻊ ﺘﺤﺩﻴﺩ ﻜﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻜل ﺨﻁﺄ ﻋﻠﻰ ﺤﺩﻯ ...
ﻫﻨﺎﻙ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻻﻋﺘﺭﺍﻀﺎﺕ ﻭﺍﻟﺘﻲ ﺘﺼﻨﻑ ﻓﻲ ﻤﺠﻤﻭﻋﺎﺕ ﺭﺌﻴﺴﻴﺔ ) : EmathErrorﺍﻻﻋﺘﺭﺍﻀﺎﺕ ﺍﻟﺭﻴﺎﻀـﻴﺔ ﺃﻭ EintErrorﺍﻋﺘﺭﻀﺎﺕ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ( ....ﻴﻨﺒﺜﻕ ﻋﻨﻬـﺎ ﺍﻋﺘﺭﺍﻀـﺎﺕ ﺠﺯﺌﻴـﺔ ) ﻤﺜـل EzerDivideﺃﻭ ( ErangeErrorﻭﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﻫﺫﻩ ﺍﻹﻋﺘﺭﺍﻀﺎﺕ ﻫﻲ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ﺃﺜﻨﺎﺀ ﻅﻬﻭﺭﻫـﺎ ﺤﻴـﺙ ﻴﻤﻜﻨﻨـﺎ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﺍﺴﻡ ﺍﻻﻋﺘﺭﺍﺽ ﻤﻥ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﻲ ﺘﻅﻬﺭﻫﺎ ﺩﻟﻔﻲ ﻋﻨﺩ ﺤﺩﻭﺜﻪ ﻜﻤﺎ ﺭﺃﻴﻨﺎ ﻋﻨﺩ ﻅﻬـﻭﺭ EconvertError ............
2ـ ﺍﻟﺘﻌﻠﻴﻤﺔ : Try .. .. Finally ﺴﻨﺒﺩﺃ ﺒﺎﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻟﺸﺭﺡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ : ﻤﺜﺎل : 1
ﺃﻀﻑ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ; Var a:tstrings ;i:integer begin ﺇﻨﺸﺎﺀ ﺍﻟﻤﺘﺤﻭل ﻭﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ a:= Tstringlist.Create ; // 62
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﺩﺍﺨل ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ i:= strtoint(edit1.text);// ;i:= i * 5 ﺇﻀﺎﻓﺔ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل ﺇﻟﻰ ﺍﻟﻼﺌﺤﺔ a.Add(inttostr(i)); // 'Form1.Caption := 'Done ; a.Free ﻟﻨﻔﺭﺽ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﺩﺨل ﻨﺼﹰﺎ ﻓﻲ ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴـﺭ Editﻭﻟـﻡ ﻴـﺩﺨل ﺃﺭﻗﺎﻤـﹰﺎ ﺴﻴﻨـﺸﺊ ﻋﻨـﺩﻫﺎ ﺍﻻﻋﺘـﺭﺍﺽ EConvertErrorrﻭﺴﻴﺨﺭﺝ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺍﻹﺠﺭﺍﺀ ﻗﺒل ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ a.Freeﻤﻤﺎ ﺴـﻴﺅﺩﻱ ﺇﻟـﻰ ﺒﻘـﺎﺀ ﺍﻟـﺫﺍﻜﺭﺓ ﻤﺤﺠﻭﺯﺓ ﻤﻥ ﻗﺒل ﺍﻟﻤﺘﺤﻭل ) ، aﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻠﻲ ﻤﻜﺎﻥ ﺍﻻﻋﺘﺭﺍﺽ ﻻ ﻴﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ﻭﻟﻭ ﻋﺎﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟـﻰ ﻼ ﺍﻟﺘﻌﻠﻴﻤـﺔ ' Form1.Caption := 'Doneﺍﻟﺘـﻲ ﻟـﻡ ﻴـﺘﻡ ﺘﻨﻔﻴـﺫﻫﺎ ﻓـﻲ ﺤـﺎل ﺤـﺩﺙ ﺍﻟﻌﻤـل ،ﻻ ﺤـﻅ ﻤـﺜ ﹰ ﺍﻻﻋﺘﺭﺍﺽ(
ﻋﺩل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﺒﺤﻴﺙ ﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل : ; Var a:tstrings ;i:integer begin Try ﺇﻨﺸﺎﺀ ﺍﻟﻤﺘﺤﻭل ﻭﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ a:= Tstringlist.Create ; // ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﺩﺍﺨل ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ i:= strtoint(edit1.text);// ;i:= i * 5
;))a.Add(inttostr(i Finally ; 'Form1.Caption := 'Done ; a.Free ;end ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﻻﺤﻅ ﺤﺩﻭﺙ ﺍﻻﻋﺘﺭﺍﺽ ،ﺃﻋﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Runﻭﺴﺘﺠﺩ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﻘﺴﻡ Finallyﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ) ﻻ ﺤﻅ ﺘﻐﻴﺭ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ ( . ﺃﻜﺜﺭ ﻤﺎ ﺘﺘﻤﻴﺯ ﺒﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ Try Finallyﺒﺄﻨﻬﺎ ﺴﺘﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻌﺩ Finallyﺴﻭﺍﺀ ﺤﺩﺙ ﺍﻻﻋﺘـﺭﺍﺽ ﺃﻡ ﻟـﻡ ﻴﺤﺩﺙ ) ﻨﻔﺫ ﺍﻹﺠﺭﺍﺀ ﻭﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Editﻭﻻﺤﻅ ﺃﻥ ﺍﻟﻘﺴﻡ Finallyﻗﺩ ﺘﻡ ﺘﻨﻔﻴﺫﻩ ( .
ﺘﺴﻤﻰ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﻌﻠﻴﻤﺔ ﺘﺤﺭﻴﺭ ﺍﻟﻤﻭﺍﺭﺩ ﻷﻥ ﺃﻜﺜﺭ ﺍﺴﺘﺨﺩﺍﻤﺎﺘﻬﺎ ﺘﻜﻭﻥ ﻋﻨﺩ ﺍﻟﺤﺎﺠﺔ ﻹﻨﺸﺎﺀ ﻤﺘﺤﻭﻻﺕ ﻭﺘﺤﺭﻴﺭﻫﺎ ﺒﻌﺩ ﺍﻨﺘﻬﺎﺀ ﻋﻤﻠﻬﺎ . ﺘﺩﺍﺨل ﺘﻌﻠﻴﻤﺎﺕ : Try ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﺩﺍﺨل ﺘﻌﻠﻴﻤﺎﺕ Tryﻤﻊ ﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺽ ﺇﺫﺍ ﻜﺎﻨﺕ ﻤﻥ ﻨﻔﺱ ﺍﻟﻨﻭﻉ ﻜﻤﺎ ﻴﻠﻲ :
63
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
Try ……. Try ….. Finally ………. End; …….. Finally ……… End; Try ……. Try ….. Except ………. End; …….. Except ……… End;
64
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻜﻤﺎ ﺃﻨﻬﺎ ﻴﻤﻜﻥ ﺃﻥ ﺩﻤﺞ ﻨﻭﻋﻲ ﻋﺒﺎﺭﺓ Tryﺍﻷﻭﻟﻰ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻻﻋﺘﺭﺍﺽ ) ﺍﻟﻘﺴﻡ ( Exceptﻭﺍﻟﺜﺎﻨﻴﺔ ﻟﺤﻤﺎﻴﺔ ﺍﻟﻤـﻭﺍﺭﺩ ) ﺍﻟﻘﺴﻡ ( Finallyﻭﺫﻟﻙ ﻟﺘﺯﻭﻴﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺤﻤﺎﻴﺔ ﺃﻜﺒﺭ ،ﻭﻟﻜﻥ ﻴﺠﺏ ﺍﻟﺤﺫﺭ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﺍ ﺍﻟﺘﺩﺍﺨل ﻟﻤﻌﺭﻓﺔ ﺃﻱ ﻤﻨﻬﻤﺎ ﻻ. ﻴﺤﺩﺙ ﺃﻭ ﹰ
ﺘﻨﻘﻴﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ : ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻻ ﺒﺩ ﻤﻥ ﻓﺤﺹ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺘﻲ ﻗﺩ ﺘﺤﺩﺙ ﻭﺍﻟﺘﻲ ﻻ ﻴﻤﻜﻥ ﺍﻟﺘﻨﺒﻪ ﻟﻬﺎ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻷﻭل ﻤﺭﺓ ﻭﺘﺩﻋﻰ ﻫﺫﻩ ﺍﻷﺨﻁﺎﺀ ﺒـ ) ( Bugsﻭﻴﻭﺠﺩ ﻤﻊ ﺩﻟﻔﻲ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻲ ﺘﻤﻜﻥ ﺍﻟﻤﺒﺭﻤﺞ ﻤﻥ ﻓﺤـﺹ ﺒﺭﺍﻤﺠﻪ ﻭﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺨﻠﻭﻫﺎ ﻤﻥ ﺍﻷﺨﻁﺎﺀ ﻗﺒل ﺍﻟﻨﺸﺭ ،ﺘﺴﻤﻰ ﻋﻤﻠﻴﺎﺕ ﻓﺤﺹ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﺘﺨﻠﺹ ﻤﻥ ﺃﺨﻁﺎﺌـﻪ ﺒــ ) ( Debug 1ـ ﺍﻟﺘﺤﻜﻡ ﺒﺘﻨﻔﻴﺫ ﺒﺭﻨﺎﻤﺞ : ﻤﻥ ﺍﻟﻤﻔﻴﺩ ﻤﻌﺭﻓﺔ ﻗﻴﻡ ﻤﺘﺤﻭﻻﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﻭﻤﻌﺭﻓﺔ ﻜﻴﻔﻴﺔ ﺘﻐﻴﺭ ﻗﻴﻡ ﻫﺫﻩ ﺍﻟﻤﺘﺤﻭﻻﺕ ،ﻭﻟﻬﺫﺍ ﺃﻭﺠـﺩﺕ ﺩﻟﻔـﻲ ﻁﺭﻗﹰﺎ ﻟﺘﻨﻔﻴﺫ ﺠﺯﺀ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺜﻡ ﺍﻟﺘﻭﻗﻑ ﺃﻭ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ ﻭﻓﺤﺹ ﻗﻴﻡ ﺍﻟﻤﺘﺤـﻭﻻﺕ ﻋﻨﺩ ﻨﻘﻁﺔ ﻤﻌﻴﻨﺔ ﺜﻡ ﺍﻟﻌﻭﺩﺓ ﻟﻠﺘﻨﻔﻴﺫ .
ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ :
ﻴﻭﺠﺩ ﺃﻤﺭﻴﻥ ﻟﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ ﺃﻭﻻﻫﻤﺎ ﺍﻷﻤﺭ Trace intoﻭﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭﻩ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Runﺃﻭ ﻋﺒﺭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﺴﺭﻋﺔ ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ F7ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﺍﻟﺜﺎﻨﻲ Step Overﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫﻩ ﻤﻥ ﺍﻟﻘﺎﺌﻤـﺔ Run ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ
ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ . F8
ﻋﻨﺩ ﺍﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ Trace Intoﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺜﻡ ﻨﻀﻐﻁ ﻋﻠﻴﻪ ﻤﺭﺓ ﺜﺎﻨﻴﺔ ﻟﺘﻨﻔﻴـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ
ﺍﻟﺜﺎﻨﻴﺔ ﻭﻫﻜﺫﺍ ﻭﺇﺫﺍ ﺼﺎﺩﻑ ﻫﺫﺍ ﺍﻷﻤﺭ ﺇﺠﺭﺍﺀ ﺃﻭ ﺘﺎﺒﻌﹰﺎ ﻴﻨﺘﻘل ﺇﻟﻴﻪ ﻟﻴﻨﻔﺫ ﺘﻌﻠﻴﻤﺎﺘﻪ ﻜﺫﻟﻙ . ﻭﺍﻷﻤﺭ Step Overﻴﺸﺎﺒﻪ ﺍﻷﻤﺭ Trace Intoﻭﻟﻜﻨﻪ ﺇﺫﺍ ﺼﺎﺩﻑ ﺇﺠﺭﺍﺀ ﺃﻭ ﺘﺎﺒﻌﹰﺎ ﻓﺈﻨﻪ ﻴﻨﻔﺫﻩ ﺒﺎﻟﻜﺎﻤل ﻭﻴﻌـﻭﺩ ﺇﻟـﻰ
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﻁﻠﺏ ﻫﺫﺍ ﺍﻹﺠﺭﺍﺀ . ﻤﺜﺎل :
ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ ﻻﺌﺤﺔ ListBoxﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ; Var s:string ;i , j ,z :integer begin for i := 0 to 500 do begin ;j:= i * 5 ; z:= j * 2 ;)s:= inttostr ( j ) + ' ' + inttostr(z ;Form1.Caption := s )listbox1.Items.Add(s 65
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;end ﺃﻀﻐﻁ ﻋﻠﻰ F7ﻋﺩﺓ ﻤﺭﺍﺕ ﺤﺘﻰ ﻴﻨﻬﻲ ﺍﻷﻤﺭ Trace Intoﺘﻌﻠﻴﻤﺎﺕ ﺘﻬﻴﺌﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻴﺩﺨل ﻓـﻲ ﺠﻤﻠـﺔ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﻤﻜﺘﻭﺒﺔ ﻓﻲ ﺍﻷﻋﻠﻰ ،ﺃﻀﻐﻁ ﺍﻵﻥ ﻋﻠﻰ F7ﻤﺭﺓ ﺃﺨﺭﻯ ﻭﻻﺤﻅ ﺍﻨﺘﻘﺎل ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺤﻴﺙ ﻴﻅﻬﺭ ﺴﻬﻡ ﺃﺨﻀﺭ ﻋﻠﻰ ﻴﺴﺎﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺴﺘﻨﻔﺫ ﻋﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ F7ﻓﻲ ﺍﻟﻤﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ . ﻜﺭﺭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ F7ﺤﺘﻰ ﻴﺼل ﺍﻟﺴﻬﻡ ﺍﻷﺨﻀﺭ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ) ، listbox1.Items.Add(sﺤـﺭﻙ ﺍﻵﻥ ﻤﺅﺸـﺭ
ﻼ ﺃﻭﻗﻑ ﺍﻟﻤﺅﺸﺭ ﻓﻭﻕ ﺍﻟﻤﺘﺤﻭل Iﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ I ﺍﻟﻔﺄﺭﺓ ﻟﻴﻘﻑ ﻓﻭﻕ ﺍﻟﻤﺘﺤﻭﻻﺕ ﻓﻲ ﺠﺴﻡ ﺍﻟﺤﻠﻘﺔ ﻤﺜ ﹰ ﻭﻜﺫﻟﻙ ﻓﻲ Zﻭ ....S
ﺃﻀﻐﻁ ﻋﻠﻰ F7ﻤﺭﺘﻴﻥ ﺤﺘﻰ ﻴﻘﻑ ﺍﻟﺴﻬﻡ ﺍﻷﺨﻀﺭ ﺒﺠﺎﻨﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ j:= i * 5ﻭﻻﺤﻅ ﺃﻨﻪ ﻴﻤﻜﻨﻙ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻗﻴﻤﺔ Iﺍﻟﺠﺩﻴﺩﺓ ﻭﻻ ﻴﻤﻜﻨﻙ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻜل ﻤﻥ ﻗﻴﻤﺔ jﻭ Zﻭ sﻭﻴﻌﻭﺩ ﺍﻟﺴﺒﺏ ﻷﻥ Iﻗﺩ ﺃﺨﺫﺕ ﻗﻴﻤﺘﻬﺎ ﺍﻟﺠﺩﻴﺩﺓ ﺒﻴﻨﻤﺎ ﺒﺎﻗﻲ ﺍﻟﻘﻴﻡ ﻟﻡ ﻴﺘﻡ ﺇﻋﻁﺎﺌﻬﺎ ﻗﻴﻡ ﺠﺩﻴﺩﺓ ﺒﻌﺩ . ﻤﻼﺤﻅﺔ :
ﻴﺴﺘﺨﺩﻡ ﺍﻷﻤﺭ Step Overﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﻭﻟﻜﻥ ﻋﻠﻴﻙ ﺒﺩﺃ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒـ Trace Intoﺤﺘﻰ ﻴﺘﻡ ﺘﻨﻔﻴـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ Application.Runﻷﻥ ﺍﻹﺠﺭﺍﺀ Step Overﻴﻌﺘﺒﺭﻫﺎ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ ﻭﻴﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩﻫﺎ ﺒﺎﻟﻜﺎﻤل . ﺍﻷﻤﺭ : Run To Cursor ﻗﺩ ﻴﻜﻭﻥ ﺃﺤﻴﺎﻨﹰﺎ ﻤﻥ ﺍﻟﺼﻌﺏ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﻨﺭﻴﺩ ﻓﺤﺼﻬﺎ ﻟﺫﻟﻙ ﻭﺠﺩ ﻫﺫﺍ ﺍﻷﻤﺭ ﺤﻴﺙ ﻴﻜﻔﻲ ﺃﻥ ﺘﻀﻊ ﻤﺅﺸﺭ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺒﺭﻤﺠﻲ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺜﻡ ﺘﺨﺘﺎﺭ ﺍﻷﻤـﺭ Run To Cursorﻤـﻥ
ﺍﻟﻘﺎﺌﻤﺔ Runﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ F4ﻋﻨﺩﻫﺎ ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺤﺘﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﻭﻗﻔﺕ ﻋﻨﺩﻫﺎ .
ﻤﻼﺤﻅﺔ :ﻻ ﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻕ ﺍﻟﺜﻼﺙ ﻟﻤﻌﺭﻓﺔ ﻗﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻓﺤﺴﺏ ،ﻓﻬﻲ ﺘﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻜﺒﻴﺭﺓ ﻭﺨﺎﺼـﺔ ﻋﻨﺩﻤﺎ ﻴﻌﻁﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺃﻤﺎﻜﻥ ﻤﻌﻴﻨﺔ ﻨﺘﺎﺌﺞ ﻏﻴﺭ ﻤﺘﻭﻗﻌﺔ ﺃﻭ ﻨﺘﺎﺌﺞ ﻏﻴﺭ ﺍﻟﻤﻁﻠﻭﺒﺔ ،ﺤﻴﺙ ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻷﻭﺍﻤﺭ ﺒﺈﻋﻁﺎﺌﻙ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺴﻴﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻤﻌﺭﻓﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻴﺤﺩﺙ ﻓﻴﻬﺎ ﺍﻟﺨﻠل ،ﻜﻤﺎ ﺃﻥ ﺩﻟﻔﻲ ﻗﺩ ﺘﻌﻁﻴﻙ ﺒﻌﺽ ﺭﺴﺎﺌل ﺍﻷﺨﻁـﺎﺀ
ﺍﻟﺘﻲ ﻻ ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻤﻜﺎﻨﻬﺎ ﺒﺴﻬﻭﻟﺔ . ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ :
ﺘﺴﺘﺨﺩﻡ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻹﻴﻘﺎﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﻨﻘﺎﻁ ﻤﺤﺩﺩﺓ ﺤﻴﺙ ﻴﺴﺘﻤﺭ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺤﺘﻰ ﻭﺼﻭل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﺍﻟـﺴﻁﺭ ﺍﻟﻤﺤﺩﺩ ﻭﺘﺨﺘﻠﻑ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻋﻥ ﺍﻷﻤﺭ Run To Cursorﺒﺄﻨﻨﺎ ﻨﺴﺘﻁﻴﻊ ﺇﻀﺎﻓﺔ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗـﻑ ﻓـﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﻭﻹﻀﺎﻓﺔ ﻨﻘﻁﺔ ﺘﻭﻗﻑ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻨﻀﻊ ﺍﻟﻤﺅﺸﺭ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﻤﺭﺍﺩ ﺍﻟﺘﻭﻗﻑ ﻋﻨﺩﻩ ﻭﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ Add Breakpoint ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Runﺜﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ Okﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ F5ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻴـﺴﺎﺭ ﺍﻟـﺴﻁﺭ ﺒﺎﻟﻔﺄﺭﺓ ﻭﺘﺘﻤﻴﺯ ﺍﻟﺴﻁﻭﺭ ﺍﻟﻤﻌﻠﻤﺔ ﺒﻨﻘﺎﻁ ﺘﻭﻗﻑ ﺒﻠﻭﻨﻬﺎ ﺍﻷﺤﻤﺭ .
ﺴﻨﺘﻌﻠﻡ ﺍﻵﻥ ﻜﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻭﺴﻨﺘﻌﻠﻡ ﻻﺤﻘﹰﺎ ﻜﻴﻔﻴﺔ ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻨﻬﺎ .
66
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ : 1ـ ﻋﺭﺽ ﺠﻤﻴﻊ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ : ﻴﻤﻜﻥ ﺘﻭﺯﻴﻊ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻓﻲ ﻜل ﻭﺤﺩﺍﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻭﻟﻌﺭﺽ ﻗﺎﺌﻤﺔ ﺒﺠﻤﻴﻊ ﺃﻭﺍﻤﺭ ﺍﻟﺘﻭﻗـﻑ ﻨﺨﺘـﺎﺭ ﻤـﻥ
ﺍﻟﻘﺎﺌﻤﺔ View
View Æ Debug Window Æ Breakpoints ﺤﻴﺙ ﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺘﺨﺒﺭﻙ ﺒﺎﺴﻡ ﺍﻟﻭﺤﺩﺓ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻴﻬﺎ ﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ﻭﻓﻲ ﺃﻱ ﺴﻁﺭ ﻤﻥ ﺍﻟﺸﻴﻔﺭﺓ . 2ـ ﺘﻌﻁﻴل ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ :
ﻴﻤﻜﻥ ﺘﻌﻁﻴل ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻤﺅﻗﺘﹰﺎ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺩﺍﺌﺭﺓ ﺍﻟﺤﻤﺭﺍﺀ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺨﻴـﺎﺭ Enable ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺒﺜﻘﺔ ﺤﻴﺙ ﻴﺘﺤﻭل ﻟﻭﻥ ﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ﺇﻟﻰ ﺍﻟﻠﻭﻥ ﺍﻷﺨﻀﺭ ﻭﻴﻤﻜﻥ ﺇﻋﺎﺩﺓ ﺍﻟﻨﻘﻁﺔ ﺇﻟﻰ ﺍﻟﻌﻤل ﺒﺘﻜﺭﺍﺭ ﺍﻟﻌﻤﻠﻴﺔ 3ـ ﺤﺫﻑ ﻨﻘﻁﺔ ﺘﻭﻗﻑ :
ﻴﺘﻡ ﺤﺫﻑ ﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻲ ﺘﻡ ﺇﻨﺸﺎﺀﻫﺎ ﺒﻬﺎ ) ﺃﻱ ﺒﺈﻤﻜﺎﻨﻙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺩﺍﺌﺭﺓ ﺍﻟﺤﻤﺭﺍﺀ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﺴﺎﺭﻱ ﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ( .... F5
ﻴﻤﻜﻥ ﺤﺫﻑ ﺠﻤﻴﻊ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ﻋﻥ ﻁﺭﻴﻕ ﻋﺭﺽ ﺍﻻﺌﺤﺔ View Æ Debug Window Æ Breakpointsﻭﻤﻥ
ﺜﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺇﺤﺩﻯ ﺍﻟﻨﻘﺎﻁ ﻓﻲ ﺍﻟﻼﺌﺤﺔ ﺒﺯﺭ ﺍﻟﻴﻤﻴﻥ ﻟﻠﻔﺄﺭﺓ ﻭﺍﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ .... Breakpoint Æ Delete All 4ـ ﺍﺴﺘﺨﺩﺍﻡ ﻨﻘﺎﻁ ﺘﻭﻗﻑ ﺸﺭﻁﻴﺔ :
ﻼ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭﺼﻭل ﻴﻤﻜﻨﻙ ﺘﺤﺩﻴﺩ ﺸﺭﻁ ﻟﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ﺤﻴﺙ ﻻ ﻴﺘﻭﻗﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻻ ﺇﺫﺍ ﺤﺼل ﻫﺫﺍ ﺍﻟﺸﺭﻁ ) ﻤﺜ ﹰ ﺍﻟﻤﺘﺤﻭل jﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ ( 500ﻭﻴﺘﻡ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺤﻤﺭﺍﺀ ﻭﻤﻥ ﺜﻡ ﺍﺨﺘﻴـﺎﺭ ﻼ ﺃﻜﺘـﺏ ﺍﻟـﺸﺭﻁ ) = j Breakpoint Propertiesﻭﻤﻥ ﺜﻡ ﻜﺘﺎﺒﺔ ﺍﻟﺸﺭﻁ ﻓﻲ ﺍﻟﻘﺴﻡ Conditionﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﻤﺜ ﹰ
( 500
5ـ ﺍﺴﺘﺨﺩﺍﻡ ﻋﺩﺩ ﻤﺭﺍﺕ ﺍﻟﻌﺒﻭﺭ : ﻴﻤﻜﻥ ﺃﻥ ﻨﻁﻠﺏ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻥ ﻴﻘﻑ ﻋﻥ ﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ﻋﻨﺩ ﺘﻨﻔﻴﺫﻫﺎ ﻟﻌﺩﺩ ﻤﻌﻴﻥ ﻤﻥ ﺍﻟﻤﺭﺍﺕ ،ﻭﻴﺘﻡ ﺫﻟﻙ ﻋـﻥ ﻁﺭﻴـﻕ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺤﻤﺭﺍﺀ ﻭﻤﻥ ﺜﻡ ﺍﺨﺘﻴﺎﺭ Breakpoint Propertiesﻭﻤﻥ ﺜﻡ ﻜﺘﺎﺒـﺔ ﻋـﺩﺩ ﺍﻟﻤﺭﺍﺕ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻓﻲ ﺍﻟﻘﺴﻡ Pass count ﻼ ﺃﻀﻑ ﻨﻘﻁﺔ ﺘﻭﻗﻑ ﻋﻥ ﺍﻟﺴﻁﺭ ) listbox1.Items.Add(sﺜﻡ ﺤﺩﺩ Pass Countﺒـ 100ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻤﺜ ﹰ ﻭﺴﺘﻼﺤﻅ ﺘﻭﻗﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﺍﻟﻌﻤل ﻋﻨﺩﻤﺎ ﺘﻨﻔﺫ ﺍﻟﺤﻠﻘﺔ 100ﻤﺭﺓ . ﻤﺭﺍﻗﺒﺔ ﺍﻟﺘﻌﺎﺒﻴﺭ ﻭﺍﻟﻤﺘﺤﻭﻻﺕ :
ﺘﺴﺘﺨﺩﻡ ﺍﻟﻤﺭﺍﻗﺒﺔ ﻟﻤﻌﺭﻓﺔ ﻗﻴﻡ ﺘﻌﺎﺒﻴﺭ ﻭﻤﺘﺤﻭﻻﺕ ﻤﺤﺩﺩﺓ ﺃﺜﻨﺎﺀ ﺴﻴﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﻹﻀﺎﻓﺔ ﻨﻘﻁﺔ ﻤﺭﺍﻗﺒﺔ ﺍﺘﺒﻊ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﺘﺎﻟﻴﺔ : 1ـ ﺤﺩﺩ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺇﻀﺎﻓﺔ ﻨﻘﻁﺔ ﻤﺭﺍﻗﺒﺔ ﻟﻪ ﻭﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺃﺨﺘﺭ ﺍﻷﻤـﺭ Debug Æ Add Watch at Cursor 2ـ ﺍﺨﺘﺭ Add Watchﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Runﺃﻭ ﺍﻀﻐﻁ . Ctrl F5 3ـ ﺇﻅﻬﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ Watch Listﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ View Æ Debug Windows Æ watches View 67
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻋﻨﺩﺌ ٍﺫ ﺴﻴﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺍﻟﺘﺎﻟﻲ ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﻜﺘﺎﺒﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺭﺍﺩ ﻤﺭﺍﻗﺒﺘﻬﺎ ﻓﻲ ﺍﻟﻘﺴﻡ . Expression ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻁﻠﻭﺏ ﻤﺭﺍﻗﺒﺘﻬﺎ ﻋﻠﻴﻙ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ ﺃﻭ ﺍﺴﺘﺨﺩﺍﻡ ﻨﻘﺎﻁ ﺍﻟﺘﻭﻗﻑ ،ﺤﻴﺙ ﺴـﺘﺒﻘﻰ ﻨﺎﻓﺫﺓ ﺍﻟﻤﺭﺍﻗﺒﺔ ﻤﻔﺘﻭﺤﺔ ﻭﺘﻌﻁﻴﻙ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭﻻﺕ ﻓﻲ ﻜل ﻟﺤﻅﺔ ﻴﺘﻭﻗﻑ ﻓﻴﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻻ ﻻﺌﺤﺔ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺭﺍﻗﺒﺔ ﻋﻥ ﻁﺭﻴﻕ View Æ Debug Windows Æ : ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺭﺍﻗﺒﺔ :ﺃﻓﺘﺢ ﺃﻭ ﹰ watches ﻴﻤﻜﻨﻙ ﺘﻌﻁﻴل ﻋﻨﺼﺭ ﻤﺭﺍﻗﺒﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺍﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ ، Disableﻭﻟﺤﺫﻑ ﻋﻨﺼﺭ ﻤﺭﺍﻗﺒﺔ ﻨﻬﺎﺌﻴﹰﺎ ﻨﺨﺘﺎﺭ . Delete ﻟﻠﺘﻐﻴﺭ ﻓﻲ ﻋﻨﺼﺭ ﺍﻟﻤﺭﺍﻗﺒﺔ ﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ Edit Watchﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ : ﺤﻴﺙ Expressionﻫﻭ ﺍﻟﺘﻌﺒﻴﺭ ﺍﻟﻤﺭﺍﺩ ﻤﺭﺍﻗﺒﺘﻪ ﻭﻨﺴﺘﻁﻴﻊ ﻫﻨﺎ ﺃﻥ ﻨﻜﺘﺏ ﺘﻌﺒﺭﹰﺍ ﻤﺎ ﻓﺭﻀﹰﺎ ﻴﻤﻜـﻥ
ﻤﺭﺍﻗﺒﺔ ﻗﻴﻤﺔ i+jﺭﻏﻡ ﺃﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻏﻴـﺭ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺴﻁﻭﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ . ـﺴﺎﻕ ـﻊ ﺍﻷﻨـ ـﺴﺘﺨﺩﻡ ﻤـ : Repeat Countﺘـ ﻭﺍﻟﺴﺠﻼﺕ ﻓﺒﻔﺭﺽ ﻟﺩﻴﻨﺎ ﻤﺼﻔﻭﻓﺔ ﻤـﻥ ﺃﺭﺒـﻊ ﻋﻨﺎﺼﺭ ﻓﻨﻜﺘﺏ ﻓﻲ ﺍﻟﻘﺴﻡ Expressionﺃﺴـﻡ
ﺍﻟﻤـــــﺼﻔﻭﻓﺔ ﻭﻓـــــﻲ ﺍﻟﺤﻘـــــل Repeat Countﺍﻟﻘﻴﻤﺔ /4 /ﻋﻨﺩﻫﺎ ﺴﺘﻅﻬﺭ ﺠﻤﻴﻊ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ ﺃﺜﻨﺎﺀ ﺍﻟﻤﺭﺍﻗﺒﺔ . ﻜﻤﺎ ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻜﻴﻔﻴﺔ ﻅﻬﻭﺭ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺠﺯﺀ ﺍﻟﻨﺎﻓﺫﺓ ﻓﻲ ﺍﻷﺴﻔل ﻓﺎﺨﺘﻴﺎﺭ Hexadecimalﺴﻴﻅﻬﺭ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺕ ﻋﺸﺭﻱ ﻭﻴﺤﺩﺩ ﺍﻟﺤﻘل Digitsﻋﺩﺩ ﺍﻷﺭﻗﺎﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ ﻋﻨـﺩ ﺇﻅﻬـﺎﺭ ﺍﻟـﺭﻗﻡ ﺒﺎﻟﻔﺎﺼـﻠﺔ ﺍﻟﻌﺎﺌﻤـﺔ . Floating Point
ﺭﺅﻴﺔ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻟﺭﻭﺘﻴﻨﺎﺕ :
ﻴﻤﻜﻨﻨﺎ ﻤﺸﺎﻫﺩﺓ ﺍﻟﻤﻜﺩﺱ ﺍﻟﺫﻱ ﻴﺤﻭﻱ ﻋﻠﻰ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻻﺠﺭﺍﺀﺍﺕ ﻋﻥ ﻁﺭﻴﻕ View Æ Debug Windows Æ call Stack ﺤﻴﺙ ﻴﺘﻭﻀﻊ ﻓﻲ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻤﺴﺘﺩﻋﻰ ﺤﺎﻟﻴﹰﺎ ﻭﺍﻟﺴﻁﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ ﺍﻟﺘﺎﺒﻊ ﺍﻟﺫﻱ ﻗﺎﻡ ﺒﺎﺴﺘﺩﻋﺎﺌﻪ . ﻤﺜﺎل :ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :
; ) Add ( 10
ﻭﻋﺭﻑ ﺍﻹﺠﺭﺍﺀ Addﺒﺎﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
; ) Procedure Add ( x
Begin ;X := x +1 ﺴﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺘﻨﻔﻴﺫ ﻨﻔﺴﻪ ﺤﺘﻰ ﻭﺼﻭل ﺍﻟﻤﺘﺤﻭل ﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ If X < 50 then Add ( x ) ; // 50 ﻨﻔﺫ ﺍﻵﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻁﻭﺓ ﺨﻁﻭﺓ ﻭﻻﺤﻅ ﺘﻐﻴﺭ
;End
ﺍﻟﻨﺘﺎﺌﺞ . 68
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﺜﺜﺔ ﻋﺸﺭ ﻤﺎ ﻫﻲ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ؟: ﺏ ﺘﺴﺘﻁﻴﻊ ﻤﻥ ﺨﻼﻟﻪ ﺘﺨﺯﻴﻥ ﻜﻤ ﻴ ﹰﺔ ﻀﺨﻤ ﹰﺔ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺭﺒﻁﻬﺎ ﻋﻼﻗﺎﺕ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ Databaseﻫﻲ ﺘﺭﻜﻴ ﻑ Fileﺃﻭ ﻤﺠﻤﻭﻋﺔ ﻤﻠﻔﹼﺎﺕ ﺘﹸﺨﺯﻥ ﻋﻠﻰ ﺍﻟﻘـﺭﺹ ﺍﻟـﺼﻠﺏ ﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﺎ ﻫﻲ ﺇﻻ ﻤﻠ ﹼ ﻤﻌﻴﻨﺔ ،ﻭﺤﻘﻴﻘ ﹸﺔ ﺍﻷﻤﺭ ،ﻓﺈ
ﻥ ﻤﺎ ﻴﻤﻴﺯﻫﺎ ﻋﻥ ﺒﺎﻗﻲ ﺍﻟﻤﻠﻔﹼﺎﺕ ،ﻫﻭ ﻗﺩﺭﺘﻙ ﻋﻠـﻰ ﻜﺘﺎﺒـﺔ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻓﻴﻬـﺎ ل ﺍﻟﻤﻠﻔﹼﺎﺕ ﺍﻟﻌﺎﺩﻴﺔ ،ﻭﻟﻜ Hard Diskﻜﻜ ّ ﻑ ﻭﻗﺭﺍﺀﺘﻬﺎ ﻤﻨﻬﺎ ،ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻭﺴﺎﺌل ﺍﻟﺘﻲ ﺘﻤﻨﺤﻬﺎ ﻟﻙ ﺒﺭﺍﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﺩﻭﻥ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻤـل ﻤـﻊ ﺍﻟﻤﻠـ ﹼ ﻤﺒﺎﺸﺭﺓﹰ ،ﻭﻫﻭ ﻤﺎ ﻴﺠﻌل ﺍﻷﻤﺭ ﺃﻜﺜﺭ ﺴﻬﻭﻟ ﹰﺔ ﻭﺘﻨﻅﻴﻤﺎ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻙ. ﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻴـﻭﻓﹼﺭ ﻟـﻙ ﺹ ﺒﻙ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻲ ﺘﺭﻴﺤﻙ ،ﻭﻟﻜ ﻑ ﺨﺎ ﻥ ﺒﻴﺎﻨﺎﺘﻙ ﻓﻲ ﻤﻠ ﹼ ﻭﻻ ﻤﺎﻨ ﻊ ﺃﻥ ﺘﺨ ﺯ
ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻭﻗ ِ ﺕ ﻭﺍﻟﺠﻬﺩ.
) ﻓﻲ ﺒﺩﺍﻴﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻜﺎﻥ ﻜل ﻤﺒﺭﻤﺞ ﻴﻨﺸﺊ ﻤﻠﻑ ﻤﻌﻁﻴﺎﺕ ﺨﺎﺹ ﺒﻪ ﻭﻴﻘﻭﻡ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﺒﺎﻟﻁﺭﻕ ﺍﻟﺘﻲ ﺘﺘﻴﺤﻬﺎ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ ) ﺴﻨﺘﻌﺭﻑ ﻋﻠﻴﻬﺎ ﻻﺤﻘﹰﺎ ( ﻭﻟﻜﻥ ﻤﻊ ﺍﻟﻭﻗﺕ ﺘﻁﻭﺭﺕ ﻗﻭﺍﻋـﺩ ﺍﻟﺒﻴﺎﻨـﺎﺕ ﻭﺃﺼﺒﺢ ﺍﻟﻤﺴﺘﺨﺩﻤﻭﻥ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ﺫﺍﺕ ﺤﺠﻡ ﻜﺒﻴﺭ ﻭ ﺇﻟﻰ ﺍﻟﻘﺩﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﻁﻠﻭﺒـﺔ ﺒﺸﻜل ﺴﺭﻴﻊ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺇﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﺸﺎﺭﻙ ﻋﻠﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺃﻱ ﺇﻤﻜﺎﻨﻴﺔ ﺇﺩﺨﺎل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻭﺍﻟﺤﺼﻭل ﻋﻠﻴﻬﺎ ﻤﻥ ﻤﻠﻑ
) ﻤﻠﻔﺎﺕ ( ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﻗﺒل ﻋﺩﺓ ﻤﺴﺘﺨﺩﻤﻴﻥ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ،ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﺠﻌل ﻤﻥ ﺍﻟﻤﺴﺘﺤﻴل ﺃﻥ ﻴﻘـﻭﻡ ﻤﺒـﺭﻤﺞ ﻋﺎﺩﻱ ﺒﺘﺤﻘﻴﻕ ﻫﺫﻩ ﺍﻟﺸﺭﻭﻁ ( ﻭﻫﻨﺎﻙ ﺃﻨﻭﺍﻉ ﻜﺜﻴﺭﺓ ﻤﻥ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﺘﺒﻌﺎ ﻟﻠﺸﺭﻜﺔ ﺍﻟﺘﻲ ﺘﻨﺘﺠﻬﺎ ﻭﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﻨﺸﺌﻬﺎ ،ﻓﻬﻨـﺎﻙ ﻗﻭﺍﻋـﺩ ﺒﻴﺎﻨـﺎﺕ ﺒﺭﻨﺎﻤﺞ Accessﻭﺒﺭﻨﺎﻤﺞ SQL Serverﻭﻫﻤﺎ ﻤﻥ ﺇﻨﺘﺎﺝ ﻤﻴﻜﺭﻭﺴﻭﻓﺕ ،ﻭﻫﻨﺎﻙ ﻋﺸﺭﺍﺕ ﺍﻟﺒﺭﺍﻤﺞ ﻏﻴﺭﻫﻤﺎ ﻤﻥ ﺇﻨﺘﺎﺝ ﺸﺭﻜﺎﺕ ﺃﺨﺭﻯ.
ﻭﺘﺴﻤﻰ ﻫﺫﻩ ﺍﻟﺒﺭﺍﻤﺞ "ﺃﻨﻅﻤﺔ ﺇﺩﺍﺭﺓ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ" ) ،Database Management Systems (DBMSﻭﻤﻬﻤﺘﻬـﺎ
ل ل ﻁﺭﻴﻘـ ٍﺔ ﻭﺃﻓـﻀ ِ ل ﻤﻌﻬﺎ ،ﺒﺄﺴـﻬ ِ ﺕ ﺍﻟﻼﺯﻤﺔ ﻹﻨﺸﺎ ِﺀ ﻗﻭﺍﻋ ِﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﺘﻌﺎﻤ ِ ﺍﻷﺴﺎﺴﻴﺔ ﺃﻥ ﺘﻤﻨﺤﻙ ﺍﻟﻭﺴﺎﺌل ﻭﺍﻷﺩﻭﺍ ِ ﻑ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ. ﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﻤﻠ ﹼ ﺙ ﺘﻘﻭﻡ ﺒﺩﻭﺭ ﺍﻟﻭﺴﻴﻁ ﺒﻴﻨﻙ ﻭﺒﻴ ﺇﻤﻜﺎﻨﻴﺎﺕ ،ﺒﺤﻴ ﹸ ل ﻗﻭﺍﻋـﺩ ﻥ ﻜـ ّ ﻥ ﻨﻭﻉ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻌﻬﺎ ،ﻭﻤﻬﻤﺎ ﻜﺎﻨﺕ ﻁﺭﻴﻘﺔ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﺍﻟﻤﻠـﻑﹼ ،ﻓـﺈ ﻭﻤﻬﻤﺎ ﻜﺎ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺘﺘﺒﻊ ﻗﻭﺍﻋ ﺩ ﺃﺴﺎﺴﻴﺔ ﻭﺘﺤﻘﹼﻕ ﺸﺭﻭﻁﺎ ﻤﻌﻴﻨﺔ ﻤﺘﻌﺎﺭﻓﺎ ﻋﻠﻴﻬﺎ ﺩﻭﻟﻴﺎ ،ﻜﻤﺎ ﺃﻨﹼﻬﺎ ﻜﻠﹼﻬﺎ ﺒﻼ ﺍﺴـﺘﺜﻨﺎﺀ ﺘـﺴﺘﺨﺩﻡ "ﻟﻐـﺔ
ﺍﻻﺴﺘﻌﻼﻡ ﺍﻟﻤﺭﻜﹼﺒﺔ" ) ،Structured Query Language (SQLﻭﻫﻲ ﻟﻐﺔ ﺨﺎﺼـﺔ ﻟﺤﻔـﻅ ﻭﺍﺴـﺘﺭﺠﺎﻉ ﻭﺘﺤـﺩﻴﺙ
ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ. ﻤﻤﺎ ﺘﺘﺄﻟﻑ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ: ﺍﻟﻌﻨﺼﺭ ﺍﻷﺴﺎﺴﻲ ﻓﻲ ﺃﻱ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻫﻭ ﺍﻟﺠﺩﻭل ﻭﻴﺘﺄﻟﻑ ﺍﻟﺠﺩﻭل ﻤﻥ ﺃﻋﻤﺩﺓ ﻭﺃﺴﻁﺭ ﻴﺩﻋﻰ ﻜل ﺴﻁﺭ ﺴـﺠل ﻭﻜـل ﻋﻤﻭﺩ ﺒﺤﻘل ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ ﺍﻟﺴﺠل ﻤﻜﻭﻥ ﻤﻥ ﻋﺩﺓ ﺤﻘﻭل ،ﻟﻨﻔﺭﺽ ﺃﻨﻪ ﻟﺩﻴﻙ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻟﻤﻜﺘﺒﺔ ﻓﺴﻴﻜﻭﻥ ﻟﺩﻴﻙ ﺍﻟﺠـﺩﻭل ﺍﻟﺘﺎﻟﻲ :
69
ﺃﲰﺎﺀ ﺍﻷﻋﻤﺪﺓ ) ﺃﲰﺎﺀ ﺍﳊﻘﻮﻝ (
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺴﺠﻞ ﺍﳊﺎﱄ
ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ
ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ
ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ
http://www.alshater.net
ﺘﺎﺭﻴﺦ
ﺩﺍﺭ ﺍﻟﻨﺸﺭ
ﺍﻹﺼﺩﺍﺭ 1255 1256
ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠـﺔ ﻴﺎﺴﺭ ﻋﻘﺎﺩ ﺩﻟﻔﻲ VB.Net
ﺳﺠﻼﺕ
1997/1/2
ﺍﳊﻘﻞ ﺍﳊﺎﱄ
ﺩﺍﺭ ﺸﻌﺎﻉ
ﻤﺤﻤﺩ ﺤﻤﺩﻱ 2002/2/9
ﻜﺘـــــﺎﺏ
ﻏﺎﻨﻡ
ﺇﻟﻜﺘﺭﻭﻨﻲ
1257
ﺸﺠﺭﺓ ﺍﻟﺤﻜﻡ
ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ
1944/3/3
ﻤﺼﺭ
1258
ﺍﻷﻴـــــﺩﻱ ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ
2000/4/2
ﻤﺼﺭ
ﺍﻟﻨﺎﻋﻤﺔ ﺸﻬﺭﺯﺍﺩ
ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ
1990/3/12
ﻤﺼﺭ
ﻤﻼﺤﻅﺔ ) :ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﻏﻴﺭ ﺩﻗﻴﻘﺔ (. ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ :ﻫﻭ ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﻴﻘﻑ ﻤﺅﺸﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻨﺩﻩ ﻭﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ﻫﻭ ﺘﻘﺎﻁﻊ ﺍﻟـﺴﺠل ﺍﻟﺤـﺎﻟﻲ ﻤـﻊ ﺍﻟﻌﺎﻤﻭﺩ ﺍﻟﺤﺎﻟﻲ ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺩﺍﺌﻤﹰﺎ ﺘﺤﺭﻴﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻨﺩ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻭﻓﻲ ﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ) ﺴﻨﺘﺂﻟﻑ ﻤـﻊ ﻫـﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻻﺤﻘﹰﺎ (.
ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻜﻭﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﻋﺩﺓ ﺠﺩﺍﻭل ﻭﻫﺫﻩ ﺍﻟﺠﺩﺍﻭل ﻗﺩ ﺘﻜﻭﻥ ﻤﺨﺯﻨﺔ ﻓﻲ ﻤﻠﻑ ﻭﺍﺤـﺩ ) ﻗﺎﻋـﺩﺓ ﺒﻴﺎﻨـﺎﺕ ﻼ ( ﺃﻭ ﺃﻥ ﻴﻜﻭﻥ ﻜل ﺠﺩﻭل ﻓﻲ ﻤﻠﻑ ﻋﻠﻰ ﺤﺩﺓ ﻜﻤﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺒﺎﺭﺍﺩﻭﻜﺱ . ﺃﻜﺴﻴﺱ ﻤﺜ ﹰ ﻼ ﺍﻟﺤﻘل ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ ﻤـﻥ ﺍﻟﻨـﻭﻉ ﻴﻌﺭﻑ ﻜل ﺤﻘل ) ﻋﻤﻭﺩ ( ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺤﻭﻴﻬﺎ ﻓﻤﺜ ﹰ Integerﺃﻭ LongIntﺤﺴﺏ ﺤﺠﻡ ﺍﻟﻤﻜﺘﺒﺔ ﺒﻴﻨﻤﺎ ﺃﺴﻡ ﺍﻟﻜﺘﺎﺏ ﻭ ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﻭﺩﺍﺭ ﺍﻟﻨﺸﺭ ﺘﻜﻭﻥ ﻤـﻥ ﺍﻟﻨـﻭﻉ ﻨـﺹ ﻭﺘﺎﺭﻴﺦ ﺍﻹﺼﺩﺍﺭ ﻤﻥ ﺍﻟﻨﻭﻉ . Date
ﻼ ﺃﺴـﻡ ﻭﺃﻜﺜﺭ ﻤﻥ ﺫﻟﻙ ﻋﻨﺩﻤﺎ ﻨﻌﺭﻑ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ ﻨﺹ ﻋﻠﻴﻨﺎ ﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﺘﻲ ﺴﻴﺤﻭﻴﻬﺎ ﻫﺫﺍ ﺍﻟـﻨﺹ ﻤـﺜ ﹰ ﺍﻟﻜﺘﺎﺏ ﻋﺸﺭﻴﻥ ﺤﺭﻑ ﻋﻠﻤﹰﺎ ﺃﻨﻪ ﻻ ﻴﺴﻤﺢ ﺒﻜﺘﺎﺒﺔ ﺃﻜﺜﺭ ﻤﻥ ﺍﻟﺤﺩ ﺍﻟﻤﻌﻁﻰ ،ﻜﻤﺎ ﺃﻥ ﺤﺠﻡ ﺍﻟﺤﻘل ﺴﻴﻜﻭﻥ ﺒﺤﺠﻡ ﺍﻟـﻨﺹ ) ﻋﺸﺭﻴﻥ ﺒﺎﻴﺕ ( ﺴﻭﺍﺀ ﺃﻜﺎﻥ ﺃﺴﻡ ﺍﻟﻜﺘﺎﺏ ﻤﻥ ﻋﺸﺭﻴﻥ ﺤﺭﻑ ﺃﻭ ﺃﻗل ) ،ﺴﻨﺘﻌﺭﻑ ﻻﺤﻘﹰﺎ ﻋﻠﻰ ﺃﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﻓﻲ ﻗﻭﺍﻋـﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﺘﺄﺨﺫ ﺤﻘﻭل ﻤﺘﻐﻴﺭﺓ ( . ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻌﻼﺌﻘﻴﺔ :
ﺏ ﻟـﻨﻔﺱ ﻥ ﺃﻥ ﻴﺤﺘﻭﻯ ﺍﻟﺠﺩﻭل ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻜﺘﺎ ٍ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﺴﺎﺒﻕ ﻭﻀﻌﻨﺎ ﺃﺴﻡ ﺍﻟﻤﺅﻟﻑ ﻀﻤﻥ ﺍﻟﺠﺩﻭل ،ﻭﻤﻥ ﺍﻟﻤﻤﻜ ِ ﺍﻟﻤﺅﻟﹼﻑ ..ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺴﻴﺘ ﻡ ﺘﻜﺭﺍﺭ ﺍﺴﻡ ﺍﻟﻤﺅﻟﹼﻑ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ،ﻤﻤﺎ ﺴﻴﻌﻤل ﻋﻠﻰ ﺯﻴﺎﺩﺓ ﺤﺠـﻡ ﻗﺎﻋـﺩﺓ ﺍﻟﻤﻌﻁﻴـﺎﺕ، ﻭﺇﺒﻁﺎﺀ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺒﺤﺙ ..ﺇﺫﻥ ﻤﺎ ﺍﻟﺤلّ؟ ل ﻤﺅﻟﹼﻑ ..ﻭﻓﻲ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻨﻨﺸﺊ ل ﻟﻠﻤﺅﻟﹼﻔﻴﻥ ،ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺭﻗﻡ ﻤﺴﻠﺴل IDﻟﻜ ّ ل ﻫﻭ ﺘﺨﺼﻴﺹ ﺠﺩﻭ ٍ ﺍﻟﺤ ّ ﻥ ﺨﺎﻨﺔ ﺭﻗﻡ ﻋﻤﻭﺩﺍ ﻨﻀﻊ ﻓﻴﻪ ﺭﻗﻡ ﻤﺅﻟﹼﻑ ﺍﻟﻜﺘﺎﺏ ..ﻓﻤﺜﻼ ﻟﻭ ﻜﺎﻥ ﺭﻗﻡ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻫﻭ ،100ﻓﺈ 70
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ل ﻤﻥ ﺍﻟﻜﺘﺏ ﺍﻟﺘﺎﻟﻴﺔ "ﺸﻬﺭﺯﺍﺩ" ﻭ"ﺍﻷﻴـﺩﻱ ﺍﻟﻨﺎﻋﻤـﺔ" ﻭ"ﺃﺭﻨـﻲ ﺍﷲ" ﺍﻟﻤﺅﻟﹼﻑ ﻓﻲ ﺠﺩﻭل ﺍﻟﻌﻨﺎﻭﻴﻥ ﻻ ﺒ ﺩ ﺃﻥ ﺘﻜﻭﻥ 100ﻟﻜ ّ ﻭ"ﺸﺠﺭﺓ ﺍﻟﺤﻜﻡ" ﻭﺴﻴﺼﺒﺢ ﻟﻴﻨﺎ ﺠﺩﻭﻟﻴﻥ ﺒﺎﻟﺸﻜل : ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ
ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ
ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ
ﺩﺍﺭ ﺍﻟﻨﺸﺭ
ﺘﺎﺭﻴﺦ ﺍﻹﺼﺩﺍﺭ
1255
ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠـﺔ 50 ﺩﻟﻔﻲ VB.Net
1997/1/2
ﺩﺍﺭ ﺸﻌﺎﻉ
56
2002/2/9
1257
ﺸﺠﺭﺓ ﺍﻟﺤﻜﻡ
100
1944/3/3
ﻤﺼﺭ
1258
ﺍﻷﻴﺩﻱ ﺍﻟﻨﺎﻋﻤﺔ 100 100 ﺸﻬﺭﺯﺍﺩ
2000/4/2
ﻤﺼﺭ
1990/3/12
ﻤﺼﺭ
1256
ﻜﺘـــــﺎﺏ ﺇﻟﻜﺘﺭﻭﻨﻲ
ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ
ﺃﺴﻡ ﺍﻟﻤﺅﻟﻑ
50
ﻴﺎﺴﺭ ﻋﻘﺎﺩ
56
ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ
100
ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ
114
ﺴﻌﻴﺩ ﺍﻟﺼﺎﻓﻲ
ﺹ ﻴﺨﺯﻥ ﻓﻲ ﺒﺎﻴﺕ ،Byteﻤﻤﺎ ﻴﻌﻨﻲ ل ﺤﺭﻑ ﻓﻲ ﺍﻟﻨ ﻥﻜّ ﻭﻟﻜﻲ ﺘﺴﺘﻭﻋﺏ ﻤﻘﺩﺍﺭ ﺍﻟﺘﻭﻓﻴﺭ ﻓﻲ ﺍﻟﺤﺠﻡ ،ﻴﺠﺏ ﺃﻥ ﺘﻌﺭﻑ ﺃ ﺝ ﺇﻟﻰ 12ﺒﺎﻴﺕ ،ﻭﺘﻜﺭﺍﺭﻩ ﺃﺭﺒﻊ ﻤﺭﺍﺕ ﻴﻌﻨﻲ ﺃﻨﹼﻪ ﻴﺤﺘﺎﺝ ﺇﻟﻰ 48ﺒﺎﻴﺕ ! ..ﺒﻴﻨﻤﺎ ﺘﺨﺯﻴﻥ ﺹ "ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ" ﻴﺤﺘﺎ ﺃﻥ ﺍﻟﻨ ﺭﻗﻡ ﻴﺼل ﺇﻟﻰ 32000ﻟﻥ ﻴﺤﺘﺎﺝ ﺇﻻ ﺇﻟﻰ ﺒﺎﻴﺘﻴﻥ ﻓﻘﻁ ،ﻤﻤﺎ ﻴﻌﻨﻲ ﺃ ﻥ ﺘﺨﺯﻴﻥ ﺭﻗﻡ 100ﺃﺭﺒﻊ ﻤﺭﺍﺕ ﻴﺤﺘﺎﺝ ﺇﻟﻰ 8ﺒﻴﺘﺎﺕ ﻓﻘﻁ ..ﻁﺒﻌﺎ ﺍﻟﻔﺭﻕ ﻭﺍﻀﺢ. ﻥ ﺇﻨﺸﺎﺀ ﻋﻤﻭﺩ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻴﻘﺘﻀﻲ ﺘﺼﻤﻴﻤﻪ ﻟﻴﺴﺘﻭﻋﺏ ﺃﻁﻭل ﺍﺴـﻡ ﺕ ﺍﻷﻤﺭ ﻴﻘﺘﺼﺭ ﻋﻠﻰ ﻫﺫﺍ ..ﺇ ﻭﻟﻴ ﹶ
ﻤﻥ ﻫﺫﻩ ﺍﻷﺴﻤﺎﺀ ..ﺍﻓﺘﺭﺽ ﺃ ﻥ ﺃﻁﻭل ﺍﺴﻡ ﻟﻤﺅﻟﹼﻑ ﻫﻭ 20ﺤﺭﻓﺎ ،ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻟﻭ ﻜﺎﻥ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻴﺤﺘﻭﻱ ﻋﻠﻰ 30 ﻥ ﻴﺤﺘﺎﺝ ﺇﻟﻰ 600 = 20 × 30000ﺃﻟﻑ ﺒﺎﻴﺕ ،ﺃﻱ 600ﻜﻴﻠـﻭ ﻥ ﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻥ ﻋﻤﻭﺩ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺅّﻟﻔﻴ ﺃﻟﻑ ﻜﺘﺎﺏ ،ﻓﺈ ﺒﺎﻴﺕ! ﺒﻴﻨﻤﺎ ﻟﻭ ﺍﺴﺘﻌﻀﻨﺎ ﻋﻥ ﺫﻟﻙ ﺒﻌﻤﻭﺩ ﺃﺭﻗﺎﻡ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ،ﻓﺈﻨﹼﻪ ﺴﻴﺤﺘﺎﺝ ﺇﻟﻰ 60ﺃﻟﻑ ﻭﺤﺩﺓ ،ﺃﻱ 60ﻜﻴﻠﻭ ﺒﺎﻴﺕ ﻓﻘﻁ. ل ﺍﻷﺤﻭﺍل ﺴﻨﻨﺸﺊ ﻋﻤﻭﺩﺍ ﻷﺴﻤﺎﺀ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﺒﺎﻹﻀﺎﻓﺔ ﻟﻌﻤﻭﺩ ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼـﻑ ﻓـﻲ ﺠـﺩﻭل ﻁﺒﻌﺎ ﺴﺘﺘﺴﺎﺀل :ﻭﻟﻜﻨﹼﻨﺎ ﻓﻲ ﻜ ّ ل ﻤﺅﻟﹼﻑ ﻟﻪ ﻋﺸﺭ ﻜﺘﺏ( ،ﻭﻫﻭ ﻤـﺎ ﻥﻜّ ﻥ ﻋﺩﺩ ﺍﻟﻤﺅّﻟﻔﻴﻥ ﻗﺩ ﻻ ﻴﺯﻴﺩ ﻋﻥ 3ﺁﻻﻑ ﻤﺅﻟﹼﻑ )ﺒﺎﻋﺘﺒﺎﺭ ﺃ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﻨﻌﻡ ،ﻭﻟﻜ ﺴﻴﺤﺘﺎﺝ ﺇﻟﻰ 66 = (2 + 20) × 3000ﻜﻴﻠﻭ ﺒﺎﻴﺕ.
ﻲ ﻟﻤﺴﺎﺤﺔ ﺍﻟﺘﺨﺯﻴﻥ ﻓﻲ ﺤﺎﻟﺔ ﺘﻘﺴﻴﻡ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻋﻠﻰ ﺠﺩﻭﻟﻴﻥ = 126 = 66 + 60ﻜﻴﻠﻭ ﺒﺎﻴﺕ، ﻥ ﺍﻟﻤﺠﻤﻭﻉ ﺍﻟﻜﹼﻠ ﺇﺫﻥ ﻓﺈ ﺃﻱ ﺤﻭﺍﻟﻲ ﺨﻤﺱ ﺍﻟﻤﺴﺎﺤﺔ ﺍﻟﻤﺴﺘﻬﻠﻜﺔ ﻋﻨﺩ ﻭﻀﻊ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻓﻲ ﻨﻔﺱ ﺠﺩﻭل ﺍﻟﻜﺘﺏ! 71
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻥ ﺃﺴﺭﻉ ﺒﻜﺜﻴﺭ ﻋﻨﺩ ﺍﻟﺒﺤﺙ ﻋﻥ ﺭﻗﻡ 100ﻋﻨﻪ ﻋﻨﺩ ﺍﻟﺒﺤﺙ ﻋﻥ ﻫﺫﺍ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺴﺭﻋﺔ ﻋﻤﻠﻴﺔ ﺍﻟﺒﺤﺙ ،ﻓﺎﻟﻜﻤﺒﻴﻭﺘﺭ ﻴﻜﻭ ﺹ "ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ". ﺍﻟﻨ
ﻥ ﺍﻟﺫﻱ ﻴﺩﺨل ﺃﺴﻤﺎﺀ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﺃﺨﻁﺄ ﻭﻜﺘﺏ ﺍﺴﻡ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻜﺎﻟﺘﺎﻟﻲ" :ﺘﻔﻴﻕ ﺍﻟﺤﻜـﻴﻡ".. ﻟﻴﺱ ﻫﺫﺍ ﻓﺤﺴﺏ ..ﺍﻓﺘﺭﺽ ﺃ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻤﺎ ﻋﻠﻴﻪ ﺇﻻ ﺃﻥ ﻴﻌﺩل ﺍﻟﺨﻁﺄ ﻤﺭﺓ ﻭﺍﺤﺩﺓ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﺃﻤﺎ ﻟﻭ ﻜﺎﻨﺕ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻓـﻲ ﻨﻔـﺱ ﻥ ﺘﻜﺭﺍﺭ ﻜﺘﺎﺒﺔ ﺍﺴﻡ ﺍﻟﻤﺅﻟﹼﻑ ﻴﺠﻌل ﺍﺤﺘﻤﺎﻻﺕ ﺍﻟﺨﻁﺈ ﺃﻜﺒﺭ ،ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺘﻀﻴﻴﻊ ﺍﻟﻭﻗﺕ ﻭﺍﻟﺠﻬـﺩ ﻓـﻲ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ،ﻓﺈ ﻜﺘﺎﺒﺘﻬﺎ ،ﻭﺼﻌﻭﺒﺔ ﺘﻌﺩﻴﻠﻬﺎ ﻜﻠﹼﻬﺎ! ﻁﺒﻌﺎ ﻨﻔﺱ ﻫﺫﺍ ﺍﻟﻜﻼﻡ ﻴﻨﻁﺒﻕ ﻋﻠﻰ ﺠﺩﻭل ﺩﺍﺭ ﺍﻟﻨﺸﺭ. ﻗﺎﻋﺩﺓ ﻫﺎﻤّﺔ:
ﺼ ﹰﺔ ﺇﺫﺍ ﻜﺎﻨﺕ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻜﻠﹼﻤﺎ ﻜﺎﻥ ﻤﻤﻜﻨﺎ ،ﻗﻡ ﺒﺘﻘﺴﻴﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﻜﺭﺭ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﺠﺩﻭل ،ﺨﺎ ﻥ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺘﺴﻤﻰ ﺍﻟﺘﻁﺒﻴﻊ ،Normalizationﻭﻟﻬﺎ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻘﻭﺍﻋﺩ ،ﻭﺇﻥ ﻜﺎﻥ ﺘﺴﺘﻬﻠﻙ ﻤﺴﺎﺤﺔ ﺘﺨﺯﻴﻥ ﻜﺒﻴﺭﺓ ..ﺇ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﺴﺘﻨﺘﺎﺠﻬﺎ ﻤﻨﻁﻘﻴﺎ ) ﺘﺩﺭﺱ ﻓﻲ ﻗﺴﻡ ﺍﻟﻤﺎﺩﺓ ﺍﻟﻨﻅﺭﻱ ( . ﺘﺴﻤﻰ ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﺍﻟﺘﻲ ﺘﻌﺘﻤﺩ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﻘﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﺍﻟﻌﻼﺌﻘﻴـﺔ ﺃﻭ ﺒﻘﻭﺍﻋـﺩ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﺍﻟﻤﺘﺭﺍﺒﻁـﺔ :Relational Databases
ﺤﻴﺙ ﻗﺎﻤﺕ ﻫﻨﺎ ﻋﻼﻗﺔ ﺒﻴﻥ ﺠﺩﻭﻟﻴﻥ ﻭﺴﻴﻌﺘﻤﺩ ﺍﺤﺩﻫﻤﺎ ﻋﻠﻰ ﺍﻵﺨﺭ ﻓﻲ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺘﻪ . ﻥ ﺍﻟﺭﺍﺒﻁ ﺒﻴﻨﻬﻤـﺎ ﻫـﻭ ﻥ ﻫﻨﺎﻙ ﻋﻼﻗ ﹰﺔ Relationshipﺒﻴﻥ ﺠﺩﻭﻟﻲ ﺍﻟﻜﺘﺏ ﻭﺍﻟﻤﺅﻟﹼﻔﻴﻥ ،ﺤﻴﺙ ﺇ ﺭﺃﻴﻨﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺃ ﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ ..ﻭﻫﻨﺎ ﻴﺠﺏ ﺃﻥ ﺘﻌﺭﻑ ﻫﺫﻩ ﺍﻟﻤﺼﻁﻠﺤﺎﺕ: ﻴﺴﻤﻰ ﺍﻟﺤﻘل ﺍﻟﻤﺸﺘﺭﻙ ﻓﻲ ﻜﻼ ﺍﻟﺠﺩﻭﻟﻴﻥ "ﺤﻘل ﻤﻔﺘﺎﺤﻲ" .Key fieldﻲ" ،Primary Keyﻭﺫﻟـﻙ ﻷﻨﹼـﻪ ﻤﺘﻔـﺭﺩ ﻴﺴﻤﻰ ﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﺒﺎﺴﻡ "ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺴﺎﺴ ﻲ ﻭﺍﺤﺩ. Uniqueﻏﻴﺭ ﻗﺎﺒل ﻟﻠﺘﻜﺭﺍﺭ ..ﻭﻻ ﻴﺤﺘﻭﻱ ﺍﻟﺠﺩﻭل ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴ
ﻲ" ،Foreign Keyﻷﻨﹼﻪ ﻤﻭﻀﻭﻉ ﻓـﻲ ﻫـﺫﺍ ﻴﺴﻤﻰ ﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ ﻓﻲ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﺒﺎﺴﻡ "ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﻔﺭﻋ ﺍﻟﺠﺩﻭل ﻟﻴﺭﺒﻁﻪ ﺒﺠﺩﻭل ﺁﺨﺭ ..ﻭﻁﺒﻌﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻜﺭﺭ ﻗﻴﻤﺔ ﻫﺫﺍ ﺍﻟﻌﻤﻭﺩ ﺒﺩﻭﻥ ﺃﺩﻨﻰ ﻤﺸﻜﻠﺔ ..ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺤﺘﻭﻯ ﺍﻟﺠﺩﻭل ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻤﻔﺘﺎﺡ ﻓﺭﻋﻲ ﻴﺭﺒﻁﻪ ﺒﻌﺩﺩ ﻤﻥ ﺍﻟﺠﺩﺍﻭل ﺍﻷﺨﺭﻯ. ﻴﺴﻤﻰ ﺠﺩﻭل ﺍﻟﻤﺅّﻟﻔﻴﻥ ﺒﺎﺴﻡ "ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴ ﻲ" ،Masterﻭﺠﺩﻭل ﺃﺴﻤﺎﺀ ﺍﻟﻜﺘﺏ ﺒﺎﺴـﻡ "ﺠـﺩﻭل ﺍﻟﺘﻔﺎﺼـﻴل" ل ﻤﺅﻟﹼﻑ. ،Detailﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺤﺼل ﻤﻨﻪ ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﻜﺘﺏ ﺍﻟﻤﺘﻭﺍﻓﺭﺓ ﻟﻜ ّ
ﺘﺴﻤﻰ ﻋﻤﻠﻴﺔ ﻤﻁﺎﺒﻘﺔ ﺍﻟﺼﻔﻭﻑ ﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ﺍﻟﻤﺘﺭﺍﺒﻁﻴﻥ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺤﻘل ﺍﻟﻤﻔﺘﺎﺤﻲ ،ﻋﻤﻠﻴﺔ "ﺭﺒـﻁ" ..Joinﻤﺜل ﺃﻥ ﺘﺤﺎﻭل ﻤﻌﺭﻓﺔ ﺍﺴﻡ ﻤﺅﻟﹼﻑ ﻜﺘﺎﺏ ﻤﻌﻴﻥ ،ﺃﻭ ﺃﻥ ﺘﺤﺎﻭل ﺃﻥ ﺘﻌﺭﻑ ﻜ ّ ل ﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﻜﺘﺒﻬﺎ ﻨﻔﺱ ﺍﻟﻤﺅﻟﹼﻑ. ﻥ ﻤﺅﹼﻟﻔﹰﺎ ﻭﺍﺤﺩﺍ ﺘﺴﻤﻰ ﺍﻟﻌﻼﻗﺔ ﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ﻋﻼﻗﺔ "ﻭﺍﺤﺩ ﺒﻤﺘﻌﺩﺩ" ،One-to-many Relationshipﻭﺫﻟﻙ ﻷ ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﻟﻪ ﺃﻜﺜﺭ ﻤﻥ ﻜﺘﺎﺏ.
ﻴﻤﻜﻥ ﺃﻥ ﺘﻭﺠﺩ ﻋﻼﻗﺔ "ﻤﺘﻌﺩﺩ ﺒﻤﺘﻌﺩﺩ" ،Many-to-many Relationshipﻭﺫﻟﻙ ﻟﻭ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ﻜﺘﺏ ﺍﺸـﺘﺭﻙﻓﻲ ﺘﺄﻟﻴﻔﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﻤﺅﻟﹼﻑ ..ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺴﻴﻜﻭﻥ ﻟﺩﻴﻨﺎ ﺠﺩﻭل ﺜﺎﻟﺙ ﻫﻭ ﺠﺩﻭل "ﻤﺅﻟﹼﻔﻭ ﺍﻟﻜﺘﺏ" ،ﻴﺤﺘﻭﻯ ﻋﻠﻰ ﻋﻤﻭﺩ ﻴﻤﺜﹼل ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ ﻓﻲ ﺠﺩﻭل ﻋﻨﺎﻭﻴﻥ ﺍﻟﻜﺘﺏ ،ﻭﻋﻤﻭﺩ ﺁﺨﺭ ﻴﻤﺜﹼل ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼـﻑ ﻓـﻲ ﺠـﺩﻭل ﺍﻟﻤـﺅﻟﹼﻔﻴﻥ، ﻜﺎﻟﺘﺎﻟﻲ: 72
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
BookID 1 1 2 3
AuthorID 23 106 8 8
ﺤﻴﺙ ﺍﺸﺘﺭﻙ ﺍﻟﻤﺅّﻟﻔﺎﻥ ﺭﻗﻤﺎ 23ﻭ 106ﻓﻲ ﺘﺄﻟﻴﻑ ﺍﻟﻜﺘﺎﺏ ﺭﻗﻡ ،2ﺒﻴﻨﻤﺎ ﻗﺎﻡ ﺍﻟﻤﺅﻟﹼﻑ ﺭﻗﻡ 8ﺒﺘﺄﻟﻴﻑ ﺍﻟﻜﺘـﺎﺒﻴﻥ ﺭﻗﻤﻲ 2ﻭ ..3ﻫﺫﻩ ﻫﻲ ﻋﻼﻗﺔ ﻤﺘﻌﺩﺩ ﺒﻤﺘﻌﺩﺩ. ﺼﺤّﺔ ﺍﻟﻤﺭﺠﻊ :Referential Integrity ل ﻫﻨﺎﻙ ﺭﻭﺍﻴﺎﺕ ﻓﻲ ﺠﺩﻭل ﺍﻟﻜﺘـﺏ ﺘـﺸﻴﺭ ل ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ؟ ..ﺴﺘﻅ ّ ﻤﺎﺫﺍ ﺴﻴﺤﺩﺙ ﻟﻭ ﺘ ﻡ ﺤﺫﻑ ﺴﺠ ّ ﻲ ﻟﺤﺩﻭﺙ ﺃﺨﻁﺎ ٍﺀ ﻤﺯﻋﺠﺔ ﻓﻲ ﺘﻁﺒﻴﻘﻙ! ﻥ ﻫﺫﺍ ﻭﻀﻊ ﻤﺜﺎﻟ ل ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ ،ﺒﻴﻨﻤﺎ ﻫﻭ ﻤﺤﺫﻭﻑ ..ﺇ ﻟﺴﺠ ّ ﻭﺍﻟﺤلّ؟
ل ﺏ ﺃﻥ ﺘﺭﺍﻋﻲ ﻤﻨﻁﻘﻴﺔ ﻭﺼﺤﺔ ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﻤﺭﺠﻌﻴﺔ Referential Integrityﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ،ﻓﻠﻭ ﻗﻤﺕ ﺒﺤﺫﻑ ﺴﺠ ّ ﻴﺠ ل ﺍﻟﺭﻭﺍﻴﺎﺕ ﻭﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﺃﻟﹼﻔﻬﺎ ﻤﻥ ﺠﺩﻭل ﺍﻟﻜﺘﺏ. ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ ﻤﻥ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ،ﻓﻴﺠﺏ ﺃﻴﻀﺎ ﺃﻥ ﻴﺘ ﻡ ﺤﺫﻑ ﻜ ّ ﻥ ﺒﺭﺍﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﺼﻤﻤﺔ ﻟﺘﺭﻴﺤﻙ ﻤﻥ ﻤﻌﻅﻡ ﺍﻟﻌﻤل ﺍﻟﻴﺩﻭﻱ ،ﻟﻬﺫﺍ ﻓﻬﻲ ﻋﺎ ﻤ ﹰﺔ ﺍﻁﻤﺌﻥ ،ﻓﻜﻤﺎ ﺫﻜﺭﻨﺎ ﻤﻥ ﻗﺒل ،ﻓﺈ ﺴﺘﻌﻴﻨﻙ ﻋﻠﻰ ﺍﻟﺘﺤﻘﹼﻕ ﻤﻥ ﺼﺤﺔ ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﻤﺭﺠﻌﻴﺔ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ،ﻜﻤﺎ ﺴﻨﺭﻯ ﺒﻌﺩ ﻗﻠﻴل. ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺨﺯﻥ ﻴﺘﻡ ﻓﻴﻪ ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻴﺠﺏ ﺃﻥ ﻴﺘﻤﺘﻊ ﻫﺫﺍ ﺍﻟﻤﺨﺯﻥ ﺒﺎﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : 1ـ ﺍﻹﻀﺎﻓﺔ :ﺃﻱ ﺇﻤﻜﺎﻨﻴﺔ ﺇﻀﺎﻓﺔ ﺴﺠﻼﺕ ﺠﺩﻴﺩﺓ ﺇﻟﻰ ﺍﻟﺠﺩﺍﻭل . 2ـ ﺍﻟﺤﺫﻑ :ﺃﻤﻜﺎﻨﻴﺔ ﺤﺫﻑ ﻗﻴﻡ ﻤﻥ ﺍﻟﺠﺩﺍﻭل ﺩﻭﻥ ﺃﻥ ﻴﺅﺜﺭ ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﻘﺎﻋﺩﺓ . ﻼ ﺃﻥ ﻫﻨﺎﻙ ﺤﻘل ﻓﻲ ﺠﺩﻭل 3ـ ﺍﻟﺘﻌﺩﻴل :ﻴﺠﺏ ﺃﻥ ﻨﻜﻭﻥ ﻗﺎﺩﺭﻴﻥ ﻋﻠﻰ ﺘﻌﺩﻴل ﺤﻘﻭل ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﺃﻓﺭﺽ ﻤﺜ ﹰ ﻴﺤﻭﻱ ﻋﻠﻰ ﻋﺩﺩ ﺍﻟﻨﺴﺦ ﻤﻥ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻤﻥ ﺍﻟﻜﺘﺏ ،ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻌﺩل ﻫﺫﺍ ﺍﻟﺤﻘل ﻜﻠﻤﺎ ﺇﺸﺘﺭﻯ ﺃﺤﺩ ﺍﻟﺯﺒﺎﺌﻥ ﻜﺘﺎﺒﹰﺎ ﻤﺎ .
4ـ ﺍﻟﺒﺤﺙ :ﻴﺠﺏ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻠﻭﻤﺔ ﺍﻟﻤﻁﻠﻭﺒﺔ ﺒﺄﺴﺭﻉ ﻭﻗﺕ ﻤﻤﻜﻥ .
5ـ ﺍﻟﺘﺭﺘﻴﺏ ﻭﺍﻟﻔﺭﺯ :ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺇﻅﻬﺎﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ ﻴﺭﻴﺩ ) ﻓﻲ ﺠﺩﻭل ﻴﻤﻜﻥ ﺘﺭﺘﻴﺏ ﺍﻟﻜﺘﺏ ﺤﺴﺏ ﺃﺴﻡ ﺍﻟﻜﺘﺎﺏ ﺃﻭ ﺤﺴﺏ ﺃﺴﻡ ﺍﻟﻤﺅﻟﻑ . ﻋﻠﻴﻙ ﺃﻥ ﺘﻌﺭﻑ ﺃﻴﻀﹰﺎ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻔﺎﺌﺩﺓ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺠﻨﻴﻬﺎ ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﻓﺎﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﻲ ﺍﻟﺘﻲ ﺘﻌﻁﻲ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻭﺍﻟﺘﻲ ﻴﺤﺘﺎﺠﻬﺎ ﻤﺴﺘﺜﻤﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﻴﺘﺨﺫ ﻗﺭﺍﺭﻩ ،ﺘﺴﺘﺨﺩﻡ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺒﻼﺩﻨﺎ ﻓﻲ ﻤﺠﺎل ﺍﻟﻤﺤﺎﺴﺒﺔ ﻭﺇﺼﺩﺍﺭ ﺍﻟﻔﻭﺍﺘﻴﺭ ﻭﻓﻲ ﻤﺠﺎﻻﺕ ﺍﻹﺤﺼﺎﺀ ﻋﻠﻰ ﺃﻜﺜﺭ ﺘﻘﺩﻴﺭ ) ﻗﻠﻴل ﻤﻥ ﺍﻟﺸﺭﻜﺎﺕ ﺘﻌﺭﻑ
ﻼ ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻹﺤﺼﺎﺌﻴﺔ ( ﺒﻴﻨﻤﺎ ﺘﺴﺘﺨﺩﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺨﺎﺭﺝ ﻜﺎﻟﻭﻻﻴﺎﺕ ﺍﻟﻤﺘﺤﺩﺓ ﺍﻷﻤﺭﻴﻜﻴﺔ ﻤﺜ ﹰ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﻜﻡ ﻫﺎﺌل ﻤﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻻ ﻴﻤﻜﻥ ﻹﻨﺴﺎﻥ ﻋﺎﺩﻱ ﺃﻥ ﻴﺘﺼﻭﺭﻩ ،ﺍﻓﺭﺽ ﺃﻥ ﺍﻟﺯﺒﻭﻥ ﺴﻌﻴﺩ ﻗﺩ ﺍﺸﺘﺭﻯ ﻤﻥ ﺍﻟﻤﻜﺘﺒﺔ ﻋﺩﺓ ﻜﺘﺏ ﺘﺘﻌﻠﻕ ﺒﻠﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﺨﻼل ﺴﻨﺔ ،ﻴﺘﻜﻭﻥ ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺃﻥ ﺴﻌﻴﺩ ﻴﺤﺏ ﻗﺭﺍﺀﺓ ﻜﺘﺏ ﺍﻟﺒﺭﻤﺠﺔ 73
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻴﻘﻭﻡ ﺼﺎﺤﺏ ﺍﻟﻤﻜﺘﺒﺔ ﺒﺈﺭﺴﺎل ﺇﻋﻼﻨﺎﺕ ﺇﻟﻰ ﺴﻌﻴﺩ ﻜﻠﻤﺎ ﺼﺩﺭ ﻤﺅﻟﻑ ﺠﺩﻴﺩ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ،ﻟﻨﻔﺭﺽ ﺃﻴﻀﹰﺎ ﺃﻨﻪ ﻓﻲ ﺃﺴﺒﻭﻉ ﻤﺎ ﻜﺜﺭ ﺍﻟﻁﻠﺏ ﻋﻠﻰ ﻜﺘﺎﺏ ﻤﺎ ) Harry potterﺍﻟﻜﺘﺎﺏ ﺍﻟﺫﻱ ﺤﺼﺩ ﺃﻜﺒﺭ ﻤﺒﻴﻌﺎﺕ ﻓﻲ ﺍﻟﻌﺎﻟﻡ ﻓﻲ ﺍﻟﺸﻬﺭ ﺍﻟﺴﺎﺩﺱ
، ( 2003ﻋﻨﺩﻫﺎ ﻴﻘﻭﻡ ﺼﺎﺤﺏ ﺍﻟﻤﻜﺘﺒﺔ ﺒﺘﻌﺩﻴل ﺘﺭﺘﻴﺏ ﺍﻟﻜﺘﺏ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﺭﻓﻭﻑ ﻟﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻋﻠﻰ
ﺍﻟﺭﻓﻭﻑ ﻓﻲ ﻭﺍﺠﻪ ﺍﻟﻤﻜﺘﺒﺔ ).ﻁﺒﻌﹰﺎ ﻻ ﻴﻤﻜﻥ ﺘﻁﺒﻴﻕ ﻫﺫﻩ ﺍﻷﻤﺜﻠﺔ ﻋﻨﺩﻨﺎ ﻫﻜﺫﺍ ،ﻷﻥ ﺃﻱ ﻤﻜﺘﺒﺔ ﻓﻲ ﺍﻟﻭﻻﻴﺎﺕ ﺍﻟﻤﺘﺤﺩﺓ ﻴﻜﻭﻥ ﻟﻬﺎ ﻓﺭﻭﻉ ﻓﻲ ﺃﻜﺜﺭ ﻤﻥ ﻭﻻﻴﺔ ﻭﻤﺩﻴﻨﺔ ﻤﻤﺎ ﻴﻌﻨﻲ ﻋﺩﺩ ﺯﺒﺎﺌﻥ ﻴﻔﻭﻕ ﺍﻟﻤﻠﻴﻭﻥ ﺯﺒﻭﻥ ،ﻤﻤﺎ ﻴﻌﻁﻲ ﺇﺤﺼﺎﺌﻴﺎﺕ ﻭﺍﺴﻌﺔ ﻋﻥ ﺤﺭﻜﺔ ﺍﻟﺒﻴﻊ ﻭﺍﻟﺸﺭﺍﺀ ( ﺨﻁﻭﺍﺕ ﺘﺼﻤﻴﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :
1ـ ﺘﺤﺩﻴﺩ ﺍﻟﻐﺭﺽ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ . 2ـ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ .
3ـ ﺘﺤﺩﻴﺩ ﺤﻘﻭل ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ . 4ـ ﺘﻌﻴﻴﻥ ﺍﻟﺤﻘﻭل ﺍﻟﻤﻔﺘﺎﺤﻴﺔ . 5ـ ﺘﺤﺩﻴﺩ ﺍﻟﻌﻼﻗﺎﺕ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل
6ـ ﺇﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ .
1ـ ﺘﺤﺩﻴﺩ ﺍﻟﻐﺭﺽ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ : ﻻ ﻤﺎﺫﺍ ﻴﺭﻴﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺜﻡ ﻤﻌﺭﻓﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﺠﺏ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ ﻷﻥ ﻴﺠﺏ ﺍﻟﻤﻌﺭﻓﺔ ﺃﻭ ﹰ ﺃﻱ ﺯﻴﺎﺩﺓ ﻓﻲ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺴﻴﻨﺘﺞ ﻋﻨﻪ ﺯﻴﺎﺩﺓ ﻓﻲ ﺤﺠﻡ ﺍﻟﻘﺎﻋﺩﺓ ﺒﺩﻭﻥ ﺴﺒﺏ ،ﻭﺃﻱ ﻨﻘﺹ ﻓﻲ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺴﻴﺘﻁﻠﺏ ﻤﻨﺎ ﺘﻌﺩﻴل ﺍﻟﺠﺩﻭل ﻓﻴﻤﺎ ﺒﻌﺩ ﻭﺍﻟﺫﻱ ﻗﺩ ﻴﺅﺩﻱ ﺒﺩﻭﺭﻩ ﺇﻟﻰ ﺘﻌﺩﻴل ﻓﻲ ﺍﻟﺠﺩﺍﻭل ﺍﻟﻤﺭﺘﺒﺔ ﻭﺒﺎﻟﺘﺎﻟﻲ ﺘﻌﺩﻴل ﺍﻟﻘﺎﻋﺩﺓ ﺒﺎﻟﻜﺎﻤل . 2ـ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﺒﻌﺩ ﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻁﻠﻭﺏ ﺘﺨﺯﻴﻨﻬﺎ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺍﻟﻌﻤل ﻋﻠﻰ ﺘﺨﻁﻴﻁ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﺴﺘﺨﺯﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ . 3ـ ﺘﺤﺩﻴﺩ ﺤﻘﻭل ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ : ﻴﺠﺏ ﺃﻥ ﻻ ﻴﺘﻀﻤﻥ ﺍﻟﺠﺩﻭل ﻤﻌﻠﻭﻤﺎﺕ ﻤﺘﻜﺭﺭﺓ ،ﻜﻤﺎ ﺃﻨﻪ ﻻ ﻴﺠﺏ ﺘﻜﺭﺍﺭ ﺍﻟﻤﻌﻠﻭﻤﺔ ﺍﻟﻭﺍﺤﺩﺓ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ،ﻫﺫﺍ ﻴﻀﻤﻥ ﺘﺤﺩﻴﺙ ﺍﻟﻤﻌﻠﻭﻤﺔ ﻓﻲ ﻤﻜﺎﻨﻬﺎ ﻭﻴﻘﻀﻲ ﻋﻠﻰ ﺍﺤﺘﻤﺎل ﺇﺩﺨﺎل ﻤﻌﻠﻭﻤﺎﺕ ﻤﺘﺒﺎﻴﻨﺔ ﻟﺘﻠﻙ ﺍﻟﻤﻌﻠﻭﻤﺔ ﻓﻴﻤﺎ ﻟﻭ ﻭﺠﺩﺕ ﻓﻲ ﻤﻜﺎﻨﻴﻥ ﻤﺨﺘﻠﻔﻴﻥ .
........ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺩﻟﻔﻲ ..... : 1ـ ﺒﺭﺍﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :ﻫﻲ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻀﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﻭﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻟﻘﺎﻋﺩ ﻤﻌﻁﻴﺎﺕ ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻋﻠﻰ ﻋﻠﻡ ﻜﺎﻑ ﺒﺒﻨﻴﺔ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻌﻬﺎ
) ﺍﻟﺠﺩﺍﻭل ﻭﺍﻟﺤﻘﻭل ( ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺫﻟﻙ ﻤﻥ ﺘﺼﻤﻴﻡ ﺍﻟﻭﺍﺠﻬﺎﺕ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ ) ﺍﺴﺘﻌﺭﺍﺽ ،ﺇﻀﺎﻓﺔ ،ﺤﺫﻑ ،ﺒﺤﺙ . ( .......
2ـ ﺃﻨﻭﺍﻉ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ : 74
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺨﺘﻴﺎﺭ ﻨﻭﻉ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺴﺘﺨﺩﻡ ﻴﻌﺘﻤﺩ ﻋﻠﻰ ﺜﻼﺙ ﻨﻘﺎﻁ ﺭﺌﻴﺴﻴﺔ : 1ـ ﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺤﻭﻴﻪ ﻜل ﺠﺩﻭل .
2ـ ﻜﻡ ﻫﻭ ﻋﺩﺩ ﺍﻟﻤﺴﺘﺨﺩﻤﻴﻥ ﺍﻟﺫﻴﻥ ﺴﻴﺘﺸﺎﺭﻜﻭﻥ ﺍﻟﻌﻤل ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻘﺎﻋﺩﺓ . 3ـ ﺴﺭﻋﺔ ﺍﻷﺩﺍﺀ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ . ﻭﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻤﺒﺩﺃ ﺘﻘﺴﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﻗﺴﻤﻴﻥ : ﺃ ـ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ :
ﺘﻌﻤل ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ ﻋﻠﻰ ﺠﻬﺎﺯ ﻭﺍﺤﺩ ﺃﻭ ﻋﻠﻰ ﺸﺒﻜﺔ ﻤﺤﻠﻴﺔ ﺼﻐﻴﺭﺓ ،ﻭﻫﻲ ﺴﺭﻴﻌﺔ ﻋﻤﻠﻴﹰﺎ ﻭﻟﻜﻨﻬﺎ ﺃﺒﻁﺊ ﻓﻲ ﺤﺎﻻﺕ ﺍﻟﺘﺸﺎﺭﻙ ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ) ﺘﺼﻭﺭ ﻋﺩﺩ ﻤﻥ ﺍﻟﻤﻭﻅﻔﻴﻥ ﻴﻘﻭﻤﻭﻥ ﺒﺈﺩﺨﺎل ﺍﻟﻜﺘﺏ ﺍﻟﺠﺩﻴﺩﺓ ﺍﻟﻭﺍﺼﻠﺔ ﺇﻟﻰ
ﺍﻟﻤﻜﺘﺒﺔ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ،ﻋﻨﺩﻫﺎ ﻋﻠﻰ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻌﻤل ﻋﻠﻰ ﺠﻌل ﺫﻟﻙ ﻤﺘﺎﺤﹰﺎ ﻟﻠﻤﻭﻅﻔﻴﻥ ( ﺘﻘﻭﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ ﻋﻠﻰ ﻗﻔل ﺍﻟﻤﻠﻑ ) ﺍﻟﺠﺩﻭل ( ﻟﻠﻤﺴﺘﺨﺩﻡ ﺍﻟﺤﺎﻟﻲ ﻭﻤﻨﻊ ﺍﻟﺘﻌﺩﻴل ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﻤﻥ ﻗﺒل ﻤﺴﺘﺨﺩﻡ ﺁﺨﺭ ﺤﺘﻰ ﻴﻨﻬﻲ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺤﺎﻟﻲ ﺘﻌﺩﻴﻠﻪ ) ﻴﻭﺠﺩ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻜﺜﻴﺭﺓ ﻟﺘﻁﺒﻴﻕ ﻫﺫﺍ ﺍﻟﻌﻤل ( ﻭﺍﻋﺘﻤﺎﺩ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﻘﻔل ﺠﻌﻠﻬﺎ ﻤﺤﺩﻭﺩﺓ ﺍﻟﺤﺠﻡ ﻨﻭﻋﹰﺎ ﻤﺎ ) ﻫﻨﺎﻙ ﻋﺩﺩ ﺃﻋﻅﻤﻲ ﻟﻠﺴﺠﻼﺕ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﻟﻘﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ( . ﺴﺭﻴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﻀﻌﻴﻔﺔ ﺠﺩﹰﺍ ﻭﻴﻤﻜﻥ ﻜﺴﺭﻫﺎ ﺒﺴﻬﻭﻟﺔ.
ﻜﻤﺜﺎل ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ ﻟﺩﻴﻨﺎ . Paradox, dBASE, FoxPro, and Access. :
ﺏ ـ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻭﺯﻋﺔ :
ﺘﺴﻤﺢ ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﻟﻌﺩﺓ ﻤﺴﺘﺨﺩﻤﻴﻥ ) ﺁﻻﻑ ﺍﻟﻤﺴﺘﺨﺩﻤﻴﻥ ( ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺠﺩﺍﻭل ﻭﺘﺴﺘﺨﺩﻡ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻤﻌﻘﺩﺓ ﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ) ﺠﻤﻴﻊ ﺸﺭﻜﺎﺕ ﺍﻟﻁﻴﺭﺍﻥ ﻓﻲ ﺍﻟﻌﺎﻟﻡ ﻤﻭﺼﻭﻟﺔ ﺇﻟﻰ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻭﺍﺤﺩﺓ( ،ﻗﺎﻋﺩﺓ ﻤﻌﻁﻴﺎﺕ Microsoft SQL Serverﺘﺴﺘﺨﺩﻡ ﺍﻟﻘﻔل ﻋﻠﻰ ﻤﺴﺘﻭﻯ ﺍﻟﺴﺠل ﺃﻱ ﺘﺴﻤﺢ ﻟﻌﺩﺓ ﻤﺴﺘﺨﺩﻤﻴﻥ ﺒﺘﻌﺩﻴل ﻨﻔﺱ ﺍﻟﺠﺩﻭل ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻭﻟﻜﻨﻬﺎ ﻻ
ﺘﺴﻤﺢ ﻟﻬﻡ ﺒﺘﻌﺩﻴل ﻨﻔﺱ ﺍﻟﺴﺠل .
ﻴﻤﻜﻥ ﺃﻥ ﻴﺼل ﺤﺠﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﺫﻩ ﺇﻟﻰ ﻜﻤﻴﺎﺕ ﻫﺎﺌﻠﺔ ) ﺒﻠﻎ ﺤﺠﻡ ﻤﻌﻁﻴﺎﺕ ﺇﺤﺩﻯ ﺸﺭﻜﺎﺕ ﺍﻟﺘﺴﻭﻴﻕ ﻓﻲ ﺃﻤﺭﻴﻜﺎ ( 3.6 TBﻜﻤﺎ ﺃﻨﻪ ﻴﻤﻜﻥ ﻟﻘﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﺫﻩ ﺃﻥ ﺘﻭﺠﺩ ﻋﻠﻰ ﺃﺠﻬﺯﺓ ﻤﺨﺘﻠﻔﺔ . ﺴﺭﻴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﻗﻭﻴﺔ ﺠﺩﹰﺍ ،ﻜﻤﺎ ﺃﻨﻬﺎ ﺘﻌﻁﻲ ﺴﻤﺎﺤﻴﺎﺕ ﻟﻠﻤﺴﺘﺨﺩﻤﻴﻥ ،ﻓﻤﻭﻅﻑ ﺍﻟﻤﻜﺘﺒﺔ ﺍﻟﻤﺴﺌﻭل ﻋﻥ ﺇﺩﺨﺎل ﺃﺴﻤﺎﺀ ﺍﻟﻜﺘﺏ ﻻ ﻴﺤﻕ ﻟﻪ ﺍﻹﻁﻼﻉ ﻋﻠﻰ ﻜﻤﻴﺔ ﺍﻟﻤﺒﻴﻌﺎﺕ ...
ﺘﺸﺘﺭﻙ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﺫﻩ ﺒﺎﺴﺘﺨﺩﺍﻤﻬﺎ ﻟﻠﻐﺔ ﺍﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺒﻨﻴﻭﻴﺔ )Structured Query Language (SQL
ﻜﻤﺜﺎل ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻭﺯﻋﺔ ﻟﺩﻴﻨﺎ InterBase, Oracle, Sybase, Informix, Microsoft SQLserver, : and DB2. 3ـ ﺒﻨﻴﺔ ﺒﺭﻨﺎﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ: ﻴﺒﻥ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ ﺒﻨﻴﺔ ﺘﻁﺒﻴﻕ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﺫﻱ ﻴﺘﺄﻟﻑ ﻤﻥ ﺃ ـ ﻭﺍﺠﻬﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ :ﻭﻫﻲ ﺍﻟﻨﻭﺍﻓـﺫ ـﺴﻤﺢ ـﺭﻤﺞ ﻟﻴـ ـﺼﻤﻤﻬﺎ ﺍﻟﻤﺒـ ـﻲ ﻴـ ﺍﻟﺘـ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ .
75
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺏ ـ ﻋﻨﺎﺼﺭ ﺍﻟﻭﺼﻭل : Data Access ) :ﺘﺴﺘﺨﺩﻡ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺭﺒـﻁ ﺒـﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﻭﺍﺠﻬﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ .
ﺝ ـ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ :ﺘﺯﻭﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﻭﺍﺠﻬﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺠﺩﺍﻭل ﺍﻟﻤﻌﻁﻴﺎﺕ . ﻤﻥ ﺍﻟﻤﻬﻡ ﺃﻥ ﺘﻼﺤﻅ ﺃﻥ ﺍﻟﺘﻁﺒﻴﻕ ) ﺍﻟﺒﺭﻨﺎﻤﺞ ( ﻤﺴﺘﻘل ﻋﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﺤﻴﺙ ﺘﻭﻓﺭ ﺩﻟﻔﻲ ﺃﺩﻭﺍﺕ ﻟﻠﻭﺼـﻭل ﺇﻟـﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻻﻟﻜﻨﻬﺎ ﻻ ﺘﺘﺩﺨل ﺒﻜﻴﻔﻴﺔ ﺘﻌﺎﻤل ﺍﻟﻘﺎﻋﺩﺓ ﻤﻊ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺩﺨﻠﺔ ) ﻋﻨﺩ ﺇﺩﺨﺎل ﺴـﺠل ﺇﻟـﻰ ﺠـﺩﻭل ﻤﻌﻁﻴﺎﺕ Oracleﻻ ﺘﻬﺘﻡ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻭﻻ ﺤﺘﻰ ﺍﻟﻤﺒﺭﻤﺞ ﺒﻜﻴﻔﻴﺔ ﺘﺨﺯﻴﻥ ﻫﺫﺍ ﺍﻟﺴﺠل ﻭﺍﻟﻁﺭﻕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﻤﺘﺒﻌﺔ ﻓﻲ ﺫﻟﻙ ﻭ ﻻ ﺤﺘﻰ ﻁﺭﻕ ﺍﻟﺒﺤﺙ ،ﻓﻌﻤل ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻫﻨﺎ ﻴﻘﺘﺼﺭ ﻋﻠﻰ ﻁﻠﺏ ﺃﻭﺍﻤﺭ ﻤﺤﺩﺩﺓ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻭﺍﻟﺘـﻲ ﺘﻘﻭﻡ ﺒﺩﻭﺭﻫﺎ ﺒﺘﻨﻔﻴﺫﻫﺎ ﻭﺇﻋﺎﺩﺘﻬﺎ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﺩﻋﻰ ﻋﻨﺎﺼﺭ ﺩﻟﻔﻲ ﺍﻟﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺫﻟـﻙ ﺒﻌﻨﺎﺼـﺭ ﺍﻟﻭﺼـﻭل Data
.Access
76
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺭﺍﺒﻌﺔ ﻋﺸﺭ ﺒﻨﺎﺀ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ : ﻴﺄﺘﻲ ﻤﻊ ﺩﻟﻔﻲ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ ﺠﺎﻫﺯﺓ ﺘﺴﺘﺨﺩﻡ ﻜﺄﻤﺜﻠﺔ ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻁﺭﻕ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ،ﻟﺫﻟﻙ ﺴﻨﺘﻌﺎﻤل ﻤﻊ
ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﺤﺘﻰ ﻴﺼﺒﺢ ﺍﻟﻭﻗﺕ ﺠﺎﻫﺯﹰﺍ ﻹﻨﺸﺎﺀ ﻗﻭﺍﻋﺩﻨﺎ ﺍﻟﺨﺎﺼﺔ . ﻤﺜﺎل : 1ﺒﻨﺎﺀ ﻨﻤﻭﺫﺝ ﻓﻴﻪ ﺠﺩﻭل ﻭﺤﻴﺩ :
ﺃﺴﻬل ﻁﺭﻴﻘﺔ ﻟﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﻲ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ) ( Form Wizardﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ . Database ﻟﻠﺒﺩﺀ ﺒﺎﻟﻌﻤل ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺜﻡ ﺃﻏﻠﻕ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ) ﺍﻻﻓﺘﺭﺍﻀﻲ ( ﻋﻥ ﻁﺭﻴﻕ ﺍﻷﻤﺭ File Æ Closeﺃﻭ
ﺍﻟﺘﺤﻭﻴل ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘﺎﺤﻴﻥ Ctrl+F4ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﺘﺴﺄﻟﻙ ﺇﻥ ﻜﻨﺕ ﺘﺭﻴﺩ ﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ
ﺃﺠﺏ ﺒﻼ . ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻨﻜﻭﻥ ﻗﺩ ﺤﺼﻠﻨﺎ ﻋﻠﻰ ﻤﺸﺭﻭﻉ ﺒﺩﻭﻥ ﻨﻤﻭﺫﺝ ﺃﻭﻟﻲ ﻷﻨﻨﺎ ﺴﻨﻨﺸﺊ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻤﻥ ﺨﻼل ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺍﺨﺘﺭ ﺍﻷﻤﺭ Database Æ Form Wizardﻤﻥ ﻗﻭﺍﺌﻡ ﺍﻟﺩﻟﻔﻲ : ﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﺘﺭﻙ ﺍﻟﺨﻴﺎﺭﺍﺕ
ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻭﺴﺘﺘﻌﺭﻑ ﻋﻠﻰ ﺨﻴﺎﺭﺘﻬﺎ ﻻﺤﻘﹰﺎ . ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Next
ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺍﻟﺘﻲ ﺘﻁﺎﻟﺒﻙ
ﺒﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺘﻌﺎﻤل ﻤﻌﻪ ﺍﻟﻨﻤﻭﺫﺝ ،
ﻟﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺃﺨﺘﺭ DBDEMOSﻤﻥ ﺍﻟﻘﺴﻡ ) Drive or Alias Nameﺴﻴﺸﺭﺡ ﻤﻌﻨﻰ ﺫﻟﻙ ﻻﺤﻘ ﹰﺎ( ﺴﺘﻅﻬﺭ ﺠﻤﻴﻊ ﺍﻟﺠﺩﺍﻭل ﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ DBDEMOS
ﺍﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺠﺩﻭل Country.db
77
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻀﻐﻁ ﻋﻠﻰ . Next ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺍﻟﺘﻲ ﺘﻁﺎﻟﺒﻙ ﺒﺘﺤﺩﻴﺩ
ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺇﻅﻬﺎﺭﻫﺎ ﻓﻲ ﺍﻟﺠﺩﻭل .
ﻹﻅﻬﺎﺭ ﺤﻘل ﻤﺎ ﺃﺨﺘﺭ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ > ﻭﻹﻅﻬﺎﺭ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﺨﺘﺭ ﺍﻟﺯﺭ >> ﻟﺘﺭﺍﺠﻊ ﻋﻥ ﺍﺨﻴﺎﺭ ﺤﻘل ﺍﺨﺘﺭ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﺃﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ < ﻟﻠﺘﺭﺍﺠﻊ ﻋﻥ ﺍﺨﺘﻴﺎﺭ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﺨﺘﺭ ﺍﻟﺯﺭ << ﺃﻀﻑ ﺍﻵﻥ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ) >> ( . ﻭﺍﻀﻐﻁ ﻋﻠﻰ Nextﻟﻠﻤﺘﺎﺒﻌﺔ
ﺴﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺘﻁﺎﻟﺒﻙ ﺒﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ : ﺃﻓﻘﻲ ﺃﻭ ﻋﺎﻤﻭﺩﻱ ﺃﻭ ﻓﻲ ﺠﺩﻭل
ﺤﺩﺩ ﺍﻟﺨﻴﺎﺭ ﻓﻲ ﺠﺩﻭل ) ( In grid ﻭﺍﻀﻐﻁ ﻋﻠﻰ Next
ﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺨﻴﺭﺓ ) ﺨﻴﺎﺭﺍﺕ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﺴﻴﺘﻡ ﺘﻭﻀﻴﺤﻬﺎ ﻻﺤﻘﹰﺎ ( ﻓﻌل ﺍﻟﺨﻴﺎﺭ Generate a main form ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻫﻭ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺭﺌﻴﺴﻲ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻙ ﺍﻀﻐﻁ ﻋﻠﻰ Finishﻹﻅﻬﺎﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺘﺎﻟﻲ .
78
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻋﻨﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺘﺎﻟﻲ : ﻋﻨﺼﺮ اﻟﻮﺻﻮل TDataSouce
ﻋﻨﺼﺮ ﺍﻟﺘﺤﻜﻢ TDBnaviagtor
ﻋﻨﺼﺮ اﻟﻮﺻﻮل TTable ﻋﻨﺼﺮ اﻟﺘﺤﻜﻢ DBGrid
ﻟﻘﺩ ﻗﺎﻡ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺒﺈﻨﺸﺎﺀ ﻨﻤﻭﺫﺝ ﻭﻀﻊ ﻋﻠﻴﻪ ﻋﺩﺩ ﻤﻥ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ ﻭﻋﻨﺎﺼﺭ ﺃﺨﺭﻯ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ . ﻨﻔﺫ ﺍﻟﺘﻁﺒﻴﻕ ﺍﻵﻥ ﻭﻻﺤﻅ ﻤﺎ ﻴﻠﻲ :
1ـ ﻋﻨﺎﺼﺭ ﺍﻟﻭﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻻ ﺘﻅﻬﺭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . 2ـ ﻴﻅﻬﺭ ﻋﻨﺼﺭ ﺍﻟﺸﺒﻜﺔ DBGridﺒﻴﺎﻨﺎﺕ ﺍﻟﺠﺩﻭل ﺍﻟﻤﺭﺘﺒﻁ ﻤﻌﻪ ﺤﻴﺙ ﺃﻋﻤﺩﺓ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﻫﻲ ﺃﺴﻤﺎﺀ ﺍﻟﺤﻘﻭل ﻭﺘﻜﻭﻥ ﻅﺎﻫﺭﺓ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻷﻭل ﻭ ﺴﻁﻭﺭ ﻫﺫﻩ ﺍﻟﺠﺩﻭل ﻫﻲ ﺍﻟﺴﺠﻼﺕ ﻭﻴﻭﺠﺩ ﺴﻬﻡ ﺼﻐﻴﺭ ﻴﺩل ﻋﻠﻰ ﺍﻟﺴﺠل ﺍﻷﺯﺭﻕ . ﺍﻟﺤﺎﻟﻲ،ﻜﻤﺎ ﺃﻥ ﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ﻴﻜﻭﻥ ﻤﻔﻌ ﹰ ﺒﺎﻟﻠﻭﻥ ﺍﳊﻘﻮﻝ ﻼ ﺃﲰﺎﺀ
ﻣﺆﺷﺮ إﻟﻰ اﻟﺴﺠﻞ اﻟﺤﺎﻟﻲ اﻟﺴﺠﻞ اﻟﺤﺎﻟﻲ
79
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻴﻤﻜﻥ ﺃﻥ ﻨﻘﻭﻡ ﻨﺤﻥ ﺒﻭﻀﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﻓﺎﺭﻍ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﺍﻷﺸﻜﺎل. ﺴﻨﺸﺭﺡ ﺍﻵﻥ ﻜل ﻋﻨﺼﺭ ﻤﻥ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻠﻰ ﺤﺩﻯ :
ﺍﻟﻌﻨﺼﺭ : Table
ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻠﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻫﻭ ﻋﻨﺼﺭ ﻤﻥ ﻤﺠﻤﻭﻋﺔ ﻋﻨﺎﺼﺭ ﺘﺩﻋﻰ DataSetﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻋﻨﺎﺼﺭ ﻟﻬﺎ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﺤﺭﻙ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻟﻠﻭﺼﻭل ﻟﻠﺠﺩﺍﻭل ﻭﻤﻥ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ . Table, Query, AdoTable, AdoQuery, ﻓﻲ ﻤﺜﺎﻟﻨﺎ ﻴﺤﺘﻭﻱ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻠﻰ ﻋﻨﺼﺭ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﻨﻭﻉ Tableﻭﻗﺩ ﺭﺒﻁﻪ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ DBDEMOS DataBaseName
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ
) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻻ ﻤﻨﻬﺎ ﺒﺩ ﹰ TableName
country.db
ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ
Name
Table1
ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ) ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﺴﻡ ﻜﺄﻱ ﻋﻨﺼﺭ ﺁﺨﺭ ﻓﻲ ﺩﻟﻔﻲ
Active
False
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ
(
ﺍﻟﻌﻨﺼﺭ : DataSource ﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﻭﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻠﺭﺒﻁ ﺒﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻟﻭﺼﻭل DataSetﻭﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ ﻭﻟﻪ ﺍﻟﺨﺼﺎﺌﺽ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ AutoEdit
True
Dataset
Table1
Name
Datasource1
ﻤﻼﺤﻅﺎﺕ
ﺍﻟﻘﻴﻤﺔ
ﺘﺠﻌل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ) ﺃﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﻌﺩﻴل ( ﺃﻤﺎ
ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﺴﺘﻌﺭﺍﺽ ) ﻗﺭﺍﺀﺓ ﺩﻭﻥ ﺘﻐﻴﻴﺭ ( ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻘﻁ ﻓﻨﻌﻁﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ False
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻌﻪ ﺍﻟـ Datasource ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ . ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ) ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﺴﻡ ﻜﺄﻱ ﻋﻨﺼﺭ ﺁﺨﺭ ﻓﻲ ﺩﻟﻔﻲ 80
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
( ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ ) : ( DBGrid ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻌﺭﺽ ﻭﺘﺤﺭﻴﺭ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ Datasourceﻟﻴﺤﺼل ﻤﻨﻪ ﻋﻠﻰ ﺃﺴﻤﺎﺀ ﺍﻟﺤﻘﻭل ﻭﻗﻴﻡ ﺍﻟﺠﺩﻭل ﻭﺃﻋﻁﺎﻩ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻟﺨﺎﺼﺔ Datasource
ﺍﻟﻘﻴﻤﺔ Datasource1
Name
Dbgrid1
ﻤﻼﺤﻅﺎﺕ ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺯﻭﺩ DBGridﺒﺎﻟﻤﻌﻁﻴﺎﺕ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ
ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ : DBNavigator ﻴﺤﻭﻱ ﻫﺫﻩ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻷﺯﺭﺍﺭ ﻤﻬﻤﺘﻬﺎ ﺘﺤﺭﻴﻙ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﻭﺍﻟﻘﻴﺎﻡ ﺒﺄﻋﻤﺎل ﺍﻹﻀﺎﻓﺔ ﻭﺍﻟﺤﺫﻑ ﻭﺍﻟﺘﺭﺍﺠﻊ ﻋﻥ ﺍﻟﺘﻌﺩﻴل ﻭﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟـ Datasourceﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ ، DataSourceﺍﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻠﺨﺎﺼﺔ ShowHintﺍﻟﺘﺎﺒﻌﺔ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ .
ﻴﻀﻴﻑ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺃﻴﻀ ﹰﺎ ﺴﻁﺭ ﺒﺭﻤﺠﻲ ﻭﺍﺤﺩ ﻓﻲ ﺤﺩﺙ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ ﻫﻭ Table1.Openﻟﻔﺘﺢ ﺍﻟﺠﺩﻭل ﻭﺇﻅﻬﺎﺭ ﺴﺠﻼﺘﻪ ﻭﻴﻤﻜﻥ ﺍﻻﺴﺘﻌﺎﻀﺔ ﻋﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻋﻁﺎﺀ ﺍﻟﺨﺎﺼﺔ Activeﻟﻠﻌﻨﺼﺭ Tableﺍﻟﻘﻴﻤﺔ . True ﻤﺤﺭﻙ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ) : ( Database Engine ﻤﺤﺭﻙ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻴﺤﺩﺩ ﺃﺴﻠﻭﺏ ﺘﻌﺎﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻊ ﺍﻟﻘﺎﻋﺩﺓ ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻜﺘﺒﺎﺕ ﺠﺎﻫﺯﺓ ﺘﺭﺒﻁ ﺒﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻟﺩﻟﻔﻲ ﻭﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻤﻥ ﺃﻫﻡ ﺍﻟﻤﺤﺭﻜﺎﺕ ﻓﻲ ﺩﻟﻔﻲ :
1ـ : Borland Database Engine : BDE
ﻴﺘﻌﺎﻤل ﻫﺫﺍ ﺍﻟﻤﺤﺭﻙ ﻤﻊ ﻋﻨﺎﺼﺭ ﺍﻟﻭﺼﻭل ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Bdeﻭﻴﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﻨﻭﻉ Pardoxﺃﻭ Dbaseﻭﻏﻴﺭﻫﺎ ﻜﺜﻴﺭ .
2ـ : Microsoft ActiveX Data Objects : ADO ﻴﺘﻌﺎﻤل ﻫﺫﺍ ﺍﻟﻤﺤﺭﻙ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Adoﻭﻴﺴﺘﺨﺩﻡ ﻤﻊ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ ﻤﺜل Accessﺃﻭ SQL SERVERﺃﻭ . Oracle
3ـ :Interbase
ﻴﺘﻌﺎﻤل ﻫﺫﺍ ﺍﻟﻤﺤﺭﻙ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Interbase Expressﻭﻴﺴﺘﺨﺩﻡ ﻤﻊ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ
Interbaseﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺘﺤﻤﻴﻠﻬﺎ ﻤﻥ ﺍﻟﻘﺭﺹ ﺍﻟﺫﻱ ﺘﻭﺠﺩ ﻋﻠﻴﻪ ﺩﻟﻔﻲ . ﻤﺜﺎل : 2ﺒﻨﺎﺀ ﻨﻤﻭﺫﺝ ﻹﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﺃﻋﺩ ﺨﻁﻭﺍﺕ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺤﺘﻰ ﺘﺼل ﺇﻟﻰ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺘﻁﺎﻟﺒﻙ ﺒﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﻤﻌﻁﻴﺎﺕ ) ﺍﺨﺘﺭ ﻤﻨﻬﺎ ( Vertical ﻭﺴﺘﻅﻬﺭ ﺒﻌﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺘﺴﺄﻟﻙ ﻋﻥ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﻋﻨﺎﻭﻴﻥ ﺍﻟﺤﻘﻭل ) ﺍﺨﺘﺭ ﻤﻨﻬﺎ ( Leftﺃﻀﻐﻁ ﻋﻠﻰ Nextﺜﻡ Finish ﻟﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺘﺎﻟﻲ :
81
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻻ ﻤﻥ ﺍﻟﺠﺩﻭل ﻭﺘﻅﻬﺭ ﻻﺤﻅ ﻅﻬﻭﺭ ﺤﻘﻭل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺩ ﹰ ﻫﺫﺍ ﺍﻟﺤﻘﻭل ﻓﻲ ﺍﻟﻌﻨﺎﺼﺭ Dbeditﻭﺍﻟﺘﻲ ﺘﺭﺘﺒﻁ ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﺒﺭ ﺍﻟﺨﺎﺼﺔ Datasource
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺴﺘﺨﺩﻡ DBNavegatorﻟﻠﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺤﻘﻭل ) ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻫﻭ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﺘﻅﻬﺭ ﻗﻴﻤﻪ ﺩﺍﺨل ﺍﻟﺤﻘﻭل (
ﺃﻀﻑ ﻋﻨﺼﺭ DBGridﻤﻥ ﺍﻟﺼﻔﺤﺔ Datacontroleﻭﺃﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ Datasourceﺍﻟﻘﻴﻤﺔ DataSource1 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺤﺎﻭل ﺍﻟﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺴﺠﻼﺕ ﻓﻲ DBGridﺒﺎﻟﻔﺄﺭﺓ ﻭﻻﺤﻅ ﻜﻴﻑ ﺘﺘﻐﻴﺭ ﻗﻴﻡ ﺍﻟﺤﻘﻭل ﻓﻲ DBEditﺘﺒﻌﹰﺎ ﻟﺘﻐﻴﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ . ﻤﺜﺎل :3ﺒﻨﺎﺀ ﻨﻤﻭﺫﺝ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺭﺌﻴﺴﻲ ﺘﻔﺼﻴﻠﻲ ) :( Master \ Detail Form ﻭﺠﺩﻨﺎ ﺴﺎﺒﻘﹰﺎ ﻓﻲ ﻤﺜﺎل ﺍﻟﻤﻜﺘﺒﺔ ﻜﻴﻑ ﻴﻤﻜﻥ ﻟﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺠﺩﺍﻭل ﺃﻥ ﺘﺭﺘﺒﻁ ﻤﻊ ﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺽ ﻟﺘﺸﻜل ﻗﺎﻋﺩﺓ ﻤﻌﻁﻴﺎﺕ، ﻜﻤﺎ ﻭﺠﺩﻨﺎ :ﻜﻴﻑ ﺃﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﻫﻭ ﺠﺩﻭل ﺭﺌﻴﺴﻲ ﺒﻴﻨﻤﺎ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻫﻭ ﺠﺩﻭل ﺜﺎﻨﻭﻱ ﻭﻗﻠﻨﺎ ﺃﻥ ﻫﺫﻩ ﻫﻲ ﻋﻼﻗـﺔ ﺭﺃﺱ ﺒﺄﻁﺭﺍﻑ ﺃﻭ ﻭﺍﺤﺩ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺔ ﻟﻨﻔﺘﺭﺽ ﺍﻵﻥ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺤﺎﺠﺔ ﻟﻤﻌﺭﻓﺔ ﺠﻤﻴﻊ ﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﻜﺘﺒﺕ ﻤـﻥ ﻗﺒـل ﻤﺅﻟﻑ ﻤﺎ ،ﺘﺩﻋﻰ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﻲ ﺘﻘﺩﻡ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺒﺎﻟﻨﻤﺎﺫﺝ ﺫﺍﺕ ﺍﻟﻨﻭﻉ ﺍﻟﺭﺌﻴﺴﻲ ﺘﻔﺼﻴﻠﻲ. ﺴﻨﺴﺘﺨﺩﻡ ﻓﻲ ﻤﺜﺎﻟﻨﺎ ﺍﻵﻥ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﻹﻨﺸﺎﺀ ﻨﻤﺎﺫﺝ ﻤﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻭﺴﻨﻌﺘﻤﺩ ﻋﻠﻰ ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ Customer.db
ﻭﺍﻟﺠﺩﻭل ﺍﻟﺘﻔﺼﻴﻠﻲ Orders.Dbﻭﻗﺒل ﺍﻟﺒﺩﺀ ﺴﺄﺸﺭﺡ ﻜل ﻤﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ .
ﺠﺩﻭل ﺍﻟﺯﺒﺎﺌﻥ : Customer.db :ﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﺯﺒﺎﺌﻥ ) ﺭﻗﻡ ﺍﻟﺯﺒﻭﻥ ،ﺍﻷﺴـﻡ ،ﺍﻟﻌﻨـﻭﺍﻥ ،ﺍﻟﻤﺩﻴﻨـﺔ ، ﺍﻟﻬﺎﺘﻑ ، ( ......ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ﻓﻴﻪ ﻫﻭ ﺭﻗﻡ ﺍﻟﺯﺒﻭﻥ. ﺠﺩﻭل ﺍﻟﻁﻠﺒﺎﺕ : Orders.dbﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻁﻠﺒﺎﺕ ﺍﻟﺯﺒﺎﺌﻥ ) ﺭﻗﻡ ﺍﻟﻁﻠﺒﻴﺔ ،ﺭﻗﻡ ﺍﻟﺯﺒﻭﻥ ،ﺘﺎﺭﻴﺦ ﺍﻟﺘـﺴﻠﻴﻡ ، ﻁﺭﻴﻘﺔ ﺍﻟﺘﺴﻠﻴﻡ ( ....
ﻤﻥ ﺍﻟﻭﺍﻀﺢ ﺃﻥ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ﻟﻬﺫﺍ ﺍﻟﺠﺩﻭل ﻫﻭ ﺭﻗﻡ ﺍﻟﻁﻠﺒﻴﺔ ،ﻜﻤﺎ ﺃﻥ ﻫﻨﺎﻙ ﻤﻔﺘﺎﺡ ﺜﺎﻨﻭﻱ ﻫﻭ ﺭﻗﻡ ﺍﻟﺯﺒﻭﻥ ( . ﺴﻨﻨﺸﺊ ﺍﻵﻥ ﻨﻤﻭﺫﺠﹰﺎ ﻴﻅﻬﺭ ﻓﻴﻪ ﺠﺩﻭﻟﻲ ﺍﻟﺯﺒﺎﺌﻥ ﻭﺍﻟﻁﻠﺒﻴﺎﺕ ﻭﻟﻜﻥ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻅﺎﻫﺭﺓ ﻓﻲ ﺴﺠل ﺍﻟﻁﻠﺒﻴﺎﺕ ﻫﻲ ﺍﻟﺴﺠﻼﺕ
ﺍﻟﺘﺎﺒﻌﺔ ﻟﻠﺯﺒﻭﻥ ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﺠﺩﻭل ﺍﻟﺯﺒﺎﺌﻥ . ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﺍﹰ ،ﺃﻏﻠﻕ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﻓﺘﺭﺍﻀﻲ ،ﺍﺨﺘﺭ ﺍﻷﻤﺭ DatabaseÆ Form Wizard 82
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﻭﻟﻰ ﻟﻠﻤﻌﺎﻟﺞ ﺤﺩﺩ ﺍﻟﺨﻴﺎﺭ Create Master Detail Formﻤﻥ ﺍﻟﻘﺴﻡ Form Optionﻭﺍﻀﻐﻁ ﻋﻠـﻰ Next ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺜﺎﻨﻴﺔ ﺘﻁﺎﻟﺒﻙ ﺒﺈﺩﺨﺎل ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ ﺤﺩﺩ DBDEMOSﻓﻲ Driver or alias nameﻭﺍﺨﺘﺭ ﺍﻟﺠـﺩﻭل Customer.dbﻭﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺘﻠﻴﻬﺎ ﺤﺩﺩ ﺠﻤﻴﻊ ﺤﻘﻭل ﻫﺫﺍ ﺍﻟﺠﺩﻭل ،ﻭﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺤـﺩﺩ ﻁﺭﻴﻘـﺔ ﺍﻟﻌـﺭﺽ ﺒﺠﺩﻭل . in a grid
ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻁﺎﻟﺒﻙ ﺒﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺍﻟﺘﻔﺼﻴﻠﻲ ﺃﺨﺘﺭ Ordersﻤﻥ DBDEMOSﻭﺍﺨﺘﺭ ﺒﻌـﺩﻫﺎ ﺠﻤﻴـﻊ ﺍﻟﺤﻘـﻭل ﻭﻁﺭﻴﻘﺔ ﺍﻟﻌﺭﺽ ﺠﺩﻭل ﺘﻅﻬﺭ ﺒﻌﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ) ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺴﻡ Available Indexesﺍﻟﻘﻴﻤﺔ CustNo ﻭﺍﺨﺘـﺭ ﻤـﻥ ﺍﻟﻼﺌﺤـﺔ Master Fieldsﺍﻟﻘﻴﻤـﺔ CustNo ﻭﻤﻥ ﺍﻟﻼﺌﺤﺔ Detail Fieldsﺍﻟﻘﻴﻤﺔ CustNo
ﺇﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ Addﺜﻡ ﻋﻠﻰ Nextﺜﻡ ﻋﻠـﻰ Nextﻤﺭﺓ ﺃﺨﺭﻯ .ﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﻤﻭﺫﺝ ﺭﺌﻴﺴﻲ ﺘﻔﺼﻴﻠﻲ : ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﻨﻘل ﺒﻴﻥ ﺤﻘﻭل ﺍﻟﺠﺩﻭل Masterﻭﻻ ﺤﻅ ﺍﻟﺘﻐﻴﺭﺍﺕ ﻋﻠﻰ ﺍﻟﺠﺩﻭل ... Detail
ﻟﻘﺩ ﺃﻀﺎﻑ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﻫﻨﺎ ﻋﻨﺼﺭﻱ Tableﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻋﻨﺼﺭﻱ Datasourceﻭﻗﺎﻡ ﺒـﺎﻟﺭﺒﻁ ﺒﻴﻨﻬﻤـﺎ ﻓـﻲ ﺍﻟﺤﻘﻭل ﺍﻟﺘﺎﻟﻴﺔ : ﻓﻲ ﺍﻟﻌﻨﺼﺭ Tabel2 ﺍﻟﺨﺎﺼﺔ MasterSource
ﺍﻟﻘﻴﻤﺔ Datasource1
IndexName
CustNo
ﺍﻟﺸﺭﺡ ﻴﻌﺭﻑ ﻋﻨﺼﺭ DataSourceﺍﻟﻤﺭﺘﺒﻁ ﻤﻊ ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ ﻴﺤﺩﺩ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﺴﻴﻘﻭﻡ ﺒﺘﺭﺘﻴﺏ ﻭﻓﻬﺭﺴﺔ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺠﺩﻭل
ﺒﻌﺩ ﺃﻥ ﺘﻌﻠﻤﻨﺎ ﻜﻴﻔﻴﺔ ﺘﻨﻔﻴﺫ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺴﻨﻌﻴﺩ ﺍﻷﻤﺜﻠﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺎﺼﺭ ﻤﺒﺎﺸﺭﺓ : ﻤﺜﺎل : 1
ﺴﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻌﺭﺽ ﺍﻟﺠﺩﻭل Country.dbﺍﻟﻤﻭﺠﻭﺩ ﻀﻤﻥ ﺍﻟﻘﺎﻋﺩﺓ DBDemos ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ : 1ـ ﺍﻟﻌﻨﺼﺭ Tableﻤﻥ ﺍﻟﺼﻔﺤﺔ BDE
_ 2ﺍﻟﻌﻨﺼﺭ DataSourceﻤﻥ ﺍﻟﺼﻔﺤﺔ . Data Access 83
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
3ـ ﺍﻟﻌﻨﺼﺭ DBGridﻭ DBNavigatorﻤﻥ ﺍﻟﺼﻔﺤﺔ . Data Control ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Tableﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ DBDEMOS DataBaseName
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ
) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻻ ﻤﻨﻬﺎ ﺒﺩ ﹰ TableName
country.db
ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ
Active
True
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSourceﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ AutoEdit
True
Dataset
Table1
ﻤﻼﺤﻅﺎﺕ
ﺍﻟﻘﻴﻤﺔ
ﺘﺠﻌل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ) ﺃﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﻌﺩﻴل ( ﺃﻤﺎ
ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﺴﺘﻌﺭﺍﺽ ) ﻗﺭﺍﺀﺓ ﺩﻭﻥ ﺘﻐﻴﻴﺭ ( ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻘﻁ ﻓﻨﻌﻁﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ False
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻌﻪ ﺍﻟـ Datasource ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ .
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DBGridﻭﺍﻟﻌﻨﺼﺭ DBNavigatorﺍﻟﺨﺎﺼﺔ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ Datasource
ﺍﻟﻘﻴﻤﺔ Datasource1
ﻤﻼﺤﻅﺎﺕ ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺯﻭﺩ DBGridﺒﺎﻟﻤﻌﻁﻴﺎﺕ
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﻤﺜﺎل : 2
ﺇﻨﺸﺎﺀ Master Detail Formﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺞ :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭﻱ Tableﻭﻋﻨﺼﺭﻱ DataSourceﻭﻋﻨﺼﺭﻱ DBGridﻭﻋﻨﺼﺭ
. DBNavigator
1ـ ﺭﺒﻁ ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ ) : ( Master ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ DBDEMOS DataBaseName
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ ) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻻ ﻤﻨﻬﺎ ﺒﺩ ﹰ 84
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
TableName Active
http://www.alshater.net
Customers.dbﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ True ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSource1ﺍﻟﺨﺎﺼﺔ DataSetﺍﻟﻘﻴﻤﺔ . Table1 ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭﻴﻥ DBGrid1ﻭ DBNavigator1ﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ . DataSource1 2ـ ﺭﺒﻁ ﺍﻟﺠﺩﻭل ﺍﻟﺘﻔﺼﻴﻠﻲ : Detail ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table2ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ DBDEMOS DataBaseName
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ ) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻻ ﻤﻨﻬﺎ ﺒﺩ ﹰ
TableName
order.db
ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ
Active
True
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSource2ﺍﻟﺨﺎﺼﺔ DataSetﺍﻟﻘﻴﻤﺔ . Table2 ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭﻴﻥ DBGrid2ﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ . DataSource2 ﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺭﺒﻁﻨﺎ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻊ ﺍﻟﺠﺩﻭل ﻭﻵﻥ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻌﻠﻡ ﺍﻟﺠﺩﻭل Table2ﺃﻨﻪ ﺠﺩﻭل ﺘﻔﺼﻴﻠﻲ ﻟﻠﺠﺩﻭل . Table1 ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table2ﺍﻟﺨﺎﺼﺔ MasterSourceﺍﻟﻘﻴﻤﺔ Datasouce1ﻭ ﺍﻟﺨﺎﺼﺔ MasterFieldﺍﻟﻘﻴﻤﺔ CustNo
85
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺨﺎﻤﺴﺔ ﻋﺸﺭ ﺒﻨﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ : ﻴﻭﺠﺩ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺒﺭﺍﻤﺞ ﺒﻨﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻴﻌﺘﻤﺩ ﺍﻷﻤﺭ ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻠﺒﻨﺎﺀ ﻗﺎﻋﺩﺓ ﻤﺤﻠﻴـﺔ ﺘﺴﺘﺨﺩﻡ ﺠﺩﺍﻭل ﺒﺎﺭﺩﻭﻜﺱ ) ( Paradoxﻫﻨﺎﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ Borland Paradoxﻭﻟﺒﻨﺎﺀ ﺠـﺩﺍﻭل ﺘـﺴﺘﺨﺩﻡ Oracle
ﻫﻨﺎﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ Oracle 9iﻭﻫﻜﺫﺍ ﻭﻗﺩ ﺯﻭﺩﺘﻨﺎ ﺩﻟﻔﻲ ﺒﺄﺩﺍﺓ ﺴﻬﻠﺔ ﻹﻨﺸﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﻌﺩﻴل ﺍﻟﺠﺩﺍﻭل ﺒﺩﻭﻥ ﺍﻟﻌـﻭﺩﺓ ﺇﻟﻰ ﺘﻠﻙ ﺍﻟﺒﺭﺍﻤﺞ ،ﺤﻴﺙ ﻴﻭﺠﺩ ﻀﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺃﺩﻭﺍﺕ ﺩﻟﻔﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﺍﻟﺫﻱ ﻴﻤﻜﻥ ﻋﻥ ﻁﺭﻴﻘـﺔ ﺘﺼﻤﻴﻡ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺃﻨﻭﺍﻉ ﺠﺩﺍﻭل ﺍﻟﺒﻴﺎﻨﺎﺕ . : DataBase Desktop
ﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻟﺘﻌﻠﻡ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻫﻲ ﻨﺒﺩﺃ ﺒﻤﺜﺎل : ﺍﻟﻤﻁﻠﻭﺏ ﺇﻨﺸﺎﺀ ﺠﺩﺍﻭل ﺘﺘﻌﻠﻕ ﺒﺤﺭﻜﺔ ﺍﻟﺭﻜﺎﺏ ﻓﻲ ﺍﻟﻤﻁﺎﺭ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺠﺩﺍﻭل ﺍﻟﺒﺎﺭﺩﻭﻜﺱ ﻭﻫﺫﻩ ﺍﻟﺠﺩﺍﻭل ﻫﻲ : GoFrom ﺒﻠﺩ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻨﺹ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ) ( Passengers ArriveTo ﺍﻟﺸﺭﺡ ﻨﻭﻉ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﺤﻘل ﺒﻠﺩ ﺍﻟﻭﺼﻭل ﻨﺹ Pno
ﻋﺩﺩ *
ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ
GoTime
ﺘﺎﺭﻴﺦ ﻭﻭﻗﺕ
ﻭﻗﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ
Pname
ﻨﺹ
ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ
ArriveTime
ﺘﺎﺭﻴﺦ ﻭﻭﻗﺕ
ﻭﻗﺕ ﺍﻟﻭﺼﻭل
Nationality
ﻨﺹ
ﺍﻟﺠﻨﺴﻴﺔ
CardCount
ﻋﺩﺩ
ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ
PassNo
ﻋﺩﺩ
ـﻭﺍﺯ ـﻡ ﺠـ ﺭﻗـ
ﺍﻟﻤﺘﻭﻓﺭﺓ
ﺍﻟﺴﻔﺭ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ﻭﺍﻟﺭﺤﻼﺕ TripsAndPassengers ﺍﻟﺸﺭﺡ ﻨﻭﻉ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﺤﻘل Pno ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻋﺩﺩ TripNo ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻋﺩﺩ SeatNo
ﻋﺩﺩ
ﺭﻗﻡ ﺍﻟﻤﻘﻌﺩ
ClassNo
ﻋﺩﺩ
ﺭﻗﻡ ﺍﻟﺼﻑ
ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ) ( Trips ﺍﺴﻡ ﺍﻟﺤﻘل TripNo Company
ﻨﻭﻉ ﺍﻟﺤﻘل
ﺍﻟﺸﺭﺡ
ﻋﺩﺩ *
ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ
ﻨﺹ
ﺍﺴﻡ ﺍﻟﺸﺭﻜﺔ 86
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﺩل ﺍﻟﻨﺠﻤﺔ ) * ( ﻋﻠﻰ ﺃﻥ ﻫﺫﺍ ﺍﻟﺤﻘل ﻤﻔﺘﺎﺡ ﺭﺌﻴﺴﻲ . ﻭﺘﺒﻴﻥ ﺍﻷﺴﻬﻡ ﻁﺭﻴﻘﺔ ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل .
ﺭﻗﻡ ﺍﻟﻤﻘﻌﺩ ﻴﺠﺏ ﺃﻥ ﻴﺄﺨﺫ ﻗﻴﻤﺔ ﺒﻴﻥ 1ﻭ . 200
1ـ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺃﻨﺸﺄ ﺍﻟﻔﻬﺭﺱ AirLinesﻋﻠﻰ ﺍﻟﻘﺭﺹ Cﺤﻴﺙ ﺴﻴﺘﻡ ﻭﻀﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﻬﺭﺱ . 2ـ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ : Database Desktop ﻴﻤﻜﻨﻙ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﺎﺭﺝ ﺇﻁﺎﺭ ﺩﻟﻔﻲ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ Start Æ Programs ÆBorland Delphi ÆDatabase Desktop ﺃﻭ ﻤﻥ ﺩﺍﺨل ﺩﻟﻔﻲ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ Tools Æ Database Desktop
2ـ ﺘﺤﺩﻴﺩ ﻓﻬﺭﺱ ﺍﻟﻌﻤل :
ﺇﻥ ﻓﻬﺭﺱ ﺍﻟﻌﻤل ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﻌﻨﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﺴﻴﺒﺤﺙ ﻓﻴـﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﺍﻟﻤﻠﻔﺎﺕ ﻭﺴﻴﻜﻭﻥ ﻫﻭ ﺍﻟﻔﻬﺭﺱ ﺍﻻﻓﺘﺭﺍﻀـﻲ ﻭﺴـﻴﻅﻬﺭ ﻀﻤﻥ ﺼﻨﺩﻭﻗﻲ ﻓﺘﺢ ﻭﺤﻔﻅ ﺍﻟﻤﻠﻔﺎﺕ ،ﻭﻟﺘﺤﺩﻴﺩ ﺍﻟﻔﻬﺭﺱ ﺍﻻﻓﺘﺭﺍﻀـﻲ ﺍﺨﺘﺭ ﺍﻷﻤﺭ File Æ Working Directory ﻓﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ،ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟـﺯﺭ Browseﻭﺍﺨﺘـﺭ \C: AirLines ﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ okﻟﻠﺨﺭﻭﺝ .
3ـ ﺘﻌﺭﻴﻑ ﺍﺴﻡ ﺒﺩﻴل : Alias ﻗﻠﻨﺎ ﺃﻥ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﺴﻡ ﻴـﺴﺘﺨﺩﻤﻪ ﺍﻟﻨﻅـﺎﻡ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻟﺘﻌﺭﻴﻑ ﺍﺴﻡ ﺒـﺩﻴل ﻟﻠﻔﻬﺭﺱ C:\AirLinesﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ Alias Manger ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Toolsﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktop : ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Newﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﻼﺌﺤﺔ Database Alias ﺍﻟﺴﻠﺴﻠﺔ ) ( Travel
ﻭﻓﻲ ﺍﻟﻼﺌﺤﺔ Driver Typeﺍﻟﻘﻴﻤﺔ ) STANDARD 87
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﻼﺌﺤﺔ ﻨﻭﻉ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻭﺘﻌﻁﻰ ﺍﻟﻘﻴﻤﺔ Standardﺇﺫﺍ ﻜﺎﻨﺕ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨـﺎﺕ ﻤـﻥ ﺍﻟﻨـﻭﻉ ﺒﺎﺭﺍﺩﻭﻜﺱ (. ﺤﺩﺩ ﺒﻌﺩﻫﺎ ﻤﺴﺎﺭ ﺍﻟﻘﺎﻋﺩﺓ C:\AirLiensﻓﻲ ﺍﻟﻘﺴﻡ ) Pathﻴﻤﻜﻥ ﺃﻥ ﺘﻜﺘﺒﻪ ﻜﺘﺎﺒﺔ ﺃﻭ ﺘﺨﺘﺎﺭ ﺍﻟﺯﺭ ( Browse ﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Keep Newﻹﻀﺎﻓﺔ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﺠﺩﻴﺩﺓ ﺇﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Okﺴﺘﻅﻬﺭ ﺭﺴﺎﻟﺔ ﺘﺴﺄﻟﻙ ﺇﻥ ﻜﻨﺕ ﺘﺭﻴﺩ ﺤﻔﻅ ﺍﻟﺘﻐﻴﺭﺍﺕ ﻓﻲ IDAPI32.CFGﻋﻠﻴﻙ ﺃﻥ ﺘﺠﻴﺏ ﻋﻠﻰ Yesﻟﺤﻔﻅ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﺠﺩﻴﺩﺓ . ﻤﻼﺤﻅﺎﺕ : 1ـ ﻴﺴﺘﺨﺩﻡ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﻹﻋﻁﺎﺀ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺤﺭﻴﺔ ﻓﻲ ﺍﺨﺘﻴﺎﺭ ﻤﻜﺎﻥ ﺘﺨﺯﻴﻥ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﻻﺤﻅ ﻼ ﺃﻨـﻙ ﻟـﻡ ﺇﻥ ﻤﻌﻅﻡ ﺍﻟﺒﺭﺍﻤﺞ ﺘﻌﻁﻲ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺭﻴﺔ ﻓﻲ ﺍﺨﺘﻴﺎﺭ ﻤﻜﺎﻥ ﻭﻀﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﺼﻴﺏ ،ﺘﺼﻭﺭ ﻤﺜ ﹰ ﺘﺴﺘﺨﺩﻡ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﻭﺃﻋﻁﻴﺕ ﺍﻟﺨﺎﺼﺔ DatabaseNameﻟﻠﻌﻨﺼﺭ Tableﺍﻟﻘﻴﻤﺔ C:\AirLiensﻋﻨﺩﻫﺎ ﻋﻠﻴﻙ ﺃﻥ ﺘﻀﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﻬﺭﺱ ﻋﻠﻰ ﺠﻤﻴﻊ ﺍﻷﺠﻬﺯﺓ ﺍﻟﺘﻲ ﺴﺘﺴﺘﺨﺩﻡ ﺒﺭﻨﺎﻤﺠﻙ . 2ـ ﺇﺤﺩﻯ ﻓﻭﺍﺌﺩ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﺍﻷﺨﺭﻯ ﻫﻲ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺠﺩﺍﻭل ﺴﺎﺒﻘﺔ ﻭﺨﺎﺼﺔ ﻓﻲ ﺒـﺭﺍﻤﺞ ﺍﻟﻤﺤﺎﺴـﺒﺔ ،ﺘـﺼﻭﺭ ﺇﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﺭﻴﺩ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﻤﺩﺨﻼﺕ ﺴﻨﺔ 1998ﺤﻴﺙ ﻜﺎﻥ ﻗﺩ ﺤﻔﻅﻬﺎ ﻋﻠﻰ ﺍﻟﻔﻬﺭﺱ D:\1998ﻋﻨﺩﻫﺎ ﻋﻠﻴﻙ ﺘﻐﻴﺭ
ﻤﺴﺎﺭ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﻓﻘﻁ ﺩﻭﻥ ﺍﻟﺘﻐﻴﺭ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ . 3ـ ﻴﻤﻜﻥ ﺇﻨﺸﺎﺀ ﻭﺤﺫﻑ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﺒﺭﻤﺠﻴﹰﺎ .
4ـ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ Alias Mangerﻓﻲ ﺤﺎل ﺇﺯﺍﻟﺔ ﺍﻟﺨﻴﺎﺭ Public Aliasﺴﻴﺘﻡ ﺘﻌﺭﻴﻑ Aliasﺠﺩﻴـﺩ ﻓـﻲ ﻼ. ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﻓﻘﻁ ﻭﻻ ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻫﺫﺍ ﺍﻟـ Aliasﻤﻥ ﺍﻟﺩﻟﻔﻲ ﻤﺜ ﹰ 5ـ ﻴﺴﺘﺨﺩﻡ ﺍﻟﺯﺭ Removeﻟﺤﺫﻑ ﺍﺴﻡ ﺒﺩﻴل .
ﺍﻟﺒﺩﺀ ﺒﺠﺩﻭل ﺠﺩﻴﺩ :
ﻟﻠﺒﺩﺀ ﺒﺠﺩﻭل ﺠﺩﻴﺩ ﺍﺨﺘﺭ ﺍﻷﻤﺭ File Æ New Æ Table ﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺠﺩﻭل ﺤﻴﺙ ﻴﻤﻜﻥ ﺇﻨﺸﺎﺀ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺃﻨﻭﺍﻉ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴـﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨـﺎﻤﺞ ) Database Desktop ﺍﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻼﺌﺤﺔ ﻟﻤﺸﺎﻫﺩﺓ ﻫﺫﻩ ﺍﻷﻨﻭﺍﻉ ( ،ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻼﺌﺤﺔ Paradox7ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﻤﻭﺍﻓﻕ. ﻤﻌﻅﻡ ﺍﻟﻌﻤل ﻓـﻲ ﺍﻟﺒﺭﻨـﺎﻤﺞ Database Desktopﻴﺘﻡ ﻓـﻲ ﻫـﺫﻩ ﺍﻟﻨﺎﻓـﺫﺓ ﻟـﺫﻟﻙ ﺴﺘﺸﺭﺡ ﺒﺸﻲﺀ ﻤﻥ ﺍﻟﺘﻔﺼﻴل ﺠﺩﻭل ﺍﻟﺤﻘﻭل : Field roster ﻴﺘﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺘﻌﺭﻴﻑ ﺤﻘﻭل ﺍﻟﺠـﺩﻭل ﻭﺘﺘﺄﻟﻑ ﻤﻥ 1ـ ﺍﺴﻡ ﺍﻟﺤﻘل : Field Name 88
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻴﻭﻀﻊ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﺍﺴﻡ ﺍﻟﺤﻘل ،ﻭﺃﺴﻤﺎﺀ ﺍﻟﺤﻘﻭل ﻓﻲ ﺠﺩﺍﻭل ﺍﻟﺒﺎﺭﺩﻭﻜﺱ ﻴﺠﺏ ﺃﻥ ﻻ ﺘﺘﺠﺎﻭﺯ 25ﺤﺭﻑ ،ﻜﻤﺎ ﻴﻤﻜـﻥ ﺃﻥ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻓﺭﺍﻏﺎﺕ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﺴﻡ ﺍﻟﺤﻘل ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻭﻟﻜﻥ ﻴﻨﺼﺢ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﺴﻤﺎﺀ ﺤﻘﻭل ﺇﻨﻜﻠﻴﺯﻴﺔ ﺩﺍﺌﻤﹰﺎ ﻭﻋﺩﻡ ﺍﺤﺘﻭﺍﺌﻬﺎ ﻋﻠﻰ ﻓﺭﺍﻏﺎﺕ ﻭﺨﺎﺼﺔ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ، SQLﻜﻤﺎ ﻴﺠﺏ ﺍﻻﺒﺘﻌﺎﺩ ﻋﻥ ﺒﻌﺽ ﺍﻷﺴﻤﺎﺀ ﺍﻟﻤﺤﺠﻭﺯﺓ ﻓﻲ ﻟﻐﺔ
SQLﻤﺜل SELECTﺃﻭ Fromﺃﻭ ... Date 2ـ ﻨﻭﻉ ﺍﻟﺤﻘل : Type
ﻴﺼﻑ ﻫﺫﺍ ﺍﻟﺤﻘل ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺫﻱ ﺴﻴﺨﺯﻥ ﻓﻲ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﻫﻨﺎﻙ ﻋﺩﺩ ﻤﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﻴﻤﻜـﻥ ﺃﻥ ﻴﻨﺘﻤـﻲ ﺇﻟﻴﻬـﺎ ﺍﻟﺤﻘل ﻭﻟﻤﻌﺭﻓﺔ ﻫﺫﻩ ﺍﻷﻨﻭﺍﻉ ﺇﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻓﻲ ﺍﻟﻌﻤﻭﺩ Typeﺃﻭ ﺍﻀﻐﻁ ﻋﻠﻰ ﻤﻔﺘـﺎﺡ ﺍﻟﻤـﺴﺎﻓﺔ Space ﻻ ،ﻭﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻴﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﺘﻭﻓﺭﻫﺎ ﺠﺩﺍﻭل : Paradox ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻟﻌﻤﻭﺩ Typeﻓﻌﺎ ﹰ ﺍﻟﻨﻭﻉ Alpha
ﺍﻟﺭﻤﺯ ﺍﻟﺤﺠﻡ A 255 – 1
ﻤﻼﺤﻅﺎﺕ ﻨﺹ ﻋﺎﺩﻱ ﻴﻤﻜﻥ ﺃﻥ ﻴﺤﺘﻭﻱ ﺭﻤﻭﺯﹰﺍ ﺃﻭ ﺃﺭﻗﺎﻡ ﻭﻴﺤﺩﺩ ﺤﺠﻡ ﺍﻟﺤﻘل ﻁﻭل ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﺘﻲ ﺴﻴﺄﺨﺫﻩ ﺍﻟﺤﻘل
Number
N
ﻋﺩﺩ ﺤﻘﻴﻘﻲ
Money
$ S
ﻨﻔﺱ ﺍﻟﻨﻭﻉ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺒﺼﻴﻐﺔ ﻤﺎﻟﻴﺔ
Long Integer
I
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﻤﻥ ﺍﻟﻨﻭﻉ Longint
#
ﻋﺩﺩ ﺼﺤﻴﺢ ﻋﺸﺭﻱ ﻤﻀﻐﻭﻁ ) ﺍﻟﺘﻤﺜﻴل ﺍﻟﺜﻨـﺎﺌﻲ ﻹﻋـﺩﺍﺩ ﺍﻟﻔﺎﺼـﻠﺔ
Short BCD
0 .. 32
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﺒﻁﻭل ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﻨﻭﻉ Integer
ﺍﻟﻌﺸﺭﻴﺔ (
)(1
Date
D
ﺘﺎﺭﻴﺦ
Time
T
ﻭﻗﺕ
TimeStamp Memo
1..240
@ M
ﻴﺩﻤﺞ ﺍﻟﺘﺎﺭﻴﺦ ﻭﺍﻟﻭﻗﺕ ﻓﻲ ﺤﻘل ﻭﺍﺤﺩ
Formatted Memo
0.. 240
F
Graphic
0..240
G
ﺼﻭﺭﺓ
OLE
0..240
O
ﻼ( ﻴﻤﺜل ﺤﺎﻭﻴﺔ ﻟﺭﺒﻁ ﻭﺇﺩﺭﺍﺝ ﺍﻟﻜﺎﺌﻨﺎﺕ ) ﺇﺩﺭﺍﺝ ﻤﻠﻑ Excelﻤﺜ ﹰ
Logical
L
ﻴﻤﺜل ﻗﻴﻤﺔ ﻤﻨﻁﻘﻴﺔ Trueﺃﻭ False
Auto increment
+
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﻴﺯﺩﺍﺩ ﺘﻠﻘﺎﺌﻴﹰﺎ
Binary
0..240
B
ﻴﺨﺯﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺜﻨﺎﺌﻴﹰﺎ ﺩﺍﺨل ﻤﻠﻔﺎﺕ .Mb
Byte
1..255
Y
ﻤﻌﻁﻴﺎﺕ ﺒﺎﻟﺼﻴﻐﺔ ﺍﻟﺜﻨﺎﺌﻴﺔ ﺘﺨﺯﻥ ﻀﻤﻥ ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Db
ﻨﺹ ﺒﺤﺠﻡ ﻜﺒﻴﺭ.
)(2
ﻨﺹ ﺒﺤﺠﻡ ﻜﺒﻴﺭ ﻤﻊ ﺘﺨﺯﻴﻥ ﻁﺭﻴﻘﺔ ﺘﻨﺴﻴﻕ ﻫﺫﺍ ﺍﻟﻨﺹ ) ﻟﻭﻥ ﺍﻟﻨﺹ ﻭ ﻨﻭﻉ ﺍﻟﺨﻁ (..
)(2
)(3
) : ( 1ﺍﻟﺭﻗﻡ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺤﺠﻡ ﺘﺤﺩﺩ ﻋﺩﺩ ﺍﻷﺭﻗﺎﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ
89
)(3
)(3
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
) : ( 2ﻴﺴﺘﺨﺩﻡ ﺍﻟﻨﻭﻉ Memoﻓﻲ ﺤﺎل ﺍﻟﻨﺼﻭﺹ ﺍﻟﺘﻲ ﻴﺒﻠﻎ ﺤﺠﻤﻬﺎ ﺃﻜﺜﺭ ﻤﻥ 255ﺤﺭﻑ ﻭﺘﺨﺯﻥ ﻋﺎﺩﺓ ﺨﺎﺭﺝ ﻤﻠﻑ ﺍﻟﺠﺩﻭل ﻓﻲ ﻤﻠﻔﺎﺕ ﺫﺍﺕ ﺍﻤﺘﺩﺍﺩ MBﻭﻴﺩل ﺍﻟﺭﻗﻡ ﺍﻟﻤﺩﺨل ﻓﻲ ﻋﻤﻭﺩ ﺍﻟﺤﺠﻡ ﻋﻠﻰ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﺫﻱ ﺴـﻴﺨﺯﻥ ﺩﺍﺨـل
ﻤﻠﻑ ﺍﻟﺠﺩﻭل ) .Dbﺒﻔﺭﺽ ﺃﻋﻁﻴﻨﺎ ﺍﻟﻘﻴﻤﺔ 30ﻓﻲ ﻋﻤﻭﺩ ﺍﻟﺤﺠﻡ ﻋﻨﺩﻫﺎ ﻓﻲ ﺤﺎل ﺃﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ 30ﺤﺭﻑ ﺃﻭ ﺃﻗـل ﺴﺘﺨﺯﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺩﺍﺨل ﻤﻠﻑ ﺍﻟﻘﺎﻋﺩﺓ ﺃﻤﺎ ﺇﺫﺍ ﺇﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻜﺜﺭ ﻤﻥ 30ﺤﺭﻑ ﺴﺘﺨﺯﻥ ﻋﻨﺩﻫﺎ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺩﺍﺨل ﻤﻠـﻑ
ﻤﻥ ﺍﻟﻨﻭﻉ .Mb ) ( 3ﻴﻤﻜﻥ ﻋﺩﻡ ﺘﺤﺩﻴﺩ ﺤﺠﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ . 3ـ ﺤﺠﻡ ﺍﻟﺤﻘل Sizeﻜﻤﺎ ﻫﻭ ﻤﻼﺤﻅ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﺴﺎﺒﻕ ﻫﻨﺎﻙ ﺒﻌﺽ ﺃﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﺒﺤﺎﺠﺔ ﻟﺘﺤﺩﻴﺩ ﺤﺠﻤﻬﺎ ﻟﻨﺄﺨـﺫ
ﻻ ﻋﻠﻰ ﺫﻟﻙ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ Alphaﺒﻔﺭﺽ ﺃﻨﻪ ﻋﺭﻓﻨﺎ ﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻤﻥ ﺍﻟﻨـﻭﻉ Aﻭﺒﺤﺠـﻡ ، 20ﻨـﺴﺘﻁﻴﻊ ﻤﺜﺎ ﹰ ﻋﻨﺩﻫﺎ ﺇﺩﺨﺎل ﺃﺴﻤﺎﺀ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺫﺍﺕ ﻁﻭل ﻋﺸﺭﻴﻥ ﺤﺭﻑ ﺃﻭ ﺃﻗل ﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻥ ﺍﺴﻡ ﺃﺤﺩ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺃﻁﻭل ﻤﻥ ﻋـﺸﺭﻴﻥ
ﺤﺭﻑ ﻓﺴﻴﺘﻡ ﺘﺨﺯﻴﻥ ﺍﻟﻌﺸﺭﻴﻥ ﺤﺭﻑ ﺍﻷﻭﻟﻰ ﻭﺘﺠﺎﻫل ﺍﻟﺒﺎﻗﻲ ،ﻤﺸﻜﻠﺔ ﺃﺨﺭﻯ ﻴﻤﻜﻥ ﺃﻥ ﺘﻅﻬﺭ ،ﺒﻔﺭﺽ ﺃﻥ ﺍﺴـﻡ ﺃﺤـﺩ ﻼ ﻓﺈﻥ ﺍﺴﻡ ﻫﺫﺍ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺴﻴﺨﺯﻥ ﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ ﺒﺤﺠـﻡ ﻋـﺸﺭﻴﻥ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻤﻜﻭﻥ ﻤﻥ ﻋﺸﺭﺓ ﺃﺤﺭﻑ " ﻤﺤﻤﺩ ﺁﻏﺎ " ﻤﺜ ﹰ ﺒﺎﻴﺕ ،ﺃﻱ ﺃﻨﻪ ﺠﻤﻴﻊ ﺤﻘﻭل ﺍﻟﻌﻤﻭﺩ ﻓﻲ ﺠﺩﻭل ﺍﻟﺒﺎﺭﺩﻭﻜﺱ ﺘﺄﺨﺫ ﻨﻔﺱ ﺍﻟﺤﺠﻡ ﻤﻬﻤﺎ ﻜﺎﻥ ﻁﻭل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺩﺨﻠﺔ .
4ـ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ) ﺍﻷﺴﺎﺴﻲ ( : Keyﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﺴﺭ ﻓﻲ ﻫﺫﺍ ﺍﻟﺤﻘل ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﺤﻘل ﻤﻔﺘﺎﺡ ﺭﺌﻴﺴﻲ ﻭﺇﺫﺍ ﺃﺭﺩﺕ ﻤﺯﻴﺩ ﻤﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻟﺭﺌﻴﺴﻴﺔ ﺍﻗﺭﺃ ﺍﻟﻔﻘﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﺤﻭل ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﺎﺴﻴﺔ ﺘﺄﺘﻲ ﻓﺎﻋﻠﻴﺔ ﻨﻅﺎﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻌﻼﺌﻘﻴﺔ ﻤﻥ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺍﻟﻌﺜﻭﺭ ﻋﻠﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺠﺩﺍﻭل ﻤﻨﻔﺼﻠﺔ ﺒﺴﺭﻋﺔ ﻭﺘﺠﻤﻴﻌﻬﺎ ﻤﻌﹰﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﺴﺘﻌﻼﻤﺎﺕ ﻭﻨﻤﺎﺫﺝ ﻭﺘﻘﺎﺭﻴﺭ .ﻟﻜﻲ ﻴﺘﻡ ﺫﻟﻙ ،ﻴﺠﺏ ﺃﻥ ﻴﺤﺘﻭﻱ ﻜـل ﺠـﺩﻭل ﻋﻠـﻰ ﺤﻘـل ﺃﻭ
ﻤﺠﻤﻭﻋﺔ ﺤﻘﻭل ﺘﻘﻭﻡ ﺒﺘﻌﺭﻴﻑ ﻜل ﺴﺠل ﻤﺨﺯﻥ ﻓﻲ ﺍﻟﺠﺩﻭل ﺒﺸﻜل ﻓﺭﻴﺩ ،ﻭﺘﺴﻤﻰ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤـﺔ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻷﺴﺎﺴـﻲ
ﻟﻠﺠﺩﻭل) ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻴﻌﺭﻑ ﺍﻟﻤﺴﺎﻓﺭ ﺒﺸﻜل ﻓﺭﻴﺩ ،ﻜﺫﻟﻙ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻴﻌﺭﻑ ﺭﺤﻠﺔ ﻭﺤﻴﺩﺓ ﺃﻱ ﺒﻤﺠﺭﺩ ﻤﻌﺭﻓـﺔ ﺭﻗـﻡ ﺍﻟﺭﺤﻠﺔ ﻨﺴﺘﻁﻴﻊ ﻤﻌﺭﻓﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﺎﺴﻡ ﺸﺭﻜﺔ ﺍﻟﻁﻴﺭﺍﻥ ﻭﺒﻠﺩ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻭﺒﻠﺩ ﺍﻟﻭﺼﻭل ﻭﺴﺎﻋﺔ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻭﺴﺎﻋﺔ ﺍﻟﻭﺼﻭل ( .. ﻤﺘﻰ ﻗﻤﺕ ﺒﺘﻌﻴﻴﻥ ﻤﻔﺘﺎﺤﹰﺎ ﺃﺴﺎﺴﻴﹰﺎ ﻟﻠﺠﺩﻭل ،ﻴﻤﻨﻊ ﺇﺩﺨﺎل ﺃﻱ ﻗﻴﻡ ﻤﻜﺭﺭﺓ ﺃﻭ ﻗﻴﻡ "ﺨﺎﻟﻴﺔ" Nullﻓﻲ ﺤﻘﻭل ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺴﺎﺴﻲ.
ﻫﻨﺎﻙ ﺜﻼﺜﺔ ﺃﻨﻭﺍﻉ ﻤﻥ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺘﻌﺭﻴﻔﻬﺎ : ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﺎﺴﻴﺔ ﻤﻥ ﻨﻭﻉ ﺍﻟﺘﺭﻗﻴﻡ ﺍﻟﺘﻠﻘﺎﺌﻲ
ﻴﻤﻜﻥ ﺇﻋﺩﺍﺩ ﺤﻘل ﺍﻟﺘﺭﻗﻴﻡ ﺍﻟﺘﻠﻘﺎﺌﻲ ﻹﺩﺨﺎل ﺭﻗﻡ ﺘﺴﻠﺴﻠﻲ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻋﻨﺩ ﺇﻀﺎﻓﺔ ﻜل ﺴﺠل ﺇﻟﻰ ﺍﻟﺠﺩﻭل .ﺘﻌﺩ ﺃﺒـﺴﻁ ﻁﺭﻴﻘـﺔ ﻹﻨﺸﺎﺀ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ﻫﻲ ﺘﻌﻴﻴﻥ ﻤﺜل ﻫﺫﺍ ﺍﻟﺤﻘل ﻜﻤﻔﺘﺎﺡ ﺃﺴﺎﺴـﻲ ﻭﻟﺘﻌﺭﻴـﻑ ﺤﻘـل ﺘـﺭﻗﻴﻡ ﺘﻠﻘـﺎﺌﻲ ﺍﺨﺘـﺭ Auto . Increment
ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﺎﺴﻴﺔ ﻤﻥ ﻨﻭﻉ ﺍﻟﺤﻘل ﺍﻟﻤﻔﺭﺩ :
ﻼ ﻴﺘﻀﻤﻥ ﻗﻴﻡ ﻓﺭﻴﺩﺓ ﻤﺜل ﺭﻗﻡ ﺍﻟﻬﻭﻴﺔ ﺍﻟﺸﺨﺼﻴﺔ ،ﻴﻤﻜﻨﻙ ﺘﻌﻴﻴﻥ ﻫﺫﺍ ﺍﻟﺤﻘل ﻋﻠﻰ ﺃﻨﻪ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺴﺎﺴﻲ. ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻙ ﺤﻘ ﹰ ﻭﻴﻤﻜﻨﻙ ﺘﺤﺩﻴﺩ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ﻟﺤﻘل ﻴﺤﺘﻭﻱ ﺒﺎﻟﻔﻌل ﻋﻠﻰ ﺒﻴﺎﻨﺎﺕ ﻁﺎﻟﻤﺎ ﻻ ﻴﺤﺘﻭﻱ ﻫﺫﺍ ﺍﻟﺤﻘل ﻋﻠﻰ ﻗﻴﻡ ﻤﻜـﺭﺭﺓ ﺃﻭ ﻗـﻴﻡ "ﺨﺎﻟﻴﺔ" .Null ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﺎﺴﻴﺔ ﻤﻥ ﻨﻭﻉ ﺍﻟﺤﻘل ﺍﻟﻤﺘﻌﺩﺩ : 90
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻻ ﻴﻤﻜﻨﻙ ﻓﻴﻬﺎ ﻀﻤﺎﻥ ﻭﺠﻭﺩ ﺤﻘل ﻓﺭﺩﻱ ،ﻗﺩ ﻴﻜﻭﻥ ﺒﺈﻤﻜﺎﻨﻙ ﺘﻌﻴﻴﻥ ﺤﻘﻠﻴﻥ ﺃﻭ ﺃﻜﺜﺭ ﺒﺎﻋﺘﺒﺎﺭﻫﻤﺎ ﻤﻔﺘﺎﺤﹰﺎ ﺃﺴﺎﺴﻴﹰﺎ .ﻭﺍﻟﺤﺎﻟﺔ ﺍﻷﻜﺜﺭ ﺸﻴﻭﻋﹰﺎ ﺍﻟﺘﻲ ﻴﺤﺩﺙ ﻓﻴﻬﺎ ﺫﻟﻙ ﻫﻲ ﺍﻟﺠﺩﻭل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻟﺭﺒﻁ ﺠﺩﻭﻟﻴﻥ ﺁﺨﺭﻴﻥ ﻓﻲ ﻋﻼﻗﺔ ﺃﻁـﺭﺍﻑ
ﺒﺄﻁﺭﺍﻑ ) .( Many to Manyﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ،ﻴﻤﻜﻥ ﺃﻥ ﻴﺭﺒﻁ ﺠﺩﻭل "ﻤﺅﻟﻔﻲ ﺍﻟﻜﺘﺏ" ﺒـﻴﻥ ﺠـﺩﻭﻟﻲ "ﺍﻟﻜﺘـﺏ"
ﻭ"ﺍﻟﻤﺅﻟﻔﻴﻥ" .ﻭﻴﺘﻜﻭﻥ ﻤﻔﺘﺎﺤﻪ ﺍﻷﺴﺎﺴﻲ ﻤﻥ ﺤﻘﻠﻲ" :ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ" ﻭ"ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ". ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻙ ﺃﻱ ﺸﻙ ﺤﻭل ﺇﻤﻜﺎﻨﻴﺔ ﺘﺤﺩﻴﺩ ﺘﺭﻜﻴﺏ ﻤﻨﺎﺴﺏ ﻤﻥ ﺍﻟﺤﻘﻭل ﻟﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ﻤﺘﻌﺩﺩ ﺍﻟﺤﻘﻭل ،ﻓﺭﺒﻤﺎ ﻴﺠﺏ ﻋﻠﻴﻙ ﻻ ﻤﻥ ﺫﻟﻙ .ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ،ﻓﺈﻥ ﻀﻡ ﺤﻘﻠـﻲ "ﺍﻻﺴـﻡ ﺍﻷﻭل" ﺇﻀﺎﻓﺔ ﺤﻘل "ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌﻲ" ﻭﺘﻌﻴﻴﻨﻪ ﻜﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ﺒﺩ ﹰ ﻭ"ﺍﻻﺴﻡ ﺍﻷﺨﻴﺭ" ﻟﺘﻜﻭﻴﻥ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ﻻ ﻴﻌﺘﺒﺭ ﺍﺨﺘﻴﺎﺭﹰﺍ ﺼﺎﺌﺒﺎﹰ ،ﺒﺴﺒﺏ ﺇﻤﻜﺎﻨﻴﺔ ﻤﺼﺎﺩﻓﺔ ﺘﻜﺭﺍﺭ ﻓﻲ ﻀﻡ ﻫﺫﻴﻥ ﺍﻟﺤﻘﻠـﻴﻥ
ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒل.
ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ : ﻤﺎﺯﻟﻨﺎ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ،ﻹﻀﺎﻓﺔ ﺍﻟﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺃﻜﺘﺏ ﻓـﻲ ﺍﻟﻌﻤـﻭﺩ " PNo " Filed Nameﻭﺍﻟﻌﻤﻭﺩ + Typeﺃﻱ ﺃﻥ ﺍﻟﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌﻲ ) ﻻ ﺤﺎﺠﺔ ﻟﺘﺤﺩﻴﺩ ﺤﺠﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ( ﻭﻀﻊ ﺇﺸﺎﺭﺓ ﻓﻲ ﺍﻟﺤﻘـل Key ﻷﻥ ﻫﺫﺍ ﺍﻟﺤﻘل ﺴﻴﻜﻭﻥ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ .
ﻹﻀﺎﻓﺔ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺃﻜﺘﺏ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ ﻤـﻥ ﺍﻟﻌﻤـﻭﺩ Field Nameﺍﻟﻘﻴﻤﺔ Pnameﻭﺍﻟﻌﻤﻭﺩ "A" Typeﻷﻥ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ ﻨﺹ ،ﻓﻲ ﺍﻟﻌﻤﻭﺩ Sizeﺍﻜﺘﺏ ﺍﻟﻘﻴﻤﺔ ، 30ﺃﻱ ﺃﻥ ﻁﻭل ﺍﻟﺤﻘل 30ﺤﺭﻑ ،ﻭﺍﺘﺭﻙ ﺍﻟﻌﻤﻭﺩ Keyﻓﺎﺭﻏﹰﺎ ﻭﺍﻜﻤل ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ . ﻟﺤﻔﻅ ﺍﻟﺠﺩﻭل ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Save Asﺴﻴﻅﻬﺭ ﻟﻙ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﺒﺎﺴﻡ ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻼﺌﺤﺔ Aliasﺍﻟﻘﻴﻤـﺔ Travelﺃﺩﺨل ﺍﺴﻡ ﺍﻟﻤﻠﻑ Passengersﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺤﻔﻅ .
ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ : ﺍﺨﺘﺭ ﺍﻷﻤﺭ FileÆ newÆ tableﻭﺍﺨﺘﺭ Paradox7ﻤـﻥ ﺍﻟﻘﺎﺌﻤـﺔ ﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ﺃﺩﺨل ﺍﻟﻘﻴﻡ ﻓﻴﻬﺎ ﻜﻤﺎ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﻤﺠﺎﻭﺭ : ﺍﺤﻔﻅ ﺍﻟﺠﺩﻭل ﻀﻤﻥ Travelﺒﺎﺴﻡ . Trips ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ﻭﺍﻟﺭﺤﻼﺕ : ﺍﺨﺘﺭ ﺍﻷﻤﺭ FileÆ newÆ tableﻭﺍﺨﺘﺭ Paradox7ﻤـﻥ ﺍﻟﻘﺎﺌﻤـﺔ ﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ﺃﺩﺨل ﺍﻟﻘﻴﻡ ﻓﻴﻬﺎ ﻜﻤﺎ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﻤﺠﺎﻭﺭ : ﺍﺤﻔﻅ ﺍﻟﺠﺩﻭل ﻀﻤﻥ Travelﺒﺎﺴﻡ PassAndTrips ﻤﻼﺤﻅﺔ :ﺘﺨﺯﻥ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ Paradoxﻓﻲ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﻤﻠﻔﺎﺕ : 1ـ ﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻻﻤﺘﺩﺍﺩ Dbﺤﻴﺙ ﻴﺘﻡ ﺘﺨﺯﻴﻥ ﻤﻌﻅﻡ ﺒﻴﺎﻨﺎﺕ ﺍﻟﺠﺩﻭل . 2ـ ﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻻﻤﺘﺩﺍﺩ Mbﺤﻴﺙ ﻴﺘﻡ ﺘﺨﺯﻴﻥ ﺍﻷﺠﺯﺍﺀ ﺍﻟﻜﺒﻴﺭﺓ ﻤﺜل ﺍﻟﻤﻔﻜﺭﺍﺕ ﻭ ﺍﻟﺼﻭﺭ .... ﻓﺘﺢ ﺠﺩﻭل : 91
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﻔﺘﺢ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺃﺨﺘﺭ ﺍﻷﻤﺭ FileÆOpen Æ Tableﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﻓﺘﺢ ﻤﻠﻑ ﺍﺨﺘـﺭ ﻤﻨﻬـﺎ ﺍﻟﻤﻠـﻑ Passengers.db ﺘﻌﺩﻴل ﺠﺩﻭل : ﺒﻔﺭﺽ ﺃﻨﻙ ﺒﺤﺎﺠﺔ ﻹﻀﺎﻓﺔ ﺤﻘل ﺠﺩﻴﺩ ﺇﻟﻰ ﺠﺩﻭل ﺃﻭ ﺤﺫﻑ ﺃﺤﺩ ﺍﻟﺤﻘﻭل ﺃﻭ ﺘﻐﻴﺭ ﻨﻭﻋﻪ ﻴﻤﻜﻥ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴـﻕ ﻓـﺘﺢ ﺍﻟﺠﺩﻭل ﻭﻤﻥ ﺜﻡ ﺍﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ
Table Æ Restructureﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺒﻨﺎﺀ ﺍﻟﺠﺩﺍﻭل ﻴﻤﻜﻨﻙ ﺍﻟﻌﻤل ﻓﻴﻬﺎ ﻜﻤﺎ ﺘﻌﻠﻤﻨﺎ ﺴﺎﺒﻘﹰﺎ. ﺴﻨﺘﻌﺭﻑ ﺍﻵﻥ ﻋﻠﻰ ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ Table propertiesﻓﻲ ﻨﺎﻓﺫﺓ ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﺃﻭ ﻨﺎﻓﺫﺓ ﺘﻌﺩﻴل ﺠﺩﻭل .
1ـ ﻀﺒﻁ ﺍﻟﻤﺩﺨﻼﺕ : Validity Checks
ﻴﺤﺩﺩ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﻭﻗﺒﻭل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻜل ﺤﻘل ﻭﻟﻪ ﺍﻟﻔﺭﻭﻉ ﺍﻟﺘﺎﻟﻴﺔ : 1ـ : Required Fieldﻋﻨﺩ ﺘﻔﻌﻴل ﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻴﻨﺒﻐﻲ ﺇﺩﺨﺎل ﻗﻴﻤﺔ ﻓﻲ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﻻ ﻴﻤﻜﻥ ﺃﻥ ﻴﺘﺭﻙ ﻓﺎﺭﻏﹰﺎ .
2ـ : Minimumﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﺴﻨﺩﺨﻠﻬﺎ ﻓﻲ ﺍﻟﺤﻘل ﺃﻜﺒﺭ ﺃﻭ ﺘﺴﺎﻭﻱ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺤﺩﺩﺓ ﻫﻨﺎ . 3ـ : Maximumﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﺴﻨﺩﺨﻠﻬﺎ ﻓﻲ ﺍﻟﺤﻘل ﺃﻜﺒﺭ ﺃﻭ ﺘﺴﺎﻭﻱ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺤﺩﺩﺓ ﻫﻨﺎ . 4ـ : Default Valueﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺤﺩﺩ ﻓﻲ ﻫﻨﺎ ﺴﺘﻜﻭﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻭﻴﻤﻜﻥ ﺘﻌﺩﻴﻠﻬﺎ ﻓﻴﻤﺎ ﺒﻌﺩ 5ـ : Pictureﺘﺸﺒﻪ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻓﻲ ﻋﻤﻠﻬﺎ ﺍﻟﻌﻨﺼﺭ MaskEditﺤﻴﺙ ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻁﺭﻴﻘﺔ ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﺜﺎل :
ﺤﻘل ﻤﺎ ،ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Assistﻻﺨﺘﻴﺎﺭ ﻗﻭﺍﻟﺏ ﺠﺎﻫﺯﺓ .
ﻓﻲ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ Tripsﺍﺠﻌل ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﺸﺭﻜﺔ ﻤﻁﻠﻭﺒﹰﺎ ﻭ ﺍﻟﺤﻘل ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﻤﺘﻭﻓﺭﺓ ﻴﺠﺏ ﺃﻥ ﻴﺄﺨﺫ ﻗﻴﻤـﺔ ﺒﻴﻥ 0ﻭ 350 ﻨﻔﺘﺢ ﺍﻟﺠﺩﻭل Tripsﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ FileÆOpen Æ tableﺜﻡ ﻨﺨﺘﺎﺭ TableÆ Restructureﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺘﻌﺩﻴل ﺍﻟﺠﺩﻭل
Validity Checksﻤﻥ ﺍﻟﻼﺌﺤﺔ Table Propertiesﺜﻡ ﻨﺨﺘﺎﺭ ﺍﻟﺤﻘل Companyﻭﻨﻔﻌـل ﺍﻟﺨﻴـﺎﺭ Required
.Field ﺜﻡ ﻨﺨﺘﺎﺭ ﺍﻟﺤﻘل CardNoﻭﻨﻀﻊ ﻓﻲ Minimumﺍﻟﻘﻴﻤﺔ 0ﻭﻓﻲ Maximumﺍﻟﻘﻴﻤﺔ . 350 ﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Saveﻟﺤﻔﻅ ﺍﻟﺘﻐﻴﺭﺍﺕ .
2ـ ﺘﺤﺩﻴﺩ ﺠﺩﻭل ﺍﻟﺒﺤﺙ : Table Lookup
ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻗﻴﻤﺔ ﻟﺤﻘل ﻤﺎ ﻓﻲ ﺠﺩﻭل ﻋﺒﺭ ﻻﺌﺤﺔ ﻤﻥ
ﺍﻟﻘﻴﻡ ﻤﻥ ﺠﺩﻭل ﺁﺨﺭ ،ﻴﺩﻋﻰ ﺍﻟﺠﺩﻭل ﺍﻵﺨﺭ ﺒﺠﺩﻭل ﺍﻟﺒﺤﺙ . ﻤﺜﺎل :ﻨﻌﻠﻡ ﺃﻥ ﻗﻴﻤﺔ ﺍﻟﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻓﻲ ﺠـﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ﻭﺍﻟﺭﺤﻼﺕ ﻴﺠـﺏ ﺃﻥ ﺘﻜـﻭﻥ ﻤـﺴﺎﻭﻴﺔ ﻹﺤﺩﻯ ﻗﻴﻡ ﺍﻟﻌﻤـﻭﺩ ﺭﻗـﻡ ﺍﻟﻤـﺴﺎﻓﺭ ﻓـﻲ ﺠـﺩﻭل 92
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ﻜﻤﺎ ﺃﻥ ﺍﻟﻘﻴﻤﺔ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ﻭﺍﻟﺭﺤﻼﺕ ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻤﺴﺎﻭﻴﺔ ﻹﺤﺩﻯ ﻗﻴﻡ ﺍﻟﻌﻤـﻭﺩ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻓﻲ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ :
ﺍﻓﺘﺢ ﺍﻟﺠﺩﻭل PassAndTripsﻭﺍﺩﺨل ﺇﻟﻰ ﺍﻟﻨﺎﻓﺫﺓ ﺘﻌﺩﻴل ﺍﻟﺠﺩﻭل Table Æ Restructure ﺍﺨﺘﺭ ﺍﻟﺤﻘل PNoﻭﺍﺨﺘﺭ Table LookUpﻤﻥ ﺍﻟﻼﺌﺤﺔ Table Propertiesﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Define ﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ : ﻤﻥ ﺍﻟﻼﺌﺤﺔ Lookup Tableﺍﺨﺘﺭ ﺍﻟﺠﺩﻭل Passengers.dbﻭﺍﻀﻐﻁ ﻋﻠﻰ . Ok ﺃﻋﺩ ﻨﻔﺱ ﺍﻟﺨﻁﻭﺍﺕ ﻟﻠﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ TripNoﻓﻲ ﺍﻟﺠﺩﻭل . Trips
ﻟﻥ ﻨﺸﺭﺡ ﻫﺫﻩ ﺍﻟﻤﻴﺯﺓ ﺒﻤﺯﻴﺩ ﻤﻥ ﺍﻟﺘﻔﺼﻴل ﻷﻥ ﺘﻁﺒﻴﻘﻬﺎ ﺒﺭﻤﺠﻴﹰﺎ ﺃﺴﻬل ..ﻭﻟﻜﻥ ﺴﻨﺘﻌﻠﻡ ﻓﺎﺌﺩﺘﻬﺎ ﻋﻨﺩ ﺇﺩﺨـﺎل ﻗـﻴﻡ ﺇﻟـﻰ ﺍﻟﺠﺩﻭل . 3ـ ﺍﻟﻔﻬﺭﺴﺔ ﺍﻟﺜﺎﻨﻭﻴﺔ :Secondary index ﺘﺴﺘﺨﺩﻡ ﺍﻟﻔﻬﺭﺴﺔ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻟﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﺒﺘﺭﺘﻴﺏ ﻤﺨﺘﻠﻑ ﻋﻥ ﺍﻟﺘﺭﺘﻴﺒﺏ ﺍﻟﻤﻔﺘﺎﺤﻲ ﻟﻠﺠﺩﻭل ) ﺃﻱ ﻴﺨﺘﻠﻑ ﻋـﻥ ﺘﺭﺘﻴـﺏ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ( . ﻤﺎﺫﺍ ﺘﻌﻨﻲ ﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﺜﺎﻨﻭﻴﺔ ) ﻟﻺﻁﻼﻉ (: ﺍﻓﺘﺭﺽ ﺃﻨﹼﻙ ﺘﺭﻴﺩ ﺃﻥ ﺘﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ ﻓﻲ ﺃﺤﺩ ﺍﻷﻋﻤﺩﺓ ،ﻜﺄﻥ ﺘﺭﻴﺩ ﺍﻟﺒﺤﺙ ﻤﺜﻼ ﻋﻥ )ﺃﺤﻤﺩ ﺴﻌﻴﺩ( ﻓﻲ ﺤﻘل ﺍﺴـﻡ ﻥ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﺴﻴﻔﺤﺹ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﺤـﺩﺍ ﻭﺭﺍﺀ ﺍﻵﺨـﺭ ﻤـﻥ ﺍﻟﺒﺩﺍﻴـﺔ ﺍﻟﻤﺴﺎﻓﺭ ..ﺃﻭل ﻤﺎ ﺴﻴﺠﻭل ﺒﺫﻫﻨﻙ ﻫﻭ ﺃ ﻟﻠﻨﻬﺎﻴﺔ ..ﻟﻸﺴﻑ :ﺭﺒﻤﺎ ﺘﺒﺩﻭ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺴﻬﻠﺔ ،ﻭﻟﻜﻨﹼﻬﺎ ﺃﺴﻭﺃ ﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺃﻥ ﻴﺘ ﻡ ﺍﻟﺒﺤﺙ ﺒﻬﺎ ،ﻷﻨﹼﻬﺎ ﻗﺩ ﺘﺘﺴﺒﺏ ﻓﻲ ﺒﻁ ٍﺀ ﻑ ﺃﻭ ﻥ ﺍﻟﻌﻤﻭﺩ ﻗﺩ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻟﺼﻔﻭﻑ ،ﻗﺩ ﻴﺯﻴﺩ ﻋـﻥ ﻋـﺸﺭﺓ ﺁﻻ ٍ ﺸﻨﻴﻊ ﻓﻲ ﺃﺩﺍﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺨﺎﺼﺔ ﻭﺃ
ﺃﻜﺜﺭ. ﻥ ﺍﻟﺒﺤﺙ ﻓـﻲ ﻋﻤـﻭﺩ ﻤﺭﺘﹼـﺏ ﻥ ﻫﻨﺎﻙ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻁﺭﻕ ﻟﺘﺴﺭﻴﻊ ﺍﻟﺒﺤﺙ ،ﺘﺒﺩﺃ ﺒﺘﺭﺘﻴﺏ ﺍﻟﻌﻤﻭﺩ ﺃﺒﺠﺩﻴﺎ ،ﻭﺫﻟﻙ ﻷ ﻟﻬﺫﺍ ﻓﺈ ﺃﺴﺭﻉ ﺒﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺒﺤﺙ ﻓﻲ ﻋﻤﻭﺩ ﻋﺸﻭﺍﺌﻲ ،ﺨﺎﺼﺔ ﻤﻊ ﺍﺴﺘﺨﺩﺍﻡ ﻁﺭﻴﻘﺔ ﺒﺤﺙ ﺠﻴﺩﺓ،ﻭﻟﻜﻥ ،ﺭﻏﻡ ﺴﺭﻋﺔ ﻫـﺫﻩ ﺍﻟﺒﺤـﺙ ﻥ ﺍﻟﺘﺭﺘﻴﺏ ﻨﻔﺴﻪ ﻗﺩ ﻴﻜﻭﻥ ﻤﺄﺴﺎﺓ! ..ﻫل ﺘﺘﺨﻴل ﻜﻡ ﻤﻥ ﺍﻟﻭﻗﺕ ﻴﻤﻜﻥ ﺃﻥ ﻴﻀﻴﻌﻪ ﺒﺭﻨﺎﻤﺠـﻙ ﻟﺘﺭﺘﻴـﺏ ﺒﻌﺩ ﺍﻟﺘﺭﺘﻴﺏ ،ﺇﻻ ﺇ ﺹ ﻤﺜﻼ؟ ..ﻓﻤﺎ ﺒﺎﻟﻙ ﺇﺫﻥ ﺤﻴﻨﻤﺎ ﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺘﻜﺭﺍﺭ ﺍﻟﺒﺤﺙ ﻓﻲ ﻨﻔﺱ ﺍﻟﻌﻤﻭﺩ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ؟! ﺨﻤﺴﻴﻥ ﺃﻟﻑ ﻨ
ﺇﺫﻥ ﻤﺎ ﺍﻟﺤل؟ ﺒﺴﻴﻁ ﺠﺩﺍ :ﻨﺭﺘﹼﺏ ﺍﻟﻌﻤﻭﺩ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻨﺫ ﺍﻟﺒﺩﺍﻴﺔ! ﻱ ﻤﻨﻬـﺎ ﺴـﻭﻑ ﻨﺭﺘﹼـﺏ ﺠﻤﻴل ،ﻭﻟﻜﻥ ﻤﺎﺫﺍ ﻟﻭ ﻜﺎﻥ ﺍﻟﺠﺩﻭل ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻋﻤﻭﺩ ﺘﺤﺘﺎﺝ ﻟﻠﺒﺤﺙ ﻓﻴﻬﺎ ،ﻓﺘﺒﻌﺎ ﻷ ﺍﻟﺠﺩﻭل؟!!
ﻲ :ﺍﻟﻔﻬﺎﺭﺱ ..Indexesﺘﺨﻴل ﻤﻌﻲ ﺃﻨﹼﻨﺎ ﻁﻠﺒﻨﺎ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻨﺸﺎﺀ ﻓﻬـﺭﺱ ﻟﻌﻤـﻭﺩ ﺍﺴـﻡ ل ﺍﻟﻌﻤﻠ ﻫﻨﺎ ﻴﺒﺭﺯ ﺍﻟﺤ ّ ﻲ ﺍﻟﻤﺴﺎﻓﺭ ..ﻫﻨﺎ ﺴﺘﻘﻭﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺘﺭﺘﻴﺏ ﻫﺫﺍ ﺍﻟﻌﻤﻭﺩ ،ﻤﻊ ﺇﻨﺸﺎﺀ ﻤﺎ ﻴﺸﺒﻪ ﻋﻤﻭﺩﺍ ﺠﺩﻴﺩﺍ ﺘﻀﻊ ﻓﻴﻪ ﺍﻟﺘﺭﺘﻴﺏ ﺍﻟﺭﻗﻤـ
ل ﻤﺴﺎﻓﺭ ..ﻓﻤﺜﻼ ،ﺴﻴﺄﺨﺫ )ﺃﺤﻤﺩ ﺴﻌﻴﺩ( ﺭﻗﻡ 1ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻤﻭﺩ ﺍﻟﺨﻔﻲ ،ﺒﻴﻨﻤﺎ ﺴـﻴﺄﺨﺫ )ﺘﻭﻓﻴـﻕ ﺍﻟﺤﻜـﻴﻡ( ﺭﻗـﻡ ،2 ﻟﻜ ّ ﻭﻫﻜﺫﺍ. ... ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺴﻨﺤﻘﹼﻕ ﻤﺎ ﻴﻠﻲ: 93
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﻥ ﻨﺤﺘﺎﺝ ﻟﺘﻐﻴﻴﺭ ﺘﺭﺘﻴﺏ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﻨﺘﺭﻙ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺤﺭﻴﺔ ﺘﺭﺘﻴﺏ ﺍﻟﺒﻴﺎﻨـﺎﺕ ﻜﻤـﺎ ﻴﺤﻠﻭ ﻟﻪ.
ل ﻫﺫﻩ ﺍﻷﻋﻤﺩﺓ. ﻴﻤﻜﻨﻨﺎ ﺇﻨﺸﺎﺀ ﺃﻜﺜﺭ ﻤﻥ ﻓﻬﺭﺱ ﻷﻜﺜﺭ ﻤﻥ ﻋﻤﻭ ٍﺩ ﻓﻲ ﻨﻔﺱ ﺍﻟﺠﺩﻭل ،ﻤﻤﺎ ﻴﻌﻨﻲ ﻗﺩﺭﺘﻨﺎ ﻋﻠﻰ ﺘﺭﺘﻴﺏ ﻜ ّ ﺴﻨﻭﻓﹼﺭ ﻭﻗﺕ ﺘﺭﺘﻴﺏ ﺍﻟﻌﻤﻭﺩ ،ﺃﺜﻨﺎﺀ ﺍﻟﺒﺭﻤﺠﺔ ،ﻭﺇﻥ ﻜﺎﻥ ﻫﺫﺍ ﺍﻟﻭﻗﺕ ﺴﻴﺴﺘﻬﻠﻙ ﻋﻨﺩ ﺇﻨﺸﺎﺀ ﺍﻟﻔﻬﺭﺱ ﻷﻭل ﻤﺭﺓ. ﺴﺘﻜﻭﻥ ﻋﻤﻠﻴﺔ ﺍﻟﺒﺤﺙ ﺃﺴﺭﻉ ،ﺤﻴﺙ ﺴﻴﺘ ﻡ ﺍﻟﺒﺤﺙ ﻓﻲ ﺍﻟﺴﺠﻼﺕ ﺤﺴﺏ ﺘﺭﺘﻴﺏ ﻓﻬﺎﺭﺴﻬﺎ. ﻭﻓﻲ ﺍﻹﻤﻜﺎﻥ ﻜﺫﻟﻙ ﺇﻨﺸﺎﺀ ﻓﻬﺭﺱ ﻷﻜﺜﺭ ﻤﻥ ﻋﻤﻭﺩ ﻤﻌﺎ ،ﺤﻴﺙ ﺴﻴﺘﻡ ﺍﻟﺘﺭﺘﻴﺏ ﺘﺒﻌﺎ ﻟﻠﻌﻤﻭﺩ ﺍﻷﻭل ،ﻓﺈﻥ ﺘﻤﺎﺜﻠﺕ ﻗﻴﻡ ﺒﻌﺽ ﺍﻟﺼﻔﻭﻑ ،ﻴﺘﻡ ﺘﺭﺘﻴﺏ ﻫﺫﻩ ﺍﻟﺼﻔﻭﻑ ﻋﻠﻰ ﺃﺴﺎﺱ ﺍﻟﻌﻤﻭﺩ ﺍﻟﺜﺎﻨﻲ.
ﻭﻟﻜﻥ ..ﻁﺒﻌﺎ ﻻ ﺘﻭﺠﺩ ﻁﺭﻴﻘﺔ ﻤﺜﺎﻟﻴﺔ ..ﻫﻨﺎﻙ ﻋﻴﺒﺎﻥ ﺃﺴﺎﺴﻴﺎﻥ ﻟﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ:
ﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﻤﻨﺸﺌﺔ ﻴﺘ ﻡ ﺤﻔﻅﻬﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﻤﻤﺎ ﻴﻌﻤل ﻋﻠﻰ ﺯﻴﺎﺩﺓ ﺤﺠﻤﻬﺎ ..ﻟﻬﺫﺍ ﺇﺫﺍ ﻜﺎﻥ ﺤﺠـﻡ ﻗﺎﻋـﺩﺓ ﺒﻴﺎﻨﺎﺘـﻙ ﻜﺒﻴﺭﺍ ،ﻓﻼ ﺒ ﺩ ﺃﻥ ﺘﻭﺍﺯﻥ ﺒﻴﻥ ﺤﺎﺠﺘﻙ ﻟﺘﻭﻓﻴﺭ ﺍﻟﻭﻗﺕ ﻭﺤﺎﺠﺘﻙ ﻟﺘﻭﻓﻴﺭ ﺍﻟﺤﺠﻡ! ﻥ ﺒﺭﻨﺎﻤﺠﻙ ﺴﻴﺤﺘﺎﺝ ﻟﻠﺒﺤﺙ ﻓﻴﻬﺎ ﺒﻐﺯﺍﺭﺓ. ﻭﻜﻘﺎﻋﺩﺓ :ﻻ ﺘﻨﺸﺊ ﻓﻬﺎﺭﺱ ﺇﻻ ﻟﻠﺤﻘﻭل ﺍﻟﺘﻲ ﺘﺘﻭﻗﹼﻊ ﺃ ﻱ ﺼﻑﹼ ،ﻻ ﺒ ﺩ ﻤﻥ ﺇﻋـﺎﺩﺓ ﺘﺤـﺩﻴﺙ ﺍﻟﻔﻬـﺎﺭﺱ ﻟﻤﺭﺍﻋـﺎﺓ ﻱ ﺨﺎﻨﺔ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺃﻭ ﺤﺫﻑ ﺃﻭ ﺇﻀﺎﻓﺔ ﺃ ﻋﻨﺩ ﺘﻌﺩﻴل ﻗﻴﻤﺔ ﺃ
ﺍﻻﺨﺘﻼﻑ ﺍﻟﺫﻱ ﺃﺤﺩﺜﺘﻪ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ ..ﻤﺜل ﻫﺫﺍ ﺍﻷﻤﺭ ﻴﺴﺒﺏ ﻋﻴﺒﺎ ﺨﻁﻴﺭﺍ ،ﻫﻭ ﺒﻁﺀ ﻋﻤﻠﻴـﺎﺕ ﺍﻟﺘﺤـﺩﻴﺙ ﻭﺍﻟﺤـﺫﻑ ﻭﺍﻹﻀﺎﻓﺔ ﺒﻁﺭﻴﻘﺔ ﻤﻠﺤﻭﻅﺔ ،ﺘﺯﺩﺍﺩ ﺴﻭﺀﺍ ﻤﻊ ﺍﺯﺩﻴﺎﺩ ﻁﻭل ﺍﻟﺠﺩﻭل ..ﻫﻨﺎ ﻴﺠﺏ ﺃﻥ ﺘﻭﺍﺯﻥ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻙ ،ﺒﻴﻥ ﺤﺎﺠﺘـﻙ ﻟﺴﺭﻋﺔ ﺍﻟﺒﺤﺙ ﻭﺤﺎﺠﺘﻙ ﻟﺴﺭﻋﺔ ﺍﻟﺘﺤﺩﻴﺙ ﻭﺍﻟﺤﺫﻑ ﻭﺍﻹﻀﺎﻓﺔ ..ﻓﺈﺫﺍ ﻜﺎﻥ ﻤﻥ ﺍﻟﻤﺘﻭﻗﹼﻊ ﺃﻥ ﻴﻘﻭﻡ ﺒﺭﻨﺎﻤﺠﻙ ﺒﻤﺌﺎﺕ ﻤﻥ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺒﻁﺭﻴﻘﺔ ﻤﺘﺘﺎﻟﻴﺔ ،ﻓﻤﻥ ﺍﻷﻓﻀل ﺤﺫﻑ ﺍﻟﻔﻬﺭﺱ ﺇﻟﻰ ﺃﻥ ﺘﻨﺘﻬﻲ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ،ﺜ ﻡ ﺇﻋﺎﺩﺓ ﺇﻨﺸﺎﺌﻪ ﻤﺭﺓ ﺃﺨﺭﻯ ﻗﺒـل ﺍﻟﺸﺭﻭﻉ ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺒﺤﺙ ،ﺭﻏﻡ ﻤﺎ ﺘﻀﻴﻌﻪ ﻋﻤﻠﻴﺔ ﺇﻋﺎﺩﺓ ﺇﻨﺸﺎﺀ ﺍﻟﻔﻬﺭﺱ ﻤﻥ ﻭﻗﺕ!
ﻹﻨﺸﺎﺀ ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ :
ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﺇﻨﺸﺎﺀ ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ ﻟﻠﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ . ﻗﻡ ﺒﻔﺘﺢ ﺍﻟﺠﺩﻭل ﺜﻡ ﺍﺨﺘﺭ TableÆ Restructureﻤـﻥ ﺍﻟﻼﺌﺤـﺔ Table Propertiesﺍﺨﺘﺭ ﺍﻟﻘﻴﻤﺔ Secondary Indexﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Defineﻋﻨﺩﺌﺫ ﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ : ﺍﺨﺘﺭ ﺍﻟﺤﻘل PNameﻤﻥ ﺍﻟﻼﺌﺤـﺔ Fieldsﻭﺍﻀـﻐﻁ ﻋﻠـﻰ Æ ﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﺴﻡ ﺍﻟﺤﻘل ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ Indexed Fieldsﻨﻼﺤـﻅ ﻭﺠﻭﺩ ﺍﻟﺨﻴﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﻘﺴﻡ : Index Option 1ـ : Uniqueﻓﻌل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺔ ﻫﺫﺍ ﺍﻟﺤﻘل ﻓﺭﻴﺩﺓ ﺃﻱ ﻻ ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻜﺭﺭ ) ﻓﻲ ﻤﺜﺎﻟﻨﺎ ﻗﺩ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﻤﺴﺎﻓﺭﻴﻥ ﻟﻬﻤـﺎ ﻨﻔﺱ ﺍﻻﺴﻡ ﻟﺫﻟﻙ ﻻ ﻴﻤﻜﻥ ﺘﻔﻌﻴل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ( .
2ـ : Maintainedﻓﻌل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﺃﺭﺩﺕ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺘﺤﺩﻴﺙ ﺠﺩﻭل ﺍﻟﻔﻬﺭﺱ ﻜﻠﻤﺎ ﺘﻡ ﺘﻌﺩﻴل ﺍﻟﺒﻴﺎﻨـﺎﺕ
ﻓﻲ ﺍﻟﺠﺩﻭل ﻭﻓﻲ ﺤﺎل ﻋﺩﻡ ﺘﻔﻌﻴﻠﻪ ﻴﺘﻡ ﺘﺤﺩﻴﺙ ﺠﺩﻭل ﺍﻟﻔﻬﺭﺱ ﻓﻘﻁ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻔﻬﺭﺱ . 3ـ : Case Sensitiveﻓﻌل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﺃﺭﺩﺕ ﻤﻥ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺘﻤﻴﺯ ﺒﻴﻥ ﺍﻟﺤﺭﻭﻑ ﺍﻟﻜﺒﻴﺭﺓ ﻭ ﺍﻟﺼﻐﻴﺭﺓ . 4ـ : Descendingﻓﻌل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﺃﺭﺩﺕ ﺘﺭﺘﻴﺏ ﺍﻟﺤﻘﻭل ﺘﻨﺎﺯﻟﻴﹰﺎ . 94
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Okﺴﺘﻁﺎﻟﺏ ﺒﺈﻋﻁﺎﺀ ﺍﺴﻡ ﻟﻠﻔﻬﺭﺱ ﺃﻋﻁﻪ ﺍﻻﺴﻡ . PNameIndex ﻤﻼﺤﻅﺔ :
1ـ ﻴﻤﻜﻥ ﺘﻁﺒﻴﻕ ﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﺤﻘل ) ﻟﻜل ﺤﻘل ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ ( .
ﻼ ﺇﻨﺸﺎﺀ ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ ﻟﺤﻘﻠﻲ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ 2ـ ﻴﻤﻜﻥ ﺘﻁﺒﻴﻕ ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ ﻭﺍﺤﺩ ﻋﻠﻰ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺤﻘﻭل ﻴﻤﻜﻥ ﻤﺜ ﹰ ﻭﺍﻟﺠﻨﺴﻴﺔ ﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻓﻲ ﺤﺎل ﻜﻨﺎ ﻨﺒﺤﺙ ﻓﻲ ﺠﺩﻭل ﻤﺎ ﻋﻠﻰ ﺍﻟﺤﻘﻠﻴﻥ ﻤﻌﹰﺎ . 3ـ ﺴﺘﺘﻀﺢ ﻫﺫﻩ ﺍﻷﻤﻭﺭ ﻻﺤﻘﹰﺎ ﻋﻨﺩ ﺩﺭﺍﺴﺔ ﺍﻟﺒﺤﺙ ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ .
ﺘﻌﺭﻴﻑ ﻋﻼﻤﺔ ﻤﺭﺠﻌﻴﺔ ﻤﺘﻜﺎﻤﻠﺔ : Referential Integrity
ﻭﺠﺩﻨﺎ ﺴﺎﺒﻘﹰﺎ ﻜﻴﻑ ﻴﺘﻡ ﺍﻟﺭﺒﻁ ﺒﻴﻥ ﺠﺩﺍﻭل ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺸﻜل ﻨﻅﺭﻱ ) ﺍﻟﺭﺒﻁ ﺒﻴﻥ ﺠﺩﻭﻟﻲ ﺍﻟﻤﺅﻟﻔﻴﻥ ﻭﺍﻟﻜﺘﺏ ﻭﺍﻟـﺭﺒﻁ
ﺒﻴﻥ ﺠﺩﻭﻟﻲ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ ( ﺃﻱ ﺒﻌﺒﺎﺭﺓ ﺃﺨﺭﻯ ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﺘﻌﺭﻴﻑ ﻤﻔﺘﺎﺡ ﺜﺎﻨﻭﻱ ﻓﻲ ﺠﺩﻭل ﻤﺎ ﻴﺄﺨﺫ ﻗﻴﻤﺔ ﻤﻥ ﺠﺩﻭل ﺁﺨﺭ . ﺇﺫﺍ ﺃﻨﺸﺄﻨﺎ ﻋﻼﻤﺔ ﻤﺭﺠﻌﻴﺔ ﻤﺘﻜﺎﻤﻠﺔ ﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ "ﺍﻟﻤﺴﺎﻓﺭﻴﻥ" ﻭ"ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ" ﻓﻬﺫﺍ ﻴﻌﻨـﻲ ﺃﻥ ﺍﻟﺤﻘـل ﺭﻗـﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻓﻲ ﺠﺩﻭل "ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " ﺴﻴﺄﺨﺫ ﻗﻴﻤﻪ ﻤﻥ ﺍﻟﺤﻘل ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ . ﻴﺩﻋﻰ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻨﺤﺼل ﻤﻨﻪ ﻋﻠﻰ ﺍﻟﻘﻴﻡ ﺒﺎﻟﺠﺩﻭل ﺍﻷﺏ ﻭﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺨﺯﻥ ﺍﻟﻘﻴﻡ ﺒﺎﻟﺠﺩﻭل ﺍﻻﺒﻥ .
ﻹﻨﺸﺎﺀ ﻋﻼﻤﺔ ﺘﻜﺎﻤل ﻤﺭﺠﻌﻴﺔ :
ﺍﻓﺘﺢ ﺍﻟﺠﺩﻭل ﺍﻹﺒﻥ PassAndTripsﻭﺍﺨﺘـﺭ ﺍﻷﻤـﺭ TableÆ Restructureﻭﺍﺨﺘـﺭ ﺍﻟﻘﻴﻤـﺔ Referential Integrityﻤﻥ ﺍﻟﻼﺌﺤﺔ Table Propertiesﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : Define ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﻨﺨﺘﺎﺭ ﺍﻟﺤﻘل PNoﻤﻥ ﻻﺌﺤﺔ ﺍﻟﺤﻘﻭل ﻭﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Æﺜﻡ ﻨﺨﺘﺎﺭ ﺠـﺩﻭل ﺍﻟﻤـﺴﺎﻓﺭﻴﻥ ﻤـﻥ ﺍﻟﻼﺌﺤـﺔ Table ﻭﻨﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Å
ﻴﺠـــﺏ ﺒﻌـــﺩ ﺫﻟـــﻙ ﺘﺤﺩﻴـــﺩ ﻨـــﻭﻉ ﺍﻟﺘﻌـــﺩﻴل ﻓـــﻲ ﺍﻟـــﺼﻨﺩﻭﻕ Update Rule
1ـ ﺍﻟﺨﻴﺎﺭ : Cascadeﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﻴﻌﻨﻲ ﺃﻨﻪ ﺃﻱ ﺘﻌﺩﻴل ﻓﻲ ﺍﻟﺤﻘل ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻷﺏ ﺴﻴﺅﺩﻱ ﺇﻟﻰ ﺘﻌﺩﻴﻼﺕ ﻓﻲ ﺍﻟﺤﻘﻭل ﺍﻟﻤﺭﺒﻭﻁﻪ ﻤﻌﻪ ﻓﻲ ﺠﺩﻭل ﺍﻻﺒﻥ ) ﻓﻲ ﺤﺎل ﺤﺫﻑ ﺍﻟﺤﻘل ﺴﺠل ﻤﺎ ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺴﻴﺘﻡ ﺤﺫﻑ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﺭﺘﺒﻁﺔ ﻤﻌﻪ ﻓﻲ ﺠﺩﻭل " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " ، 95
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﺍﻟﺨﻴﺎﺭ : Prohibitﻴﻤﻨﻊ ﻫﺫﺍ ﺍﻟﺤﻘل ﺘﺤﺩﻴﺙ ﺍﻟﺤﻘﻭل ﻓﻲ ﺠﺩﻭل ﺍﻷﺏ ﺇﺫﺍ ﻜﺎﻨﺕ ﻤﺭﺘﺒﻁﺔ ﻤﻊ ﺤﻘﻭل ﻓـﻲ ﺠـﺩﻭل ﺍﻻﺒﻥ ) ﻻ ﻴﻤﻜﻥ ﺤﺫﻑ ﺴﺠل ﻤﻥ ﺠﺩﻭل ﺃﺏ ﻤﺭﺘﺒﻁ ﻤﻊ ﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻻﺒﻥ ( .
3ـ : Strict Referential Integrityﻓﻌل ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﻜﻨﺕ ﺴﺘﺴﺘﺨﺩﻡ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻫﺫﻩ ﻤﻊ ﺒـﺭﺍﻤﺞ ﻗﺩﻴﻤـﺔ
ﺘﻌﻤل ﺘﺤﺕ ﺍﻟﻨﻅﺎﻡ
.Dos
ﺍﻀﻐﻁ ﻋﻠﻰ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺯﺭ Okﺴﺘﻁﺎﻟﺏ ﻋﻨﺩﻫﺎ ﺒﺎﺨﺘﻴﺎﺭ ﺍﺴﻡ ﻟﻠﻌﻼﻤﺔ ﺍﻟﻤﺭﺠﻌﻴﺔ ﺃﺩﺨل ﺃﻱ ﺍﺴﻡ ﺘﺭﻴﺩﻩ ﻭﺍﻀﻐﻁ ﻋﻠـﻰ ﻤﻭﺍﻓﻕ ... ﻤﻼﺤﻅﺎﺕ :
1ـ ﺍﻟﺨﻴﺎﺭ Prohibitﻫﻭ ﺍﻟﺨﻴﺎﺭ ﺍﻟﺫﻱ ﺘﻌﻤل ﺒﻪ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨـﺎﺕ Paradoxﻭﻻ ﻴﻤﻜـﻥ ﺍﻻﺴـﺘﻔﺎﺩﺓ ﻤـﻥ ﺍﻟﺨﻴـﺎﺭ Cascadeﺇﻻ ﻓﻲ ﺤﺎل ﺍﺴﺘﺨﺩﺍﻡ ﺒﻌﺽ ﺒﺭﺍﻤﺞ SQLﺍﻟﺤﺩﻴﺜﺔ. 2ـ ﻟﺤﺫﻑ ﺴﺠل ﺃﺏ ﻤﺭﺘﺒﻁ ﻤﻊ ﺴﺠﻼﺕ ﺃﺒﻨﺎﺀ ﻋﻠﻴﻙ ﺃﻥ ﺘﺤﺫﻑ ﺠﻤﻴﻊ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻻﺒﻥ ﺍﻟﻤﺭﺘﺒﻁﺔ ﻤﻊ ﻫـﺫﺍ ﺍﻟﺴﺠل . ـ ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﺃﺭﺒﻁ ﺒﻴﻥ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻓﻲ ﺍﻟﺠﺩﻭل " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " ﻤﻊ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻓﻲ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ . 5ـ ﻭﻀﻊ ﻜﻠﻤﺎﺕ ﺴﺭ ﻟﻠﺠﺩﺍﻭل :
ﻗﺩ ﻨﺤﺘﺎﺝ ﻓﻲ ﺒﻌﺽ ﺍﻷﺤﻴﺎﻥ ﺇﻟﻰ ﺤﻤﺎﻴﺔ ﺠﺩﺍﻭل ﺃﻭ ﺍﻟﺤﻘﻭل ﻤﻥ ﺃﻥ ﻴﺼل ﺇﻟﻴﻬﺎ ﺃﻭ ﻴﺴﺘﺨﺩﻤﻬﺎ ﻏﻴﺭﻨﺎ ،ﻟﺫﻟﻙ ﻴﻤﻜﻥ ﻭﻀـﻊ ﻼ ﺃﻭ ﻟﺤﻘل ﺃﻭ ﻋﺩﺩ ﻤﻥ ﺤﻘﻭﻟﻪ ﻓﻘﻁ . ﻜﻠﻤﺔ ﺴﺭ ﻟﻠﺠﺩﻭل ﻜﺎﻤ ﹰ ﻭﻹﻋﻁﺎﺀ ﺍﻟﺠﺩﻭل ﻜﻠﻤﺔ ﺴﺭ ﻟﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ 1ـ ﺍﻓﺘﺢ ﺍﻟﺠﺩﻭل ﻭﺍﺨﺘﺭ ﺍﻷﻤـﺭ Table Æ Restructureﻭﺍﺨﺘـﺎﺭ Table Securityﻤـﻥ ﺍﻟﻼﺌﺤـﺔ Table
propertiesﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Defineﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺍﻟﺘﺎﻟﻲ : ﺍﻜﺘﺏ ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﻓﻲ ﺍﻟﺤﻘل Master Passwordﻭﺃﻋﺩ ﻜﺘﺎﺒﺘﻬﺎ ﻓﻲ ﺍﻟﺤﻘل Verify Master Passwordﻭﺍﻀﻐﻁ ﻋﻠﻰ .Ok ﺃﻤﺎ ﻟﺘﺤﺩﻴﺩ ﻜﻠﻤﺔ ﺴﺭ ﻟﻠﺤﻘﻭل ﻨﻌﻴﺩ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻭﻨﺨﺘﺎﺭ ﺒﻌﺩﻫﺎ Auxiliary Passwordﻓﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ )ﻓﻲ ﺍﻷﺴﻔل(.
ﺃﻜﺘﺏ ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﻓـﻲ ﺍﻟﺤﻘـل Current Passwordﻭﺤـﺩﺩ ﺴـﻤﺎﺤﻴﺎﺕ ﺍﻟﻭﺼﻭل ﻤﻥ Table rightsﻭﺍﻀﻐﻁ ﻋﻠﻰ Add ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻌﻁﻲ ﺃﻜﺜﺭ ﻤﻥ ﻜﻠﻤﺔ ﺴﺭ ﻟﻠﺤﻘل ﺍﻟﻭﺍﺤﺩ ﺃﻭ ﻟﻤﺠﻤﻭﻋﺔ ﺤﻘﻭل ،ﺒﺎﻟﻨﺴﺒﺔ ﻟﺴﻤﺎﺤﻴﺎﺕ ﺍﻟﻭﺼﻭل ﻓﺘﺤﺩﺩ ﻁﺭﻴﻘﺔ ﺘﻌﺎﻤل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻊ ﺍﻟﺠﺩﻭل ﻓـﺈﺫﺍ
ﻜﺎﻨﺕ ﺍﻟﻘﻴﻤﺔ Read Onlyﻓﻼ ﻴﻤﻜﻥ ﻟﻠﻤـﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ، ....ﻜل ﻤﺭﺓ ﻴﺘﻡ ﻓﺘﺢ ﺍﻟﺠـﺩﻭل ﻓﻴﻬﺎ ﺴﻴﻁﺎﻟﺏ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺈﺩﺨﺎل ﻜﻠﻤـﺔ ﺍﻟـﺴﺭ ﻭ 96
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﻌﻁﻰ ﺍﻟﺴﻤﺎﺤﻴﺎﺕ ﻟﻬﺫﺍ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺘﺒﻌﹰﺎ ﻟﻜﻠﻤﺔ ﺍﻟﺴﺭ ﺍﻟﻤﺩﺨﻠﺔ . ﻟﺤﺫﻑ ﻜﻠﻤﺔ ﺴﺭ ﻭﻀﻌﺕ ﻋﻠﻰ ﺠﺩﻭل ﺃﻋﺩ ﺍﻟﺨﻁﻭﺍﺕ ﻓﻲ 1
ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Modifyﻭﺍﺨﺘﺭ ﺒﻌﺩﻫﺎ ﺍﻟﺯﺭ . Delete
ﻤﻼﺤﻅﺔ ﻫﺎﻤﺔ :
ﺇﺫﺍ ﻜﺎﻨﺕ ﺴﺭﻴﺔ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺘﻬﻤﻙ ﻓﻼ ﺘﺴﺘﺨﺩﻡ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ Paradoxﻓﻬﻨﺎﻙ ﻤﺌﺎﺕ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﺴﺘﻁﻴﻊ ﺍﻜﺘﺸﺎﻑ ﻜﻠﻤﺔ ﺴﺭ ﺍﻟﻘﺎﻋﺩﺓ ،ﻭﻴﺴﺘﻁﻴﻊ ﺃﻱ ﻫﺎﻭﻱ ﺃﻥ ﻴﺩﺨل ﺇﻟﻰ ﺠﺩﺍﻭﻟﻙ ﻭﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺘﻬﺎ ﻭﺘﻌﺩﻴﻠﻬﺎ ،ﻋﻤﻠﻴﹰﺎ ﺃﻗﻭﻯ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺤﻴﺙ ﺍﻟﺴﺭﻴﺔ ﻭﺍﻟﺴﻤﺎﺤﻴﺎﺕ ﺃﻴﻀﹰﺎ ﻫﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ MySQLﻭOracle ﻭ. MS SQL Server
6ـ ﺘﺤﺩﻴﺩ ﻟﻐﺔ ﺍﻟﺠﺩﻭل : Table Language ﻟﺘﺤﺩﻴﺩ ﻟﻐﺔ ﺍﻟﺠﺩﻭل ﺍﺨﺘﺭ Table Languageﻤﻥ ﺍﻟﻼﺌﺤﺔ ﺨﺼﺎﺌﺹ ﺍﻟﺠﺩﻭل ﺇﺫﺍ ﻜﺎﻨﺕ ﺒﻴﺎﻨﺎﺕ ﺍﻟﺠﺩﻭل ﺍﻟﺘﻲ ﺘﺩﺨﻠﻬﺎ ﺒﺎﻟﻠﻐـﺔ ﺍﻟﻌﺭﺒﻴـﺔ ﻓـﺄﺒﻕ ﻫـﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﻋﻠﻰ ﺍﻟﺨﻴﺎﺭ ﺍﻻﻓﺘﺭﺍﻀﻲ . 'Ascii' ANSI
7ـ ﻋﺭﺽ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﺎﺒﻌﺔ ﺍﻟﺠﺩﻭل : Dependent Table
ﺒﻌﺩ ﺃﻥ ﻨﻨﺸﺊ ﻋﻼﻗﺔ ﺭﺒﻁ ﻤﺘﻜﺎﻤﻠﺔ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ﻨﻜﻭﻥ ﻗﺩ ﻋﺭﻓﻨﺎ ﻋﻼﻗﺔ ﺒﻴﻥ ﺠﺩﻭل ﺃﺏ ﻭﺠﺩﻭل ﺍﺒﻥ ﻭﻟﺭﺅﻴﺔ ﻫﺫﻩ ﺍﻟﻌﻼﻗﺔ : ﻨﻔﺘﺢ ﺍﻟﺠﺩﻭل ﺍﻷﺏ ) ( Passengersﻭﻨﻔﺘﺢ ﺍﻟﻨﺎﻓﺫﺓ ﺘﻌﺩﻴل ﺍﻟﺠﺩﻭل ﺜﻡ ﻨﺨﺘـﺎﺭ Dependent Tableﻤـﻥ ﺍﻟﻼﺌﺤـﺔ Table propertiesﻋﻨﺩﺌﺫ ﺘﻅﻬﺭ ﺍﻟﺠﺩﺍﻭل ﺍﻟﻤﺭﺘﺒﻁﺔ ﻤﻊ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ) . ( PassAndTrips
ﻤﻼﺤﻅﺎﺕ :
1ـ ﺇﻟﻰ ﻫﻨﺎ ﻨﻜﻭﻥ ﻗﺩ ﺘﻌﻠﻤﻨﺎ ﺇﻨﺸﺎﺀ ﺠﺩﺍﻭل ﻤﻥ ﺍﻟﻨﻭﻉ Paradoxﻭﻴﻜﻭﻥ ﺇﻨﺸﺎﺀ ﺠﺩﺍﻭل ﻤﻥ ﺃﻨﻭﺍﻉ ﺃﺨﺭﻯ ﻤﺸﺎﺒﻬﺔ ﻟﻬﺫﻩ ﻼ ﺘﺨﺘﻠﻑ ﻋﻥ ﺃﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﻓـﻲ ﺠـﺩﺍﻭل ﺍﻟﻁﺭﻴﻘﺔ ﻭﻟﻜﻥ ﺘﺘﻐﻴﺭ ﺒﻌﺽ ﺍﻷﺸﻴﺎﺀ ﻓﺄﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﻓﻲ ﺠﺩﺍﻭل Dbaseﻤﺜ ﹰ Paradoxﺒﺎﻻﺴﻡ ﻓﻘﻁ ﻭﻟﻜﻥ ﺘﺒﻘﻰ ﺠﻤﻴﻊ ﺃﻨﻭﺍﻉ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﺼﻤﻤﺔ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻨﺼﻭﺹ ﻭ ﺍﻷﺭﻗﺎﻡ ﻭ.... 2ـ ﻴﻔﻀل ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺘﺼﻤﻴﻡ ﺍﻟﺠﺩﺍﻭل ﻋﻠﻰ ﺍﻟﻭﺭﻕ ﺒﻤﺎ ﻓﻴﻬﺎ ﺘﺤﺩﻴﺩ ﺍﻻﺭﺘﺒﺎﻁﺎﺕ ﻭﺃﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﻭﺍﻟﻘﻴﻭﺩ ﺇﻟﻰ ﺍﻟﺤﻘـﻭل ﻭﺜﻡ ﺍﻟﺒﺩﺀ ﺒﺈﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺍﻵﺒﺎﺀ ﺜﻡ ﺍﻷﺒﻨﺎﺀ ﻭﺘﻌﺭﻴﻑ ﺨﺼﺎﺌﺹ ﺍﻟﺠﺩﻭل ﻋﻨﺩ ﺇﻨﺸﺎﺀﻩ .
3ـ ﻋﻤﻠﻴﹰﺎ ﻴﻔﻀل ﺃﻥ ﺘﻜﻭﻥ ﺠﻤﻴﻊ ﺠﺩﺍﻭل ﺍﻟﻘﺎﻋﺩﺓ ﺠﺎﻫﺯﺓ ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﺈﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻴﻬﺎ . 4ـ ﺠﺩﺍﻭل ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﻤﻌﺘﻤﺩﺓ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻭﺍﻟﻁﺭﻕ ﺍﻟﺘﻲ ﺍﺘﺒﻌﺕ ﻓﻲ ﺇﻨﺸﺎﺀﻫﺎ ﻏﻴﺭ ﻤﺜﺎﻟﻴﺔ ﻭﺍﻋﺘﻤﺩﺕ ﻫﻨﺎ ﺒﻬﺩﻑ ﺘﻌﻠﻴﻤﻲ ﻓﻘﻁ . ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻟﺠﺩﺍﻭل :
ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺇﻤﻜﺎﻨﻴﺔ ﺒﻨﺎﺀ ﺍﻟﺠﺩﺍﻭل ﻴﺘﻴﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻴﻬﺎ ﻭﺘﻌﺩﻴﻠﻬﺎ .
97
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ : ﻟﻜﻲ ﺘﺴﺘﻁﻴﻊ ﺇﺩﺨﺎل ﻨﺼﻭﺹ ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﻋﻠﻴﻙ ﺘﻐﻴﺭ ﺍﻟﺨﻁ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﻓـﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﺎﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ Edit Æ Peferencesﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Changeﻟﺘﻐﻴﺭ ﺍﻟﺨﻁ ﺃﺨﺘـﺭ ﻤـﻥ
ﻼ. ﺍﻟﻘﺎﺌﻤﺔ ﺃﺤﺩ ﺍﻟﺨﻁﻭﻁ ﺍﻟﺘﻲ ﺘﺩﻋﻡ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ Arabic Transparentﻤﺜ ﹰ ﺍﺴﺘﺨﺩﺍﻡ ﻨﻤﻁ ﺍﻟﺘﺤﺭﻴﺭ :
ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﺈﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻟﺠﺩﻭل ﻴﺠﺏ ﺍﻟﺩﺨﻭل ﺇﻟﻰ ﻨﻤﻁ ﺍﻟﺘﺤﺭﻴﺭ ﻭﻴﺘﻡ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ Editﻤـﻥ ﺍﻟﻘﺎﺌﻤﺔ Tableﺃﻭ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ F9ﺃﻭ ﺯﺭ ﺍﻟﺴﺭﻋﺔ ﻓﻲ ﺃﻗﺼﻰ ﻴﻤﻴﻥ ﺸﺭﻴﻁ ﺍﻟﺴﺭﻋﺔ ) ﻁﺒﻌﹰﺎ ﻴﺠـﺏ ﺃﻥ ﻴﻜـﻭﻥ ﺍﻟﺠﺩﻭل ﻤﻔﺘﻭﺤﹰﺎ ( .
ﺃﺩﺨل ﺍﻵﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ : ﻻ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﺩﺨل ﻓﻲ ﻨﻤﻁ ﺍﻟﺘﺤﺭﻴﺭ ﺍﻓﺘﺢ ﺍﻭ ﹰ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺯﺭ Tabﻟﻠﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺤﻘﻭل ﻜﻤـﺎ ﺃﻥ ﻨﻔـﺱ ﺍﻟـﺯﺭ ﺴﻴﻨﻘﻠﻙ ﺇﻟﻰ ﺴﺠل ﺠﺩﻴﺩ . ﻻﺤﻅ ﺍﻨﻪ ﻻ ﻴﺴﻤﺢ ﻟﻙ ﺒﺈﺩﺨﺎل ﻗﻴﻤﺔ ﻓﻲ ﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺘـﺭﻗﻴﻡ
ﺘﻠﻘﺎﺌﻲ ﻹﻥ ﻫﺫﺍ ﺍﻟﺤﻘل ﻴﺄﺨﺫ ﻗﻴﻤﺘﻪ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻭﻴﺯﺍﺩﺍﺩ ﺒﻤﻘﺩﺍﺭ 1ﻋﻨﺩ ﺇﻀﺎﻓﺔ ﺴﺠل ﺠﺩﻴﺩ . ﻜﻤﺎ ﺃﻨﻪ ﻻ ﺤﺎﺠﺔ ﻟﺤﻔﻅ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺩﺨﻠﺔ ﻓﻲ ﺍﻟﺠﺩﻭل ،ﺤﻴﺙ ﻴﻘﻭﻡ ﺍﻟﺠﺩﻭل ﺒﺤﻔﻅ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻋﻨﺩ ﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﺴﺠل ﺠﺩﻴﺩ .
ﺃﺩﺨل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ :ﺍﻓﺘﺢ ﺍﻟﺠﺩﻭل ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ
ﺤﺎﻭل ﺇﺩﺨﺎل ﺍﻟﻘﻴﻤﺔ 400ﻓﻲ ﺍﻟﺤﻘل CardCountﻭﻻﺤﻅ ﻋﺩﻡ ﻗﺒﻭل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻬﺫﻩ ﺍﻟﻘﻴﻤـﺔ ﻭﺘـﺫﻜﺭ ﺍﻟـﺸﺭﻁ ﺍﻟـﺫﻱ ﻭﻀﻌﻨﺎﻩ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺤﻘل
) ﺇﻗﺭﺃ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﻲ ﺘﻅﻬﺭ ﻓﻲ ﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻴﺴﺎﺭﻴﺔ ﺍﻟﺴﻔﻠﻰ ﻟﻠﺒﺭﻨﺎﻤﺞ ( . ﻓﻲ ﺍﻟﺤﻘﻭل ﻤﻥ ﺍﻟﻨﻭﻉ TimeStampﻴﻤﻜﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻤﻔﺘﺎﺡ ﺍﻟﻤﺴﺎﻓﺔ ﻹﺩﺨﺎل ﺍﻟﻭﻗﺕ ﻭﺍﻟﺘﺎﺭﻴﺦ ﺍﻟﺤﺎﻟﻲ . ﺃﺩﺨل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ :ﺍﻓﺘﺢ ﺍﻟﺠﺩﻭل ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ﺘﻌﻠﻡ ﺃﻨﻨﺎ ﻗﺩ ﺭﺒﻁﻨﺎ ﺍﻟﺤﻘـل PNoﺒﺠـﺩﻭل ﺒﺤﺙ
ﻟﻼﺴﺘﻔﺎﺩﺓ ﻤﻥ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﻀـﻐﻁ ﻋﻠـﻰ ﺍﻟﻤﻔـﺎﺘﻴﺢ Ctrl + Spaceﺃﺜﻨـﺎﺀ ﻭﺠـﻭﺩ ﺍﻟﻤﺅﺸﺭ ﻓﻲ ﺍﻟﺤﻘل PNOﺴـﺘﻅﻬﺭ ﻨﺎﻓـﺫﺓ 98
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺠﺩﻴﺩﺓ ﻓﻴﻬﺎ ﺠﻤﻴﻊ ﺤﻘﻭل ﺠﺩﻭل ﺍﻟﺒﺤﺙ Passengers.dbﺃﺨﺘﺭ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﻤﺭﺘﻴﻥ ﺴـﺘﻐﻠﻕ ﺍﻟﻨﺎﻓـﺫﺓ ﻭﺘﻨﺘﻘل ﻗﻴﻤﺔ ﺍﻟﺤﻘل PNoﻓﻲ ﺍﻟﺴﺠل ﺍﻟﻤﺨﺘﺎﺭ ﺇﻟﻰ ﺍﻟﺠﺩﻭل ﺍﻟﺤﺎﻟﻲ .
ﻴﻤﻜﻨﻙ ﺃﻴﻀﹰﺎ ﺇﺩﺨﺎل ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻴﺩﻭﻴﹰﺎ ﻭﻟﻜﻥ ﻻ ﻴﺴﻤﺢ ﻟﻙ ﺒﺈﺩﺨﺎل ﺭﻗﻡ ﻤﺴﺎﻓﺭ ﻏﻴﺭ ﻤﻭﺠﻭﺩ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ،ﻜﻤﺎ ﻻ ﻴﺴﻤﺢ ﺒﺈﺩﺨﺎل ﻨﻔﺱ ﺍﻟﻤﺴﺎﻓﺭ ﻋﻠﻰ ﻨﻔﺱ ﺍﻟﺭﺤﻠﺔ ﻤﺭﺘﻴﻥ ) ﻻ ﻴﻤﻜﻥ ﻟﻠﻤﺴﺎﻓﺭ ﺃﻥ ﻴﺴﺎﻓﺭ ﻓﻲ ﺭﺤﻠـﺔ ﻭﺍﺤـﺩﺓ ﻤـﺭﺘﻴﻥ ( ﻭﺘﻅﻬﺭ ﺍﻟﺭﺴﺎﻟﺔ Key Violationﻭﺫﻟﻙ ﻷﻨﻪ ﻻ ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﻘﻴﻡ ﻓﻲ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ﻤﻜﺭﺭﺓ . ـ ﺃﺨﻴﺭﹰﺍ ﺤﺎﻭل ﺍﻟﺘﺩﺭﺏ ﻋﻠﻰ ﺍﻷﻭﺍﻤﺭ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ . Record
99
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺴﺎﺩﺴﺔ ﻋﺸﺭ ﺒﺒﻌﺩ ﺃﻥ ﻗﻤﻨﺎ ﺒﺒﻨﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺒﺎﺴﺘﺨﺩﺍﻡ Database Desktopﺴﻨﻜﻤل ﺍﻵﻥ ﻤﺸﻭﺍﺭﻨﺎ ﺒﺘﻌﻠﻡ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺨﻼل ﺩﻟﻔﻲ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺠﺩﺍﻭل
ﻋﺭﺽ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻓﻲ ﻨﺎﻓﺫﺓ :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺎﺼﺭ . Table, DBGrid, DataSource, DBNavigator ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Travel DatabaseName Passengers TableName True Active ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSourceﺍﻟﺨﺎﺼﺔ DataSetﺍﻟﻘﻴﻤﺔ Table1 ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭﻴﻥ DBNavigatorﻭ DBGridﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ DataSource1 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ ... ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﻘﻭل :
ﺘﻤﻜﻨﻨﺎ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Data Controlﻤﻥ ﺭﺅﻴﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﺤﺭﻴﺭﻫﺎ ﺃﻤﺎ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻟﻭﺼـﻭل ﺇﻟـﻰ
ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﺘﺤﻜﻡ ﺒﻁﺭﻴﻘﺔ ﻋﺭﻀﻬﺎ ﻋﻠﻴﻨﺎ ﺇﻨﺸﺎﺀ ﻋﻨﺎﺼﺭ ﺍﻟﺤﻘﻭل . ﺇﻨﺸﺎﺀ ﻋﻨﺎﺼﺭ ﺍﻟﺤﻘﻭل :Tfield
ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻟﺘﻌﺭﻴﻑ ﻻﺌﺤﺔ ﻤﻥ ﺍﻟﺤﻘﻭل ﻀﻤﻥ ﺍﻟﺠﺩﻭل ) ﻋﻨﺼﺭ ﺍﻟﺠﺩﻭل ( Tableﻭﻤﻥ ﺃﺠل ﻜـل ﺤﻘل ﺘﻨﺸﺊ ﺩﻟﻔﻲ ﻋﻨﺼﺭ ﻤﻥ ﺍﻟﻨﻭﻉ Tfieldﻭﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻏﻴﺭ ﻤﺭﺌﻲ ﻭﻟﻜﻥ ﻴﻤﻜـﻥ ﻤـﻥ ﺨﻼﻟﻪ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻗﻴﻤﺔ ﺍﻟﺤﻘل ﻭﺍﻟﺘﺤﻜﻡ ﺒﻤﻭﺍﺼﻔﺎﺘﻬﺎ . ﻟﻔﺘﺢ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ Table1ﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓـﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ،ﺇﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﻤﻥ ﻓﻲ ﻭﺴﻁ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻟﺘﻅﻬﺭ ﻗﺎﺌﻤﺔ ﺍﺨﺘﺭ ﻤﻨﻬﺎ Add
All Fieldﻋﻨﺩﻫﺎ ﺴﺘﻅﻬﺭ ﺤﻘﻭل ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻓﻲ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ،ﺃﻋﺩ ﺍﻟـﻀﻐﻁ ﺒـﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﺘﻅﻬﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻼﺌﺤﺔ ﻤﻥ ﻗﺹ ﻭﻨﺴﺦ ﻭﺤﺫﻑ .. 1ـ ﺍﺤﺫﻑ ﺍﻟﺤﻘل Pnoﻤﻥ ﺍﻟﻼﺌﺤﺔ ﻭﻻﺤﻅ ﺍﺨﺘﻔﺎﺀﻩ ﻤﻥ ﺍﻟﻌﻨﺼﺭ . DBGrid
2ـ ﺃﻋﺩ ﺘﺭﺘﻴﺏ ﺍﻟﺤﻘﻭل ﻀﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺴﺤﺏ ﺍﻟﺤﻘل PassNoﻭﺇﻓﻼﺘﻪ ﻓﻲ ﺃﻋﻠﻰ ﺍﻟﻘﺎﺌﻤـﺔ ﻭﻻﺤـﻅ ﺘﺄﺜﻴﺭ ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ . DBGrid ﺍﻓﺘﺢ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﻘﺴﻡ Typeﻭﻻﺤﻅ ﻗﻴﺎﻡ Delphiﺒﺘﻌﺭﻴﻑ ﻋﺩﺩ ﻤﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺘﻡ ﺘﻌﺭﻴﻑ ﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﻨﺼﻲ ﻷﻥ ﺍﻟﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﻨﺹ Table1Pname: TStringField; // ;Table1Nationalty: TStringField ﺘﻡ ﺘﻌﺭﻴﻑ ﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺼﺤﻴﺢ ﻷﻥ ﺍﻟﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺼﺤﻴﺢ Table1PassNo: TIntegerField; // 100
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﺤﺩﻴﺩ ﺨﻭﺍﺹ ﺍﻟﻌﻨﺼﺭ ﻤﻥ ﺍﻟﻨﻭﻉ : Tfield ﺍﻓﺘﺢ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﺍﺨﺘﺭ ﺍﻟﺤﻘل PassNoﻭﻻﺤﻅ ﺨﻭﺍﺹ ﻫﺫﺍ ﺍﻟﺤﻘل ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﺤﻴﺙ ﻴﻅﻬﺭ ﻓـﻲ ﺃﻋﻠـﻰ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﻭﻨﻭﻉ ﺍﻟﻌﻨﺼﺭ Table1Pname: TStringFieldﺤﻴﺙ ﺘﻌﻁﻲ ﺩﻟﻔﻲ ﺍﺴﻡ ﻫﺫﺍ ﺍﻟﺤﻘـل
ﺘﻠﻘﺎﺌﻴﹰﺎ ﻭﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺘﻐﻴﺭﻩ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ . Name
3ـ ﻏﻴﺭ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Alignmentﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ taCenterﻭﻻﺤﻅ ﺘﺄﺜﻴﺭ ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ . DBGrid 4ـ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DisplayLabelﺍﻟﻘﻴﻤﺔ " ﺭﻗﻡ ﺠﻭﺍﺯ ﺍﻟﺴﻔﺭ " . ﺴﻨﺘﻌﺭﻑ ﻻﺤﻘﹰﺎ ﻋﻠﻰ ﺇﻤﻜﺎﻨﻴﺎﺕ ﺇﻀﺎﻓﻴﺔ ﻟﻬﺫﺍ ﻟﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﺃﻤﺎ ﺍﻵﻥ ﻓﺴﻨﺘﻌﻠﻡ ﻜﻴﻔﻴﺔ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻗﻴﻤﺔ ﺍﻟﺤﻘل ﺒﺭﻤﺠﻴﹰﺎ :
ﻗﺭﺍﺀﺓ ﻗﻴﻡ ﺍﻟﺤﻘﻭل :
ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﻭﻟﻰ :ﺒﺎﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﻋﻨﺎﺼﺭ ﺍﻟﺤﻘﻭل : TFeild
ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻋﻨﺼﺭ label1ﻭﺯﺭ : ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Label1.Caption := Table1Pname.value ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻭﻻﺤﻅ ﻅﻬﻭﺭ ﻗﻴﻤﺔ ﺍﻟﺤﻘل Pnameﻓﻲ ﺍﻟﻌﻨﺼﺭ ، Labelﻏﻴـﺭ ﺍﻟـﺴﺠل ﺍﻟﺤـﺎﻟﻲ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻤﺭﺓ ﺃﺨﺭﻯ ... ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻟﺤﺎﻕ ﻗﻴﻤﺔ ﺍﻟﺤﻘل Tabel1Pnameﻓﻲ ﺍﻟﺨﺎﺼﺔ Captionﻭﺫﻟﻙ ﻷﻥ ﺍﻟﺤﻘل ﻭﺍل Captionﻤـﻥ ﻨﻭﻉ Stringﺃﻤﺎ ﺇﺫﺍ ﺃﺭﺩﺕ ﺇﻟﺤﺎﻕ ﻗﻴﻤﺔ ﺤﻘل ﻋﺩﺩﻱ ﺇﻟﻰ ﻨﻭﻉ ﻨﺹ ﺍﺴﺘﺒﺩل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Label1.Caption := Tabel1PassNo.AsString ﻭﻴﻤﻠﻙ ﺍﻟﻌﻨﺼﺭ TFieldﻋﺩﺩ ﻤﻥ ﺍﻟﺨﻭﺍﺹ ﻴﺸﺒﻪ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻭﻫﻲ ، AsFloat ، AsInteger ، AsBoolean . AsDateTime
ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ :ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺨﺎﺼﺔ ) ﺍﻟﻤﻨﻬﺞ ( : FieldByName
ﻭﻟﻪ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : ﻭﻟﻠﺘﺤﻭﻴل ﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ :
TableName.FeildByName('FieldName').Value TableName.FeildByName('FieldName').AsType
ﻤﺜﺎل ) : ( 1ﺃﻀﻑ ﺯﺭﻴﻥ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻭﻋﻨﺼﺭ ﻨﺹ : Label ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : label1.Caption := Table1.FieldByName('Pname').Value ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Label2.Caption := table1.fieldbyname('PassNo').AsString ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻟﺜﺔ :ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﻘل ﻜﻨﻭﻉ Variant ﻭﻟﻬﺎ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
]'Table1['FieldName
ﻤﺜﺎل :ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ; ]'Label1.Caption := Table1['Pname ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : 101
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
; ]'Label2.Caption := table1['PassNo ﻻﺤﻅ ﺃﻨﻪ ﻻ ﺤﺎﺠﺔ ﻻﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻨﻬﺞ AsString ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺭﺍﺒﻌﺔ :
ﻤﺜﺎل :ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ
TableName.Field[Index].Value .AsString ; ]'Label1.Caption := Table1['Pname
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Label2.Caption := table1.Fields[3].AsString
ﺇﻟﺤﺎﻕ ﻗﻴﻡ ﺒﺎﻟﺤﻘﻭل : 1ـ ﺘﻌﺩﻴل ﺴﺠل ) ﺤﻘل ( : ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻨﺭﻴﺩ ﺃﻥ ﻨﻐﻴﺭ ﻓﻲ ﻗﻴﻤﺔ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻭﻨﺴﺘﺨﺩﻡ ﺍﻷﺴﻠﻭﺏ ﺍﻟﺘﺎﻟﻲ : ; Table1.Edit ; Tabel1.FieldByName( 'FieldName').Value := NewValue ;Table1.Post ﻜﻤﺎ ﻭﺠﺩﻨﺎ ﻋﻨﺩ ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻟﺠﺩﺍﻭل ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﻗﻤﻨﺎ ﺒﺎﻻﻨﺘﻘﺎل ﺇﻟﻰ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴـﺭ ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﻋﻨﺩ ﺇﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻀﻊ ﺍﻟﺠﺩﻭل ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻟﺫﻟﻙ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ . Table1.Edit ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺘﻘﻭﻡ ﺒﺈﺩﺨﺎل ﺍﻟﻘﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ ﺩﺍﺨل ﺍﻟﺤﻘل ،ﺃﻤﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.Postﻓﻤﻬﻤﺘﻬﺎ ﺜﺜﺒﻴﺕ ﺍﻟﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺩﺨﻠﺔ ﻋﻠﻰ ﺍﻟﺠﺩﻭل ﻭﺘﹲﺨﺭﺝ ﺍﻟﺠﺩﻭل ﻤﻥ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ .
ﻤﺜﺎل :ﺃﻀﻑ ﺜﻼﺜﺔ ﻋﻨﺎﺼﺭ ﺘﺤﺭﻴﺭ Editﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ; Table1.Edit ; Table1.Fieldbyname('Pname').Value := Edit1.Text ; Table1.FieldByName('Nationalty').Value := Edit2.Text ; Table1.FieldByName('PassNo').AsString := Edit3.Text ; Table1.Post ﻴﻤﻜﻥ ﺍﺴﺘﺒﺩﺍل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺭﺍﺒﻌﺔ ; table1.FieldByName('PassNo').AsString := edit3.Textﺒﺎﻟﺘﻌﻠﻴﻤﺔ ; )Table1.FieldByName('PassNo').Value := strtoint( Edit3.Text ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺃﺩﺨل ﻗﻴﻡ ﻓﻲ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻭﻻﺤﻅ ﺘﻐﻴﺭ ﻗﻴﻡ ﺍﻟﺴﺠل . ﻤﻼﺤﻅﺔ :ﻭﺠﺩﻨﺎ ﺃﻨﻪ ﻴﻤﻜﻥ ﺘﻌﺩﻴل ﺍﻟﺠﺩﻭل ﻤﻥ ﺨﻼل ﺍﻟﻌﻨﺼﺭ DBGridﺩﻭﻥ ﺃﻥ ﻨﻘﻭﻡ ﺒﻭﻀﻊ ﺍﻟﺠـﺩﻭل ﻓـﻲ ﻭﻀـﻊ
ﺍﻟﺘﺤﺭﻴﺭ ﻭﻫﺫﺍ ﻴﻌﻭﺩ ﻟﻠﺨﺎﺼﺔ AutoEditﻟﻠﻌﻨﺼﺭ DataSourceﺤﻴﺙ ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺒﻭﻀﻊ ﺍﻟﺠﺩﻭل ﻓﻲ ﻭﻀـﻊ ﺍﻟﺘﺤﺭﻴﺭ ﺒﺸﻜل ﺘﻠﻘﺎﺌﻲ ﻭﺒﺈﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Falseﻨﻔﻘﺩ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺠﺩﻭل .
ﻤﻥ ﺍﻟﻤﻔﻴﺩ ﺃﻥ ﺘﻼﺤﻅ ﺃﻨﻨﺎ ﺍﺴﺘﻁﻌﻨﺎ ﺃﻥ ﻨﺼل ﻟﻠﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺠﺩﻭل ﺒﺩﻭﻥ ﺍﻟﻤﺭﻭﺭ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ) DataSoucreﺴﻭﺍﺀ
ﻓﻲ ﺍﻟﻘﺭﺍﺀﺓ ﺃﻭ ﺍﻟﻜﺘﺎﺒﺔ ( ﺤﻴﺙ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻌﻨﺼﺭ Table1ﻤﺒﺎﺸﺭﺓ . 102
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﺇﻀﺎﻓﺔ ﺴﺠل : ; Table1.insert ; Table1.Fieldbyname('Pname').Value := Edit1.Text ; Table1.FieldByName('Nationalty').Value := Edit2.Text ; Table1.FieldByName('PassNo').AsString := Edit3.Text ; Table1.Post ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.insertﺒﻭﻀﻊ ﺍﻟﺠﺩﻭل ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺘﻀﻴﻑ ﺴﺠل ﺠﺩﻴﺩ ﻓﺎﺭﻍ ﺇﻟﻰ ﺍﻟﺠـﺩﻭل ﻭﺘﺠﻌﻠـﻪ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ،ﺜﻡ ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺒﺈﻟﺤﺎﻕ ﻗﻴﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﺴﺠل ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﺨﻴﺭﺓ ﺘﻘﻭﻡ ﺒﺘﺜﺒﻴﺕ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل . ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻁﺭﻕ ﺍﻟﻘﺭﺍﺀﺓ ﺍﻟﺴﺎﺒﻘﺔ ﻓﻲ ﺍﻟﻜﺘﺎﺒﺔ ﺃﻱ ﻴﻤﻜﻥ ﺍﺴﺘﺒﺩﺍل ﺍﻟﺘﻌﻠﻴﻤﺔ ; Table1.Fieldbyname('Pname').Value := Edit1.Text Table1.Field[0].Value ـﺔ =: ]'Table1['Pnameﺃﻭ ﺒﺎﻟﺘﻌﻠﻴﻤـ ـﺔ ; := Edit1.Text ﺒﺎﻟﺘﻌﻠﻴﻤـ ; Edit1.Text ﺃﻭ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ .... Table1Pname.Value := Edit1.Text ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻨﺎﺼﺭ ﺍﻟﺼﻔﺤﺔ : Data Control 1ـ ﺍﻟﻌﻨﺼﺭ : DBGrid ﺘﻌﺭﻓﻨﺎ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺴﺎﺒﻘﹰﺎ ﻭﺴﻨﺸﺭﺡ ﺍﻵﻥ ﺒﻌﺽ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﻟﻪ : ﺍﻟﻌﻤل
ﺍﻟﺨﺎﺼﺔ BiDiMode
ﺍﻟﻘﻴﻤﺔ bdRightToLeft
Color
ﺃﻱ ﻟﻭﻥ
ﺇﻋﻁﺎﺀ ﻟﻭﻥ ﻟﺼﻔﺤﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻌﻨﺼﺭ
FixedColor
ﺃﻱ ﻟﻭﻥ
ﺇﻋﻁﺎﺀ ﻟﻭﻥ ﻟﺤﻭﺍﻑ ﺍﻟﺠﺩﻭل
ﺘﺤﻭل ﺍﺘﺠﺎﻩ ﺍﻟﺠﺩﻭل ﺒﺤﻴﺙ ﻴﺼﺒﺢ ﻤﻥ ﺍﻟﻴﻤـﻴﻥ ﺇﻟـﻰ ﺍﻟﻴﺴﺎﺭ
Font
ﺘﻐﻴﺭ ﻨﻤﻁ ﺍﻟﺨﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺼﻔﺤﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ
TitleFont
ﺘﻐﻴﺭ ﻨﻤﻁ ﺍﻟﺨﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺃﺴﻤﺎﺀ ﺍﻷﻋﻤﺩﺓ
ﻜﻤﺎ ﻴﻭﺠﺩ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Optionﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻔﺭﻋﻴﺔ ﺍﻟﻬﺎﻤﺔ: ﺍﻟﻌﻤل
ﺍﻟﺨﺎﺼﺔ dgEditing
ﺍﻟﻘﻴﻤﺔ True or False
dgTitle
True or False
ﺇﻅﻬﺎﺭ ﺃﻭ ﻋﺩﻡ ﺇﻅﻬﺎﺭ ﺃﺴﻤﺎﺀ ﺍﻷﻋﻤﺩﺓ
dgIndicator
True or False
ﺇﻅﻬﺎﺭ ﺃﻭ ﺇﺨﻔﺎﺀ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ
dgColLines
True or False
ﺇﻅﻬﺎﺭ ﺃﻭ ﺇﺨﻔﺎﺀ ﺨﻁﻭﻁ ﺒﻴﻥ ﺍﻷﻋﻤﺩﺓ
dgTabs
True or False
ﻤﻨﻊ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺯﺭ Tabﻟﻠﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺤﻘﻭل
dgRowSelect
True or False
ﺇﻤﻜﺎﻨﻴﺔ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺴﺠل ﺒﺎﻟﻜﺎﻤل
dgConfirmDelete
True or False
ﺍﻟﺘﺤﻜﻡ ﺒﺈﻅﻬﺎﺭ ﺭﺴﺎﻟﺔ ﺘﺄﻜﻴﺩ ﺤﺫﻑ ﺴﺠل
ﺍﻟﺘﺤﻜﻡ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﺤﺭﻴﺭ ﺃﻭ ﻋﺩﻤﻪ ﻓﻲ ﺍﻟﻌﻨﺼﺭ
103
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
dgMutiSelect
http://www.alshater.net
ﺇﻤﻜﺎﻨﻴﺔ ﺍﺨﺘﻴﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﺴﺠل ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ
True or False
ﺒﻘﻲ ﺃﻥ ﻨﺸﺭﺡ ﺍﻟﺨﺎﺼﺔ Columnsﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ : ﺒﺎﺨﺘﻴﺎﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﻭ ﺒﺎﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ DBGridﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ : ﺤﻴﺙ ﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻓﺎﺭﻏﺔ ،ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻷﻴﻘﻭﻨـﺔ ﺍﻟﺜﺎﻟﺜـﺔ ) ( Add All Field
ﻓﺘﻅﻬﺭ ﺠﻤﻴﻊ ﺃﺴﻤﺎﺀ ﺤﻘﻭل ﺍﻟﺠﺩﻭل ﺩﺍﺨل ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ : ﻓﻲ ﺤﺎل ﺤﺫﻑ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﻓﻠﻥ ﻴﻅﻬﺭ ﻓـﻲ ﺍﻟﻌﻨـﺼﺭ DBGridﻭﻟﻠﻘﻴﺎﻡ ﺒﺫﻟﻙ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ Deleteﺒﻌﺩ ﺍﺨﺘﻴـﺎﺭ
ﺍﻟﺤﻘل ﺍﻟﻤﺭﺍﺩ ﺤﺫﻓﻪ .
ﻤﻼﺤﻅﺔ :ﻴﺨﺘﻠﻑ ﺍﻷﻤﺭ ﻫﻨﺎ ﻋﻥ ﺤﺫﻑ ﺍﻟﺤﻘل ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﺫﻟﻙ ﻷﻨﻪ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺤﻘل ﺍﻟﻤﺤﺫﻭﻑ ﻤﻥ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﺒﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻌﻨﺼﺭ Tableﻤﺒﺎﺸﺭﺓ ﺃﻭ ﻋﻥ ﻁﺭﻴﻕ ﺭﺒﻁﻪ ﺒﺄﺤﺩ ﻋﻨﺎﺼـﺭ
، Data Controlﺃﻤﺎ ﻓﻲ ﺤﺎل ﺤﺫﻑ ﺍﻟﻌﻨﺼﺭ ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻓﻠﻥ ﻨﺴﺘﻁﻴﻊ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻗﻴﻡ ﻫﺫﺍ ﺍﻟﺤﻘل ) ﻋﻤﻠﻴﹰﺎ ﺍﻟﻌﻨﺼﺭ Tableﻟﻥ ﻴﺘﺼل ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻹﺤﻀﺎﺭ ﻗﻴﻡ ﻫﺫﺍ ﺍﻟﺤﻘل ( . ﺒﺎﺨﺘﻴﺎﺭ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﺘﻅﻬﺭ ﺨﺼﺎﺌﺹ ﺍﻟﺤﻘل ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻨﻬﺎ ﻜﻤﺎﻴﻠﻲ : ﺍﻟﺨﺎﺼﺔ Alignment
ﺍﻟﻌﻤل
ﺍﻟﻘﻴﻤﺔ
ﺍﻟﺘﺤﻜﻡ ﺒﻤﻜﺎﻥ ﻅﻬﻭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺩﺍﺨل ﺍﻟﻌﻤﻭﺩ
Color
ﺇﻋﻁﺎﺀ ﻟﻭﻥ ﻤﺤﺩﺩ ﻟﻌﻤﻭﺩ
Font
ﻼ ﺇﻋﻁﺎﺀ ﻨﻤﻁ ﺨﻁ ﻤﺤﺩﺩ ﻟﻌﻤﻭﺩ ) ﺇﻅﻬﺎﺭ ﺃﺤﺩ ﺍﻷﻋﻤﺩﺓ ﺒﻠﻭﻥ ﺨﻁ ﺁﺨﺭ ﻤﺜ ﹰ (
Title-Alignment
ﺍﻟﺘﺤﻜﻡ ﺒﻤﻜﺎﻥ ﻅﻬﻭﺭ ﻋﻨﻭﺍﻥ ﺍﻟﻌﻤﻭﺩ
Title-Caption
ﺇﻋﻁﺎﺀ ﻋﻨﻭﺍﻥ ﻟﻌﻤﻭﺩ ) ﺃﻋﻁ ﺇﺴﻡ ﺍﻟﻌﻤﻭﺩ ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ (
Title-Font
ﺇﻋﻁﺎﺀ ﻨﻤﻁ ﺨﻁ ﻤﺎ ﻟﻌﻨﻭﺍﻥ ﺍﻟﻌﻤﻭﺩ
ﺴﻨﺸﺭﺡ ﺍﻟﺨﺎﺼﺔ ﺍﻷﺨﻴﺭﺓ PickListﺒﻤﺜﺎل :
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺈﻅﻬﺎﺭ ﻻﺌﺤﺔ ﻤﻥ ﺍﻟﻘﻴﻡ ﻻﺨﺘﻴﺎﺭ ﺇﺤﺩﺍﻫﺎ : ﺍﺨﺘﺭ ﺍﻟﻌﻤﻭﺩ Nationalityﺍﺨﺘﺭ ﺍﻟﺨﺎﺼﺔ PickListﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ، ...ﺴـﺘﻅﻬﺭ ﺍﻟﻨﺎﻓـﺫﺓ String List Editorﺃﻜﺘﺏ ﻓﻴﻬﺎ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :ﺤﻠﺏ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻷﻭل ،ﺩﻤﺸﻕ ﻓﻲ ﺍﻟﺜﺎﻨﻲ ﺜﻡ ﺍﻟﻘﺎﻫﺭﺓ ﺜﻡ ﻋﻤﺎﻥ ﺜـﻡ ﺍﻟﺭﻴـﺎﺽ ﺜـﻡ ﺍﻟﺒﺤﺭﻴﻥ ........ ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺤﻘل Nationalityﺴﻴﻅﻬﺭ ﺴﻬﻡ ﺍﻟﻘﺎﺌﻤﺔ ﺒﺠﻭﺍﺭﻩ ﺇﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺴﻬﻡ ﻭﺍﺨﺘﺭ ﻗﻴﻤـﺔ ﻤﻥ ﺍﻟﻘﻴﻡ ﺍﻟﻤﺩﺨﻠﺔ .
104
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻜﻤﺎ ﺃﻨﻪ ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺩﺨل ﻗﻴﻤﻪ ﻤﻥ ﺨﺎﺭﺝ ﻫﺫﻩ ﺍﻟﻼﺌﺤﺔ ﻴﺩﻭﻴﹰﺎ . ﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﺇﻀﺎﻓﺔ ﻋﻤﻭﺩ ﺠﺩﻴﺩ ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ﻋﻥ ﻁﺭﻴﻕ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺯﺭ ﺍﻷﻭل ) ( Add Newﻭﺭﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻤﻭﺩ
ﻼ ﺃﻥ ﺘﻌﺭﺽ ﻋﻤﻭﺩ ﻤﺎ ﻤﺭﺘﻴﻥ ) ﺴﻨﺘﻌﺭﻑ ﻻﺤﻘـﹰﺎ ﻋﻠـﻰ ﻤﻊ ﺤﻘل ﻤﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼﺔ ، FieldNameﻗﺩ ﺘﺭﻴﺩ ﻤﺜ ﹰ ﻤﻴﺯﺓ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ( . ﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﺘﻐﻴﺭ ﺘﺭﺘﻴﺏ ﺍﻷﻋﻤﺩﺓ ﻓﻲ DBGridﺒﺘﻐﻴﺭ ﺘﺭﺘﻴﺒﻬﺎ ﻓﻲ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ....
2ـ ﺍﻟﻌﻨﺼﺭ : DBNavigatorﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺴﺎﺒﻘﺔ ﻴﻤﻠﻙ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : : Flatﺘﺠﻌل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﺯﺭﺍﺭ ﺍﻟﻌﻨﺼﺭ ﻤﻨﺒﺴﻁﻪ ) ﻤﺴﻁﺤﺔ ( .
ﺍﻟﺨﺎﺼﺔ : Hintsﺘﻤﻜﻥ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻤﻥ ﻜﺘﺎﺒﺔ ﺘﻠﻤﻴﺢ ﻟﻙ ﺯﺭ ﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﻌﻨﺼﺭ .
ﺍﻟﺨﺎﺼﺔ : VisibleButtonﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻹﺨﻔﺎﺀ ﺃﻭ ﺇﻅﻬﺎﺭ ﺒﻌﺽ ﺃﺯﺭﺍﺭ ﺍﻟﻌﻨﺼﺭ . 3ـ ﺍﻟﻌﻨﺼﺭ : DBtextﻴﺸﺒﻪ ﺍﻟﻌﻨﺼﺭ Labelﻭﻟﻜﻨﻪ ﻴﻤﻜﻥ ﺭﺒﻁﻪ ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ . 4ـ ﺍﻟﻌﻨﺼﺭ : DBEditﺘﻡ ﺸﺭﺤﻪ ﻤﺴﺒﻘﹰﺎ . 5ـ ﺍﻟﻌﻨﺼﺭ : DBMemoﻴﺘﻡ ﺭﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ .Memo 6ـ ﺍﻟﻌﻨﺼﺭ : DBImageﻴﺘﻡ ﺭﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺤﻘل ﻤﻥ ﺍﻟﻨﻭﻉ ﺼﻭﺭﺓ .
105
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺴﺎﺒﻌﺔ ﻋﺸﺭ ﺴﻨﺘﺎﺒﻊ ﺍﻵﻥ ﻤﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﺼﻔﺤﺔ : Data Control
6ـ ﺍﻟﻌﻨﺼﺭ : DBImageﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻌﺭﺽ ﻭﺇﻀﺎﻓﺔ ﺍﻟﺼﻭﺭ ﺇﻟﻰ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ . ﻤﺜﺎل ) :ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭﻴﻥ DBMemoﻭ : ( DBImage ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ Table :ﻭ Datasourceﻭ DBGridﻭ DBImageﻭ DBMemoﻭ DBNavigator ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Table1ﻤﻊ ﺍﻟﻘﺎﻋﺩﺓ DBDemosﻭﻤﻊ ﺍﻟﺠﺩﻭل ) biolife.dbﻭﻫﻭ ﺠﺩﻭل ﻴﺤﻭﻱ ﻤﻌﻠﻭﻤـﺎﺕ ﻋـﻥ ﺒﻌﺽ ﺍﻷﺴﻤﺎﻙ ( ﻭﺃﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ ،Trueﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DataSetﻟﻠﻌﻨﺼﺭ DataSourceﺍﻟﻘﻴﻤﺔ Table1ﻭﺃﻋﻁ ﺒﻘﻴﺔ ﺍﻟﻌﻨﺎﺼـﺭ ﻓـﻲ ﺍﻟﺨﺎﺼـﺔ DataSourceﺍﻟﻘﻴﻤـﺔ ، .. DataSource1ﻭﺍﺭﺒـﻁ ﺍﻟﻌﻨـﺼﺭ
DBMemo1ﻤﻊ ﺍﻟﺤﻘل Notesﻓﻲ ﺍﻟﺨﺎﺼﺔ ، Datafieldﻭﺍﻟﻌﻨﺼﺭ DBImage1ﻤﻊ ﺍﻟﺤﻘل ... Graphic
ﻻ ﺃﻥ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻠﻴﻥ Notesﻭ Graphicﻏﻴﺭ ﻅﺎﻫﺭﺘﻴﻥ ﻓﻲ ﺍﻟﻌﻨﺼﺭ DBGridﻭﺫﻟﻙ ﻷﻥ ﻫﺫﺍ ﺍﻟﻌﻨـﺼﺭ ﻻ ﻻﺤﻅ ﺃﻭ ﹰ ﻴﺴﺘﻁﻴﻊ ﻋﺭﺽ ﺍﻟﺤﻘﻭل ﺫﺍﺕ ﺍﻟﺤﺠﻡ ﺍﻟﻜﺒﻴﺭ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻻ ﻴﺴﺘﻁﻴﻊ ﺘﺤﺭﻴﺭﻫﺎ ﻟﺫﻟﻙ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﻻ ﺒﺩ ﻟﻨﺎ ﻤﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﺘﺴﺘﻁﻴﻊ ﺇﻅﻬﺎﺭ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺤﻘﻭل ﻟﺫﻟﻙ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﻌﻨﺼﺭﻴﻥ DBMemoﻭ
: DBImage
ﺘﺤﺭﻴﺭ ) ﺇﻀﺎﻓﺔ ( ﺤﻘل ﻤﻥ ﻨﻭﻉ : Graphic ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Editﺃﻭ ﺍﻟﺯﺭ Insertﻴﻤﻜﻨﻙ ﺘﺤﺭﻴﺭ ﺍﻟﺠﺩﻭل ﻤﻥ ﺨـﻼل ﺍﻟﻌﻨـﺼﺭ DBGridﻭ ﺍﻟﻌﻨـﺼﺭ DBMemoﻭﺘﺒﻘﻰ ﺍﻟﻤﺸﻜﻠﺔ ﻓﻲ ﻜﻴﻔﻴﺔ ﺘﺤﺭﻴﺭ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ . ﻴﺘﻡ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻌﻨﺼﺭ DBImageﻋﻥ ﻁﺭﻴﻕ ﺤﺎﻓﻅﺔ ﺍﻟﻭﻴﻨﺩﻭﺯ ClipBoardﻭﻴﻜﻭﻥ ﺫﻟﻙ ﺒﺈﺤﺩﻯ ﺍﻟﻁﺭﻴﻘﻴﻥ
1ـ ﻨﺴﺦ ﺍﻟﺼﻭﺭﺓ ﺍﻟﻤﻁﻠﻭﺒﺔ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻋﻥ ﻁﺭﻴﻕ ﺃﺤﺩ ﺒﺭﺍﻤﺞ ﺍﻟﺭﺴﻡ ﻭﻤﻥ ﺜﻡ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻌﻨﺼﺭ DbImageﺇﺜﻨـﺎﺀ
ﺍﻟﺘﻨﻔﻴﺫ ﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭﻴﻥ Ctrl+vﺃﻭ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻷﻤـﺭ DBImage1.PasteFromClipboardﻓـﻲ ﺤـﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ .
106
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﺘﺤﻤﻴل ﺍﻟﺼﻭﺭﺓ ﻤﻥ ﻤﻠﻑ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ OpenPictureDialogﻭﻤﻥ ﺜﻡ ﻨﺴﺦ ﺍﻟـﺼﻭﺭﺓ ﺇﻟـﻰ ﺍﻟﺤﺎﻓﻅـﺔ ﻭﻟﺼﻘﻬﺎ ﻭﻟﺘﻨﻔﻴﺫ ﺫﻟﻙ ﺃﻀﻑ ﻋﻨﺼﺭ ﺯﺭ ﻭﻋﻨﺼﺭ OpenPictureDialogﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ) ﻻ ﺘﻨﺴﻰ ﺍﺴـﺘﺨﺩﺍﻡ
ﺍﻟﻭﺤﺩﺓ Jpegﻓﻲ ﺤﺎل ﺃﺭﺩﺕ ﺍﺴﺘﺨﺩﺍﻡ ﺼﻭﺭ ( Jpgﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : If OpenPictureDialog1.Execute then Begin ;) DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName ; DBImage1.CopyToClipboard ; DBImage1.PasteFromClipboard ;end ﻨﻘﻭﻡ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺒﺘﺤﻤﻴل ﺍﻟﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ DBImage1ﻭﻤﻥ ﺜﻡ ﻨﺴﺨﻬﺎ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻭﺇﻋـﺎﺩﺓ ﻟـﺼﻘﻬﺎ ﻓـﻲ ﺍﻟﻌﻨﺼﺭ .
ﻋﻠﻰ ﻜل ﺤﺎل ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻟﻴﺴﺕ ﻁﺭﻴﻘﺔ ﺠﻴﺩﺓ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﺎﻓﻅﺔ ﻭﻟﻜﻨﻬﺎ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﺴﻬل ﻭﺴﻭﻑ ﻨﺘﻌﻠﻡ ﻗﺭﻴﺒﹰﺎ ﺃﺴﻠﻭﺏ
ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﺎﻓﻅﺔ ﻋﻨﺩ ﺩﺭﺍﺴﺔ ﺍﻟﺭﺴﻡ ﻓﻲ ﺩﻟﻔﻲ . 3ـ ﻴﻤﻜﻥ ﺘﺤﺭﻴﺭ ﺤﻘل ﻤﻥ ﻨﻭﻉ ﺼﻭﺭﺓ ﻤﺒﺎﺸﺭﺓ ﺩﻭﻥ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ DBImageﺃﻭ DataSourceﻜﻤﺎ ﻭﺠﺩﻨﺎ ﻓﻲ ﺍﻟﺠﻠﺴﺔ ﺍﻟﻤﺎﻀﻴﺔ ﻭﻴﻜﻭﻥ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;Table1.edit If OpenPictureDialog1.Execute then ;)Table1Graphic.LoadFromFile(OpenPictureDialog1.FileName ; Table1.Post ﻤﻼﺤﻅﺔ : 1ـ ﻻ ﻴﻤﻜﻥ ﻓﻲ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺼﻭﺭ ﻤﻥ ﻨﻭﻉ Jpgﻷﻥ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ ﺼﻭﺭﺓ ﻻ ﻴﺨﺯﻥ ﺇﻻ ﺼﻭﺭ ﻤﻥ ﻨﻭﻉ
، Bmpﺃﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻓﺘﻘﻭﻡ ﺍﻟﺤﺎﻓﻅﺔ ﺒﺘﺤﻭﻴل ﺍﻟﻤﻠﻑ ﻤﻥ ﻨﻭﻉ Jpgﺇﻟﻰ ﻤﻠﻑ Bmpﺘﻠﻘﺎﺌﻴﹰﺎ .
2ـ ﺘﺨﺯﻴﻥ ﺍﻟﺼﻭﺭ ﻤﻥ ﻨﻭﻉ Bmpﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺴﻴﺤﺘﺎﺝ ﺇﻟﻰ ﻤﺴﺎﺤﺔ ﺘﺨﺯﻴﻥ ﻜﺒﻴـﺭﺓ ﻟـﺫﻟﻙ ﻴﻔـﻀل ﺒﻌـﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺤﻘل ﻤﻥ ﻨﻭﻉ Binaryﻭﺘﺨﺯﻴﻥ ﻤﻠﻑ ﺍﻟﺼﻭﺭﺓ Jpgﺜﻨﺎﺌﻴﹰﺎ ﻭﻤﻥ ﺜﻡ ﺇﻋﺎﺩﺓ ﻫﺫﺍ ﺍﻟﺤﻘل ﺇﻟﻰ ﻤﻠـﻑ ﻹﻅﻬﺎﺭﻩ ... 7ـ ﺍﻟﻌﻨﺼﺭ : DBListBox
ﻴﻌﺭﺽ ﻗﺎﺌﻤﺔ ﻤﻥ ﺍﻟﻘﻴﻡ ﺍﻟﺠﺎﻫﺯﺓ ﻟﺘﻤﻜﻴﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺍﺨﺘﻴﺎﺭ ﺇﺤﺩﺍﻫﺎ ﻹﺩﺨﺎﻟﻬﺎ ﻀﻤﻥ ﺴﺠل ﻤﺎ ﻓﻲ ﺤﻘل ﻤﻌﻴﻥ ﻭﻻ ﻴﻤﻜﻥ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺇﻀﺎﻓﺔ ﻗﻴﻡ ﺠﺩﻴﺩﺓ ﻓﻲ ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ . 8ـ ﺍﻟﻌﻨﺼﺭ : DBComboBox ﻴﻅﻬﺭ ﻗﺎﺌﻤﺔ ﻤﻨﺴﺩﻟﺔ ﻤﻥ ﺍﻟﻘﻴﻡ ﺒﺤﻴﺙ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﺨﺘﻴﺎﺭ ﺇﺤﺩﺍﻫﺎ ﻹﺩﺨﺎﻟﻬﺎ ﻟﺤﻘل ﻤﺎ ،ﻭﻴﻤﻜﻥ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺃﻴـﻀﹰﺎ ﺃﻥ ﻴﻘﻭﻡ ﺒﺈﺩﺨﺎل ﻗﻴﻡ ﺃﺨﺭﻯ ﻀﻤﻨﻬﺎ ﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ﻤﺴﺒﻘﹰﺎ ﻹﻟﺤﺎﻗﻬﺎ ﺒﻘﻴﻤﺔ ﺤﻘل ﻀﻤﻥ ﺴﺠل .
9ـ ﺍﻟﻌﻨﺼﺭ : DBDateTimePiker
ﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺤﻘﻭل ﻤﻥ ﺍﻟﻨﻭﻉ Dateﺃﻭ Timeﺃﻭ TimeStampﻭﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻨﻭﻉ ﺍﻟﺤﻘل ﺘﺤـﺩﺩ ﺍﻟﺨﺎﺼـﺔ Kindﺇﺫﺍ ﻜﻨﺎ ﻨﺭﻴﺩ ﺇﻅﻬﺎﺭ ﺍﻟﻭﻗﺕ ﺃﻭ ﺍﻟﺘﺎﺭﻴﺦ .
107
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﺜﺎل ) :ﺍﻟﻌﻨﺼﺭﻴﻥ DBlistBoxﻭ : ( DBcomboBox ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺃﻀﻑ ﺇﻟـﻰ ﺍﻟﻨﻤـﻭﺫﺝ ﺍﻟﻌﻨﺎﺼـﺭ Tableﻭ DataSourceﻭﻋﻨـﺼﺭﻱ DBeditﻭﻋﻨـﺼﺭ DBListBoxﻭ DBComboBoxﻭ ﻋﻨﺼﺭﻱ DBDateTimePikerﻭ ﻋﻨﺼﺭ . DBNavigator
ﺭﺘﺏ ﺍﻟﻌﻨﺎﺼﺭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Table1ﻤـﻊ ﺍﻟﻘﺎﻋـﺩﺓ Travelﻭﺍﻟﺠـﺩﻭل Tripsﻭﺍﻋـﻁ ﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ . True ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DataSouce1ﻤﻊ ﺍﻟﻌﻨﺼﺭ ، Table1 ﺤﺩﺩ ﺒﺎﻗﻲ ﺍﻟﻌﻨﺎﺼـﺭ ﻭﺃﻋﻁﻬـﺎ ﺍﻟﻘﻴﻤـﺔ Datasoucrce1ﻓـﻲ ﺍﻟﺨﺎﺼـﺔ
. DataSource
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DBedit1ﻤﻊ ﺍﻟﺤﻘل TripNoﻓـﻲ ﺍﻟﺨﺎﺼـﺔ Datafield ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ ReadOnlyﺍﻟﻘﻴﻤﺔ ) Trueﻷﻥ ﺍﻟﺤﻘل ﺤﻘل ﺘﺭﻗﻴﻡ ﺘﻠﻘـﺎﺌﻲ ﻭﻻ ﺤﺎﺠﺔ ﺇﻟﻰ ﺘﺤﺭﻴﺭﻩ ( ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DBedit2ﻤﻊ ﺍﻟﺤﻘل ............. Company
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DBListBox1ﻤﻊ ﺍﻟﺤﻘل GoFromﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Itemsﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :ﺤﻠﺏ ،ﻋﻤﺎﻥ ،ﺩﻤـﺸﻕ ، ﺍﻟﻼﺫﻗﻴﺔ ،ﺃﺜﻴﻨﺎ ..
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ ComboBox1ﻤﻊ ﺍﻟﺤﻘل ArriveToﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Itemsﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﻟﻘﺎﻫﺭﺓ ،ﺍﻟﺭﻴﺎﺽ ،ﺠﺩﺓ ،ﻋﻤﺎﻥ ،ﻫﺎﻤﺒﻭﺭﻍ ... ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DBDateTimePiker1ﻤﻊ ﺍﻟﺤﻘل GoTimeﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Kindﺍﻟﻘﻴﻤﺔ ) dtkTimeﺘـﺫﻜﺭ ﺃﻥ ﺍﻟﺤﻘل GoTimeﻤﻥ ﺍﻟﻨﻭﻉ . ( Timestamp ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﻤﺎ ﻴﻠﻲ : 1ـ ﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺴﺠﻼﺕ ﻭﻻﺤﻅ ﺍﻟﺘﻐﻴﺭ ﻓﻲ ﺍﻟﻌﻨﺎﺼﺭ ComboBox1ﻭ . DbListBox1 2ـ ﻴﻤﻜﻥ ﺍﻹﻀﺎﻓﺔ ﻓﻲ ﺍﻟﺤﻘل GoFromﻤﻥ ﺨﻼل ﺍﺨﺘﻴﺎﺭ ﺃﺤﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ . DBListBox1 3ـ ﻴﻤﻜﻥ ﺍﻹﻀﺎﻓﺔ ﻓﻲ ﺍﻟﺤﻘل ArriveToﻤﻥ ﺨﻼل ﺍﺨﺘﻴﺎﺭ ﺃﺤﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺴﺩﻟﺔ DBComboBox1ﺃﻭ ﻜﺘﺎﺒﺔ ﻗﻴﻤﺔ ﻤﺎ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ .
4ـ ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﺸﻜل ﻋﻨﺼﺭ DbGridﻭﺤﺎﻭل ﺍﻹﻀﺎﻓﺔ ﻭﺍﻟﺤﺫﻑ ﻭﺍﻟﺘﻌﺩﻴل ... 10ـ ﺍﻟﻌﻨﺼﺭ : DBCheckBoxﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺤﻘل ﻤﻥ ﻨﻭﻉ . Logical
11ـ ﺍﻟﻌﻨﺼﺭ : DBRadioGroupﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻹﺩﺨﺎل ﺃﻭ ﺇﻅﻬﺎﺭ ﻗﻴﻤﺔ ﻤﺎ ﺇﻟﻰ ﺤﻘل ﻴﺄﺨﺫ ﻋﺩﺩ ﻤﺤﺩﺩ ﻤﻥ ﺍﻟﻘﻴﻡ : ﻤﺜﺎل :
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺍﺴﺘﺒﺩل ﺍﻟﻌﻨﺼﺭ DBListBoxﺒﺎﻟﻌﻨﺼﺭ ، DBRadioGroupﺍﻋـﻁ ﺍﻟﺨﺎﺼـﺔ DataSource ﺍﻟﻘﻴﻤﺔ Datasource1ﻭ ﺍﻟﺨﺎﺼﺔ DataFieldﺍﻟﻘﻴﻤﺔ GoFromﻭﺍﻟﺨﺎﺼﺔ Itemsﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :ﺤﻠـﺏ ،ﻋﻤـﺎﻥ ،ﺩﻤﺸﻕ ،ﺍﻟﻼﺫﻗﻴﺔ ،ﺃﺜﻴﻨﺎ .. 108
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﺍﻟﺨﺎﺼﺔ Valuesﺍﻟﻘﻴﻡ :ﺤﻠﺏ ،ﻋﻤﺎﻥ ،ﺩﻤﺸﻕ ،ﺍﻟﻼﺫﻗﻴﺔ ،ﺃﺜﻴﻨﺎ . .. ﺤﻴﺙ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺨﺎﺼﺔ Itemsﻹﻅﻬﺎﺭ ﻋﻨﺎﻭﻴﻥ ﻷﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ،ﺃﻤﺎ Valuesﻓﺘﺴﺘﺨﺩﻡ ﻹﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻟﻠﺤﻘل ﻓﻲ ﺤﺎل ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ..
_ 12ﺍﻟﻌﻨﺼﺭ : DBLookUpListBoxﻴﺸﺒﻪ ﺍﻟﻌﻨﺼﺭ DBListBoxﻭﻟﻜﻥ ﺒـﺩ ﹰﻻ ﻤـﻥ ﺍﻟﺨﺎﺼـﺔ Itemﻴـﺘﻡ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻗﻴﻡ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻥ ﺨﻼل ﺠﺩﻭل ﺁﺨﺭ .
13ـ ﺍﻟﻌﻨﺼﺭ : DBLookUpComboBoxﻴﺸﺒﻪ ﺍﻟﻌﻨﺼﺭ DBComboBoxﻭﻟﻜﻥ ﺒﺩ ﹰﻻ ﻤﻥ ﺍﻟﺨﺎﺼـﺔ Item ﻴﺘﻡ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻗﻴﻡ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻥ ﺨﻼل ﺠﺩﻭل ﺁﺨﺭ . ﻤﺜﺎل : ﺴﻭﻑ ﻨﻘﻭﻡ ﺍﻵﻥ ﺒﺈﻨﺸﺎﺀ ﻨﻤﻭﺫﺝ ﻟﻺﺩﺨﺎل ﺇﻟﻰ ﺠﺩﻭل " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " PassAndTripﺤﻴﺙ ﺴﻴﺘﻡ ﺇﺩﺨﺎل ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻤﻥ ﺨﻼل ﺍﻟﻌﻨﺼﺭ DBLookUpListBoxﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻹﺤﻀﺎﺭ ﺍﺴـﻡ ﺍﻟﻤـﺴﺎﻓﺭ ،
ﻭﺴﻴﺘﻡ ﺇﺩﺨﺎل ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﻤﻥ ﺨﻼل ﺍﻟﻌﻨﺼﺭ DBLookUpComboBoxﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤـﻊ ﺠـﺩﻭل ﺍﻟﻤـﺴﺎﻓﺭﻴﻥ ﻹﺤﻀﺎﺭ ﺍﺴﻡ ﺸﺭﻜﺔ ﺍﻟﻁﻴﺭﺍﻥ .
ﺍﺒﺩِﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺜﻼﺜﺔ ﻋﻨﺎﺼﺭ Tableﻭﺜﻼﺜﺔ ﻋﻨﺎﺼﺭ DataSourceﻭﻋﻨﺼﺭﻱ DBeditﻭﻋﻨﺼﺭ DBNavigatorﻭﻋﻨﺼﺭ DBLookupListBoxﻭﻋﻨﺼﺭ DBLookUpComboBoxﻭﺍﻟﻌﻨﺼﺭ . DBGrid ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Table1ﻤﻊ ﺍﻟﺠﺩﻭل PassAndTripﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ Travelﻭﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DataSource1ﻤﻌﻪ .
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Table2ﻤﻊ ﺍﻟﺠﺩﻭل Passengersﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ Travelﻭﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DataSource2ﻤﻌﻪ . ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Table1ﻤﻊ ﺍﻟﺠﺩﻭل Tripsﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ Travelﻭﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ DataSource3ﻤﻌﻪ . ﺃﻋﻁ ﺠﻤﻴﻊ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ . True ﺃﻋﻁ ﺒﻘﻴﺔ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺨﺎﺼﺔ Datasourceﺍﻟﻘﻴﻤﺔ . DataSource1 ﺃﻋﻁ DBLookupListbox1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻟﺨﺎﺼﺔ DataFieldﺍﻟﻘﻴﻤﺔ " : "PNoﺴﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﺤﻘل Pnoﻓﻲ ﺠﺩﻭل " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " . ﺍﻟﺨﺎﺼﺔ Listsourceﺍﻟﻘﻴﻤﺔ : DataSource2ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺘﻲ ﺴﻴﻅﻬﺭﻫﺎ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺴﺘﺄﺘﻲ ﻋـﻥ ﻁﺭﻴـﻕ ﺍﻟﺠـﺩﻭل . Passengers ﺍﻟﺨﺎﺼﺔ ListFieldﺍﻟﻘﻴﻤﺔ : Pnameﺴﻴﻅﻬﺭ ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻗﺎﺌﻤﺔ ﺒﺠﻤﻴـﻊ ﺃﺴـﻤﺎﺀ ﺍﻟﻤـﺴﺎﻓﺭﻴﻥ ﻓـﻲ ﺍﻟﺠـﺩﻭل . Passengers
ﺍﻟﺨﺎﺼﺔ KeyFieldﺍﻟﻘﻴﻤﺔ : PNoﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺇﺩﺨﺎﻟﻬﺎ ﺇﻟﻰ ﺠـﺩﻭل PassAndTripﻋﻨـﺩ ﺍﺨﺘﻴﺎﺭ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻋﻤﻠﻴﹰﺎ ﻴﺘﻡ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺘﺤﺩﻴﺩ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ KeyFieldﺍﻟﻤﺭﺘﺒﻁ ﻤﻌﻪ ﺍﻟﻤﻔﺘـﺎﺡ ﺍﻟﺜـﺎﻨﻭﻱ . DataFields ﺍﻋﻁ ﺍﻟﻌﻨﺼﺭ DBLookupComboBox1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ DataFieldﺍﻟﻘﻴﻤﺔ " : "TripNoﺴﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﺤﻘـل TripNoﻓـﻲ ﺠـﺩﻭل " ﺍﻟﻤـﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " .
109
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺨﺎﺼﺔ Listsourceﺍﻟﻘﻴﻤﺔ : DataSource3ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺘﻲ ﺴﻴﻅﻬﺭﻫﺎ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺴﺘﺄﺘﻲ ﻋـﻥ ﻁﺭﻴـﻕ ﺍﻟﺠـﺩﻭل .Trips
ﺍﻟﺨﺎﺼﺔ ListFieldﺍﻟﻘﻴﻤﺔ : Companyﺴﻴﻅﻬﺭ ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻗﺎﺌﻤﺔ ﺒﺠﻤﻴﻊ ﺃﺴﻤﺎﺀ ﺸﺭﻜﺎﺕ ﺍﻟﻁﻴﺭﺍﻥ ﻓﻲ ﺍﻟﺠﺩﻭل . Trips ﺍﻟﺨﺎﺼﺔ KeyFieldﺍﻟﻘﻴﻤﺔ :TripNoﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺇﺩﺨﺎﻟﻬﺎ ﺇﻟﻰ ﺠﺩﻭل PassAndTripﻋﻨﺩ ﺍﺨﺘﻴﺎﺭ ﺍﺴﻡ ﺍﻟﺸﺭﻜﺔ . ﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Dbedit1ﻤﻊ ﺍﻟﺤﻘل SeatNoﻭﺍﻟﻌﻨﺼﺭ DBEdit2ﻤﻊ ﺍﻟﺤﻘل . ClassNo ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﻨﻘل ﺒﻴﻥ ﺍﻟﺴﺠﻼﺕ ﻭﻻﺤﻅ ﺘﻐﻴﺭ ﺍﻟﻘﻴﻡ ﻓﻲ ﺍﻟﻌﻨﺎﺼﺭ .
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ +ﺇﻀﺎﻓﺔ ﻭﺃﺩﺨل ﻗﻴﻡ ﻋﻥ ﻁﺭﻴﻕ ﺍﺨﺘﻴﺎﺭ ﺍﺴﻡ ﺃﺤﺩ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭ ﺍﺴﻡ ﺍﻟﺸﺭﻜﺔ .... ﺃﻀﻑ ﻋﺩﺩ ﻤﻥ ﺍﻟﺴﺠﻼﺕ ﻟﻠﺘﺂﻟﻑ ﻤﻊ ﺍﻟﻌﻨﺎﺼﺭ ...
14ـ ﺍﻟﻌﻨﺼﺭ : DBRichEditﻴﻤﻜﻥ ﺭﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤـﻊ ﺤﻘـل ﻤـﻥ ﻨـﻭﻉ Memoﺃﻭ ﺤﻘـل ﻤـﻥ ﻨـﻭﻉ Formatted Memo 15ـ ﺍﻟﻌﻨﺼﺭ : DBCtrlGridﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻴﻘﻭﻡ ﺒﺈﻅﻬﺎﺭ ﺼﻔﺤﺔ ﻤﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺤﻴﺙ ﻴﻘﻭﻡ ﻫـﺫﺍ ﺍﻟﻌﻨـﺼﺭ ﻴﺘﻭﻟﻴـﺩ ﺴﻁﻭﺭ ﺒﻌﺩﺩ ﺴﺠﻼﺕ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . ﻤﺜﺎل :
ﺃﻀﻑ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ DataSource2ﻭﻀﻊ ﺩﺍﺨﻠﻪ ﻋﻨـﺼﺭ DBeditﻭﺍﻋﻁ ﺍﻟﺨﺎﺼﺔ DataFieldﺍﻟﻘﻴﻤﺔ ، Pnameﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .
16ـ ﺍﻟﻌﻨﺼﺭ : DBChartﻹﻅﻬﺎﺭ ﻤﺨﻁﻁﺎﺕ ﺒﻴﺎﻨﻴﺔ ﻤﻥ ﻟﻠﻘﻴﻡ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺠﺩﻭل .
110
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻤﻨﺔ ﻋﺸﺭ ﺍﻟﺒﺤﺙ ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ : ﺘﻌﺘﺒﺭ ﻋﻤﻠﻴﺔ ﺍﻟﺒﺤﺙ ﻋﻥ ﺴﺠل ﻤﻌﻴﻥ ﺃﻭ ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ ﻟﺤﻘل ﻤﺎ ﻓﻲ ﺴﺠل ﻤﻥ ﺃﻫﻡ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋـﺩ ﺍﻟﺒﻴﺎﻨـﺎﺕ ،ﻭﻨﻅـﺭﹰﺍ
ﻟﻀﺨﺎﻤﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ) ﺒﻨﻭﻙ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ( ﻓﺈﻨﻨﺎ ﻨﺤﺘﺎﺝ ﺇﻟﻰ ﺘﻘﻨﻴﺎﺕ ﺒﺤﺙ ﺴﺭﻴﻌﺔ ﺘﻭﺼﻠﻨﺎ ﺇﻟﻰ
ﺍﻟﻤﻌﻠﻭﻤﺔ ﺍﻟﻤﺤﺩﺩﺓ ﻭﺒﺩﻭﻥ ﻋﻨﺎﺀ ﺍﻟﺒﺤﺙ ﻀﻤﻥ ﺠﻤﻴﻊ ﺒﻴﺎﻨﺎﺕ ﺍﻟﺠﺩﻭل ،ﻭﺴﻨﺴﺘﻌﺭﺽ ﺍﻵﻥ ﺃﻫﻡ ﻁﺭﻕ ﺍﻟﺒﺤﺙ ﺍﻟﺘﻲ ﺯﻭﺩﺘﻨﺎ ﺒﻬﺎ ﻟﻐﺔ ﺩﻟﻔﻲ . ﺍﻟﻤﻨﻬﺞ : Locate ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺒﻭﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻋﻨﺩ ﺃﻭل ﺴﺠل ﻴﻁﺎﺒﻕ ﺸﺭﻭﻁ ﺍﻟﺒﺤﺙ ،ﺒﺎﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘـﺔ ﻴﻤﻜﻨﻨـﺎ
ﺍﻟﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ ﻟﺤﻘل ﻤﺎ ﺤﻴﺙ ﻴﺄﺨﺫ ﻫﺫﻩ ﺍﻟﻤﻨﻬﺞ ﺍﻟﺸﻜل :
; ) Locate ( 'FieldName',SearchValue,Option ﺤﻴﺙ : FieldNameﺍﺴﻡ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺍﻟﺒﺤﺙ ﻓﻴﻪ . : SearchValueﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺍﻟﺒﺤﺙ ﻋﻨﻬﺎ. : Optionﺘﺤﺩﺩ ﺨﻴﺎﺭﺍﺕ ﺍﻟﺒﺤﺙ ﻭﺘﺄﺨﺫ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ : ﻋﺩﻡ ﺍﻟﺘﻤﻴﺯ ﺒﻴﻥ ﺍﻷﺤﺭﻑ ﺍﻟﻜﺒﻴﺭﺓ ﻭﺍﻟﺼﻐﻴﺭﺓ Option = [loCaseInsensitive ] , ﺍﻟﺒﺤﺙ ﻓﻲ ﺠﺯﺀ ﻤﻥ ﺍﻟﻜﻠﻤﺔ ﺃﻱ ﺃﻥ ﺍﻟﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ " ﻤﺤﻡ " ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻴﺩ " ﻤﺤﻤﺩ " ; ] Option = [ loPartiaKey ﺃﻭ " ﻤﺤﻤﻭﺩ"
ﺩﻤﺞ ﺍﻟﺨﻴﺎﺭﻴﻥ ﺍﻟﺴﺎﺒﻘﻴﻥ ;] Option = [ loCaseInsensitive , loPartiaKey ﻻ ﻨﺭﻴﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺃﻱ ﻤﻥ ﺍﻟﺨﻴﺎﺭﻴﻥ ﺍﻟﺴﺎﺒﻘﻴﻥ ;] [ = Option ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺍﻟﻘﻴﻤﺔ Trueﻓﻲ ﺤﺎل ﺍﺴﺘﻁﺎﻉ ﺇﻴﺠﺎﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻓﻲ ﺠﺩﻭل ﺍﻟﺒﺤﺙ ﻭﺍﻟﻘﻴﻤﺔ Falseﻓـﻲ ﺍﻟﺤﺎﻟـﺔ ﺍﻟﻤﻌﺎﻜﺴﺔ . ﻤﺜﺎل :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻨﺼﺭ Tableﻭ DataSorceﻭ DbGridﻭ Buttonﻭ Edit ﺃﺭﺒﻁ ﺍﻟﺠﺩﻭل ﻤﻊ ﺠﺩﻭل Passengersﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ Travelﻭﺃﻅﻬﺭ ﻤﺤﺘﻭﻴﺎﺕ ﺍﻟﺠﺩﻭل ﻀﻤﻥ : DBGrid ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : If Table1.Locate('Pname',Edit1.Text , [locaseinsensitive,lopartialkey]) Then Showmessage(' The record is found ') Else ;) ' Showmessage ( ' There is no match , Try Another Value ﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﺒﺎﻟﺒﺤﺙ ﻋﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﻀﻤﻥ ﺍﻟﺤﻘل PNameﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ .
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ ﺤﻘل ﻤﺎ ﻓﻲ ﺍﻟﺠﺩﻭل ﻭﻻﺤﻅ ﺍﻨﺘﻘﺎل ﻤﺅﺸﺭ ﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ﺇﻟﻴﻬﺎ ﻋﻨﺩ ﻭﺠﻭﺩﻫﺎ ،ﺜﻡ ﺍﺒﺤـﺙ ﻋﻥ ﺠﺯﺀ ﻤﻥ ﺍﺴﻡ ﺃﺤﺩ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ) ﺍﺒﺤﺙ ﻋﻥ ﺍﻟﺤﺭﻑ " ﻡ " ﻓﻘﻁ ﻭﻻﺤﻅ ﺘﻭﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻋﻨﺩ ﺍﺴﻡ ﺃﻭل ﻤﺴﺎﻓﺭ ﻴﺒﺩﺃ ﺒﺤﺭﻑ " ﻡ " ( ﺜﻡ ﺍﺤﺫﻑ ﺍﻟﺨﻴﺎﺭ loPartialKeyﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺒﺤﺙ ﻭﻻﺤﻅ ﻋﺩﻡ ﻗﺩﺭﺓ ﺍﻟﻤﻨﻬﺞ ﻤﻥ ﺇﻴﺠـﺎﺩ
ﺍﻟﺤﻘل ﺇﻻ ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﻘﻴﻤﺔ ﻤﻁﺎﺒﻘﺔ . 111
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻼ Ahmedﻭ ( ahmedﻭﺍﺒﺤﺙ ﻋﻥ ﺍﻟﻘﻴﻤﺘﻴﻥ ﺜﻡ ﺍﺤـﺫﻑ ﺍﻟﺨﺎﺼـﺔ ﺜﻡ ﺃﻀﻑ ﺃﺴﻤﺎﺀ ﻤﺴﺎﻓﺭﻴﻥ ﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ) ﻤﺜ ﹰ loCaseInsensitiveﻭﺃﻋﺩ ﺍﻟﺒﺤﺙ ....
ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻨﻬﺞ Locateﻟﻠﺒﺤﺙ ﻋﻥ ﺃﻜﺜﺭ ﻤﻥ ﺤﻘل ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ : ﻼ ( ﻨﺴﺘﺨﺩﻡ ﻋﻨـﺩﻫﺎ ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻭﺍﻟﺠﻨﺴﻴﺔ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ ) ﺍﻟﻤﺴﺎﻓﺭ ﻤﺤﻤﺩ ﻤﻥ ﺴﻭﺭﻴﺔ ﻤﺜ ﹰ
ﺍﻟﻤﻨﻬﺞ Locateﺒﺎﻟﺸﻜل : Locate ( 'FieldName1; FieldName2; FieldName3',VarArrayOf ( [SearchValue1, ; ) SearchValue2, SearchValue3]),Option ﻤﺜﺎل :ﺃﻀﻑ ﻋﻨﺼﺭ Edit2ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
[ if table1.Locate('pname;Nationalty',vararrayof([ edit1.Text,Edit2.text]) , locaseinsensitive , lopartialkey ] ) then Showmessage('the record is found') else ;) 'Showmessage ( 'there is no match , Try Anther Value ﺍﻟﺘﺎﺒﻊ VarArrayOfﻴﻨﺸﺊ ﻤﺼﻔﻭﻓﺔ ﻋﻨﺎﺼﺭﻫﺎ ﻤﻥ ﺍﻟﻨﻭﻉ . Variant ﻤﻼﺤﻅﺔ :
ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ ﻋﺩﺩ ﺼﺤﻴﺢ Shortﺃﻭ Long Integerﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ SearchValueﻤﻥ ﺍﻟﻨﻭﻉ ﻋـﺩﺩ
ﻻ ﻤﻥ ﺍﺴﻤﻪ ﻨﺴﺘﺒﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﺒﻤﺎ ﻴﻠﻲ : ﺼﺤﻴﺢ ﺃﻴﻀﹰﺎ ﻭﻟﺫﻟﻙ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺃﻥ ﻨﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺒﺩ ﹰ )]if table1.Locate('PNo;Nationalty',vararrayof([ strtoint(edit1.Text),Edit2.text ,[locaseinsensitive,lopartialkey]) then Showmessage('the record is found') else ;) 'Showmessage ( 'there is no match , Try Anther Value 2ـ ﺍﻟﻤﻨﻬﺞ : Lookup ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﻘﻴﻡ ﻟﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺤﻘﻭل ﺍﻟﺠﺩﻭل ﺩﻭﻥ ﺃﻥ ﺘﻐﻴﺭ ﻤﻭﻀﻊ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻭﺍﻟﻤﺜﺎل ﺍﻟﺘـﺎﻟﻲ ﻴﻭﻀﺢ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ : ﻤﺜﺎل :ﺴﻨﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻭﺴﻨﻁﻠﺏ ﻤﻥ ﺍﻟﺘﺎﺒﻊ ﺍﻥ ﻴﻌﻴﺩ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻭﺠﻨﺴﻴﺘﻪ :ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ;var LookupResult : Variant begin ;)'lookupResult := Table1.Lookup('Pno',strtoint(edit1.Text ),'Pname;Nationalty if Not VarIsnull( lookupResult) then ;) ) ]Showmessage(vartostr(lookupresult[0]) + ' ' + vartostr(lookupresult[1 ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻟﻠﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺍﻟﻤﻜﺘﻭﺏ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﻭﻭﻀﻊ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ﻤﺘﺤﻭل ﻤﻥ ﺍﻟﻨﻭﻉ Variant ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ Lookupﺍﻟﻘﻴﻤﺔ Nullﻓﻲ ﺍﻟﻤﺘﺤﻭل ﺇﺫﺍ ﻟﻡ ﻴﺠﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻁﻠﻭﺏ ﺍﻟﺒﺤﺙ ﻋﻨﻬـﺎ ﻭﺍﻟﺘـﺎﺒﻊ VarIsNull ﻴﺴﺘﺨﺩﻡ ﻟﻤﻌﺭﻓﺔ ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺘﺤﻭل ﻤﻥ ﺍﻟﻨﻭﻉ Variantﻴﺤﻭﻱ ﻗﻴﻤﺔ ﺃﻡ ﻻ . 112
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺘﺎﺒﻊ VarToStrﻴﺤﻭل ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل variantﺇﻟﻰ ﻨﺹ .
ﻤﻼﺤﻅﺎﺕ :
1ـ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﺎﺒﻊ Lookupﻟﻠﺒﺤﺙ ﻓﻲ ﺃﻜﺜﺭ ﻤﻥ ﺤﻘل ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻤﺜﺎل ﺍﺴﺘﺒﺩل ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻷﻭﻟـﻰ ﻓـﻲ
ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ :
lookupResult := Table1.Lookup('Pno;Pname',VarArrayof ;)'([strtoint(edit1.Text),Edit2.text]),'PName;Nationalty 2ـ ﻤﻥ ﺃﻫﻡ ﻤﺯﺍﻴﺎ ﺍﻟﻤﻨﻬﺠﻴﻥ Locateﻭ lookupﺃﻨﻬﻤﺎ ﻴﺴﺘﻁﻴﻌﺎﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺤﻘﻭل ﻤﻔﻬﺭﺴﺔ ﻭﻏﻴﺭ ﻤﻔﻬﺭﺴﺔ ، ﻭﻴﺴﺘﺨﺩﻤﺎﻥ ﺃﻴﻀﹰﺎ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻤﺘﻘﺩﻤﺔ ﻟﻠﺒﺤﺙ ﺤﻴﺙ ﻴﺴﺘﻔﻴﺩﺍﻥ ﻤﻥ ﺍﻟﺤﻘل ﺇﺫﺍ ﻜﺎﻥ ﻤﻔﻬﺭﺴﹰﺎ ﻭ ﻴﻁﺒﻘﺎﻥ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻔﺭﺯ )
ﺍﻟﻔﻠﺘﺭﺓ ( ﻓﻲ ﺤﺎل ﻜﺎﻥ ﻏﻴﺭ ﻤﻔﻬﺭﺱ . ﺍﻟﻤﻨﻬﺞ : FindKey
ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺨﺎﺹ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺤﻘﻭل ﺍﻟﻤﻔﻬﺭﺴﺔ ﺤﻴﺙ ﺘﻜﻭﻥ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺒﺤﺙ ﺃﺴﻬل ﺤﻴﺙ ﻴﺄﺨﺫ ﺍﻟﻤﻨﻬﺞ Findkey ﻗﻴﻤﺔ ﺍﻟﺤﻘل ﺍﻟﺘﻲ ﺴﻴﺒﺤﺙ ﻋﻨﻬﺎ ﻭﻴﻌﻴﺩ ﻗﻴﻤﺔ ﺒﻭﻟﻴﺎﻨﻴﺔ ﺘﺩل ﻋﻠﻰ ﻋﺜﻭﺭ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﻋﻠﻰ ﺍﻟﺴﺠل ﺍﻟﻤﻁﻠﻭﺏ ﻭﻴﻘﻭﻡ ﺒﻨﻘل ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﺇﻟﻰ ﺍﻟﺴﺠل ﺍﻟﻤﻁﺎﺒﻕ ﻟﺸﺭﻭﻁ ﺍﻟﺒﺤﺙ
ﻤﺜﺎل :ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻋﻠﻰ ﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : If not Table1.FindKey( [ Strtoint ( edit1.text)]) Then ;)'Showmessage ( 'the Record is not Found ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻟﺒﺤﺙ ﻓﻲ ﺍﻟﻔﻬﺭﺱ ﺍﻻﻓﺘﺭﺍﻀﻲ ) PNoﻷﻨﻪ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ ( ﻋﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻜﺘﻭﺒﺔ ﻓﻲ ﺍﻟﻌﻨـﺼﺭ Editﻭﻓﻲ ﺤﺎل ﺘﻡ ﺇﻴﺠﺎﺩﻫﺎ ﻴﻨﺘﻘل ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻟﻠﺴﺠل ﺍﻟﻤﻁﺎﺒﻕ ﻟﻨﺘﻴﺠﺔ ﺍﻟﺒﺤﺙ ﻭﻴﻌﻴﺩ ﺍﻟﻤﻨﻬﺞ ﺍﻟﻘﻴﻤﺔ ،Trueﺃﻤﺎ ﻓﻲ ﺤﺎل ﻟﻡ ﺘﻭﺠﺩ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ False ـ ﻟﻠﺒﺤﺙ ﻓﻲ ﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻴﺠﺏ ﺘﺤﺩﻴﺩ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺜﺎﻨﻭﻱ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﺎﺼـﺔ IndexNameﻟﻠﻌﻨـﺼﺭ Table ﻭﻴﻤﻜﻥ ﺘﺤﺩﻴﺩﻫﺎ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ﺃﻭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ .
ﻤﺜﺎل :ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table1ﻓﻲ ﺍﻟﺨﺎﺼﺔ IndexNameﺍﻟﻘﻴﻤﺔ ) PNameIndexﺘـﺫﻜﺭ ﺃﻨﻨـﺎ ﻋﺭﻓﻨﺎ ﻫﺫﺍ ﺍﻟﻔﻬﺭﺱ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ( Database Desktopﻭﻻﺤﻅ ﺘﻐﻴﺭ ﺘﺭﺘﻴﺏ ﺍﻟﺴﺠﻼﺕ ﻓـﻲ ﺍﻟﻌﻨـﺼﺭ DbGrid ﻤﺒﺎﺸﺭﺓ ﺤﻴﺙ ﺴﻴﺼﺒﺢ ﺘﺭﺘﻴﺏ ﺍﻟﺴﺠﻼﺕ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ ﺍﻷﺒﺠﺩﻱ ﻓﻲ ﺍﻟﺤﻘل . PName ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺒﺎﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ : If not Table1.FindKey([edit1.text]) then ;)'Showmessage ( 'the Record is not Found ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﻤﺴﺎﻓﺭ ﻤﺎ ..... ـ ﻭﺠﺩﻨﺎ ﺃﻴﻀﹰﺎ ﺃﻨﻪ ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻟﺭﺌﻴﺴﻴﺔ ﻋﺒﺎﺭﺓ ﻋﻥ ﺤﻘﻠﻴﻥ ﺃﻭ ﺃﻜﺜﺭ ـ ﻜﺫﻟﻙ ﺍﻷﻤـﺭ ﺒﺎﻟﻨـﺴﺒﺔ ﻟﻠﻔﻬـﺎﺭﺱ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻭﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﻨﻬﺞ FindKeyﺒﺎﻟﺸﻜل : ; )]TableName.FindKey ( [ SearchValue1,SearchValue2 ,…,SearchValue3 ﻤﺜﺎل :ﻴﻤﻜﻥ ﺍﻟﺒﺤﺙ ﻓﻲ ﺠﺩﻭل " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ" ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.FindKey( [2,3]) :ﺤﻴﺙ ﺴﻴﺘﻡ
ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﻟﻤﺴﺎﻓﺭ ﺭﻗﻡ 2ﻓﻲ ﺍﻟﺭﺤﻠﺔ . 4
113
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
4ـ ﺍﻟﻤﻨﻬﺞ : FindNearest ﻴﺸﺒﻪ ﺍﻟﻤﻨﻬﺞ ﺍﻟﺴﺎﺒﻕ ﺇﻻ ﺃﻨﻪ ﻴﻨﺘﻘل ﺇﻟﻰ ﺴﺠل ﻤﻁﺎﺒﻕ ﺃﻭ ﺇﻟﻰ ﺃﻗﺭﺏ ﺴﺠل ﻤﻁﺎﺒﻕ ﺃﻭ ﺇﻟﻰ ﺃﻗﺭﺏ ﺴـﺠل ﻤﻁـﺎﺒﻕ ﻟﻠﻘﻴﻤـﺔ ﺍﻟﻤﺭﺍﺩ ﺍﻟﺒﺤﺙ ﻋﻨﻬﺎ ،ﻜﻤﺎ ﺃﻨﻪ ﻻ ﻴﻌﻴﺩ ﻗﻴﻤﺔ ) ﻻ ﻴﻌﻴﺩ Trueﺃﻭ ( False ﻤﺜﺎل :
ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺴﺎﺒﻕ ﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;)]Table1.FindNearest ([edit1.text ﻼ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺴﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻭﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﺩﺨل ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﺠﺯﺀ ﻤﻥ ﺍﺴﻡ ﻤﺴﺎﻓﺭ " ﻤﺢ" ﻤﺜ ﹰ ﺍﻟﺤﺎﻟﻲ ﻋﻨﺩ ﺃﻭل ﻤﺴﺎﻓﺭ ﺃﺴﻤﻪ " ﻤﺢ " ﺃﻭ ﺃﺴﻤﻪ ﻗﺭﻴﺏ ﺇﻟﻰ "ﻤﺢ " ﻤﺜل "ﻤﺤﻤﺩ" ﺃﻭ "ﻤﺤﻤﻭﺩ". ﺍﻟﺘﺼﻔﻴﺔ ) ﺍﻟﻔﻠﺘﺭﺓ ( : Filter ﻼ ﻨﺭﻴﺩ ﻤﻥ ﺍﻟﺠﺩﻭل ﺃﻥ ﻴﻌﺭﺽ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻤـﻥ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﺼﻔﻴﺔ ﻹﻅﻬﺎﺭ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺤﻘﻭل ﺘﺤﻘﻕ ﻤﻌﺎﻴﻴﺭ ﻤﺤﺩﺩﺓ ﻤﺜ ﹰ
ﺍﻟﺠﻨﺴﻴﺔ ﺍﻟﺴﻭﺭﻴﺔ ﻓﻘﻁ ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ،ﺃﻭ ﺃﻥ ﻨﻅﻬﺭ ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﺍﻟﺘﻲ ﺨﺭﺠﺕ ﻤﻥ ﻤﻁﺎﺭ ﺤﻠﺏ ﻓﻲ ﺠـﺩﻭل ﺍﻟﺭﺤﻼﺕ . ﺘﺴﺘﺨﺩﻡ ﻟﻬﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺨﺎﺼﺔ Filterﻟﻠﻌﻨﺼﺭ Tableﻭﻴﺠﺏ ﺃﻥ ﺘﺄﺨﺫ ﺍﻟﺨﺎﺼﺔ Filterﺍﻟﻘﻴﻤﺔ . True ﺍﻟﺘﺼﻔﻴﺔ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ : ﻤﺜﺎل :ﺴﻨﻅﻬﺭ ﻓﻲ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ﺍﻟﺨﺎﺭﺠﺔ ﻤﻥ ﻤﺩﻴﻨﺔ ﺤﻠﺏ ...
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺍﻀﻑ ﺇﻟﻴـﺔ ﺍﻟﻌﻨﺎﺼـﺭ ﺍﻟﺘﺎﻟﻴـﺔ Tableﻭ DataSourceﻭ DBGridﻭ ، Buttonﺍﺭﺒـﻁ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻊ ﺒﻌﻀﻬﺎ ﺒﺤﻴﺙ ﻴﻅﻬﺭ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ Tripsﻓﻲ ﺍﻟﻌﻨﺼﺭ DBGrid1ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ . ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Filteredﻟﻠﻌﻨﺼﺭ Table1ﺍﻟﻘﻴﻤﺔ Trueﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻟﻘﻴﻤﺔ : 'ﺤﻠﺏ' = GoFrom ﺴﻴﺘﻡ ﺘﻁﺒﻴﻕ ﺍﻟﺘﺼﻔﻴﺔ ﻤﺒﺎﺸﺭﺓ ﻭﺴﻴﻅﻬﺭ ﺍﻟﺠﺩﻭل ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﻁـﺎﺭ ﺤﻠـﺏ ،ﻨـﺴﺘﻁﻴﻊ ﺍﻵﻥ ﺇﺯﺍﻟـﺔ
ﺍﻟﺘﺼﻔﻴﺔ ﺒﺈﻋﻁﺎﺀ ﺍﻟﺨﺎﺼﺔ Filteredﺍﻟﻘﻴﻤﺔ . False
ﺍﻵﻥ ﻋﻠﻰ ﻓﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﺃﻥ ﻨﻌﺭﻑ ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﺩﻴﻨﺔ ﺤﻠﺏ ﺇﻟﻰ ﺍﻟﻘﺎﻫﺭﺓ ،ﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﻨﻜﺘﺏ ﻓـﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ 'ﺍﻟﻘﺎﻫﺭﺓ' = ' and Arrivetoﺤﻠﺏ' = Gofrom ) ﺍﻟﺨﺎﺼﺔ Filterﻴﺠﺏ ﺃﻥ ﺘﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ ( True
ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﻨﺒﺤﺙ ﻋﻥ ﺠﻤﻴﻊ ﺍﻟﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﺤﻠﺏ ﺃﻭ ﺩﻤﺸﻕ ﺇﻟﻰ ﺍﻟﻘﺎﻫﺭﺓ : ... 'ﺍﻟﻘﺎﻫﺭﺓ' = ') and Arrivetoﺩﻤﺸﻕ' = ' Or GoFromﺤﻠﺏ' = (Gofrom
ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﻨﻭﺠﺩ ﺠﻤﻴﻊ ﺍﻟﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﺒﻠﺩ ﻴﺒﺩﺃ ﺃﺴﻤﻪ ﺒﺤﺭﻑ " ﺡ " '*ﺡ'= Gofrom ﻜﻤﺎ ﻴﻤﻜﻥ ﻨﻌﺭﻑ ﺍﻟﺭﺤل ﺍﻟﺘﻲ ﺒﻘﻲ ﻓﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ 10ﺒﻁﺎﻗﺎﺕ :ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻟﻘﻴﻤﺔ : CardCount > 10
114
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺘﺼﻔﻴﺔ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﺫ : ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Filteredﺍﻟﻘﻴﻤﺔ Trueﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻤﻌﺭﻓﺔ ﺍﻟﺭﺤل ﺍﻟﺘﻲ ﺒﻘﻲ ﻓﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ 10ﺒﻁﺎﻗﺎﺕ : ' Table1.Filter := ' CardCount > 10 ﻭﻟﻤﻌﺭﻓﺔ ﺍﻟﺭﺤل ﺍﻟﺘﻲ ﺒﻘﻲ ﻓﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﻋﺩﺩ ﻤﺤﺩﺩ ﻤﻥ ﺍﻟﺒﻁﺎﻗﺎﺕ ﺃﻀﻑ ﻋﻨﺼﺭ Editﺍﻟﻨﻤﻭﺫﺝ : ; Table1.Filter := ' CardCount > '+ edit1.Text ﺃﺩﺨل ﺭﻗﻤﹰﺎ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﺤﺘﻰ ﻻ ﻴﺤﺩﺙ ﺃﺨﻁﺎﺀ ... ﻟﻤﻌﺭﻓﺔ ﺍﻟﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﺩﻴﻨﺔ ﻤﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; )Table1.Filter := 'GoFrom = '+ Quotedstr(edit1.Text ﻼ 'ﺤﻠـﺏ ' = ) ﺤﻠـﺏ ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ Quotedstrﺍﻟﻨﺹ ﺍﻟﻤﻌﻁﻰ ﻓﻲ ﻭﺴﻴﻁﻪ ﺇﻟﻴﻪ ﻤﻀﺎﻑ ﺇﻟﻴﻪ ﺇﺸﺎﺭﺘﻲ ﺤﺼﺭ ﻤـﺜ ﹰ
( Quotedstr
ﻭﻫﻜﺫﺍ ﺃﻋﺩ ﺘﻨﻔﻴﺫ ﺍﻷﻤﺜﻠﻪ ﺍﻟﺴﺎﺒﻘﺔ ... ﺨﻭﺍﺹ ﺍﻟﻌﻨﺼﺭ : Table
ﻴﻤﻠﻙ ﺍﻟﻌﻨﺼﺭ Tableﻋﺩﺩ ﻤﻥ ﺍﻟﺨﻭﺍﺹ ﻟﻠﺘﺤﻜﻡ ﺒﻪ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﻭﻫﻲ : 1ـ ﺍﻟﻤﻨﻬﺞ : Openﺘﺴﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.openﻟﻔﺘﺢ ﺍﻟﺠﺩﻭل ﻭﺘﻜﺎﻓﺊ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.Active := true
. 2ـ ﺍﻟﻤﻨﻬﺞ : Closeﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Table1.Closeﻹﻏﻼﻕ ﺍﻟﺠﺩﻭل ﻭﺘﻜﺎﻓﺊ ﺍﻟﺘﻌﻠﻴﻤﺔ =Table1.Active : . False 3ـ ﺍﻟﻤﻨﻬﺞ : Firstﺍﺴﺘﺨﺩﻡ Table1.Firstﻟﻭﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻋﻨﺩ ﺃﻭل ﺴﺠل ﻓﻲ ﺍﻟﺠﺩﻭل . 4ـ ﺍﻟﻤﻨﻬﺞ : Lastﺍﺴﺘﺨﺩﻡ Table1.Lastﻟﻭﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﺁﺨﺭ ﺍﻟﺠﺩﻭل . 5ـ ﺍﻟﻤﻨﻬﺞ : Nextﺍﺴﺘﺨﺩﻡ Table1.Nextﻟﻼﻨﺘﻘﺎل ﺇﻟﻰ ﺍﻟﺴﺠل ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﺠﺩﻭل .
6ـ ﺍﻟﻤﻨﻬﺞ : Priorﺍﺴﺘﺨﺩﻡ Table1.Priorﻟﻼﻨﺘﻘﺎل ﺇﻟﻰ ﺍﻟﺴﺠل ﺍﻟﺴﺎﺒﻕ ﻓﻲ ﺍﻟﺠﺩﻭل . 7ـ ﺍﻟﻤﻨﻬﺞ ) : MoveBy( xﺍﺴﺘﺨﺩﻡ ) Table1.MoveBy( 5ﻟﻼﻨﺘﻘﺎل ﺨﻤﺱ ﺴﺠﻼﺕ ﺇﻟﻰ ﺍﻷﻤﺎﻡ ) ﻴﻤﻜـﻥ ﺃﻥ ﺘﻜﻭﻥ ﻗﻴﻤﺔ Xﺴﺎﻟﺒﺔ (. 8ـ ﺍﻟﻤﻨﻬﺞ : Bofﺘﻌﻴﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﺠﺩﻭل . 9ـ ﺍﻟﻤﻨﻬﺞ : Eofﺘﻌﻴﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﻨﻬﺎﻴﺔ ﺍﻟﺠﺩﻭل . 10ـ ﺍﻟﻤﻨﻬﺞ : RecordCountﻴﻌﻴﺩ ﻫﺫﻩ ﺍﻟﻤﻨﻬﺞ ﻋﺩﺩ ﺴﺠﻼﺕ ﺍﻟﺠﺩﻭل . 11ـ ﺍﻟﻤﻨﻬﺞ : RecNoﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺭﻗﻡ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ . 12ـ ﺍﻟﻤﻨﻬﺞ : Deleteﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺒﺤﺙ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻭﻴﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺴﺠل ﻋﻠﻰ ﺍﻟﺴﺠل ﺍﻟﺘﺎﻟﻲ .. ﺍﻟﺤﻘﻭل ﺍﻟﺤﺴﺎﺒﻴﺔ :
115
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻭﻅﻴﻔﺔ :
ً 1ـﺄﻨﺸﺊ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﺎﻟﻴﺔ ﺒﺎﺴﺘﺨﺩﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ :DataBase Desktop 1ـ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ : Writer
ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ * Wnoﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ WName 1 2 2ـ ﺠﺩﻭل ﺩﻭﺭ ﺍﻟﻨﺸﺭ : Publisher ﺭﻗﻡ ﺍﻟﺩﺍﺭ * PubNo
ﻋﻨﻭﺍﻥ ﺍﻟﻤﺅﻟﻑ Wadress
ﺍﺴﻡ ﺍﻟﺩﺍﺭ PubName
ﺍﻟﻌﻨﻭﺍﻥ PubAdr
3ـ ﺠﺩﻭل ﺍﻟﻜﺘﺏ : ﺭﻗـــﻡ ﺍﻟﻜﺘـــﺎﺏ ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ Book BookNo
ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ WNo
ﺭﻗﻡ ﺍﻟﺩﺍﺭ PubNo
ﺘــﺎﺭﻴﺦ ﺍﻹﺼــﺩﺍﺭ Edate
ً 2ـ ﺍﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ ﺘﺭﺍﻩ ﻤﻨﺴﺎﺒﹰﺎ . ً 3ـ ﻋﺭﻑ ﻓﻬﺭﺱ ﺜﺎﻨﻭﻱ ﻋﻠﻰ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﻭ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﺩﺍﺭ ﻭﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ . ً 4ـ ﺍﻋﺭﺽ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﻭﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﻭﺍﺤﺩ ﺒﺤﻴﺙ ﻴﻜﻭﻥ ﺍﻷﻭل ﺘﻔﺼﻴﻠﻲ ﻭﺍﻟﺜﺎﻨﻲ ﺜﺎﻨﻭﻱ . ً 5ـ ﻀﻊ ﻋﺩﺩ ﻤﻥ ﺍﻷﺯﺭﺍﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻟﻠﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﺴﺎﻟﻴﺏ ﺍﻟﺒﺤﺙ ﺍﻟﻤﺨﺘﻠﻔﺔ ً 6ـ ﺃﻋﺭﺽ ﻓﻲ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﺠﻤﻴﻊ ﺍﻟﻜﺘﺏ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻭﺍﻟﺘﻲ ﻤﻥ ﺇﺼﺩﺍﺭ ﺩﺍﺭ ﺸﻌﺎﻉ.
116
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ19 ﺍﻟﺤﻘﻭل ﺍﻟﺤﺴﺎﺒﻴﺔ : ﺘﺴﺘﺨﺩﻡ ﺍﻟﺤﻘﻭل ﺍﻟﺤﺴﺎﺒﻴﺔ ﻋﺎﺩﺓ ﻹﻋﻁﺎﺀ ﻨﺘﻴﺠﺔ ﺤﺴﺎﺒﻴﺔ ﺃﺠﺭﻴﺕ ﻋﻠﻰ ﻋﺩﺩ ﻤﻥ ﺤﻘﻭل ﺍﻟﺠﺩﻭل ﻭﻫﺫﻩ ﺍﻟﺤﻘﻭل ﻻ ﺘﺨﺯﻥ ﻓﻲ
ﻼ ﻟﺘﺨﺯﻴﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻷﻨﻬﺎ ﻤﻌﺘﻤﺩﺓ ﻋﻠﻰ ﺤﻘﻭل ﺃﺨـﺭﻯ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻟﻜﻥ ﺘﻅﻬﺭ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻓﻘﻁ ) ﻻ ﺤﺎﺠﺔ ﺃﺼ ﹰ ﻓﻲ ﺍﻟﺠﺩﻭل ( ....
ﻤﺜﺎل :ﻋﻠﻰ ﻓﺭﺽ ﺃﻥ ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺤﻤل 350ﻤﺴﺎﻓﺭ ﻨﺭﻴﺩ ﺃﻥ ﻨﻨﺸﺊ ﺤﻘل ﺤـﺴﺎﺒﻲ ﻴﻌـﺭﺽ ﻋـﺩﺩ
ﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﻤﺤﺠﻭﺯﺓ ﻋﻠﻰ ﺭﺤﻠﺔ ﻤﺎ ﺒﺎﻻﻋﺘﻤﺎﺩ ﻋﻠـﻰ ﺍﻟﻌﻼﻗـﺔ
= 350 -
CardCountﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﻤﺤﺠﻭﺯﺓ ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺎﺼﺭ Tableﻭ DataSourceﻭ : DBGridﺍﺭﺒﻁ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻊ ﺒﻌﻀﻬﺎ ﻭﻤﻊ ﺍﻟﺠﺩﻭل Tripsﺒﺤﻴﺙ ﻴﻅﻬﺭ ﺍﻟﺠﺩﻭل ﻓﻲ DBGridﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ...
ﺍﻋﻁ ﺍﻟﺨﺎﺼﺔ Activeﻟﻠﻌﻨﺼﺭ Table1ﺍﻟﻘﻴﻤﺔ . False ﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨـﺼﺭ Tableﻟﻴﻅﻬـﺭ ﻤﺤـﺭﺭ ﺍﻟﺤﻘﻭل ،ﺜﻡ ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨـﻲ ﻭﺃﻀـﻑ ﺠﻤﻴـﻊ ﺍﻟﺤﻘﻭل ،ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻤﺭﺓ ﺃﺨـﺭﻯ ﻭﺍﺨﺘـﺭ New fieldﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺤﻘل ﺠﺩﻴﺩ
ﺍﻜﺘﺏ CapCardﻓﻲ ﺍﻟﻘﺴﻡ Nameﻭﻓﻲ ﺍﻟﻘـﺴﻡ Type ﺍﺨﺘﺭ Integerﻭﺍﺨﺘﺭ Calculatedﻓﻲ ﺍﻟﻘﺴﻡ Field type ﺍﻀﻐﻁ ﻋﻠﻰ . Ok ﺃﻏﻠﻕ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﺍﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ Table1ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺤـﺩﺙ OnClacFieldsﻭﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Table1CapCard.Value := 350 - table1Cardcount.value ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ Trueﻟﻠﻌﻨﺼﺭ Table1ﻭﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﺍﺴﺘﻌﺭﺽ ﺍﻟﺤﻘل ﺍﻟﺠﺩﻴﺩ ، CapCardﻋﺩل
ﻓﻲ ﺃﺤﺩ ﺤﻘﻭل CardCountﻭﻻﺤﻅ ﺍﻟﺘﻐﻴﺭ ﺍﻟﻤﺒﺎﺸﺭ ﻓﻲ ﺍﻟﺤﻘل ... CapCard
ﻤﺜﺎل : 2ﻨﺭﻴﺩ ﺃﻥ ﻨﻀﻴﻑ ﺤﻘل ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﺠﺩﻭل ﺍﻟﺴﺎﺒﻕ ﻴﻌﻁﻲ ﺍﺴﻡ ﺍﻟﻴﻭﻡ ﺍﻟﺫﻱ ﺴﺘﻨﻁﻠﻕ ﻤﻨﻪ ﺍﻟﺭﺤﻠﺔ ) ﺃﻱ ﺍﺫﺍ ﻜﺎﻨﺕ
ﺍﻟﺭﺤﻠﺔ ﺴﺘﻨﻁﻠﻕ ﺒﺘﺎﺭﻴﺦ 15/9/2003ﻓﺈﻥ ﻗﻴﻤﻪ ﻫﺫﺍ ﺍﻟﺤﻘل ﺴﺘﻜﻭﻥ " ﺍﻻﺜﻨﻴﻥ " ( ،ﺴﻴﻌﺘﻤﺩ ﻫﺫﺍ ﺍﻟﺤﻘل ﻓﻲ ﻗﻴﻤﺘﻪ ﻋﻠـﻰ ﺍﻟﺤﻘل GoTimeﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Activeﻟﻠﻌﻨﺼﺭ Table1ﺍﻟﻘﻴﻤﺔ Falseﻭﺍﻓﺘﺢ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﻓـﻲ ﺍﻟﻘﺴﻡ Nameﺃﻜﺘﺏ TheDayﻭﻓﻲ ﺍﻟﻘﺴﻡ Typeﺍﺨﺘـﺭ ، Stringﺍﻀـﻐﻁ ﻋﻠـﻰ OKﻭﺍﻨﺘﻘـل ﺇﻟـﻰ ﺍﻟﺤـﺩﺙ OnClacFieldsﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : Case DayOfWeek ( Table1GoTime.AsDateTime ) of ﻣﻼﺣﻈ ﺔ :ﻻ ﺗﺆﺛﺮ ﺍﳊﻘﻮﻝ ﺍﳊﺴﺎﺑﻴﺔ ﻋﻠﻰ ﺑﻨﻴﺔ ﻗﺎﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ;'ﺍﻷﺤﺩ'=1: Table1Theday.Value : ،ﻭﺇﺫﺍ ﺃﺭﺩﻧﺎ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﳊﻘﻮﻝ ﰲ ﺃﻛﺜﺮ ﻣﻦ ﳕﻮﺫﺝ ﻋﻠﻴﻨـﺎ ﺗﻌﺮﻳﻔﻬﺎ ﻣﻦ ﺟﺪﻳﺪ ﰲ ﻛﻞ ﻋﻨﺼﺮ Tableﺟﺪﻳﺪ .
117
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;'ﺍﻻﺜﻨﻴﻥ'=2: Table1Theday.Value : ;'ﺍﻟﺜﻼﺜﺎﺀ'=3: Table1Theday.Value : ;'ﺍﻷﺭﺒﻌﺎﺀ'=4: Table1Theday.Value : ;'ﺍﻟﺨﻤﻴﺱ'=5: Table1Theday.Value : ;'ﺍﻟﺠﻤﻌﺔ'=6: Table1Theday.Value : ;'ﺍﻟﺴﺒﺕ' =7: Table1Theday.Value : ;end ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ DayOfWeekﺭﻗﻡ ﺍﻟﻴﻭﻡ ﻓﻲ ﺍﻷﺴﺒﻭﻉ ﺤﻴﺙ ﺃﻥ ﺍﻟﻴﻭﻡ ﺍﻷﻭل ﺍﻷﺤﺩ ﻭﺍﻟﺜﺎﻨﻲ ﺍﻻﺜﻨﻴﻥ .... ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻋﺩل ﻓﻲ ﻗﻴﻡ ﺍﻟﺤﻘل GoTimeﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .......... ﻟﻐﺔ ﺍﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺒﻨﻴﻭﻴﺔ :
) SQL ( Structured Query Language
ﺘﻌﺭﻴﻑ :ﻟﻐﺔ SQLﻫﻲ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﺨﺎﺼﺔ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﻌﺘﺒﺭ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤـﺴﺘﻭﻯ ،ﺤﻴـﺙ ﻴﻤﻜﻨﻬﺎ ﻓﻲ ﺴﻁﺭ ﻭﺍﺤﺩ ﺇﺠﺭﺍﺀ ﻋﻤﻠﻴﺎﺕ ﺒﺎﻟﻐﺔ ﺍﻟﺘﻌﻘﻴﺩ ﻋﻠﻰ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ. ﺘﺴﺘﺨﺩﻡ SQLﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺴﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺒﻌﺽ ﻤﻨﻬﺎ ﺍﻵﻥ : ﺍﻟﺘﻌﻠﻴﻤﺔ : Selectﻤﻬﻤﺔ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺤﻀﺎﺭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻟﻬﺎ ﺍﻟﺸﻜل ﺍﻟﻌﺎﻡ ﺍﻟﺘﺎﻟﻲ : Select FieldName1 , FieldName2 , FieldName13…. … From TableName1,TableName2 ] [ Where Condition ]…[ Group By FieldName1, ] [ Order By FieldName ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻴﻥ ] [ ﺍﺨﺘﻴﺎﺭﻴﺔ . ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﺤﻀﺎﺭ ﺍﻟﺤﻘﻭل ﺍﻟﻤﺤﺩﺩﺓ ﺍﻟﻘﺴﻡ Selectﻤﻥ ﺍﻟﺠﺩﻭل ﺍﻟﻤﺫﻜﻭﺭ ﺍﺴﻤﻪ ﻓﻲ ﺍﻟﻘﺴﻡ From ﻼ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺇﺤﻀﺎﺭ ﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻭ ﺍﻟﺠﻨﺴﻴﺔ ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ﻤﺜ ﹰ Select PName , Nationality From Passengers ﻴﺘﻡ ﺍﻟﺘﻌﺎﻤل ﻓﻲ ﺩﻟﻔﻲ ﻤﻊ SQLﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ Queryﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺼﻔﺤﺔ BDEﻭﻫﻭ ﻋﻨﺼﺭ ﻴﺸﺎﺒﻪ ﺍﻟﻌﻨﺼﺭ Tableﺒﺸﻜل ﻜﺒﻴﺭ ﻭﻟﻜﻨﻪ ﻻ ﻴﻤﻠﻙ ﺍﻟﺨﺎﺼﺔ TableNameﺤﻴﺙ ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﺴﺘﺘﻌﺎﻤل ﻤﻊ ﻫﺫﺍ ﺍﻟﻌﻨـﺼﺭ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺨﺎﺼﺔ SQLﺍﻟﺘﻲ ﻴﺘﻡ ﻜﺘﺎﺒﺔ ﺘﻌﻠﻴﻤﺎﺕ SQLﻓﻴﻬﺎ .
ﻤﺜﺎل :ﺘﺤﻘﻴﻕ ﻤﺜﺎل ﺘﻌﻠﻴﻤﺔ SQLﺍﻟﺴﺎﺒﻕ
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ Queryﻭ DataSourceﻭ DBGridﻭDBNavigator .
ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DataBaseNameﻟﻠﻌﻨﺼﺭ Query1ﺍﻟﻘﻴﻤﺔ ، Travelﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ...ﻓـﻲ ﺍﻟﺨﺎﺼـﺔ SQL ﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺍﻜﺘﺏ ﻓﻴﻬﺎ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : Select PName , Nationality From Passengers 118
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ ) Trueﻓﻲ ﺤﺎل ﻅﻬﻭﺭ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﺘﺄﻜﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﻤﻥ ﻜﺘﺎﺒﺘﻙ ﻷﺴﻤﺎﺀ ﺍﻟﺤﻘـﻭل ﻭﺍﻟﺠﺩﻭل ﺒﺸﻜل ﺼﺤﻴﺢ(
ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DataSetﻟﻠﻌﻨﺼﺭ DataSource1ﺍﻟﻘﻴﻤﺔ Query1ﻭﺍﺭﺒﻁ DBGrid1ﻭ DBNavigator1ﻤـﻊ . DataSource1 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﻅﻬﻭﺭ ﺍﻷﻋﻤﺩﺓ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻓﻲ ﻋﺒﺎﺭﺓ Selectﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ ، DBGridﻻﺤﻅ ﺃﻴـﻀﹰﺎ ﺃﻥ ﺃﺯﺭﺍﺭ ﺘﻌﺩﻴل ﻭﺇﻀﺎﻓﺔ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﻌﻨﺼﺭ DBNavigator1ﻏﻴﺭ ﻓﻌﺎﻟﺔ ،ﻜﻤﺎ ﺃﻨﻪ ﻻ ﻴﻤﻜﻥ ﺍﻟﺘﻌﺩﻴل ﻓﻲ ﺍﻟﺒﻴﺎﻨـﺎﺕ ﻤـﻥ ﺨﻼل ﺍﻟﻌﻨﺼﺭ DBGrid1ﻤﺒﺎﺸﺭﺓ ﻭﺫﻟﻙ ﻴﻌﻭﺩ ﺇﻟﻰ ﺃﻥ ﻋﺒﺎﺭﺓ Selectﺘﺴﺘﺨﺩﻡ ﻟﺠﻠﺏ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨـﺎﺕ ، ﺃﻤﺎ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻟﺘﻌﺩﻴل ﺃﻭ ﺍﻹﻀﺎﻓﺔ ﺃﻭ ﺍﻟﺤﺫﻑ ﻓﻬﻨﺎﻙ ﺘﻌﻠﻴﻤﺎﺕ SQLﺨﺎﺼﺔ ﺒﺫﻟﻙ ،ﻭﻟﻜﻥ ﺍﻟﻌﻨﺼﺭ Queryﻴﻤﻠﻙ ﺨﺎﺼﺔ ﺘﺠﻌل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻗﺎﺒﻠﺔ ﻟﻠﺘﺤﺭﻴﺭ ﻭﻫﻲ ﺍﻟﺨﺎﺼﺔ
، RequestLiveﻓﻌﻨﺩ ﺇﻋﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﻴﻤﻜﻥ ﺍﻟﺘﻌﺎﻤل
ﻤﻊ ﺍﻟﻌﻨﺼﺭ Queryﻜﻤﺎ ﻜﻨﺎ ﻨﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﺘﻤﺎﻤﹰﺎ . ﻻ ﻤﻥ ﺫﻜﺭ ﺃﺴﻤﺎﺀ ﺍﻷﻋﻤـﺩﺓ ،ﻋـﺩل ﻤﺜﺎل : 2ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺇﺤﻀﺎﺭ ﺤﻘﻭل ﺍﻟﺠﺩﻭل ﺒﺎﻟﻜﺎﻤل ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ * Selectﺒﺩ ﹰ ﺍﻟﻌﺒﺎﺭﺓ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ) ﺩﺍﺨل ﺍﻟﺨﺎﺼﺔ SQLﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : * Select From Passengers ﺒﻌﺩ ﺃﻱ ﺘﻌﺩﻴل ﻋﻠﻰ ﺍﻟﺨﺎﺼﺔ SQLﺴﺘﻌﻭﺩ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Activeﻟﻠﻌﻨﺼﺭ Queryﺇﻟﻰ False ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺸﺭﻁ : Whereﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Whereﺩﺍﺨل ﻋﺒﺎﺭﺓ Selectﻟﺘﺤﻘﻴﻕ ﺸﺭﻭﻁ ﻤﻌﻴﻨﺔ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘـﻲ ﺴﻴﺤﻀﺭﻫﺎ ﺍﻻﺴﺘﻌﻼﻡ .
ﻤﺜﺎل : 3ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺤﻘﻭل ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺃﻜﺒﺭ ﻤﻥ . 5 ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ SQLﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : * Select From Passengers Where PNo > 5
ﻤﺜﺎل : 4ﻨﺭﻴﺩ ﻋﺭﺽ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺍﻟﺫﻱ ﺭﻗﻤﻪ : 3
ﻤﺜﺎل : 5ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺒﻴﻥ 2ﻭ : 5
* Select From Passengers Where PNo = 3 * Select From Passengers ; Where PNo Between 2 and 5
ﻤﺜﺎل : 6ﻨﺭﻴﺩ ﻋﺭﺽ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺨﺎﺭﺝ ﺍﻟﻤﺠﺎل : 5 – 2 * Select From Passengers ; Where PNo Not Between 2 and 5 ﻤﺜﺎل : 7ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﺍﺴﻤﻬﻡ ﻤﺤﻤﺩ : * Select 119
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
From Passengers 'ﻤﺤﻤﺩ' = Where PName ﻤﺜﺎل : 8ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺒﺩﺃ ﺍﺴﻤﻬﻡ ﺒﺤﺭﻑ ﻡ * Select From Passengers '%ﻡ' Where Pname Like ﻤﺜﺎل : 9ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺒﺩﺃ ﺍﺴﻤﻬﻡ ﺒﺤﺭﻑ ﻡ ﻭﻁﻭل ﺍﺴﻤﻬﻡ ﺃﺭﺒﻊ ﺃﺤﺭﻑ :
ﺘﺴﺘﺨﺩﻡ %ﻓﻲ ﺘﻌﻠﻴﻤﺔ Likeﻟﻺﺸﺎﺭﺓ ﺇﻟﻰ ﻋﺩﺩ ﻤﻥ ﺍﻷﺤﺭﻑ .
* Select From Passengers 'ﻡ____' Where Pname Like
ﺘﺴﺘﺨﺩﻡ _ ﻓﻲ ﺘﻌﻠﻴﻤﺔ Likeﻟﻺﺸﺎﺭﺓ ﺇﻟﻰ ﺤﺭﻑ ﻭﺤﻴﺩ . ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﺭﺘﻴﺏ : Order By ﺘﺴﺘﺨﺩﻡ ﺘﻌﻠﻴﻤﺔ Order byﻟﺘﺭﺘﻴﺏ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺤﺴﺏ ﺤﻘل ﻤﺤﺩﺩ : ﻤﺜﺎل :10ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺃﻜﺒﺭ ﻤﻥ 5ﺒﺤﻴﺙ ﻴﻅﻬﺭ ﺘﺭﺘﻴﺏ ﺍﻷﺴﻤﺎﺀ ﺘﺼﺎﻋﺩﻴﹰﺎ Select * From Passengers Where PNo > 5 Order By PName ﻤﺜﺎل :10ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺃﻜﺒﺭ ﻤﻥ 5ﺒﺤﻴﺙ ﻴﻅﻬﺭ ﺘﺭﺘﻴﺏ ﺍﻷﺴﻤﺎﺀ ﺘﺼﺎﻋﺩﻴﹰﺎ Select * From Passengers Where PNo > 5 Order By PName desc ﻻ ﻤﺜﺎل : 11ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺃﻜﺒﺭ ﻤﻥ 5ﺒﺤﻴﺙ ﻴﺘﻡ ﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﺒﺎﻟﻨﺴﺒﺔ ﻟﻸﺴـﻤﺎﺀ ﺃﻭ ﹰ ﻭﻤﻥ ﺜﻡ ﻷ ﻟﻠﺠﻨﺴﻴﺔ ) ﺃﻱ ﺇﺫﺍ ﺘﻁﺎﺒﻕ ﺍﺴﻤﻲ ﻤﺴﺎﻓﺭﻴﻥ ﺴﻴﻭﻀﻊ ﺘﺭﺘﻴﺒﻬﺎ ﻓﻲ ﺍﻟﺠﺩﻭل ﺤﺴﺏ ﺘﺭﺘﻴﺏ ﺍﻟﺠﻨﺴﻴﺔ ﺃﺒﺠﺩﻴﹰﺎ ( . Select * From Passengers Where PNo > 5 Order By PName ,Nationality
ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﺠﺎﻤﻌﺔ ﻓﻲ : SQL 1ـ ﺍﻟﺘﺎﺒﻊ : Countﻴﻌﻴﺩ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﺘﻌﻴﺩﻫﺎ ﻋﺒﺎﺭﺓ : Select
ﻤﺜﺎل :12ﻟﻤﻌﺭﻓﺔ ﻋﺩﺩ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﺩﻴﻨﺔ ﺤﻠﺏ ﻓﻲ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ) * (Select Count From Trips 'ﺤﻠﺏ' = Where GoFrom ﺴﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺠﺩﻭل ﺤﻘل ﻭﺤﻴﺩ ﻓﻴﻪ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﺩﻴﻨﺔ ﺤﻠﺏ ،ﻋﻨﻭﺍﻥ ﻫﺫﺍ ﺍﻟﺤﻘل )*( ، Countﻴﻤﻜـﻥ
ﺘﻐﻴﺭ ﻫﺫﺍ ﺍﻟﻌﻨﻭﺍﻥ ﺒﺘﻌﺩﻴل ﺘﻌﻠﻴﻤﺔ Selectﺇﻟﻰ
Select Count( * ) as Total …. 120
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﺍﻟﺘﺎﺒﻊ : Sumﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻤﺠﻤﻭﻉ ﺴﺠﻼﺕ ﺤﻘل ﻤﺎ . ﻤﺜﺎل : 13ﻟﻤﻌﺭﻓﺔ ﻤﺠﻤﻭﻉ ﺒﻁﺎﻗﺎﺕ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﺤﻠﺏ ﻨﺴﺘﺨﺩﻡ ﻋﺒﺎﺭﺓ SQLﺍﻟﺘﺎﻟﻴﺔ : )Select Sum(CardCount From Trips 'ﺤﻠﺏ' = Where GoFrom 3ـ ﺍﻟﺘﺎﺒﻊ : Avgﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻤﻌﺩل ﺍﻟﻭﺴﻁﻲ ﻟﻤﻌﻁﻴﺎﺕ ﺴﺠﻼﺕ ﺤﻘل ﻤﺎ ﻤﺜﺎل : 14ﻟﻤﻌﺭﻓﺔ ﺍﻟﻤﻌﺩل ﺍﻟﻭﺴﻁﻲ ﻟﻌﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻌﺩﺩ ﺍﻟﺭﺤﻼﺕ )Select Avg(CardCount Form Trips 4ـ ﺍﻟﺘﺎﺒﻊ : Maxﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺃﻜﺒﺭ ﻗﻴﻤﺔ ﻓﻲ ﺍﻟﺤﻘل : ﻤﺜﺎل : 15ﻟﻤﻌﺭﻓﺔ ﺃﻜﺒﺭ ﻋﺩﺩ ﻟﻠﺒﻁﺎﻗﺎﺕ ﻓﻲ ﺤﻘل CardCount )Select Max(CardCount From Trips 5ـ ﺍﻟﺘﺎﺒﻊ : Minﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺃﺼﻐﺭ ﻗﻴﻤﺔ ﻓﻲ ﺤﻘل ﻤﺎ . ﻋﺒﺎﺭﺓ : Group By ﺘﺴﺘﺨﺩﻡ ﻀﻤﻥ ﺘﻌﻠﻴﻤﺔ Selectﻹﺠﺭﺍﺀ ﻋﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻓﺭﺯﻫﺎ ﻀﻤﻥ ﻤﺠﻤﻭﻋﺎﺕ ﻭﻫﻲ ﻤﺭﺘﺒﻁﺔ ﺒﺸﻜل ﻭﺜﻴﻕ ﻤﻊ
ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﺠﺎﻤﻌﺔ :
ﻤﺜﺎل : 16ﻹﻅﻬﺎﺭ ﻋﺩﺩ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻜل ﻤﻁﺎﺭ : )Select GoFrom ,Count(GoFrom From Trips Group by GoFrom ﻤﺜﺎل : 17ﻟﻤﻌﺭﻓﺔ ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﻟﻠﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻜل ﻤﻁﺎﺭ : )Select GoFrom ,Sum(CardCount From Trips Group by GoFrom
ﻤﻼﺤﻅﺔ :ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﻟﻭﺍﺭﺩﺓ ﻓﻲ ﺘﻌﻠﻴﻤﺔ Selectﻴﺠﺏ ﺃﻥ ﺘﺭﺩ ﻓﻲ ﺘﻌﻠﻴﻤﺔ Group Byﻤﺎ ﻋﺩﺍ ﺍﻟﺤﻘـﻭل ﺍﻟﺘـﻲ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺠﺎﻤﻌﺔ .
ﻋﺒﺎﺭﺓ : Having
ﺘﺴﺘﺨﺩﻡ ﺘﻌﻠﻴﻤﺔ Havingﺒﻌﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ Group Byﻟﻭﻀﻊ ﺸﺭﻭﻁ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﻓﺭﺯ ﺍﻟﺒﻴﺎﻨﺎﺕ . ﻤﺜﺎل : 18ﻟﻤﻌﺭﻓﺔ ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﻟﻠﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻜل ﻤﻁﺎﺭ ﻭﺍﻟﺘﻲ ﻋﺩﺩ ﺒﻁﺎﻗﺎﺘﻬﺎ ﺃﻜﺒﺭ ﻤﻥ . 10 )Select GoFrom ,Sum(CardCount From Trips Group by GoFrom Having Sum( CardCount) > 10 ﻤﺜﺎل : 19ﻟﻤﻌﺭﻓﺔ ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﻟﻠﺭﺤل ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻜل ﻤﻁﺎﺭ ﻭﺍﻟﺘﻲ ﻋﺩﺩ ﺒﻁﺎﻗﺎﺘﻬﺎ ﻻ ﻴﺴﺎﻭﻱ Null )Select GoFrom ,Sum(CardCount 121
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
From Trips Group by GoFrom Having Sum( CardCount ) is not null
122
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 20 ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل : ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻋﺒﺎﺭﺓ Selectﻹﺤﻀﺎﺭ ﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺃﻜﺜﺭ ﻤﻥ ﺠﺩﻭل ﻭﺒﺘﻁﺒﻴﻕ ﺒﻌﺽ ﺍﻟﺸﺭﻭﻁ ﻓﻲ ﻋﺒﺎﺭﺓ Where ﻨﺤﺼل ﻋﻠﻰ ﺠﺩﺍﻭل ﻤﺭﺘﺒﺔ ﻭﺃﻜﺜﺭ ﻓﺎﻋﻠﻴﺔ ﻤﻥ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻴﻅﻬﺭﻫﺎ ﺍﻟﻌﻨﺼﺭ . Table
ﻻ ﻤﻥ ﺭﻗﻤﻪ : ﻤﺜﺎل :1ﺭﺒﻁ ﺍﻟﺠﺩﻭﻟﻴﻥ Passengersﻭ PassAndTripsﻹﻅﻬﺎﺭ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﺒﺩ ﹰ SELECT Pname,TripNo,SeatNo,ClassNo FROM PassAndtrips, Passengers WHERE PassAndtrips.PNo = Passengers.PNo ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﺤﻀﺎﺭ ﺃﺴﻤﺎﺀ ﺍﻷﻋﻤﺩﺓ ﺍﻟﻤﺨﺘﺎﺭﺓ ﻤﻥ ﺠﺩﻭﻟﻲ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭ " ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﻭﺍﻟﺭﺤﻼﺕ " ﺒﺘﻁﺒﻴﻕ ﺍﻟﺸﺭﻁ
ﺍﻷﺨﻴﺭ ﻭﺍﻟﺫﻱ ﻴﺴﻤﻰ ﺸﺭﻁ ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل ) ﻓﻲ ﺤﺎل ﺘﺸﺎﺒﻪ ﺍﺴﻡ ﺍﻟﺤﻘل ﻓﻲ ﺠﺩﻭﻟﻴﻥ ﻨﻜﺘﺏ ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﻗﺒل ﺍﺴﻡ ﺍﻟﺤﻘل ﻭﺒﻴﻨﻬﻤﺎ ﻨﻘﻁﺔ Passengers.PNo
ﻤﺜﺎل : 2ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل PassAndTripsﻭ Passengersﻭ : Tripsﺒﺤﻴﺙ ﻴﻅﻬﺭ ﺠﺩﻭل ﻓﻴﻪ ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻭ ﺍﺴﻡ
ﺍﻟﺸﺭﻜﺔ ﺍﻟﺘﻲ ﺴﻴﺴﺎﻓﺭ ﻤﻌﻬﺎ ﻭﺒﻠﺩ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻭ ﺭﻗﻡ ﺍﻟﻤﻘﻌﺩ ﻭﺭﻗﻡ ﺍﻟﺼﻑ : SELECT Pname, Company, GoFrom, SeatNo, ClassNo FROM Passandtrips, Passengers, Trips )WHERE (PassAndtrips.PNo = Passengers.PNo )AND (PassAndtrips.TripNo = Trips.TripNo ﺍﻟﺘﻌﻠﻴﻤﺔ : Inner join ﻫﻲ ﺘﻌﻠﻴﻤﺔ ﺘﺴﺘﺨﺩﻡ ﻟﻠﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ﺤﻴﺙ ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﻋﺒﺎﺭﺓ SQLﻟﻠﻤﺜﺎل ﺍﻷﻭل ﺒﺎﻟﺸﻜل : SELECT Pname, TripNo,SeatNo, ClassNo FROM PassAndtrips INNER JOIN Passengers )ON (Passengers.PNo = PassAndtrips.PNo ﻭﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﻋﺒﺎﺭﺓ SQLﻟﻠﻤﺜﺎل ﺍﻟﺜﺎﻨﻲ ﺒﺎﻟﺸﻜل : SELECT Pname, company, SeatNo, ClassNo FROM Passandtrips INNER JOIN Passengers )ON (Passengers.PNo = Passandtrips.PNo INNER JOIN Trips )ON (Trips.TripNo = Passandtrips.TripNo ﻤﻼﺤﻅﺎﺕ : 1ـ ﻫﻨﺎﻙ ﻋﺒﺎﺭﺍﺕ ﺃﺨﺭﻯ ﻟﻠﺭﺒﻁ ﻤﺜل Outer Joinﻭ Left Joinﻭ Right Joinﻴﻤﻜﻨﻙ ﻤﺭﺍﺠﻌﺔ ﻜﺘﺏ SQL ﻟﻠﺘﻌﺭﻑ ﻋﻠﻴﻬﺎ. 1ـ ﺒﺎﻹﻀﺎﻓﺔ ﻟﻌﺒﺎﺭﺓ SELECTﻴﻭﺠﺩ ﻋﺒﺎﺭﺍﺕ ﺃﺨﺭﻯ ﻓﻲ SQLﻤﻨﻬﺎ : ﺍﻟﻌﺒﺎﺭﺓ Create Table
ﺍﻟﻌﻤل ﺇﻨﺸﺎﺀ ﺠﺩﻭل 123
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﺩﺨﺎل ﻗﻴﻡ ﺇﻟﻰ ﺠﺩﻭل
Insert Update
ﺘﻌﺩﻴل ﻗﻴﻡ ﺠﺩﻭل
Delete From
ﺤﺫﻑ ﺴﺠﻼﺕ ﻤﻥ ﺠﺩﻭل .
ﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﻫﺫﻩ ﺍﻷﻭﺍﻤﺭ ﺭﺍﺠﻊ ﻜﺘﺏ SQLﺍﻟﻤﺨﺘﺼﺔ .... ﺍﻟﺒﺭﻨﺎﻤﺞ : SQL Builder ﻴﺴﺘﺨﺩﻡ ﻫـﺫﺍ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻟﻜﺘﺎﺒـﺔ ـﻲ ـﺸﻜل ﻤﺭﺌـ ـﺎﺕ SQLﺒـ ﺘﻌﻠﻴﻤـ ﻭﺘﻔﺎﻋﻠﻲ ﻭﺒﻜﻼﻡ ﺁﺨﺭ ﻫﻭ ﻋﺒـﺎﺭﺓ ﻋﻥ ﺃﺩﺍﺓ ﺘﺴﻬل ﻜﺘﺎﺒـﺔ ﺘﻌﻠﻴﻤـﺎﺕ
SQLﻜﻤﺎ ﺘﻤﻜﻨﻨﺎ ﻤﻥ ﺍﺴـﺘﻌﺭﺍﺽ ﺍﻟﻨﺘﺎﺌﺞ ... ﻟﺘﺸﻐﻴل SQL Builderﻀـﻊ ﻋﻨﺼﺭ Queryﻋﻠـﻰ ﺍﻟﻨﻤـﻭﺫﺝ ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻨـﻲ
ـﻥ ـﺭ SQL Builderﻤـ ﻭﺍﺨﺘـ
ﺍﻟﻘﺎﺌﻤﺔ ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻤﺜﺎل : 1ﻹﻅﻬﺎﺭ ﺤﻘﻭل ﻤﻥ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ : 1ـ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺴﺩﻟﺔ Databaseﺍﺨﺘﺭ ﺍﺴﻡ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ Travelﻋﻨﺩﻫﺎ ﺴﺘﻅﻬﺭ ﺠﻤﻴﻊ ﺍﻟﺠﺩﺍﻭل ﻀﻤﻥ ﻫﺫﻩ ﺍﻟﻘﺎﻋﺩﺓ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ Tableﺍﺨﺘﺭ ﻤﻨﻬﺎ Trips.db 2ـ ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺼﻐﻴﺭﺓ ﺘﺤﻭﻱ ﺠﻤﻴﻊ ﺤﻘﻭل ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ﻭﺒﺠﻭﺍﺭ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﺼﻨﺎﺩﻴﻕ ﺨﻴﺎﺭ ،ﺒﺘﺤﻔﻴـﺯ
ﻫﺫﻩ ﺍﻟﺼﻨﺎﺩﻴﻕ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ ﺍﻻﺴﺘﻌﻼﻡ ) ﺤﺩﺩ ﺒﻌﻀﹰﺎ ﻤﻥ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ( . 3ـ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Execute SQLﻤﻥ ﺇﺯﺍﺭﺍ ﺍﻟﺴﺭﻋﺔ
ﻗﺭﺍﺀﺓ ﺘﻌﻠﻴﻤﺎﺘﻪ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ SQLﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﺯﺭ ﺍﻟﺴﺎﺒﻕ .
ﺴﺘﻼﺤﻅ ﻤﺒﺎﺸﺭﺓ ﻨﺘﺎﺌﺞ ﺍﻻﺴﺘﻌﻼﻡ ﻭﺍﻟﺫﻱ ﻴﻤﻜﻨـﻙ
4ـ ﺃﻏﻠﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ SQL Builderﺴﻴﺴﺄﻟﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺫﺍ ﻜﻨﺕ ﺘﺭﻴﺩ ﺤﻔﻅ ﺍﻟﺘﻐﻴﺭﺍﺕ ﺇﻟﻰ ﺍﻻﺴﺘﻌﻼﻡ ،ﺇﺫﺍ ﺍﺨﺘﺭﺕ ﻨﻌﻡ ﺴﺘﺸﺎﻫﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻀﻤﻥ ﺍﻟﺨﺎﺼﺔ SQLﻟﻠﻌﻨﺼﺭ Queryﺒﺸﻜل ﺘﻠﻘﺎﺌﻲ .. ﻤﺜﺎل : 2ﺘﻌﻠﻴﻤﺔ Whereﺒﺎﺴﺘﺨﺩﺍﻡ : SQL Builderﻹﻅﻬﺎﺭ ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﻁﺎﺭ ﺤﻠﺏ ﻗﻡ ﺒﻤﺎ ﻴﻠﻲ :
124
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﺍﺩﺨل ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ... SQL Builderﻜﻤﺎ ﻓﻲ ﺍﻟﺴﺎﺒﻕ : 2ـ ﺤﺩﺩ ﺠﻤﻴﻊ ﺤﻘﻭل ﺍﻟﺠﺩﻭل Trips.dbﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺼﻨﺩﻭﻕ ﺍﻟﺨﻴﺎﺭ ﺍﻟﻤﺠﺎﻭﺭ ﻷﺴﻡ ﺍﻟﺠـﺩﻭل ) ﻀـﻤﻥ ﺍﻟﻨﺎﻓـﺫﺓ
ﺍﻟﺼﻐﻴﺭﺓ ( .
3ـ ﻀﻤﻥ ﺍﻟﺼﻔﺤﺔ ) Criteriaﻤﻌﺎﻴﻴﺭ ( :ﺍﺨﺘﺭ Trips.Gofromﻤﻥ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﺴﺭ Field Valueﻭﺍﺨﺘـﺭ = ﻤﻥ ﺍﻟﻌﻤﻭﺩ Compareﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﻤﻥ Field Valueﺍﻟﻜﻠﻤﺔ ) ﺤﻠﺏ ( . 4ـ ﺸﺎﻫﺩ ﻋﺒﺎﺭﺓ SQLﺜﻡ ﻨﻔﺫﻫﺎ ...
ﻤﺜﺎل : 3ﺴﻨﻀﻴﻑ ﺸﺭﻁ ﺠﺩﻴﺩ ﻋﻠﻰ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭﻫﻭ ﺇﻅﻬﺎﺭ ﺍﻟﺭﺤﻼﺕ ﺍﻟﺘﻲ ﻏﺎﺩﺭﺕ ﺤﻠﺏ ﺒﺎﺘﺠﺎﻩ ﺍﻟﻘﺎﻫﺭﺓ .
1ـ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺸﺭﻁ ﺍﻟﺴﺎﺒﻕ ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﺴﺭ Trips.ArriveToﻭﺍﺨﺘﺭ = ﻤﻥ ﺍﻟﻌﻤﻭﺩ Compare ﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﻤﻥ ) ﺍﻟﻘﺎﻫﺭﺓ ( .
ﺘﻐﻴﺭ ﻋﻨﺎﻭﻴﻥ ﺍﻟﺤﻘﻭل :ﻗﻲ SQL Builderﺍﺨﺘﺭ ﺍﻟﺼﻔﺤﺔ Selectionﺴﺘﺸﺎﻫﺩ ﻓﻴﻬﺎ ﺠﻤﻴـﻊ ﺍﻟﺤﻘـﻭل ﺍﻟﺘـﻲ ﻗﻤـﺕ ﺒﺎﺨﺘﻴﺎﺭﻫﺎ ﻤﻥ ﺍﻟﺠﺩﻭل Tripﻴﻤﻜﻨﻙ ﺤﻴﺙ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﻤﻥ ) ( Fieldﺍﺴﻡ ﺍﻟﺤﻘل ﻭﻴﻅﻬﺭ ﺍﻟﻌﻤﻭﺩ ﺍﻷﻴﺴﺭ ) ( Output Nameﻋﻨﻭﺍﻥ ﺍﻟﺤﻘل ﻴﻤﻜﻨﻙ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻜﺘﺎﺒﺔ ﻋﻨﻭﺍﻥ ﻟﻠﺤﻘل ) ﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ( )،ﻴﻅﻬﺭ ﻋﻨﻭﺍﻥ ﺍﻟﺤﻘل ﻓﻲ ﺍﻟﻘﺴﻡ ﺍﺴﻡ ﺍﻟﺤﻘل ﻓﻲ ﺍﻟﻌﻨﺼﺭ DBGridﺍﻟﻤﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ، ( Query
ﻨﻔﺫ ﻋﺒﺎﺭﺓ SQLﻟﺘﻼﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .
ﺘﺭﺘﻴﺏ ﺤﻘﻭل ﺍﻟﺠﺩﻭل :
ﻭﺠﺩﻨﺎ ﺃﻥ ﺘﻌﻠﻴﻤﺔ Order Byﺘﺴﺘﺨﺩﻡ ﻟﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﻭ ﻟﻜﺘﺎﺒﺔ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺒﺎﺴـﺘﺨﺩﺍﻡ SQL Builderﻨﺨﺘـﺎﺭ ﺍﻟﺼﻔﺤﺔ Sortingﺤﻴﺙ ﺘﻅﻬﺭ ﻓﻲ ﺍﻟﻘﺴﻡ ﺍﻷﻴﺴﺭ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﻟﻤﺨﺘﺎﺭﺓ ﻤﻥ ﺍﻟﺠﺩﻭل ،ﺤﺩﺩ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Addﻟﻴﻀﺎﻑ ﺍﺴﻤﻪ ﺇﻟﻰ ﺍﻟﻘﺴﻡ ﺍﻷﻴﻤﻥ ﻤﻥ ﺍﻟﺼﻔﺤﺔ ) ، ( Sorted byﻴﻤﻜﻨﻙ ﺇﻀﺎﻓﺔ ﺃﻜﺜﺭ ﻤﻥ ﺤﻘل ﻜﻤـﺎ
ﻴﻤﻜﻨﻙ ﺘﺤﺩﻴﺩ ﻁﺭﻴﻘﺔ ﺍﻟﺘﺭﺘﻴﺏ ) ﺘﺼﺎﻋﺩﻱ ﺃﻡ ﺘﻨﺎﺯﻟﻲ ( ﺒﺎﺨﺘﻴﺎﺭ ﺍﻟﺤﻘل ﻓﻲ ﺍﻟﻘﺴﻡ Sorted Byﻭﺍﻟـﻀﻐﻁ ﻋﻠـﻰ ﺃﺤـﺩ ﺍﻟﺯﺭﻴﻥ AÆZﺃﻭ Z ÆAﻗﻲ ﺍﻟﻭﺴﻁ .... ﺍﻟﺘﺠﻤﻴﻊ ﻭﺸﺭﻭﻁ ﺍﻟﺘﺠﻤﻴﻊ :Group by …Having ﻴﻤﻜﻨﻙ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ Group byﻭ Havingﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺼﻔﺤﺘﻴﻥ Groupingﻭ . Group Criteria ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل ﺒﺎﺴﺘﺨﺩﺍﻡ : SQL Builder
ﺤل ﺍﻟﻤﺜﺎل ﺍﻷﻭل :
ﺍﻓﺘﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ ) SQL Builderﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﻋﻨـﺼﺭ ( Queryﺍﺨﺘـﺭ ﺍﻟﻘﺎﻋـﺩﺓ Travelﻭﺍﺨﺘﺭ ﺍﻟﺠﺩﻭل PassAndTripsﻭﻤﻥ ﺍﻟﻼﺌﺤﺔ Tableﻭﻤﻥ ﺜﻡ ﺍﺨﺘﺭ ﺍﻟﺠﺩﻭل Passenegersﻤـﻥ ﻨﻔـﺱ ﺍﻟﻼﺌﺤﺔ : ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺘﻲ ﺍﻟﺠﺩﻭﻟﻴﻥ ،ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﺴﺭ ﻋﻠﻰ ﺍﻟﺤﻘل PNoﻓـﻲ ﻨﺎﻓـﺫﺓ ﺍﻟﺠـﺩﻭل Passengers
ﻭﺤﺭﻙ ﻴﺩﻙ ﺒﺎﺘﺠﺎﻩ ﺍﻟﺤﻘل PNoﻓﻲ ﻨﺎﻓﺫﺓ ﺍﻟﺠﺩﻭل PassAndTripsﻤﻊ ﺇﺒﻘﺎﺀ ﺍﻟﺯﺭ ﻤﻀﻐﻭﻁﹰﺎ ،ﺤﺭﺭ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻕ
ﺍﻟﺤﻘل PNoﺘﻤﺎﻤﹰﺎ ،ﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺨﻁ ﻴﺼل ﺒﻴﻥ ﺍﻟﻨﺎﻓﺫﺘﻴﻥ ﺩﻟﻴل ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺍﻟﺭﺒﻁ ) ﺍﺨﺘﺭ ﺒﻌـﺽ ﺍﻟﺤﻘـﻭل ﻤـﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ﻭﺸﺎﻫﺩ ﺍﻟﻨﺎﻓﺫﺓ SQLﻟﻠﻤﺸﺎﻫﺩﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ( . 125
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﺤل ﺍﻟﻤﺜﺎل ﺍﻟﺜﺎﻨﻲ :ﺃﻀﻑ ﺍﻟﺠﺩﻭل Tripsﻤﻥ ﺍﻟﻼﺌﺤﺔ Tableﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺍﻟﺠﺩﻭل Tripsﻭﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺍﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺤﻘﻠﻴﻥ TripNoﻓﻲ ﺍﻟﺠﺩﻭﻟﻴﻥ ... ﺍﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺩﻴﻨﺎﻤﻴﻜﻴﺔ :
ﺠﻤﻴﻊ ﺍﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺘﻲ ﺃﺠﺭﻴﻨﻬﺎ ﺤﺘﻰ ﺍﻵﻥ ﺘﺩﻋﻰ ﺍﺴﺘﻔﺴﺎﺭﺍﺕ ) ﺍﺴﺘﻌﻼﻤﺎﺕ ( ﺴﺘﺎﺘﻴﻜﻴﺔ ﻭﺫﻟﻙ ﻷﻨﻬﺎ ﺸﺭﻭﻁﻬﺎ ﺘﻜـﻭﻥ ﻼ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺫﻱ ﺒﺤﺜﻨﺎ ﻓﻴﻪ ﻋﻥ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻤﻁﺎﺭ ﺤﻠﺏ ﻜﺘﺒﻨـﺎ ﺍﻟﻌﺒـﺎﺭﺓ 'ﺤﻠـﺏ ﻤﺤﺩﺩﺓ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ﻓﻤﺜ ﹰ ' = ، Where GoFromﻤﻥ ﺍﻟﻤﻼﺤﻅ ﺃﻥ ﻫﺫﺍ ﺍﻻﺴﺘﻔﺴﺎﺭ ﻴﻌﻴﺩ ﺩﺍﺌﻤﹰﺎ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤـﻥ ﺤﻠـﺏ ﻭﻻ ﻴـﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﺩﻤﺸﻕ ﺩﻭﻥ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﻭﻀﻊ ﺍﻟﺘﺼﻤﻴﻡ ﻭ ﺘﻐﻴﻴﺭ ﻜﻠﻤﺔ ﺤﻠﺏ ﺇﻟﻰ ﺩﻤﺸﻕ ...
ﻟﺫﻟﻙ ﺯﻭﺩﺘﻨﺎ ﺩﻟﻔﻲ ﺒﻤﺎ ﻴﺴﻤﻰ ﺒﺎﻻﺴﺘﻔﺴﺎﺭﺍﺕ ﺍﻟﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﻭﺍﻟﺘﻲ ﺘﻤﻜﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺇﻋﻁﺎﺀ ﺍﻟﺸﺭﻁ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺘﻌﺩﻴل ﺍﻟﺸﺭﻁ ﺍﻟﺴﺎﺒﻕ ﺒﺎﻟﺸﻜل Where GoFrom = :ParamNameﺤﻴﺙ ParamNameﻭﺴﻴﻁ ﻟﻠﻌﻨـﺼﺭ Queryﻴﻌﻁﻰ ﻗﻴﻤﺔ ﻤﺎ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ . ﻤﺜﺎل :ﺇﺤﻀﺎﺭ ﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﺠﺩﻭل ﺍﻟﺭﺤﻼﺕ ﻋﻥ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﺒﻠﺩ ﻴﺤﺩﺩﻩ ﺍﻟﻤﺴﺘﺨﺩﻡ : ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﻋﻨﺼﺭ Queryﻭ ﻋﻨﺼﺭ DataSourceﻭ ﻋﻨﺼﺭ DBGridﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻋﻨـﺼﺭ Editﻭ ﺯﺭ Button
ﺍﺭﺒﻁ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻊ ﺒﻌﻀﻬﺎ ﻜﺎﻟﻌﺎﺩﺓ ...ﻭﺍﻜﺘﺏ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ SQLﻟﻠﻌﻨﺼﺭ Query1 SELECT Company, TripNo, GoFrom, ArriveTo, GoTime, ArriveTime, CardCount FROM Trips Where GoFrom =:CityName ﺤﻴﺙ CityNameﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻭﺴﻴﻁ ﺴﺘﻤﺭﺭ ﻗﻴﻤﺘﻪ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ Query1ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ) ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . ( Button1
ﺤﺩﺩ ﺍﻟﺨﺎﺼﺔ Paramsﻟﻠﻌﻨﺼﺭ Query1ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﻤﻨﻘﻁ ...ﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ، Edit Query1.Params ﺤﺩﺩ ﺍﻟﻭﺴﻴﻁ CityNameﻤﻥ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻟﺘﻅﻬﺭ ﺨﻭﺍﺼﻪ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﻤﻥ ﺜﻡ ﻏﻴﺭ ﺍﻟﺨﺎﺼـﺔ Data Type ﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ . ftString ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Button1ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;query1.Close ;query1.ParamByName('cityName').Value := edit1.Text query1.Open ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻜﺘﺏ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﺍﺴﻡ ﺍﻟﺒﻠﺩ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ) ﺤﻠﺏ ،ﺩﻤﺸﻕ ( ...ﻭﺍﻀﻐﻁ ﻋﻠـﻰ ﺍﻟـﺯﺭ ﻟﻴﺤـﻀﺭ ﺍﻻﺴﺘﻌﻼﻡ ﺠﻤﻴﻊ ﺍﻟﺭﺤﻼﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻤﻥ ﻫﺫﺍ ﺍﻟﺒﻠﺩ .
ﻤﺜﺎل : 2 ﻴﻤﻜﻨﻙ ﺍﻻﺴﺘﻌﻼﻡ ﻋﻥ ﺭﻗﻡ ﺍﻟﺭﺤﻠﺔ ﺒﺸﻜل ﺩﻴﻨﺎﻤﻴﻜﻲ ﻋﻥ ﻁﺭﻴﻕ ﺍﻻﺴﺘﻔﺴﺎﺭ ﺍﻟﺘﺎﻟﻲ : SELECT Company, TripNo, GoFrom, ArriveTo, GoTime, ArriveTime, CardCount FROM Trips 126
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
; Where TripNo =: TripNumber ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ Edit Query1.Paramsﺤﺩﺩ ﺍﻟﻭﺴﻴﻁ TripNumberﻭﻏﻴﺭ ﺍﻟﺨﺎﺼﺔ DataTypeﺇﻟﻰ . ftInteger ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;query1.Close ; )query1.ParamByName('TripNumber').Value := strtoint (edit1.Text ; query1.Open ﻤﻼﺤﻅﺔ : SQL Builderﻻ ﻴﺩﻋﻡ ﺍﻟﻭﺴﻁﺎﺀ ، Parameterﻭﻻ ﻴﻤﻜﻥ ﻓﺘﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﻭﺴﻴﻁ ﺇﻟﻰ ﻋﺒﺎﺭﺓ SQLﻭﺇﺫﺍ ﺃﺭﺩﺕ ﺍﻟﺘﻌﺩﻴل ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ ﻓﻌﻠﻴﻙ ﺤﺫﻑ ﺍﻟﻭﺴﻴﻁ ﻭﺍﻟﺩﺨﻭل ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ SQL Builderﻭﻤﻥ ﺜﻡ ﺇﻋﺎﺩﺓ ﺍﻟﻭﺴﻴﻁ ﻋﻨﺩ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻤﻨﺎﻫﺞ ﺍﻟﻌﻨﺼﺭ : Query ﺠﻤﻴﻊ ﺍﻟﻤﻨﺎﻫﺞ ﺍﻟﺘﻲ ﺍﺴﺘﺨﺩﻤﻨﺎﻫﺎ ﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﻴﻤﻜﻥ ﺍﺴـﺘﺨﺩﺍﻤﻬﺎ ﻤـﻊ ﺍﻟﻌﻨـﺼﺭ Queryﻤﺜـل ) Locateﻭ ـﻠﻭﺒﻲ ﺍﻟﺒﺤـ ـﺴﺘﺨﺩﻡ ﺍﺴـ ـﺼﺭ Queryﻻ ﻴـ Lookupﻭ Bofﻭ Eofﻭ ( .... Firstﺇﻻ ﺃﻥ ﺍﻟﻌﻨـ ـﺙ FindKeyﻭ FindNearestﻭﺫﻟﻙ ﻷﻥ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻴﻌﻴﺩﻫﺎ ﺍﻟﻌﻨﺼﺭ Queryﻻ ﺘﻌﺘﻤﺩ ﻋﻠﻰ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ .. ﻤﺜﺎل ﻫﺎﻡ :
ﻟﻴﻜﻥ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻟﺸﺭﻜﺔ ﻤﺎ Companyﻭﻟﻴﻜﻥ ﻟﺩﻴﻨﺎ ﺠﺩﻭل ﺍﻟﻤﻭﻅﻔﻴﻥ Employeesﺍﻟﺘﺎﻟﻲ : ﺭﻗﻡ
ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ EmpName
ﺭﻗﻡ ﺍﻟﻤﺩﻴﺭ ManagerNo
ﺭﻗﻡ ﺍﻟﻔﺭﻉ Department_id
ﺍﻟﻤﻭﻅﻑ EmpNo 3 200 Sara 10 2 300 kala 16 3 100 Dani 20 2 100 Wleed 30 ﺃﻨﺸﺊ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺒﺎﺴﺘﺨﺩﺍﻡ Database Desktopﻭﺃﺩﺨل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻴﻪ : ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻼﺯﻤﺔ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
127
ﺘﺎﺭﻴﺦ ﺍﻟﻤﺒﺎﺸﺭﺓ Hiredate 10/1/2002 06/08/2000 09/01/2001 05/07/2000
ﺍﻟﺭﺍﺘﺏ Salary 9000 12500 11000 14000
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤـﻊ ﺍلDataSource ﻭﺴﻨﻘﻭﻡ ﺒﺭﺒﻁDataSource ﻤﻊ ﺍﻟﻌﻨﺼﺭDBNavigator ﻭDBGrid ﺃﺭﺒﻁ ﺍﻟﻌﻨﺼﺭﻴﻥ . ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫQuery
: ﻟﻜل ﻤﻨﻬﺎSQL ﻭﻓﻴﻤﺎ ﻴﻠﻲ ﺘﻌﻠﻴﻤﺎﺕQuery ﻜﻤﺎ ﺘﻼﺤﻅ ﻟﺩﻴﻨﺎ ﺴﺕ ﻋﻨﺎﺼﺭ ﻭ ﺍﻜﺘـﺏQryEmpNo ﺍﻟﻘﻴﻤـﺔQuery1 ﻟﻠﻌﻨـﺼﺭName ﺃﻋﻁ ﺍﻟﺨﺎﺼـﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﻤﻭﻅﻑ1 : SQL ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Select * from employees Where EmpNo = : No ﻭﻜﺘﺏ ﻓﻲQryEmpName ﺍﻟﻘﻴﻤﺔQuery2 ﻟﻠﻌﻨﺼﺭName ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﻤﻭﻅﻑ2 : SQl Select * from employees Where EmpName =:name ﺍﻟﻘﻴﻤـﺔQuery3 ﻟﻠﻌﻨـﺼﺭName ) ﻴﻌﻁﻲ ﺍﻟﺭﻭﺍﺘﺏ ﺍﻟﺘﻲ ﺒﻴﻥ ﻗﻴﻤﺘﻴﻥ ( ﺃﻋﻁ ﺍﻟﺨﺎﺼـﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺍﻟﺭﻭﺍﺘﺏ3 ... QrySal Select * from Employees Where salary between :mn and :mx QryHireDate ﺍﻟﻘﻴﻤﺔQuery4 ﻟﻠﻌﻨﺼﺭName ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺘﺎﺭﻴﺦ ﺍﻟﻤﺒﺎﺸﺭﺓ4 Select * from Employees Where hiredate between :b and :e ﺍﻟﻘﻴﻤـﺔQuery5 ﻟﻠﻌﻨـﺼﺭName ﺃﻋـﻁ ﺍﻟﺨﺎﺼـﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻟﺭﻭﺍﺘـﺏ ﻓـﻲ ﻜـل ﻗـﺴﻡ5 QrysumsalaryByDepartment Select Department_id ,sum(salary ) form employees Group by DepartMent_id 128
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻘﻴﻤـﺔQuery6 ﻟﻠﻌﻨـﺼﺭName ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ: ـ ﺍﺴﺘﻌﻼﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﻟﻤﻭﻅﻔﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺘﺒﻌﻭﻥ ﻟﻤﺩﻴﺭ ﻤﻌﻴﻥ6 QryManager: Select Empname From employees Where managerNo = :mno : ﻭﻓﻴﻤﺎ ﻴﻠﻲ ﻨﺴﺘﻌﺭﺽ ﺃﺤﺩﺍﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻷﺯﺭﺍﺭ ( ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ) ﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ1 QryEmpNo.Close; DataSource1.DataSet := QryEmpNo ; QryEmpNo.ParamByName ( 'No') .value := Strtoint ( Edit1.text ) ; QryEmpNo.Open; : ( ﺍﻟﺯﺭ ) ﺍﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ QryEmpName.Close ; DataSource1.DataSat := QryEmpName ; QryEmpName.ParamesByName ( 'Name').Value := Edit2.text ; QryEmpName.Open ; ( ﺍﻟﺯﺭ ) ﺍﺴﺘﻌﻼﻡ ﺍﻟﺭﻭﺍﺘﺏ QrySal.Close ; DataSource1.DataSat := QrySal ; QrySal.ParamByName( ' mn') .Value := strtoint ( edit3.text ) ; QrySal.ParamByName( ' mx') .Value := strtoint ( edit4.text ) ; QrySal.Open ; : ( ﺍﻟﺯﺭ ) ﺍﺴﺘﻌﻼﻡ ﺍﻟﺘﺎﺭﻴﺦ QryHireDate.Close ; DataSource1.DataSat := QryHireDate; QryHireDate.ParamByName ( 'b').asdate := datetimepicker1.date; QryHireDate.ParamByName ( 'e').asdate := datetimepicker2.date; QryHireDate.Open ; : ( ) ﻤﺠﻤﻭﻉ ﺍﻟﺭﻭﺍﺘﺏ ﻓﻲ ﻜل ﻗﺴﻡ QrysumsalaryByDepartment.Close ; DataSource1.DataSat := QrysumsalaryByDepartment; QrysumsalaryByDepartment.Open ; : ( ﺍﻟﺯﺭ ) ﻤﻭﻅﻔﻲ ﺍﻟﻤﺩﻴﺭ QryManager.Close ; DataSource1.DataSat := QryManager; QryManager.ParamByName ( 'mno').Value := strtoint ( Edit5.text ) ; QryManager.Open ; While not QryManager.eof Do Begin Showmessage (QryManager.fieldByName ('EmpName').Value ) ; QryManager.Next ; End; 129
ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ2
ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ3
ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ4
ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ5
ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ6
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺴﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺍﺴﻡ ﺃﻭل ﻤﻭﻅﻑ ﻴﺄﺘﻲ ﺒﻪ ﺍﻻﺴﺘﻌﻼﻡ ﻭﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ Okﺴﻴﻅﻬﺭ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ ﺍﻟﺘﺎﻟﻲ ﻭﻫﻜﺫﺍ .
130
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 21 ﺇﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺒﺒﺭﻨﺎﻤﺞ :Access ﺍﻓﺘﺢ ﺒﺭﻨﺎﻤﺞ ) Access XPﻭﻫﻭ ﺃﺤﺩ ﺘﻁﺒﻴﻘﺎﺕ - ،(Microsoft Office XPﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ office 2003ﻓـﻼ ﻑ ﺠﺩﻴﺩ" New Fileﻓﻲ ﻑ" Fileﺍﺨﺘﺭ "ﺠﺩﻴﺩ" ..Newﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ "ﻤﻠ ﹼ ﻴﺨﺘﻠﻑ ﺍﻷﻤﺭ ﻜﺜﻴﺭﹰﺍ -ﻭﻤﻥ ﻗﺎﺌﻤﺔ "ﻤﻠ ﹼ
ﺠﺎﻨﺏ ﻭﺍﺠﻬﺔ ﺍﻟﺘﻁﺒﻴﻕ ﻜﻤﺎ ﻓﻲ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻑ" ﻴﻁﻠﺏ ﻤﻨﻙ ﺘﺤﺩﻴﺩ ﺍﺴﻡ ﺘﺤﺕ ﺸﺭﻴﻁ "ﺠﺩﻴﺩ" ﺍﻀﻐﻁ ﺍﻷﻤﺭ "ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻓﺎﺭﻏﺔ" ..ﺴﻴﻅﻬﺭ ﻟﻙ ﻤﺭﺒﻊ ﺤﻭﺍﺭ "ﺤﻔﻅ ﻤﻠ ﹼ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻤﻭﻗﻊ ﺤﻔﻅﻬﺎ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ ..ﻏﻴﺭ ﺍﺴﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺇﻟﻰ " ،"Books.mdbﻭﻗﻡ ﺒﺤﻔﻅﻬﺎ ﻓﻲ ﺍﻟﻤﻭﻀﻊ ﺍﻟﺫﻱ ﺘﺭﻴﺩﻩ.
ﻤﻼﺤﻅﺎﺕ :
ﺘﺨﺯﻥ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ﻓﻲ ﻤﻠﻑ ﻭﺍﺤﺩ ﻤﻥ ﺍﻤﺘﺩﺍﺩ .Mdbﻋﻠﻰ ﻋﻜﺱ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺒﺎﺭﺩﻭﻜﺱ ﺍﻟﺘﻲ ﺘﻌﺘﻤﺩ ﻤﻠﻑ ﻤﺴﺘﻘل ﻟﻜل ﺠﺩﻭل ﺃﻭ ﻓﻬﺭﺱ .... ﻟﻴﺴﺕ ﻫﻨﺎﻙ ﺍﺨﺘﻼﻓﺎﺕ ﻜﺒﻴﺭﺓ ﺒﻴﻥ Access XPﻭ Access 2000ﻭ Access 97ﻓﻴﻤﺎ ﻴﺘﻌﻠﹼﻕ ﺒﺈﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ،ﻟﻬﺫﺍ ﻱ ﻤﻥ ﻫﺫﻩ ﺍﻟﻨﺴﺦ. ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺘﺒﻊ ﻤﻌﻨﺎ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺍﺕ ﻋﻠﻰ ﺃ ﺒﻌﺩ ﺇﻏﻼﻕ ﻤﺭﺒﻊ ﺍﻟﺤﻭﺍﺭ ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻜﻤـﺎ ﻓﻲ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
131
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻨﻘﺭ ﺍﻷﻤﺭ "ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﻓﻲ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺘﺼﻤﻴﻡ" ﻤﺭﺘﻴﻥ ﺒﺎﻟﻔﺄﺭﺓ ..ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﺘﺼﻤﻴﻡ ﺍﻟﺠـﺩﻭل ﻜﻤـﺎ ﻓـﻲ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ل ﻨﺒﺩﺃ ﺒﺘﺼﻤﻴﻡ ﺠـﺩﻭل ﺃﺴـﻤﺎﺀ ل ﻤﻨﻬﺎ ..ﺘﻌﺎ َ ل ﻤﺎ ﻋﻠﻴﻙ ﻫﻭ ﻜﺘﺎﺒﺔ ﺃﺴﻤﺎﺀ ﺍﻟﺤﻘﻭل ﻭﺘﺤﺩﻴﺩ ﻨﻭﻋﻴﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻜ ّ ﺍﻵﻥ ﻜ ّ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺴﻴﺘﻜﻭﻥ ﻤﻥ ﺍﻟﻌﻤﻭﺩﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ: ﺍﺴﻡ ﺍﻟﺤﻘل ID Author
ﻨﻭﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ
ﺍﻟﻭﺼﻑ
ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌﻲ
ﻲ ﻟﻬﺫﺍ ﺍﻟﺠﺩﻭل ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴ
ﻨﺹ
ﺍﺴﻡ ﺍﻟﻤﺅﻟﹼﻑ
ﻱ ﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﻴﻤﻴﻥ ﺍﻟﺤﻘـل ،IDﻭﻤـﻥ ﺒﻌﺩ ﺃﻥ ﺘﻨﺸﺊ ﻫﺫﻩ ﺍﻷﻋﻤﺩﺓ ،ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﻤﻥ ﻋﻠﻰ ﺍﻟﻤﺭﺒﻊ ﺍﻟﺭﻤﺎﺩ
ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﻀﻌﻴﺔ ﺍﻀﻐﻁ "ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ" ﻭﺫﻟﻙ ﻟﺠﻌل ﻫﺫﺍ ﺍﻟﺤﻘل ﻤﻔﺘﺎﺤﺎ ﺃﺴﺎﺴﻴﺎ ﻟﻠﺠﺩﻭل.
ﻥ ﺨﺎﺼﻴﺔ "ﻤﻔﻬﺭﺱ" Indexedﻓﻲ ﺍﻟﻤﻨﻁﻘﺔ ﺍﻟـﺴﻔﻠﻰ ﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﺭﻤﺯ ﺍﻟﻤﻔﺘﺎﺡ ﺃﻤﺎﻡ ﻫﺫﺍ ﺍﻟﺤﻘل ..ﺴﺘﻼﺤﻅ ﻜﺫﻟﻙ ﺃ ﻲ ﻏﻴﺭ ﻗﺎﺒﻠﺔ ﻟﻠﺘﻜﺭﺍﺭ. ﻥ ﻗﻴﻡ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻷﺴﺎﺴ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺴﺘﺘﺤﻭل ﺇﻟﻰ "ﻨﻌﻡ ﺒﺩﻭﻥ ﺘﻜﺭﺍﺭ" ،ﻭﻫﻭ ﺸﻲﺀ ﻤﺘﻭﻗﹼﻊ ،ﻓﻠﻘﺩ ﺍﺘﻔﻘﹼﻨﺎ ﺃ ﺸﻲ ﺀ ﺁﺨﺭ ..ﺍﻀﻐﻁ ﺒﺎﻟﻔﺄﺭﺓ ﻋﻠﻰ ﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺅﻟﹼﻑ ،Authorﻭﻓﻲ ﺍﻟﻤﻨﻁﻘﺔ ﺍﻟﺴﻔﻠﻰ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﻏﻴﺭ ﻗﻴﻤـﺔ ﺨﺎﺼـﻴﺔ "ﺤﺠﻡ ﺍﻟﺤﻘل" ﺇﻟﻰ 30ﺒﺩﻻ ﻤﻥ ،50ﺒﺎﻓﺘﺭﺍﺽ ﺃﻥ ﺃﻁﻭل ﺍﺴﻡ ﻟﻤﺅﻟﹼﻑ ﻟﻥ ﻴﺯﻴﺩ ﻋﻥ 20ﺤﺭﻓﺎ.
ﺍﻵﻥ ﺍﻀﻐﻁ Ctrl+Sﻟﺤﻔﻅ ﺍﻟﺠﺩﻭل ..ﺴﻴﻅﻬﺭ ﻟﻙ ﻤﺭﺒﻊ ﺇﺩﺨﺎل ﻴﻁﺎﻟﺒﻙ ﺒﺈﺩﺨـﺎل ﺍﺴـﻡ ﺍﻟﺠـﺩﻭل ..ﺴـﻤﻪ Authors ﻭﺍﻀﻐﻁ ﺯﺭ .OK
ﻤﻠﺤﻭﻅﺔ:
ﻥ ﻫﺫﻩ ﺍﻷﺴﻤﺎﺀ ﺴﺘﺩﺨل ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﻓﻲ ،VBﻭﺴﻴﻜﻭﻥ ﻤﻥ ﺍﻟﻤﺭﻫﻕ ﺴ ﻡ ﺍﻟﺠﺩﺍﻭل ﻭﺍﻷﻋﻤﺩﺓ ﺒﺄﺴﻤﺎﺀ ﺃﺠﻨﺒﻴﺔ ،ﻭﺫﻟﻙ ﻷ ﺍﻻﻨﺘﻘﺎل ﻤﻥ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﺇﻟﻰ ﺍﻟﻌﺭﺒﻴﺔ ﻭﺍﻟﻌﻜﺱ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ﺃﺜﻨﺎﺀ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ.
132
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻥ ﺍﻟﺠﺩﻭل Authorsﻗﺩ ﺃﻀﻴﻑ ﺇﻟﻰ ﻨﺎﻓﺫﺓ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨـﺎﺕ ..ﺍﻨﻘـﺭﻩ ﻤـﺭﺘﻴﻥ ﺍﻵﻥ ﻟﻭ ﺃﻏﻠﻘﺕ ﻨﺎﻓﺫﺓ ﺍﻟﺘﺼﻤﻴﻡ ،ﻓﺴﺘﺠﺩ ﺃ ﺒﺎﻟﻔﺄﺭﺓ ..ﺴﺘﺠﺩ ﺃﻥ ﻨﺎﻓﺫﺓ ﺠﺩﻴﺩﺓ ﻗﺩ ﻓﺘﺤﺕ ،ﺘﻌﺭﺽ ﻟﻙ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﺃﺩﺨل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ: 1 ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ 2
ﻋﺒﺎﺱ ﺍﻟﻌﻘﺎﺩ
3
ﻤﺤﻤﺩ ﻋﺒﺩ ﺍﻟﺤﻠﻴﻡ ﻋﺒﺩ ﺍﷲ
4
ﻨﺒﻴل ﻓﺎﺭﻭﻕ
5
ﺃﺤﻤﺩ ﺨﺎﻟﺩ ﺘﻭﻓﻴﻕ
6
ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ
7
ﻤﻨﺼﻭﺭ
8
ﺭﺍﺘﺏ
9
ﻋﻘل
ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﺼﻤﻡ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻜﺎﻟﺘﺎﻟﻲ: ﻨﻭﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ
ﺍﻟﻭﺼﻑ
ﺍﺴﻡ ﺍﻟﺤﻘل ID
ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌﻲ
ﻲ ﻟﻬﺫﺍ ﺍﻟﺠﺩﻭل. ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴ
Book
ﻨﺹ
ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ
AuthorID
ﻨﺹ
ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ
ﺍﺤﻔﻅ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺒﺎﺴﻡ ،Booksﻭﺃﺩﺨل ﻓﻴﻪ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ: ID 1
Book ﺃﺭﻨﻲ ﺍﷲ
AuthorID 1
2
ﻴﻭﻤﻴّﺎﺕ ﻨﺎﺌﺏ ﻓﻲ ﺍﻷﺭﻴﺎﻑ
1
3
ﻋﺼﺎ ﺍﻟﺤﻜﻴﻡ
1
4
ﺴﺎﺭﺓ
2
5
ﻋﺒﻘﺭﻴﺔ ﻤﺤﻤﺩ
2
6
ﻋﺒﻘﺭﻴﺔ ﻋﻤﺭ
2
7
ﺸﺠﺭﺓ ﺍﻟﻠﺒﻼﺏ
3
8
ﻤﻬﻨﺘﻲ ﺍﻟﻘﺘل
4
9
ﺍﻷﻓﻕ ﺍﻷﺨﻀﺭ
4 133
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
10
ﺃﺴﻁﻭﺭﺓ ﺍﻟﻐﺭﺒﺎﺀ
5
11
ﺍﻟﻌﺎﺸﺭ
5
12
ﻻ ﺘﺩﺨﻠﻭﺍ ﺸﻴﺭﻭﺩ
5
13
ﻤﺠﺭﺩ ﻁﺭﻴﻘﺔ ﻟﻠﺘﻔﻜﻴﺭ
6
14
ﺤﺎﺌﺭﺓ ﻓﻲ ﺍﻟﺤﺏ
6
15
ﺒﻴﻥ ﻗﻭﺴﻴﻥ ﻤﻥ ﺍﻟﺨﻠﻭﺩ
6
16
ﺤﻴﺎﺘﻲ
7
17
ﺤﻴﺎﺘﻲ
8
18
ﺤﻴﺎﺘﻲ
9
ﺇﻨﺸﺎﺀ ﻋﻼﻗﺔ ﺒﻴﻥ ﺠﺩﻭﻟﻲ ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻭﺍﻟﻜﺘﺏ: ﻲ ﺃﻋﺘﻘﺩ ﺃﻨﹼﻙ ﻤﺘﺸﻭﻕ ﻟﻤﻌﺭﻓﺔ ﻜﻴﻔﻴﺔ ﺭﺒﻁ ﺤﻘﻠﻲ ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ ﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ﻟﺘﺤﻘﻴﻕ ﺍﻟﺘﻜﺎﻤـل ﺍﻟﻤﺭﺠﻌـ
Referential
Integrationﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ..ﺴﺘﺠﺩ ﺍﻷﻤﺭ ﻏﺎﻴ ﹰﺔ ﻓﻲ ﺍﻟﺒﺴﺎﻁﺔ:
ﻤﻥ ﻗﺎﺌﻤﺔ ﺃﺩﻭﺍﺕ Toolsﺍﻀﻐﻁ ﺍﻷﻤﺭ "ﻋﻼﻗﺎﺕ" ..Relationshipsﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ "ﺇﻅﻬﺎﺭ ﺠﺩﻭل" ﺍﻟﻤﻭﻀﺤﺔ ﻓﻲ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ل ﺠﺩﻭل ﻭﺍﻀﻐﻁ ﺯ ﺭ "ﺇﻀﺎﻓﺔ" ..ﺒﻌﺩ ﺃﻥ ﺘﻀﻴﻑ ﺍﻟﺠﺩﻭﻟﻴﻥ ﺃﻏﻠﻕ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ..ﺴـﺘﺒﺩﻭ ﻟـﻙ ﻨﺎﻓـﺫﺓ ﺍﻟﻌﻼﻗـﺎﺕ ﺍﺨﺘﺭ ﻜ ّ ﻜﺎﻟﺘﺎﻟﻲ:
134
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ل ﺠﺩﻭل ﻜﻤﺴﺘﻁﻴل ﻋﻠﻴﻪ ﻋﻨﻭﺍﻥ ﺍﻟﺠﺩﻭل ،ﻭﺒﻪ ﺃﺴﻤﺎﺀ ﺃﻋﻤﺩﺘﻪ. ﺤﻴﺙ ﻴﻅﻬﺭ ﻜ ّ ﻭﻹﻨﺸﺎﺀ ﻋﻼﻗﺔ ﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ،ﺍﺴﺤﺏ ﺤﻘل IDﺒﺎﻟﻔﺄﺭﺓ ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ،ﻭﺘﺤﺭﻙ ﺒﺎﻟﻔﺄﺭﺓ ﺇﻟﻰ ﺍﻟﺤﻘـل AuthorID
ﻓﻲ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ..ﺴﺘﻼﺤﻅ ﺘﻐ ﻴﺭ ﺸﻜل ﻤﺅﺸﹼﺭ ﺍﻟﻔـﺄﺭﺓ ..ﺍﺘـﺭﻙ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﺴﺭ ﻓﻭﻕ ﻫﺫﺍ ﺍﻟﺤﻘل ..ﻫﻨﺎ ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ : ﺇﻨﺸﺎﺀ ﺍﻟﻌﻼﻗﺔ ﺒﻴﻥ ﺍﻟﺤﻘﻠﻴﻥ:
ﺍﻀﻐﻁ ﺍﺨﺘﻴﺎﺭ "ﻓﺭﺽ ﺍﻟﺘﻜﺎﻤل ﺍﻟﻤﺭﺠﻌـﻲ" Enforce Referential ،Integrityﻟﺘﻘﻭﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺁﻟﻴﺎ ﺒﺎﻟﺘﺤﻘﹼﻕ ﻤﻥ ﺼﺤﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻴﻥ
ﺍﻟﺠﺩﻭﻟﻴﻥ ..ﻭﻓﻲ ﻫﺫﺍ ﺍﻟﺼﺩﺩ ﻟﺩﻴﻙ ﺍﺨﺘﻴﺎﺭﺍﻥ:
ﺘﺘﺎﻟﻲ ﺘﺤـﺩﻴﺙ ﺍﻟﺤﻘـﻭل ﺍﻟﻤﺭﺘﺒﻁـﺔ Cascade Update Related :Fields ل ﻓﻤﺜﻼ ،ﻟﻭ ﻏﻴﺭﺕ ﺭﻗﻡ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻤﻥ 1ﺇﻟﻰ ،10ﻓﺴﻴﺘ ﻡ ﺘﻐﻴﻴﺭ ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ AuthorIDﺘﻠﻘﺎﺌﻴﺎ ﻓﻲ ﺴﺠﻼﺕ ﻜـ ّ ﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﺃﻟﹼﻔﻬﺎ ﺇﻟﻰ .10
ﻲ ..ﻭﻟﻭ ﺃﺭﺩﺕ ﺘﻐﻴﻴﺭﻩ ،ﻓﻌﻠﻴـﻙ ﻤﻠﺤﻭﻅﺔ:ﻟﻥ ﺘﺴﺘﻁﻴﻊ ﺘﻐﻴﻴﺭ ﻗﻴﻤﺔ ﺭﻗﻡ ﺍﻟﻤﺅﻟﹼﻑ IDﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ،ﻷﻨﹼﻪ ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌ
ﺒﺘﻐﻴﻴﺭ ﻨﻭﻉ ﺍﻟﺤﻘل ﻤﻥ ﺘﺭﻗﻴﻡ ﺘﻠﻘﺎﺌﻲ ﺇﻟﻰ ﺭﻗﻡ ،ﻋﻠﻰ ﺃﻥ ﻴﻜﻭﻥ ﻫﺫﺍ ﻗﺒل ﺇﻨﺸﺎﺀ ﺍﻟﻌﻼﻗﺔ ،ﻷﻨﹼﻪ ﻤﻥ ﻏﻴﺭ ﺍﻟﻤﺴﻤﻭﺡ ﺘﻐﻴﻴﺭ ﻨﻭﻉ ﺒﻴﺎﻨﺎﺕ ﺤﻘل ﺩﺍﺨل ﻓﻲ ﻋﻼﻗﺔ. ﺘﺘﺎﻟﻲ ﺤﺫﻑ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﺭﺘﺒﻁﺔ :Cascade Delete Related Fields ل ﻜﺘﺏ )ﻨﺒﻴل ﻓﺎﺭﻭﻕ( ﺘﻠﻘﺎﺌﻴﺎ ﻤﻥ ﺠﺩﻭل ﺍﻟﻜﺘﺏ. ل )ﻨﺒﻴل ﻓﺎﺭﻭﻕ( ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ،ﻴﺘ ﻡ ﺤﺫﻑ ﻜ ّ ﻓﻤﺜﻼ ،ﻟﻭ ﺤﺫﻓﺕ ﺴﺠ ّ ﺍﻀﻐﻁ ﺯ ﺭ "ﺇﻨﺸﺎﺀ" ﻹﻏﻼﻕ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ. ﻁ ﻴﺭﺒﻁ ﺍﻟﺠﺩﻭﻟﻴﻥ ﻜﺎﻟﺘﺎﻟﻲ: ﺍﻵﻥ ﺴﻴﻅﻬﺭ ﺨ ﹼ
ﻁ ﺒﺯ ﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻷﻴﻤﻥ ،ﻭﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﻀﻌﻴﺔ ﺍﺨﺘﺭ "ﺤﺫﻑ". ﻭﻟﻭ ﺃﺭﺩﺕ ﺤﺫﻑ ﻫﺫﻩ ﺍﻟﻌﻼﻗﺔ ،ﻓﺎﻀﻐﻁ ﺍﻟﺨ ﹼ ل ﻗﻡ ﺒﺤﻔﻅ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ،ﻭﺃﻏﻠﻕ ﻨﺎﻓﺫﺓ ﺍﻟﻌﻼﻗﺎﺕ ..ﺍﻓﺘﺢ ﺍﻵﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﻋﻼﻤـﺔ " "+ﺒﺠـﻭﺍﺭ ﻜـ ّ ﻥ ﺠـﺩﻭﻻ ﺼـﻐﻴﺭﺍ ﺤﻘل ..ﺍﻀﻐﻁ ﺃﻴﺎ ﻤﻨﻬﺎ ،ﻭﻟﻴﻜﻥ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ..ﺴﺘﺠﺩ ﺃ ﻥ ﻋﻼﻤﺔ " "+ﺘﺤﻭﻟﺕ ﺇﻟﻰ ﻋﻼﻤﺔ " ،"-ﻭﺃ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﺃﻟﹼﻔﻬﺎ ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ ﻗﺩ ﻅﻬﺭ ..ﻭﻹﺨﻔﺎﺌﻪ ﺜﺎﻨﻴ ﹰﺔ ﺃﻋﺩ ﻀﻐﻁ ﻋﻼﻤﺔ "."- 135
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻴﻤﻜﻨﻙ ﺇﺩﺨﺎل ﺍﻟﻤﺯﻴﺩ ﻤﻥ ﻜﺘﺏ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺍﻟﻔﺭﻋﻲ ،ﺩﻭﻥ ﺃﻥ ﺘﹸﺩﺨل ﺭﻗﻤﻪ ﻓﻲ ﺨﺎﻨﺔ AuthorID ل ﻤﺭﺓ ،ﺇﺫ ﺴﺘﺘ ﻡ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﺭﻗﻡ ﺁﻟﻴﺎ ،ﻤﻤﺎ ﻴﻭﻓﹼﺭ ﻟﻙ ﺍﻟﻭﻗﺕ ﻭﻴﻌﻔﻴﻙ ﻤﻥ ﺍﺤﺘﻤﺎﻻﺕ ﺍﻟﺨﻁﺄ. ﻓﻲ ﻜ ّ ﺭﺒﻁ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ﻤﻊ ﻋﻨﺎﺼﺭ BDEﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺩﻟﻔﻲ :
ﻭﺠﺩﻨﺎ ﺃﻨﻪ ﺘﻤﻜﻨﺎ ﻤﻥ ﺭﺒﻁ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Paradoxﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﻓﻲ ﺍﻟﺨﺎﺼﺔ DataBaseNameﻟﻠﻌﻨﺼﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل Aliasﺍﻟﺫﻱ ﺘﻡ ﺇﻨﺸﺎﺌﻪ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﻭﺍﻟﺴﺅﺍل ﺍﻟﻤﻁﺭﻭﺡ ﻫﻨﺎ ﻜﻴﻑ ﻴﻤﻜﻥ ﺃﻥ ﻨﺭﺒﻁ ﺒﻴﻥ ﺍﻟﻌﻨﺼﺭ
Tableﻭﺠﺩﻭل ﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ :
1ـ ﺍﻓﺘﺢ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ﻭﺍﺨﺘﺭ Adminstrative Tools →ODBC Data Sources ﺴﺘﻅﻬﺭ ﻟﻙ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺍﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺼﻔﺤﺔ System DNS
2ـ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Addﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﺨﺘﺭ ﻤﻨﻬﺎ )Microsoft Access Driver ( *.mdb ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . Finish
3ـ ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﻜﺘـﺏ ﻓـﻲ ﺍﻟﻘـﺴﻡ Data Source Nameﺍﻟﻘﻴﻤﺔ ، Libraryﻭﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ 136
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
Selectﻭﺍﺨﺘﺭ ﻗﺎﻋﺩﺓ ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ) ( Books.mdbﺒﻌﺩ ﺘﺤﺩﻴﺩ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺘﻲ ﻭﻀﻌﺘﻪ ﻓﻴﻪ ،ﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Ok
ﻭﺍﺨﺭﺝ ﻤﻥ . ODBC Data Source
4ـ ﺍﻓﺘﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ BDE Administratorﻤﻥ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ﺃﻭ ﻋﻥ ﻁﺭﻴﻕ Start Æ Program Æ Borland Delphi Æ BDE Administrator ﻤﻬﻤﺔ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻫﻲ ﺘﻌﺭﻴﻑ ﺍﻟـ Aliasﻭﺍﻟﺘﺤﻜﻡ ﻓﻲ ﺨﺼﺎﺌﺹ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ . ﺤﺩﺩ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Libraryﻤـﻥ ﺍﻟـﺼﻔﺤﺔ ، Databaseﻓﺘﻅﻬﺭ ﺨﻭﺍﺹ ﻫﺫﻩ ﺍﻟﻘﺎﻋﺩﺓ ﻓـﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻟﻴﻤﻴﻨﻴﺔ ، Definitionﺃﻜﺘـﺏ ﻓـﻲ
ﺍﻟﺨﺎﺼﺔ Database Nameﻤـﺴﺎﺭ ﻗﺎﻋـﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Books.mdbﺃﻭ ﺤﺩﺩﻩ ﻋﻥ ﻁﺭﻴـﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺫﻭ ، ... ﺃﻏﻠــﻕ ﺍﻟﺒﺭﻨــﺎﻤﺞ BDE Administrator
ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Yesﻋﻨﺩﻤﺎ ﻴﻁﺎﻟﺒﻙ ﺒﺤﻔـﻅ
ﺍﻟﺘﻐﻴﺭﺍﺕ .
5ـ ﺍﻵﻥ ﻴﻤﻜﻨﻙ ﺭﺒﻁ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Libraryﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﺃﻭ Queryﻭﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻜﻤﺎ ﻭﺠﺩﻨﺎ ﻓﻲ ﺍﻷﻤﺜﻠـﺔ ﺍﻟﺴﺎﺒﻘﺔ .
ﻤﻼﺤﻅﺔ :
ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻹﻀﺎﻓﺔ ﺍﺴﻡ ﺒﺩﻴل Aliasﻟﻘﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ Paradoxﻭﺫﻟﻙ ﺒﺎﺨﺘﻴﺎﺭ ﺍﻷﻤﺭ Newﻤﻥ ﺍﻟﻘﺎﺌﻤـﺔ Objectﻭﻤﺜل ﺍﺨﺘﻴﺎﺭ ﺍﻟﻨﻭﻉ Standardﻭﻤﻥ ﺜﻡ ﺘﺤﺩﻴﺩ ﻜﺘﺎﺒﺔ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل ﻟﻠﻘﺎﻋﺩﺓ ﻭﺘﺤﺩﻴﺩ ﻤـﺴﺎﺭﻫﺎ ﻓـﻲ ﺼـﻔﺤﺔ ﺍﻟﺨﺼﺎﺌﺹ .
ﺍﻟﺼﻔﺤﺔ : ADOﺒﻌﺩ ﺃﻥ ﺘﻌﺭﻓﻨﺎ ﻋﻥ ﻁﺭﻴﻘﺔ ﺭﺒﻁ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻭﺍﺴﻁﺔ ﻤﺤﺭﻙ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ، Borland
ﺴﻨﺘﻌﺭﻑ ﺍﻵﻥ ﻋﻠﻰ ﻜﻴﻔﻴﺔ ﺭﺒﻁ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻊ ﻤﺤﺭﻙ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ﻤﺎﻴﻜﺭﻭﺴﻭﻓﺕ . ﺘﻌﺘﺒﺭ ADOﺃﺤﺩﺙ ﻤﻥ BDEﻭﺘﺴﺘﺨﺩﻡ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺃﺴﺭﻉ ﻓﻲ ﺍﻟﺒﺤﺙ ﻭﺍﻟﺘﻌﺩﻴل ،ﻜﻤﺎ ﺘﻘﺩﻡ ﻁﺭﻕ ﻗﻭﻴﺔ ﻟﺭﺒﻁ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ ﻤﻭﺯﻋﺔ ﻤﺜل ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ Oracleﺃﻭ SQL Server
ﻤﺜﺎل :ﺭﺒﻁ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻜﺘﺒﺔ ﺒﻭﺍﺴﻁﺔ : ADO ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺍﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ : 137
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ADOTable ، ADOConnectionﻤﻥ ﺍﻟﺼﻔﺤﺔ ADOﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺃﻴﻀﹰﺎ ﺍﻟﻌﻨﺎﺼﺭ DataSourceﻭ DBGridﻭ . DBNavigator
ﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ
ADOConnectionﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﺨﺘﺭ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ Use Connection String ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Build ﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Microsoft Jet 4.0 OLE Db Provider ﻭﺍﻀﻐﻁ ﻋﻠﻰ . Next ﻤﻼﺤﻅﺔ :ﺇﺫﺍ ﻜﻨﺕ ﺘﺴﺘﺨﺩﻡ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ Oracleﻓﺎﺨﺘﺭ Microsoft OLE DB Provider for Oracle
ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ Nextﺘﻅﻬﺭ ﺍﻟﺼﻔﺤﺔ Connectionﻓﻲ ﺍﻟﻘﺴﻡ Select Or Enter Database Nameﺃﺩﺨل ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﻤﻌﻁﻴﺎﺕ
ﺍﻟﻜﺘﺏ
ﺍﻀﻐﻁ ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Okﻹﻨﻬﺎﺀ ﺍﻟﻤﻌﺎﻟﺞ 138
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺤﺩﺩ ﺍﻵﻥ ﺍﻟﻌﻨﺼﺭ ADOTable1ﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ Connectionﺃﻋﻁﻬﺎ ﺍﻟﻘﻴﻤﺔ ADOConnection1ﻭ ﺍﻟﺨﺎﺼﺔ TableNameﺃﻋﻁﻬﺎ ﺍﻟﻘﻴﻤـﺔ ِAuthors ﻭﺍﻟﺨﺎﺼﺔ Activeﺍﻟﻘﻴﻤﺔ True
ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ DataSetﻟﻠﻌﻨﺼﺭ DataSourceﺍﻟﻘﻴﻤﺔ ADOTable1 ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Datasourceﻟﻠﻌﻨﺼﺭﻴﻥ DBGrid1ﻭ DBNavigator1ﺍﻟﻘﻴﻤﺔ . DataSource1 ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ . ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺭﺒﻁ SQLConnectionﻻﺴﺘﺨﺩﺍﻡ ﻟﻐﺔ SQLﻓﻲ ﻤﺤﺭﻙ ، ADOﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﻨﻔـﺱ ﻤﻨﺎﻫﺞ ﺍﻟﻌﻨﺼﺭﻴﻥ Tableﻭ Queryﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ .
139
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 22 ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ : 1ـ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ : ﻗﺒل ﺍﻟﺸﺭﻭﻉ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻴﻨﺎ ﺘﺤﺩﻴﺩ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻭﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻟﺠﺩﺍﻭل ﻭﻁﺭﻕ ﺍﻟﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺠـﺩﺍﻭل ﻭﻨﻭﻋﻴﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﻤﻁﻠﻭﺒﺔ ...
ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ ﺴﻨﺤﺘﺎﺝ ﺇﻟﻰ ﺠﺩﻭل ﻭﺍﺤﺩ ﻭﻫﻭ Fax Mobil WPhon HPhon LName FName Num ﺍﻟﻬﺎﺘﻑ ﺍﻟﻔﺎﻜﺱ ﻫﺎﺘﻑ ﻫﺎﺘﻑ ﺍﻟﻜﻨﻴﺔ ﺍﻻﺴﻡ ﺭﻗﻡ +
)A(15
)A(15
ﺍﻟﻤﻨﺯل )A(15
ﺍﻟﻌﻤل )A(15
Email ﺍﻟﺒﺭﻴﺩ
Web ﻤﻭﻗﻊ
ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ﺍﻻﻨﺘﺭﻨﺕ ﺍﻟﺨﻠﻭﻱ )A(40) A(40) A(15) A(15
ss City Country ﺍﻟﺩﻭﻟﺔ ﺍﻟﻤﺩﻴﻨﺔ ﺍ )A(15
)A(15
ﺤﻴﺙ ﺍﻟﺤﻘل Numﻫﻭ ﺤﻘل ﻤﻔﺘﺎﺡ ﺭﺌﻴﺴﻲ . ﺴﻨﺤﺘﺎﺝ ﺃﻴﻀﹰﺎ ﺇﻟﻰ ﺘﻌﺭﻴﻑ ﻓﻬﺭﺴﻴﻥ ﺜﺎﻨﻭﻴﻴﻥ ﺍﻷﻭل ﻟﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﺤﺴﺏ ﺍﻻﺴﻡ ﻭﺍﻟﺜﺎﻨﻲ ﻟﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﺤﺴﺏ ﺍﻟﻜﻨﻴـﺔ .
ﻭﻟﻠﺒﺩﺀ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻘﺎﻋﺩﺓ : 1ـ ﺃﻨﺸﺊ ﺍﻟﻤﺠﻠﺩ MyPhonﻋﻠﻰ ﺍﻟﻘﺭﺹ Cﻭﺃﻨﺸﺊ ﺩﺍﺨﻠﻪ ﺍﻟﻤﺠﻠﺩ ، Dataﺤﻴﺙ ﺴﻨﻘﻭﻡ ﺒﺘﺨـﺯﻴﻥ ﻤﻠﻔـﺎﺕ ﻗﺎﻋـﺩﺓ
ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻤﺠﻠﺩ Dataﻭﺴﻨﺨﺯﻥ ﻤﻠﻔﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺍﻟﻤﺠﻠﺩ ) Dataﺤﺎﻭل ﺩﺍﺌﻤﹰﺎ ﺃﻥ ﺘﻀﻊ ﻤﻠﻔﺎﺕ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﺠﻠﺩ ﻤﻨﻔﺼل ﻭﺨﺎﺼﺔ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻘﺎﻋﺩﺓ ﺘﺘﺄﻟﻑ ﻤﻥ ﻋﺩﺩ ﻤﻥ ﺍﻟﻤﻠﻔﺎﺕ ﻜﻤﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ . Paradox 2ـ ﺃﻨﺸﺊ ﺍﺴﻡ ﺒـﺩﻴل Aliasﺒﺎﺴـﻡ Myphonﻟﻴـﺸﻴﺭ ﺇﻟـﻰ ﺍﻟﻤﺠﻠـﺩ C:\MyPhon\Dataﺒﺎﺴـﺘﺨﺩﺍﻡ BDE Administratorﺃﻭ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ . Database Desktop
3ـ ﺃﻨﺸﺊ ﺍﻟﺠﺩﻭل ﺍﻟﺴﺎﺒﻕ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﺒﺎﺴﺘﺨﺩﺍﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Paradoxﻭ ﻻ ﺘﻨﺱ ﺇﻨﺸﺎﺀ
ﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻜﻤﺎ ﻴﻠﻲ : ﺃ ـ ﺍﺨﺘﺭ Secondary Indexesﻤﻥ ﺍﻟﻼﺌﺤﺔ Table propertiesﻭﺍﻀـﻐﻁ ﻋﻠـﻰ ﺍﻟـﺯﺭ Define ﻭﺃﻀﻑ ﺍﻟﺤﻘﻠﻴﻥ Fnameﻭ Lnameﻋﻠـﻰ ﺍﻟﺘﺭﺘﻴـﺏ ﻭﺍﻀـﻐﻁ ﻋﻠـﻰ Okﻭﺃﻋـﻁ ﺍﺴـﻡ ﻟﻠﻔﻬـﺭﺱ . FNameIndex
ﺏ ـ ﺍﻀﻐﻁ ﻋﻠﻰ Defineﻤﺭﺓ ﺃﺨﺭﻯ ﻭﺃﻀﻑ ﺍﻟﺤﻘﻠﻴﻥ Lnameﻭ FNameﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ ....ﻭﺃﻋـﻁ ﺍﻟﻔﻬﺭﺱ ﺍﺴﻡ . LNameIndex 4ـ ﺃﺤﻔﻅ ﺍﻟﺠﺩﻭل ﺒﺎﺴﻡ Phonebookﻀﻤﻥ ﺍﻻﺴﻡ ﺍﻟﺒﺩﻴل Aliasﺍﻟﺫﻱ ﺃﻨﺸﺄﺘﻪ ﺴﺎﺒﻘﹰﺎ MyPhonﺃﻭ ﺩﺍﺨل ﺍﻟﻤﺠﻠـﺩ . C:\MyPhon\Data ﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺃﻨﺸﺄﻨﺎ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺴﻨﻨﺘﻘل ﺇﻟﻰ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻟﺜﺎﻨﻴﺔ : 2ـ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ :
ﻼ ﻟﻠﺸﻜل ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﻟﻠﺒﺭﻨﺎﻤﺞ ﺃﻥ ﻴﻅﻬﺭ ﻋﻠﻴﻪ ،ﻤﺎ ﻫـﻭ ﻗﺒل ﺍﻟﺸﺭﻭﻉ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺠﺏ ﻋﻠﻴﻙ ﺃﻥ ﺘﻤﻠﻙ ﺘﺼﻭﺭﹰﺍ ﻜﺎﻤ ﹰ ﺸﻜل ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ ﻭﻤﺎﻫﻲ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺴﺘﺘﻭﻀﻊ ﻋﻠﻴﻬﺎ ﻭﻤﺎ ﻫﻲ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺨﺭﻯ ﺍﻟﻭﺍﺠﺏ ﻭﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺒﺭﻨـﺎﻤﺞ ) 140
)
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺒﻜﻠﻤﺎﺕ ﺃﺨﺭﻯ ،ﺃﻤﺴﻙ ﻭﺭﻗﺔ ﻭﻗﻠﻡ ﻭﺤﺎﻭل ﺃﻥ ﺘﺭﺴﻡ ﻤﺎ ﺘﺭﻴﺩ ﺃﻥ ﺘﻔﻌﻠﻪ ﻭﻤﺎ ﻫﻭ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻥ ﻴﻘﺩﻤـﻪ ( ، ﺤﺩﺩ ﻤﺎ ﻫﻲ ﺍﻟﻨﻘﺎﻁ ﺍﻷﺼﻌﺏ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻫل ﻫﻲ ﻟﻌﺩﻡ ﺨﺒﺭﺘﻙ ﺍﻟﺒﺭﻤﺠﻴﺔ ﻓﻲ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻨﻘﺎﻁ ﺃﻭ ﻟﻌـﺩﻡ ﻗـﺩﺭﺓ
ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻋﻠﻰ ﺘﻘﺩﻴﻡ ﻤﺎ ﺘﻁﻠﺒﻪ ) ﻋﻤﻠﻴﹰﺎ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ ﻻ ﺘﻜﻭﻥ ﻗﺎﺼﺭﺓ ﻋﻥ ﺃﺩﺍﺀ ﺸﻴﺊ ﻤﻌـﻴﻥ ﻭﻟﻜـﻥ ﻋﻠﻰ ﺍﻟﻤﺒﺭﻤﺞ ﺃﻥ ﻴﺒﺤﺙ ﻜﺜﻴﺭﹰﺍ ﻟﺘﻌﻠﻡ ﻜﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﻭﺍﻀﻴﻊ ﻤﻌﻴﻨﻪ ( ،ﺴﺄﻭﺭﺩ ﺍﻵﻥ ﺒﻌـﺽ ﺍﻷﻤﺜﻠـﺔ ﻋﻠـﻰ ﻫـﺫﻩ ﺍﻟﻤﺸﺎﻜل ،ﺘﺼﻭﺭ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻁﻠﺏ ﺃﻥ ﻴﻜﻭﻥ ﺒﺭﻨﺎﻤﺠﻪ ﻗﺎﺩﺭﹰﺍ ﻋﻠﻰ ﻁﺒﺎﻋﺔ ﺤﻘﻭل ﻤﻌﻴﻨﺔ ﻭﺃﻨﺕ ﺤﺘﻰ ﺍﻵﻥ ﻟـﻡ ﺘـﺘﻌﻠﻡ ﺸﻴﺌﹰﺎ ﻋﻥ ﺍﻟﻁﺒﺎﻋﺔ ﺴﺘﻜﻭﻥ ﻫﻨﺎ ﺍﻵﻥ ﺃﻤﺎﻡ ﻁﺭﻴﻘﻴﻥ :
ﺍﻷﻭل :ﺍﻟﺒﺩﺀ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺘﻌﻠﻡ ﺍﻟﻁﺒﺎﻋﺔ ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻨﻘﺎﻁ ﺍﻟﺘﻲ ﺘﺤﺘﺎﺝ ﺍﻟﻁﺒﺎﻋﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻋﻤﻠﻴﹰﺎ ﻴﺘـﺭﻙ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﺍﻟﻨﻘﺎﻁ ﺍﻟﺼﻌﺒﺔ ﺤﺘﻰ ﺁﺨﺭ ﻨﻘﻁﺔ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ( .
ﺍﻟﺜﺎﻨﻲ :ﺘﻌﻠﻡ ﺍﻟﻁﺒﺎﻋﺔ ﻭﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺇﻤﻜﺎﻨﻴﺎﺕ ﺍﻟﻁﺒﺎﻋﺔ ﺍﻟﺘﻲ ﺘﻘﺩﻤﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻭﻤﻥ ﺜﻡ ﺍﻟﺸﺭﻭﻉ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﺍﻟﻤﺸﻜﻠﺔ ﻓﻲ ﺍﻟﻁﺭﻴﻕ ﺍﻷﻭل :ﺘﺼﻭﺭ ﺃﻨﻙ ﻋﺭﻓﺕ ﺒﻌﺽ ﺍﻟﺤﻘﻭل ﻤﻥ ﺍﻟﻨﻭﻉ ﻤﺫﻜﺭﺓ Memoﺜﻡ ﺍﻜﺘﺸﻔﺕ ﺃﻥ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻻ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﻁﺒﻊ ﺍﻟﺤﻘﻭل ﻤﻥ ﻨﻭﻉ Memoﺃﻭ ﻋﻠﻰ ﺍﻷﻗل ﻻ ﺘﺴﺘﻁﻴﻊ ﻁﺒﺎﻋﺘﻬﺎ ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ ﺘﺭﻴﺩﻩ ،ﻤﺎﺫﺍ ﺴـﺘﻔﻌل ﺍﻵﻥ ،ﺇﻤﺎ ﺃﻥ ﺘﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺠﺩﻴﺩﺓ ﻟﻠﻁﺒﺎﻋﺔ ﻭﻫﺫﺍ ﺼﻌﺏ ﺠﺩﹰﺍ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻤﺒﺭﻤﺞ ﻋﺎﺩﻱ ﺃﻭ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﻗﺎﻋـﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﺤﻭﻴل ﻨﻭﻉ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﺇﻟﻰ ﺍﻟﻨﻭﻉ ﻨﺹ Alpha
ﻭﺒﺎﻟﺘﺎﻟﻲ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﻨﻤﺎﺫﺝ ﻭﺘﻌﺩﻴﻠﻬﺎ ﺃﻴﻀﹰﺎ ﻟﻤﻼﺌﻤﺔ ﺍﻟﺘﻐﻴﺭﺍﺕ ﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﻗـﺩ ﻴـﻀﻁﺭﻙ ﺃﺤﻴﺎﻨـﹰﺎ ﻟﻜﺘﺎﺒـﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺠﺩﻴﺩ .
ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻫﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﻓﻀل ﻭﺭﺒﻤﺎ ﻫﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﻭﺤﻴﺩﺓ ﺍﻟﺘﻲ ﺘﺠﻌﻠﻙ ﺘﻨﻬﻲ ﻤﺎ ﺒﺩﺃﺕ ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ ﺘﺭﻴﺩ . ﻻ ﻤﻥ ﺃﺼﻌﺏ ﺍﻟﻨﻘﺎﻁ ﻭﺤﺎﻭل ﺤﻠﻬﺎ ﺤﺘﻰ ﺘﺴﺘﻁﻴﻊ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻨﻬﺎﻴﺔ . ﻭﺍﻟﻘﺎﻋﺩﺓ ﻫﻲ :ﺍﺒﺩﺃ ﺃﻭ ﹰ ﺴﻨﻨﺸﺊ ﺍﻵﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ ﻭﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﺒﺎﻟﺸﻜل :
ﺃﻀﻑ ﺍﻵﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ :
141
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﺃﻋﻁ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﺨﺎﺼﺔ BiDiMode Caption Hieght Width Position
ﺍﻟﻘﻴﻤﺔ bdRightToLeft ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ 470 750 poScreenCenter
2ـ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ TabControlﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : alTop Align True MultiLine tsButtons Style Tabs ﺃﻜﺘﺏ ﺍﻟﺤﺭﻭﻑ ﺍﻷﺒﺠﺩﻴﺔ ﻤﻥ ﺃ ﺇﻟﻰ ﻱ ﻭﻜل ﺤﺭﻑ ﻓﻲ ﺴﻁﺭ True HotTrack 3ـ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ Panelﻤﻥ ﺍﻟﺼﻔﺤﺔ Standardﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : alClient Align bvLowered Bevelinner bvRaised BevelOuter Caption '' ﻓﺭﺍﻍ 4ـ ﺍﻟﻌﻨﺼﺭ : Table MyPhone DatabaseName Phonebook TableName FnameIndex IndexName True Active ﺃﺩﺨل ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﺃﻀﻑ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺜﻡ ﺍﺤﺫﻑ ﺍﻟﺤﻘل Numﻟﻜﻲ ﻻ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺠﺩﻭل ﺜﻡ ﺃﻋﻁ ﻟﻜل ﺤﻘل ﺍﺴﻤﻪ ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ DisplayLabelﺍﻟﺘﺎﺒﻌﺔ ﻟﻜل ﺤﻘل. 5ـ ﺍﻟﻌﻨﺼﺭ : DataSourceﻀﻌﻪ ﻀﻤﻥ ﺍﻟﻌﻨﺼﺭ : Tabcontrol Table1 Dataset 6ـ ﺍﻟﻌﻨﺼﺭ : DbGrid alClient Align DataSource1 DataSource ﺃﺩﺨل ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ﻭﺃﻀﻑ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺜﻡ ﺤﺩﺩﻫﺎ ﻭﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺨﺎﺼﺔ Titelﻭﺍﻀﻐﻁ ﻋﻠﻰ +ﻭﻏﻴﺭ ﺍﻟﺨﺎﺼﺔ Aligmentﺇﻟﻰ taCenter 7ـ ﺍﻟﻌﻨﺼﺭ : GroupBoxﻀﻌﻪ ﻀﻤﻥ ﺍﻟﻌﻨﺼﺭ : Panel Caption ﺘﺭﺘﻴﺏ ﺤﺴﺏ 142
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
8ـ ﺍﻟﻌﻨﺼﺭ : RadioButton1ﻀﻌﻪ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ GroupBox1 Caption ﺍﻻﺴﻡ True Checked RBTName Name 9ـ ﺍﻟﻌﻨﺼﺭ : RadioButton2ﻀﻌﻪ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ GroupBox1 Caption ﺍﻟﻜﻨﻴﺔ RBTLname Name 10ـ ﺍﻟﻌﻨﺼﺭ : Edit1ﻀﻌﻪ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ : GroupBox1 Text " ﻓﺭﺍﻍ 11ـ ﺍﻟﻌﻨﺼﺭ : Buttonﻀﻌﻪ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ GroupBox1 Caption ﺒﺤﺙ ﺤﺴﺏ ﺍﻻﺴﻡ BtnSearch Name ﺴﻨﺒﺩﺃ ﺍﻵﻥ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻼﺯﻤﺔ ﺤﺘﻰ ﻫﺫﻩ ﺍﻟﻨﻘﻁﺔ ﻭﺴﻨﻌﻭﺩ ﻹﻜﻤﺎل ﺒﻘﻴﺔ ﺍﻟﻌﻨﺎﺼﺭ ﻻﺤﻘﹰﺎ :
ـ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺍﻻﺴﻡ ﺴﻴﺘﻡ ﺘﺭﺘﻴﺏ ﺍﻟﺠﺩﻭل ﺤﺴﺏ ﺤﻘل ﺍﻻﺴﻡ ﻭﺴﻴﻜﻭﻥ ﺍﻟﺒﺤـﺙ ﻤﺘﺎﺤـﹰﺎ ﺤﺴﺏ ﺍﺴﻡ ﺍﻟﺸﺨﺹ ﻟﺫﻟﻙ ﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺍﻻﺴﻡ : RBTName ;'table1.IndexName := 'FnameIndex ;'ﺒﺤﺙ ﺤﺴﺏ ﺍﻻﺴﻡ' =btnSearch.Caption : ـ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺍﻟﻜﻨﻴﺔ ﺴﻴﺭﺘﺏ ﺍﻟﺠﺩﻭل ﺤﺴﺏ ﺤﻘل ﺍﻟﻜﻨﻴﺔ ﻭﺴﻴﻜﻭﻥ ﺍﻟﺒﺤﺙ ﻤﺘﺎﺤﹰﺎ ﺤﺴﺏ ﺤﻘـل ﺍﻟﻜﻨﻴﺔ ﻟﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻜﻨﻴﺔ : RBTLname ;'table1.IndexName := 'LnameIndex ;'ﺒﺤﺙ ﺤﺴﺏ ﺍﻟﻜﻨﻴﺔ ' =btnSearch.Caption : ـ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺃﻱ ﺼﻔﺤﺔ ﻤﻥ ﺼﻔﺤﺎﺕ ﺍﻟﻌﻨﺼﺭ Tabcontrolﺴﻴﺘﻡ ﺇﻅﻬﺎﺭ ﺍﻷﺴـﻤﺎﺀ ﺍﻟﺘـﻲ ﺘﺒـﺩﺃ
ﺒﺎﻟﺤﺭﻑ ﺍﻟﺘﻲ ﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ،ﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﺩ ﺍﺨﺘﺎﺭ ﺍﻟﺘﺭﺘﻴﺏ ﺤﺴﺏ ﺍﻟﻜﻨﻴﺔ ﻓﺴﺘﻅﻬﺭ ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﻴﺒﺩﺃ
ﻓﻴﻬﺎ ﺤﻘل ﺍﻟﻜﻨﻴﺔ ﺒﺎﻟﺤﺭﻑ ﺍﻟﺫﻱ ﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻟﺫﻟﻙ ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnCahngeﻟﻠﻌﻨـﺼﺭ Tabcontrol1 ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : if RBTName.Checked then table1.Filter := 'fname = ' + quotedstr( tabcontrol1.Tabs[tabcontrol1.tabindex]+ '*') else )'*' table1.Filter := 'Lname = ' + quotedstr( tabcontrol1.Tabs[tabcontrol1.tabindex]+ ﻟﻤﻌﺭﻓﺔ ﻋﻤل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺭﺍﺠﻊ ﺍﻟﻤﺤﺎﻀﺭﺍﺕ ﺍﻟﺴﺎﺒﻘﺔ ... ـ ﺯﺭ ﺍﻟﺒﺤﺙ :
143
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺴﻴﺘﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻜﺘﻭﺒﺔ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Edit1ﻓﻲ ﺤﻘل ﺍﻻﺴﻡ ﺃﻭ ﺤﻘل ﺍﻟﻜﻨﻴﺔ ) ﺤﺴﺏ ﺨﻴﺎﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ( ﻭﻓـﻲ ﺤﺎل ﻋﺩﻡ ﻭﺠﺩﻭﻫﺎ ﺴﻴﺘﻭﻗﻑ ﻤﺅﺸﺭ ﺍﻟﺴﺠﻼﺕ ﻋﻨﺩ ﺃﻗﺭﺏ ﻗﻴﻤﺔ ﻟﻠﺒﺤﺙ ،ﺒﻤﺎ ﺃﻥ ﺍﻟﺒﺤﺙ ﺴﻴﺘﻡ ﻓﻲ ﻜﺎﻤل ﺍﻟﺠﺩﻭل ﻓﻴﺠـﺏ
ﺇﻟﻐﺎﺀ ﺍﻟﺘﺼﻔﻴﺔ Filterﻗﺒل ﺍﻟﻘﻴﺎﻡ ﺒﺎﻟﺒﺤﺙ ،ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺭﺯ : BtnSearch ;table1.Filtered := false ;)]table1.FindNearest([edit1.text ﺃﻀﻑ ﺒﻌﺽ ﺍﻟﺴﺠﻼﺕ ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﺘﺠﺭﺒﺔ ............. ـ ﺍﻟﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﻫﺎﺘﻑ :
ﻋﻨﺩﻤﺎ ﺘﺭﻴﺩ ﺃﻥ ﺘﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﻫﺎﺘﻑ ﻓﻠﻥ ﻴﻜﻭﻥ ﻤﻬﻤﹰﺎ ﺃﻥ ﺘﺤﺩﺩ ﻓﻲ ﺃﻱ ﺤﻘل ﺃﻱ ﻻ ﻴﻬﻡ ﺇﻥ ﻜﺎﻥ ﺍﻟﻬﺎﺘﻑ ﺍﻟﺫﻱ ﺴـﻨﺒﺤﺙ
ﻋﻥ ﺼﺎﺤﺒﻪ ﻫﻭ ﻫﺎﺘﻑ ﺍﻟﻤﻨﺯل ﺃﻭ ﻫﺎﺘﻑ ﺍﻟﻌﻤل ﻓﺎﻟﻤﻬﻡ ﺃﻥ ﻴﻌﻴﺩ ﺍﻟﺒﺤﺙ ﺍﺴﻡ ﺍﻟﺸﺨﺹ ﺍﻟﺫﻱ ﻨﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﻫﺎﺘﻔﻪ ﻟـﺫﻟﻙ ﺴﺘﺒﺤﺙ ﻓﻲ ﺍﻟﺤﻘل HPhonﻓﺈﺫﺍ ﻟﻡ ﻨﺠﺩ ﺍﻟﺭﻗﻡ ﻨﺒﺤﺙ ﻓﻲ ﺍﻟﺤﻘل WPhonﻓﺈﺫﺍ ﻟﻡ ﻨﺠﺩ ﺍﻟـﺭﻗﻡ ﺴـﻨﺒﺤﺙ ﻓـﻲ ﺍﻟﺤﻘـل Mobilﻭﺇﺫﺍ ﻟﻡ ﻨﺠﺩ ﺍﻟﺭﻗﻡ ﺘﻅﻬﺭ ﺭﺴﺎﻟﺔ ﺘﺨﺒﺭﻨﺎ ﺒﺄﻥ ﺍﻟﺭﻗﻡ ﻏﻴﺭ ﻤﻭﺠﻭﺩ ﻟﺫﻟﻙ ﺃﻀﻑ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ :
1ـ ﺍﻟﻌﻨﺼﺭ : GroupBoxﻀﻌﻪ ﻀﻤﻥ ﺍﻟﻌﻨﺼﺭ : Panel Caption ﺒﺤﺙ ﻋﻥ ﺭﻗﻡ ﺍﻟﻬﺎﺘﻑ 2ـ ﻋﻨﺼﺭ Edit2 Text
" ﻓﺭﺍﻍ
3ـ ﺍﻟﻌﻨﺼﺭ : Button Caption ﺒﺤﺙ BtnPhSearch Name ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
;Table1.Filtered := false if not Table1.Locate('HPhon',edit2.text,[]) then if not Table1.Locate('WPhon',edit2.text,[]) then if not Table1.Locate('Mobil',edit2.text,[]) then ; ) 'ﺍﻟﺭﻗﻡ ﻏﻴﺭ ﻤﻭﺠﻭﺩ' (showmessage
ﻴﻤﻜﻨﻙ ﺍﻵﻥ ﺇﻀﺎﻓﺔ ﺃﺯﺭﺍﺭ ﻟﻠﺒﺤﺙ ﻋﻥ ﺍﻟﺒﺭﻴﺩ ﺍﻻﻟﻜﺘﺭﻭﻨﻲ ﻭ ﺍﻟﻔﺎﻜﺱ ﻭ....
ﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ :ﺍﺤﻔﻅ ﺍﻟﺘﻁﺒﻴﻕ ﻓﻲ ﺍﻟﻤﺠﻠﺩ C:\MyPhonﺃﻋﻁ ﺍﻟﻭﺤﺩﺓ ﺍﺴـﻡ Main.pasﻭﺃﻋـﻁ ﺍﻟﻤـﺸﺭﻭﻉ ﺍﺴـﻡ . MyPhone
ﺃﻀﻑ ﺍﻵﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ :
ـ ﺍﻟﻌﻨﺼﺭ : GroupBoxﻀﻌﻪ ﻀﻤﻥ ﺍﻟﻌﻨﺼﺭ : Panel Caption ﺨﻴﺎﺭﺍﺕ 144
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ـ ﺃﺭﺒﻊ ﺃﺯﺭﺍﺭ Buttonﺃﻋﻁﻬﺎ Caption ﺍﻹﺩﺨﺎل :ﺠﺭﺕ ﺍﻟﻌﺎﺩﺓ ﻋﻠﻰ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Data controlﻹﺩﺨﺎل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟـﻰ ﺍﻟﻘﺎﻋـﺩﺓ ﻭﻋـﺩﻡ
ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ DBGridﻓﻘﻁ ﻭﺨﺎﺼﺔ ﺃﻨﻪ ﻟﺩﻴﻨﺎ ﺤﻘل ﻤﻥ ﻨﻭﻉ Memoﺍﻟﺫﻱ ﻻ ﻴﻤﻜﻥ ﺍﻹﺩﺨﺎل ﺇﻟﻴـﻪ ﻀـﻤﻥ ) DBGridﻓﻲ ﺃﻏﻠﺏ ﺍﻷﺤﻴﺎﻥ ﻴﻌﻁﻰ ﺍﻟﻌﻨﺼﺭ DBGridﺍﻟﺨﺎﺼﺔ ReadOnlyﻭﺫﻟﻙ ﻻﺴﺘﺨﺩﺍﻤﻪ ﻟﻠﻌﺭﺽ ﻓﻘﻁ ( . ـ ﺃﻨﺸﺊ ﻨﻤﻭﺫﺠﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : bdRightToLeft BiDiMode Caption ﺇﺩﺨﺎل poScreenCenter Position DataEnter Name ﻭﺃﻀﻑ ﺍﺴﻡ ﺍﻟﻭﺤﺩﺓ Mainﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻬﺫﻩ ﺍﻟﻭﺤﺩﺓ ﻭﺫﻟﻙ ﻟﻜﻲ ﻨﺘﻤﻜﻥ ﻤﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ Table1ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل : ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﺎﺴﻡ . DataEnterU ﻀﻊ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﻋﻨﺎﺼﺭ ﺍﻟـ DBEditﻭﻋﻨﺎﺼﺭ Labelﻭﻋﻨﺼﺭ DBNavigatorﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل
:
ﺤﺩﺩ ﺠﻤﻴﻊ ﻋﻨﺎﺼﺭ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ) ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻋﺩﺍ ﻋﻨﺎﺼﺭ ﺍﻟـ ( Labelﻭﺃﻋﻁﻬﺎ ﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ . Form1.DataSource1
ﺜﻡ ﺍﺭﺒﻁ ﻜل ﻋﻨﺼﺭ ﻤﻥ ﻋﻨﺎﺼﺭ DBEditﺒﺤﻘل ﻓﻲ ﺍﻟﺨﺎﺼﺔ DataFieldﻭﺫﻟﻙ ﺤﺴﺏ ﺍﻟﻌﻨﺼﺭ Labelﺍﻟﻤﺠﺎﻭﺭ . ﻹﻅﻬﺎﺭ ﻫﺫﺍ ﺍﻟﻨﻤﻭﺫﺝ ﻋﺩ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﺩﺨﺎل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; DataEnter.ShowModal ﻤﻥ ﺍﻟﻤﻔﻴﺩ ﺇﻴﻀﹰﺎ ﻅﻬﻭﺭ ﻫﺫﺍ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﺴﻡ ﺃﺤﺩ ﺍﻷﺸﺨﺎﺹ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ DBGridﻟﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnDbClickﻟﻠﻌﻨﺼﺭ DBGrid1 ; DataEnter.ShowModal
145
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻁﺒﺎﻋﺔ : ﻴﺴﺘﺨﺩﻡ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ QReportﻟﻠﻁﺒﺎﻋﺔ ﻓﻲ ﺩﻟﻔﻲ ﻭﺘﺴﺘﻁﻴﻊ ﻫﺫﻩ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﻁﺒﺎﻋﺔ ﺍﻟﺼﻭﺭ ﻭﺍﻷﺭﻗﺎﻡ ﻭﺍﻟﺤﺴﺎﺒﺎﺕ ﻋﻥ ﻁﺭﻴﻘﻬﺎ : ﻤﻼﺤﻅﺔ ﻟﻤﺴﺘﺨﺩﻤﻲ ﺩﻟﻔﻲ : 7
ﻻ ﻤﻥ ﺍﻟﺼﻔﺤﺔ QReportﻭﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻀﺎﻓﺕ ﺒﻭﺭﻻﻨﺩ ﺼﻔﺤﺔ ﻤﺠﻤﻭﻋﺔ ﺠﺩﻴﺩﺓ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﺼﻔﺤﺔ Raveﺒﺩ ﹰ ﺍﺴﺘﺨﺩﺍﻡ QReportﻓﻲ ﺩﻟﻔﻲ 7ﺃﻀﻑ ﻫﺫﻩ ﺍﻟﺼﻔﺤﺔ ﻋﻥ ﻁﺭﻴﻕ : Commponnant Æ install package Æ add ﺃﻀﻑ ﺍﻟﻭﺤﺩﺓ dclqrt60.bplﻤﻥ ﺍﻟﻔﻬﺭﺱ Binﺩﺍﺨل ﻤﺠﻠﺩ . Delphi7 ﻟﻁﺒﺎﻋﺔ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ :
ﺃﻀﻑ ﻭﺤﺩﺓ ﺠﺩﻴﺩﺓ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺃﻀﻑ ﺍﺴﻡ ﺍﻟﻭﺤﺩﺓ Mainﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻬﺫﻩ ﺍﻟﻭﺤﺩﺓ ﻭﺫﻟﻙ ﻟﻜﻲ ﻨـﺘﻤﻜﻥ ﻤـﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ Table1ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﺃﻋﻁﻬﺎ ﺍﻟﺨﺎﺼﺔ . Printform Name ﻭﺃﻀﻑ ﺇﻟﻴﻬﺎ ﺍﻟﻌﻨﺼﺭ QuickRepﻤﻥ ﺍﻟﺼﻔﺤﺔ Qreportﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻠﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺍﻟﺨﺎﺼﺔ HasColumnHeader : Bandﻭ HasDetailﻭ HasPageHeaderﻭ . HasPagefooter ﺍﻟﺨﺎﺼﺔ Datasetﺃﻋﻁﻬﺎ ﺍﻟﻘﻴﻤﺔ . Form1.DataSource1 ﺃﻀﻑ ﺍﻵﻥ ﺍﻟﻌﺼﺭ QRlabelﺇﻟﻰ ﺍﻟﻘﺴﻡ Page Headerﺃﻭ ﺃﻋﻁﻪ ﺍﻟـ " Captionﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ "
ﺃﻀﻑ ﻟﻠـ Column Headerﻋﺩﺩ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ QRlabelﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
ﺃﻀﻑ ﺇﻟﻰ Detailﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ QRDbTextﻭﺍﺭﺒﻁﻬﺎ ﻤﻊ ﺍﻟﺤﻘﻭل ﺍﻟﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Datasetﻜﻤﺎ
ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺴﺎﺒﻕ .
ﺃﻀﻑ ﺇﻟﻰ Page Footerﺍﻟﻌﻨﺼﺭ QRSysDataﻭﺃﻋﻁﻪ ﺍﻟﺨﺎﺼﺔ dataﺍﻟﻘﻴﻤﺔ ... Page Number ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﺎﺴﻡ . PrintUnit ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ QUickRep1ﻭﺍﺨﺘﺭ Previewﻟﺘﺸﺎﻫﺩ ﺍﻟﻨﺘﺎﺌﺞ . ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻁﺒﺎﻋﺔ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : Printform.QuickRep1.Preview
146
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 23 ﻟﻤﺴﺎﺕ ﺒﺭﻤﺠﻴﺔ : ﻴﻤﻜﻥ ﺃﻥ ﻨﻌﺘﺒﺭ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ ﺒﺭﻨﺎﻤﺞ ﺠﺎﻫﺯ ﻟﻠﺘﻭﺯﻴﻊ ﻭﺍﻟﻨﺸﺭ ﻭﻟﻜﻥ ﺒﺈﻀﺎﻓﺔ ﺒﻌﺽ ﺍﻟﻠﻤﺴﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻴﻤﻜـﻥ ﺃﻥ ﻨﺤﻭل ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺴﻬل ﺍﻻﺴﺘﺨﺩﺍﻡ ﻭﻤﺭﻏﻭﺏ ﺒﺸﻜل ﺃﻜﺒﺭ ﻤﻥ ﻗﺒـل ﺍﻟﻤـﺴﺘﺨﺩﻤﻴﻥ ،ﻭﺃﻗـﺼﺩ ﺒﺎﻟﻠﻤـﺴﺎﺕ
ﺍﻟﺒﺭﻤﺠﻴﺔ ﺒﻤﺠﻤﻭﻋﺔ ﺍﻷﻋﻤﺎل ﺍﻟﺘﻲ ﻴﻘﻭﻡ ﺒﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ ﻭﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫ ﻭﻗﺕ ﻁﻭﻴ ﹰ ﻼ ﻟﺘﺴﻬﻴل ﻋﻤل ﺍﻟﻤﺴﺘﺨﺩﻡ . 1ـ ﺘﻤﻜﻴﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻔﺄﺭﺓ ﻭﺒﺄﺴﺭﻉ ﺍﻟﻁﺭﻕ ﺍﻟﻤﻤﻜﻨﺔ :
ﻼ ﻋﻨﺩﻤﺎ ﻴﻜﺘﺏ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﺴﻡ ﻟﻠﺒﺤﺙ ﻋﻨﻪ ﻀﻤﻥ Edit1ﻓﻼ ﺤﺎﺠﺔ ﻷﻥ ﻴﻌﻭﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﻟﻰ ﺍﻟﻔﺄﺭﺓ ﻟﻴـﻀﻐﻁ ﻋﻠـﻰ ﻤﺜ ﹰ ﺍﻟﺯﺭ ﻟﻜﻲ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺤﺙ ﺒل ﻴﻜﻔﻲ ﺃﻥ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﺩﺨﺎل ) ( Enterﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻟﻴﺘﻡ ﺍﻟﺒﺤـﺙ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺒﺭﻤﺠﻴﹰﺎ :ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ OnKeyPressﻟﻠﻌﻨﺼﺭ : Edit1 if key = char( VK_Return ) then ; btnsearch.Click ﺤﻴﺙ VK_Returnﺜﺎﺒﺕ ﻤﻌﺭﻑ ﻓﻲ ﺩﻟﻔﻲ ﻭﻴﺤﻭﻱ ﺸﻴﻔﺭﺓ ﺍﻷﺴﻜﻲ ﻟﻠﺯﺭ ،Enterﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻴﺠﻭﺩ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﻫـﺫﻩ ﺍﻟﺜﻭﺍﺒﺕ ﻭﺍﻟﺘﻲ ﺘﺤﻭﻱ ﺸﻴﻔﺭﺓ ﺍﻷﺯﺭﺍﺭ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ) ( Virtual Keyﻭﻫﺫﻩ ﺍﻷﺯﺭﺍﺭ ﻫﻲ ﺍﻟﻤﻔﺎﺘﻴﺢ F1..F12ﻭ ﻤﻔﺎﺘﻴﺢ ﺍﻷﺴﻬﻡ ﻭ Tabﻭ Caps lockﻭ Deleteﻭ ) ... Endﺃﻱ ﻤﺠﻤﻭﻋﺔ ﺃﺯﺭﺍﺭ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻋﺩﺍ ﺍﻷﺤﺭﻑ ﻭﺍﻷﺭﻗﺎﻡ( ﻭﻟﻠﺘﻌﺭﻑ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﺜﻭﺍﺒﺕ ﺭﺍﺠﻊ ﻤﻠﻔﺎﺕ ﺍﻟﻤـﺴﺎﻋﺩﺓ ﻓـﻲ ﺩﻟﻔـﻲ ﺃﻭ ﺍﻜﺘـﺏ ﻓـﻲ ﻤﻜـﺎﻥ ﻓـﻲ ﻤﺤـﺭﺭ ﺍﻟـﺸﻴﻔﺭﺓ _ Windows.VKﻭﺴﺘﻜﻤل ﺩﻟﻔﻲ ﺒﻘﻴﺔ ﺍﻟﺜﻭﺍﺒﺕ.
ﻤﻼﺤﻅﺎﺕ :
ﺃ ـ ﻴﻤﻜﻥ ﺍﻻﺴﺘﻌﺎﻀﺔ ﻋﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ : ; If key = #13 then btnsearch.Click ﺤﻴﺙ 13ﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻴﺤﻭﻴﻬﺎ ﺍﻟﺜﺎﺒﺕ VK_Returnﻭﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻻﺴﻜﻲ ﻟﻠﺯﺭ Enterﻭ #ﺘﺴﺘﺨﺩﻡ ﻗﺒل ﺸـﻴﻔﺭﺓ ﻼ ﺇﺫﺍ ﻜﺘﺒﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ S:=#89#111#117 :ﻓﻬﺫﺍ ﻴﻜﺎﻓﺊ ﺍﻟﺘﻌﻠﻴﻤﺔ =S : ﺍﻷﺴﻜﻲ ﻟﺘﺤﻭﻴل ﺍﻟﺭﻗﻡ ﺇﻟﻰ ﺤﺭﻑ ،ﻤﺜ ﹰ ''You ﺏ ـ ﻴﻤﻜﻥ ﺍﻻﺴﺘﻌﺎﻀﺔ ﻋﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ : ;)If key = #13 then BtnSearchClick (Sender ﻻ ﻤﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻨﻬﺞ Clickﻟﻠﺯﺭ BtnSearchﻨﺴﺘﺨﺩﻡ ﺍﻹﺠﺭﺍﺀ ﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﻬﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﻤﺒﺎﺸـﺭﺓ ) ﻻ ﺤـﻅ ﺃﻥ ﺒﺩ ﹰ ﺍﻹﺠﺭﺍﺀ BtnSearchClickﻗﺩ ﺘﻡ ﺘﻌﺭﻴﻔﺔ ﻤﻥ ﻗﺒل ﺍﻟﺩﻟﻔﻲ ﻓﻲ ﺍﻟﻘﺴﻡ Typeﻭﺍﻟﻘـﺴﻡ Implementationﺒﻤﺠـﺭﺩ ﻀﻐﻁﻙ ﻋﻠﻰ ﺍﻟﺯﺭ .... 2ـ ﻤﻥ ﺍﻟﻤﻼﺤﻅ ﺃﻨﻨﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻌﻨﺼﺭ Edit2ﻹﺩﺨﺎل ﺍﻷﺭﻗﺎﻡ ﻓﻘﻁ ﺃﻭ ﻋﻠﻰ ﺍﻷﻗل ﺭﻤـﻭﺯ ﻟﻭﺤـﺔ ﻤﻔـﺎﺘﻴﺢ ﺍﻟﻬـﺎﺘﻑ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺠﺏ ﻤﻨﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺇﺩﺨﺎل ﺍﻟﺤﺭﻭﻑ ﻭﺍﻟﺭﻤﻭﺯ ﻏﻴﺭ ﺍﻟﻤﺭﻏﻭﺒﺔ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;])const s = ['0','1','2','3','4','5','6','7','8','9','p',char(VK_back begin ) if not ( key in s )then key:= char(vk_capital
147
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻨﻌﺭﻑ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﺍﻟﺘﻲ ﻴﺴﺘﺨﺩﻤﻬﺎ ﺍﻟﻬﺎﺘﻑ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺯﺭ VK_backﻭ ﻫﻭ ﺯﺭ ﺍﻟﺤﺫﻑ ، Åﻓﺈﺫﺍ ﻟـﻡ ﻴﻜﻥ ﺍﻟﺯﺭ ﺍﻟﻤﺩﺨل ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﺠﻤﻭﻋﺔ ﻓﺤﻭﻟﻪ ﺇﻟﻰ ﺍﻟﺯﺭ Vk_Capitalﻭﻫﻭ ﺯﺭ Caps Lockﻭﺍﻟﺫﻱ ﻟﻥ ﻴﺅﺜﺭ ﻋﻠـﻰ ﻭﻀﻊ ﺍﻟﺯﺭ Caps Lockﻭﻟﻜﻨﻪ ﺴﻴﺼﺩﺭ ﺼﻭﺕ ﻤﺎ .
3ـ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺇﺩﺨﺎل ﻋﻠﻰ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻥ ﻴﻨﺘﻘل ﻤﻥ ﻋﻨﺼﺭ ﺘﺤﺭﻴﺭ DBEditﺇﻟﻰ ﺁﺨﺭ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟـﺯﺭ Tabﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻋﻠﻰ ﺍﻟﺭﻏﻡ ﻤﻥ ﺃﻥ ﻤﻌﻅﻡ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺠﻴﺩﺓ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺯﺭ Enterﻟﻠﺘﻨﻘل ﺒﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻹﺩﺨـﺎل ﻟﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnKeyPressﻟﻠﻌﻨﺼﺭ : DBEdit1 ; If key = #13 then DBEdit2.SetFocus ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ OnKeyPressﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; If key =#13 then dbedit3.SetFocus ﻭﻫﻜﺫﺍ ﻓﻲ ﺒﻘﻴﺔ ﺍﻟﻌﻨﺎﺼﺭ . ﻼ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻟﻤﻨﻬﺞ SetFocusﻴﺴﺘﺨﺩﻡ ﻟﺘﺤﻔﻴﺯ ) ﺘﻔﻌﻴل ﺍﻟﻌﻨﺼﺭ ( ﻭﻫﻭ ﻴﺴﺘﺨﺩﻡ ﻤﻊ ﻤﻌﻅﻡ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺩﻟﻔـﻲ ﻓﻤـﺜ ﹰ Button1.SetFocusﺴﺘﻅﻬﺭ ﺇﻁﺎﺭ ﺸﻔﺎﻑ ﺩﺍﺨل ﺍﻟﺯﺭ ﻭﺍﻟﺫﻱ ﻴﻌﻨﻲ ﺃﻥ ﻫﺫﺍ ﻫﻭ ﺍﻟﺯﺭ ﺍﻟﻔﻌﺎل ﻭﺍﻟﺫﻱ ﻴﻤﻜـﻥ ﺍﻟـﻀﻐﻁ ﻋﻠﻴﻪ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺯﺭ Enterﺃﻭ ﺍﻟﺯﺭ Spaceﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ .
4ـ ﺍﻟﺘﺤﻜﻡ ﺒﺘﺤﻤﻴل ﺍﻟﻨﻭﺍﻓﺫ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ :
ﺍﻓﺘﺢ ﺍﻟﻘﺎﺌﻤﺔ Project Æ View Sourceﺴﻴﻅﻬﺭ ﻟﻙ ﻤﻠﻑ ﺍﻟﻤﺸﺭﻭﻉ MyPhone.Dprﻭﺴـﺘﺠﺩ ﻓﻴـﻪ ﺘﻌﺭﻴـﻑ ﺍﻟﻭﺤﺩﺍﺕ ﻓﻲ ﺍﻟﻘﺴﻡ Usesﻭ ﺴﺘﺠﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﻘﺴﻡ Begin ;Application.Initialize ;)Application.CreateForm(TForm1, Form1 ;)Application.CreateForm(TDataEnter, DataEnter ;)Application.CreateForm(TForm2, Form2 ;Application.Run ﺍﻟﺘﻌﻠﻴﻤﺔ ) Application.CreateForm ( TFom1,Form1ﺘﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻨﺎﻓـﺫﺓ Form1ﻭﺍﻟﺘـﻲ ﻤـﻥ ﺍﻟﻨـﻭﻉ TForm1ﻭﺍﻟﻤﻌﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Interfaceﻟﻠﻭﺤﺩﺓ Main.pasﺍﻟﺘﻲ ﻴﺘﺒﻊ ﻟﻬﺎ ﺍﻟﻨﻤﻭﺫﺝ Form1ﻭﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﻟﺘﻌﻠﻴﻤــﺎﺕ CreateFormﺍﻟﺘﺎﻟﻴــﺔ ،ﻭﻟﻜــﻥ ﻤــﺎﺫﺍ ﻴﻌﻨــﻲ ﺇﻨــﺸﺎﺀ ﻨﺎﻓــﺫﺓ ....ﻋﻨــﺩ ﺍﺴــﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤــﺔ )Application.CreateForm ( TFom1,Form1 1ـ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ) ﺃﻱ ﺤﺠﺯ ﺤﻴﺯ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻴﺤﻭﻱ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ( . 2ـ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻤﻥ ﺃﺯﺭﺍﺭ ﻭ ﻋﻨﺎﺼﺭ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭ.... 3ـ ﺴﻴﺘﻡ ﺤﺠﺯ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻌﺎﻤﺔ ﻭﺇﻋﻁﺎﺀﻫﺎ ﺤﻴﺯ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻴﻀﹰﺎ .
4ـ ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻡ ﻭﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺤﺩﺙ OnCreateﺍﻟﺘﺎﺒﻊ ﻟﻠﻨﻤﻭﺫﺝ . Form1 ﺴﻴﺘﻡ ﺍﻵﻥ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺍﺕ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻨﻭﺍﻓﺫ ﺍﻟﺜﻼﺜﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻟـﻨﻘﻡ ﺍﻵﻥ ﺒﺩﺭﺍﺴـﺔ ﺒـﺴﻴﻁﺔ ﻟﺤﺠـﻡ ﺍﺴﺘﺨﺩﺍﻡ ﻜل ﻨﺎﻓﺫﺓ : 1ـ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﻭﻟﻰ : Form1ﺴﻴﺴﺘﺨﺩﻡ ﺃﻱ ﻤﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻋﻨﺩ ﻜل ﺩﺨﻭل ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺫﻟﻙ ﻷﻨﻬـﺎ ﺘﺤـﻭﻱ ﻋﻨﺎﺼﺭ ﺍﻟﺒﺤﺙ ﻭﺍﻟﻔﻬﺭﺴﺔ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ. 148
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﺍﻟﻨﺎﻓﺫﺓ : DataEnterﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻋﺩﺓ ﻤﺭﺍﺕ ﻓﻲ ﺍﻷﺴﺒﻭﻉ ﺍﻷﻭل ﻻﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻷﻥ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺴﻴﻘﻭﻡ ﺒﺈﺩﺨﺎل ﺃﺭﻗﺎﻡ ﻫﻭﺍﺘﻔﻪ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺒﻌﺩ ﺫﻟﻙ ﻟﻥ ﻴﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﺇﻻ ﻤﺭﺓ ﻓﻲ ﺍﻷﺴﺒﻭﻉ ﺃﻭ ﺍﻟﺸﻬﺭ
ﺃﻭ ﺤﺘﻰ ﺒﺎﻟﺴﻨﺔ .
3ـ ﺍﻟﻨﺎﻓﺫﺓ : Form2ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﺘﺤﻭﻱ ﻋﻨﺎﺼﺭ ﺍﻟﻁﺎﺒﻌﺔ ﻭﺇﺫﺍ ﻓﺭﻀﻨﺎ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﻤﻠﻙ ﻁﺎﺒﻌﺔ ﻓﺈﻨﻪ ﻟﻥ ﻴﻁﺒﻊ ﺩﻓﺘﺭ ﻫﻭﺍﺘﻔﻪ ﻜل ﻴﻭﻡ . ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻨﻨﺎ ﻨﺤﺠﺯ ﺤﻴﺯ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻨﺎﻓﺫﺘﻴﻥ ﻟﻥ ﻴﺴﺘﺨﺩﻤﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﻻ ﻤﺭﺍﺕ ﻗﻠﻴﻠﺔ ،ﻟﻬﺫﺍ ﺯﻭﺩﺘﻨـﺎ ﺩﻟﻔـﻲ ﺒﻁﺭﻴﻘـﺔ ﻹﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻥ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻴﻪ ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ :
ﺃ ـ ﺇﺯﺍﻟﺔ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﻗﺎﺌﻤﺔ ﺍﻟﺘﺤﻤﻴل ﺍﻟﺘﻠﻘﺎﺌﻲ :
ﺍﻓﺘﺢ ﺍﻟﻘﺎﺌﻤﺔ Project Æ Optionsﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :ﺤﺩﺩ ﻤﻨﻬـﺎ ﺍﻟﺼﻔﺤﺔ Formsﻭﺍﻟﺘﻲ ﻓﻴﻬﺎ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺴﺩﻟﺔ Main Formﻭﻫﻲ ﺘﺤﺩﺩ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺫﻱ ﺴﻴﻅﻬﺭ ﻋﻨﺩ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ. ﺍﻟﻼﺌﺤﺔ Auto-Create Formsﻭﺘﻅﻬﺭ ﻓﻴﻬﺎ ﺃﺴﻤﺎﺀ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀﻫﺎ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻋﻨﺩ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ،
ﺍﻟﻼﺌﺤﺔ Available Formﻭﺘﺤﻭﻱ ﺠﻤﻴﻊ ﺒﻘﻴﺔ ﺍﻟﻨﻭﺍﻓﺫ ﻓـﻲ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻭﺍﻟﺘﻲ ﻻ ﺘﻭﺠﺩ ﻓﻲ ﻻﺌﺤﺔ ﺍﻟﺘﺸﻐﻴل ﺍﻟﺘﻠﻘﺎﺌﻲ. ﺤﺩﺩ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﺘﻲ ﻻ ﺘﺭﻴﺩ ﺃﻥ ﺘﻌﻤل ﺘﻠﻘﺎﺌﻴﹰﺎ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺴﻬﻡ > ﻟﺘﻨﺘﻘل ﻫﺫﻩ ﺍﻻﺴﻤﺎﺀ ﺇﻟﻰ ﺍﻟﻼﺌﺤﺔ Avialable Form .
ﺏ ـ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻨﺩ ﺍﻟﻁﻠﺏ : ﺒﻤﺎ ﺃﻨﻪ ﺍﻟﻨﺎﻓﺫﺓ ﻟﻥ ﺘﻨﺸﺄ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻓﻌﻠﻴﻨﺎ ﺃﻥ ﻨﻜﺘـﺏ ﺒﻌـﺽ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﻹﻨـﺸﺎﺌﻬﺎ ﻗﺒـل ﺍﺴـﺘﺨﺩﺍﻡ ﺍﻟﻤـﻨﻬﺞ Showﺃﻭ ShowModalﺃﻭ ﺤﺘﻰ ﻗﺒل ﻁﻠﺏ ﺃﻱ ﻤﺘﺤﻭل ﻤﺎ ﻤﻨﻬﺎ ﻟﺫﻟﻙ ﻟﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ ﺍﻟـﺯﺭ ﺇﺩﺨﺎل : ;)Dataenter := TDataEnter.Create(application Try ;DataEnter.Showmodal Finally ; DataEnter.Release ;end ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﺘﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻤﺘﺤﻭل DataEnterﻤﻥ ﺍﻟﻨﻭﻉ ) TDataEnterﺍﻟﻤﻌﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Varﺍﻟﺘﺎﺒﻊ ﻟﻠﻘـﺴﻡ Interfaceﻓﻲ ﺍﻟﻭﺤﺩﺓ ( DataEnterU.pasﻭﻴﺄﺨﺫ ﺍﻟﻤﻨﻬﺞ Createﻟﻌﻨﺎﺼﺭ Delphiﻭﺴﻴﻁﹰﺎ ﻭﺤﻴﺩﹰﺍ ﻴـﺩل ﻋﻠـﻰ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺎﻟﻙ ﻟﻠﻌﻨﺼﺭ ﺍﻟﻤﺭﺍﺩ ﺇﻨﺸﺎﺌﻪ ﻭﺘﻤﺭﺭ ﻫﻨﺎ ﺍﻟﻘﻴﻤﺔ Applicationﻋﺎﺩﺓ ﻷﻥ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻤﻨﺸﺄ ﺴـﻴﻌﻭﺩ ﻟﺘﻁﺒﻴـﻕ ﻤﺒﺎﺸﺭﺓ .
149
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺘﻌﻠﻴﻤﺔ DataEnter.Releaseﻫﻲ ﻋﻤﻠﻴﺔ ﻹﺯﺍﻟﺔ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﺩ ﺍﻨﺘﻬﺎﺀ ﻋﻤﻠـﻪ ﻭﺍﻟﺘـﻲ ﻴﻤﻜـﻥ ﺍﺴـﺘﺒﺩﺍﻟﻬﺎ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ DataEnter.Freeﻭﻟﻜﻥ ﺍﻟﻤﻨﻬﺞ Releaseﻴﻌﺘﺒﺭ ﺃﻓﻀل ﻷﻨﻪ ﻻ ﻴﻌﻴﺩ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻨﺸًﺄ ﺒﺎﻟﻔﻌل .
ﻻ ﻤﻥ ﺍﻟﻤﻨﻬﺞ ShowModalﻓﻴﺠﺏ ﺇﻀﺎﻓﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﺘﺄﻜـﺩ ﻤـﻥ ﻋﻤـل ﺇﺫﺍ ﻜﻨﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﻨﻬﺞ Showﺒﺩ ﹰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل ﺼﺤﻴﺢ : ﻓﻲ ﺍﻟﺤﺩﺙ OnCloseﻟﻠﻨﺎﻓﺫﺓ DataEnterﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;action := Cafree ;DataEnter := nil ﻭﺍﻜﺘﺏ ﺍﻵﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﺩﺨﺎل ) ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ( : If DataEnter = nil then ;)DataEnter := TDataEnter.Create(application ;DataEnter.Show ﺍﻟﺤﺩﺙ OnCloseﻟﻨﺎﻓﺫﺓ ﻴﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻋﻨﺩﻤﺎ ﻴﺘﻡ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ) ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺯﺭ ﺇﻏﻼﻕ ( ﻭﻴﺄﺨﺫ ﻫﺫﺍ ﺍﻟﺤـﺩﺙ ﺍﻟﻭﺴﻴﻁ Actionﻭﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺃﻥ ﻴﺄﺨﺫ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻟﻘﻴﻤﺔ CaNone
ﺍﻟﻤﻌﻨﻰ ﻻ ﻴﻤﻜﻥ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻟﻥ ﻴﺤﺩﺙ ﺸﻲﺀ ﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻏﻼﻕ
CaFree
ﺴﻴﺘﻡ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ﻭﺘﺤﺭﻴﺭ ﻜﺎﻤل ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻤﻥ ﻗﺒﻠﻬﺎ
CaHide
ﻻ ﻤﻥ ﺇﻏﻼﻗﻬﺎ ﻭﻴﻤﻜﻥ ﺇﻋﺎﺩﺓ ﺇﻅﻬﺎﺭﻫﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻤﻨﻬﺞ Showﻭﻫﻭ ﺍﻟﺨﻴـﺎﺭ ﺴﻴﺘﻡ ﺇﺨﻔﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺩ ﹰ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻟﻠﻨﻭﺍﻓﺫ ﻤﻥ ﺍﻟﻨﻭﻉ FormStyle := fsNormal
CaMinimizeﺴﻴﺘﻡ ﺘﺼﻐﻴﺭ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻫﻭ ﺍﻟﺨﻴﺎﺭ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻤﻊ ﺍﻟﻨﻭﺍﻓﺫ ﻤﻥ ﺍﻟﻨﻭﻉ fsMDIChild ﺍﻟﺘﻌﻠﻴﻤﺔ DataEnter = Nilﺘﻘﻭﻡ ﺒﺘﺤﻤﻴل ﻗﻴﻤﺔ ﺍﻟﻼﺸﻲﺀ ) ( Nullﻓﻲ ﺍﻟﻤﺘﺤﻭل DataEnterﺍﻷﻤﺭ ﺍﻟـﺫﻱ ﻴﺠﻌﻠﻨـﺎ ﻓﻴﻤﺎ ﺒﻌﺩ ﺃﻥ ﺍﻟﺤﺩﺙ OnCloseﻗﺩ ﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻭﻤﻥ ﺜﻡ ﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ . ﻤﻼﺤﻅﺔ :ﻫﺫﻩ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻹﻨﺸﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺸﻜل ﺩﻴﻨﺎﻤﻴﻜﻲ ﻭﻫﻨﺎﻙ ﻁﺭﻕ ﺃﺨﺭﻯ ﻤﺘﻌﺩﺩﺓ . ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ : Windows Registry ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻤﻠﻔﺎﺕ ﻴﺘﻡ ﺘﺨﺯﻴﻥ ﻓﻴﻪ ﺠﻤﻴﻊ ﻤﻌﻠﻭﻤﺎﺕ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل Windowsﺒﻤـﺎ ﻓﻴﻬـﺎ
ﺨﺼﺎﺌﺹ ﺍﻟﻨﻅﺎﻡ ﻭﺍﺴﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺍﺴﻡ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺃﻥ ﻤﻌﻅﻡ ﺍﻟﺒﺭﺍﻤﺞ ﺘﻀﻴﻑ ﺒﻌﺽ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺇﻟﻰ ﻤـﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻟﻠﺘﺤﻜﻡ ﺒﻁﺭﻴﻘﺔ ﺇﻅﻬﺎﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺤﺴﺏ ﺨﻴﺎﺭﺍﺕ ﻴﺤﺩﺩﻫﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ،ﻴﺩﻋﻰ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺒﻘﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻨﻅـﺎﻡ
ﻭﻴﻜﻭﻥ ﻤﺨﺯﻥ ﻓﻲ ﺍﻟﻤﻠﻔﻴﻥ System.datﻭ User.datﺍﻟﻤﻭﺠﻭﺩﻴﻥ ﺩﺍﺨل ﻓﻬﺭﺱ ﺍﻟﻭﻴﻨﺩﻭﺯ ،ﻟﻤﺸﺎﻫﺩﺓ ﻤـﺴﺠل ﺍﻟﻨﻅـﺎﻡ ﻭﺘﺤﺭﻴﺭﻩ ﺍﻓﺘﺢ ﺍﻟﻘﺎﺌﻤﺔ ﺃﺒﺩﺃ ﻭ ﺍﻀﻐﻁ ﻋﻠﻰ Runﻭﺍﻜﺘﺏ Regeditﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺘﺸﻐﻴل ﺜﻡ ﺍﻀﻐﻁ ﻋﻠﻰ . Ok
150
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻭﺍﻟﺘﻨﻲ ﺘﺤـﻭﻱ ﻓـﻲ ﺠﻬـﺔ ﺍﻟﻴﻤﻴﻥ ﺴﺘﺔ ﻤﻥ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻟﺭﺌﻴﺴﻴﺔ ﺘﺩﻋﻰ ﻋـﺎﺩﺓ ﻤﻔـﺎﺘﻴﺢ
ﺍﻟﺠﺫﺭ ، Root keyﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺇﺸﺎﺭﺓ +ﺒﺠﺎﻨﺏ ﻫﺫﻩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺘﻅﻬﺭ ﻟﻬﺎ ﻤﻔﺎﺘﻴﺢ ﻓﺭﻋﻴﺔ ﻭ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺍﻟﻭﺼـﻭل ﻤﻥ ﺨﻼﻟﻬﺎ ﺇﻟﻰ ﻤﻔﺎﺘﻴﺢ ﻓﺭﻋﻴﺔ ﺃﺨﺭﻯ ،ﺘﺩﻋﻰ ﺍﻟﺭﻤﻭﺯ ﺍﻟﺘﻲ ﺘﻅﻬﺭ ﻋﻠﻰ ﺍﻟﻘﺴﻡ ﺍﻟﻴﻤﻴﻨﻲ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺎﻟﻘﻴﻡ ﻭﻫـﻲ ﻋﻠـﻰ ﺜﻼﺜﺔ ﺃﻨﻭﺍﻉ ،
ﻗﻴﻡ ﻋﺩﺩﻴﺔ ﻭ ﻗﻴﻡ ﻨﺼﻴﺔ ﻭﻗﻴﻡ ﻤﻨﻁﻘﻴﺔ ، ﻗﺒل ﺃﻥ ﺘﻌﺩل ﺃﻱ ﻗﻴﻤﺔ ﻤﺎ ﻓﻲ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻋﻠﻴﻙ ﺃﻥ ﺘﻌﺭﻑ ﻤﺎ ﺘﻔﻌل ﻷﻥ ﺒﻌﺽ ﺍﻟﺘﻌﺩﻴﻼﺕ ﻗﺩ ﺘﺅﺩﻱ ﺇﻟﻰ ﺘﻭﻗﻑ ﺍﻟﻨﻅﺎﻡ ﻋﻥ ﺍﻟﻌﻤل ﺃﻭ ﺘﻌﻁﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻋﺩﻟﺘﻪ ﻋﻠﻰ ﺍﻷﻗل ،ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺄﺨﺫ ﻨﺴﺨﺔ ﻋﻥ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺃﻭ ﻋﻥ ﺠـﺯﺀ ﻤﻨـﻪ ﻀﻊ ﺤﺩﺩ ﺒﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺃﺨﺫ ﻨﺴﺨﻪ ﻤﻨﻪ ﻭﺍﺨﺘﺭ ﺍﻷﻤﺭ Regestry Æ Exportﺴـﺘﻁﺎﻟﺏ ﺒﺈﺩﺨـﺎل ﺍﺴﻡ ﻤﻠﻑ ﻤﺎ ﻭﺴﻴﺘﻡ ﺒﻌﺩﻫﺎ ﺤﻔﻅ ﻨﺴﺨﺔ ﻋﻥ ﺍﻟﻤﻔﺘﺎﺡ ،ﻻﺴﺘﻌﺎﺩﺓ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﻤﻠﻑ ﺍﻟﻤﻠـﻑ ﺍﻟـﺫﻱ ﻜﻨﺕ ﻗﺩ ﺤﻔﻅﺘﻪ ﺴﺎﺒﻘﹰﺎ .
ﺴﺄﺸﺭﺡ ﺒﺸﻜل ﻤﻭﺠﺯ ﻤﺎﻫﻲ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﻜل ﻤﻔﺘﺎﺡ ﺭﺌﻴﺴﻲ : : HKEY_ClASSES_ROOTﻴﺤﻭﻱ ﻫﺫﺍ ﺍﻟﻤﻔﺘﺎﺡ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻜل ﺃﻨﻭﺍﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ) ﻻ ﺤﻅ ﺃﻨﻪ ﻴﺤﻭﻱ ﻗﺎﺌﻤﺔ ﺒﺠﻤﻴﻊ ﺍﻤﺘﺩﺍﺩﺍﺕ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﻴﺘﻌﺎﻤل ﻤﻌﻬﺎ ﻭﻴﻨﺩﻭﺯ ( ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﺒـﺭﺍﻤﺞ ﺍﻟﻘـﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻤﺜ ﹰ ﻼ .jpgﺃﻭ ... .Doc
: HKEY_CURRENT_USERﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻤﺴﺘﺨﺩﻡ ﺍﻟﻨﻅﺎﻡ ﻭﺍﻟﻘﻴﻡ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﺍﻟﺘﻲ ﺃﻋﻁﺎﻫـﺎ ﻟـﺒﻌﺽ ﺒﺭﺍﻤﺞ ﺍﻟﻭﻴﻨﺩﻭﺯ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺨﺼﺎﺌﺹ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ﻭﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﻨﺼﺒﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ ..... : HKEY_LOCAL_MACHINEﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺠﻬﺎﺯ ﺍﻟﺤﺎﺴﻭﺏ ﺒﺎﻟﻜﺎﻤل ﺒﻤﺎ ﻓﻴﻬـﺎ ﺃﻨـﻭﺍﻉ ﺍﻷﺠﻬـﺯﺓ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺠﻬﺎﺯ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻤﺸﻐﻼﺕ ﻫﺫﻩ ﺍﻷﺠﻬﺯﺓ ) ( Driverﻤﺜ ﹰ ﻼ ﺘﺴﺘﻁﻴﻊ ﻤﻌﺭﻓﺔ ﻨﻭﻋﻴﺔ ﻜﺭﺕ ﺍﻟـﺸﺎﺸﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻨﻭﻋﻴﺔ ﺍﻟﺸﺎﺸﺔ ﺍﻟﻤﻌﺭﻓﺔ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ ....
: HKEY_USERSﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﺘﺸﻜﻴﻼﺕ ﺍﻟﺠﺎﻨﺒﻴﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ ) ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘـﻲ ﻴﺤـﺩﺩﻫﺎ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﻼ ، ( ..ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺘﺸﻜﻴﻼﺕ ﺍﻟﺠﺎﻨﺒﻴﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﺍﻟﺘﻲ ﺴﺘﻌﻁﻰ ﻋﻨﺩﻤﺎ ﻴـﺩﺨل ﻤـﺴﺘﺨﺩﻡ ﻷﻟﻭﺍﻥ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﻤﺜ ﹰ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻭﻴﻨﺩﻭﺯ . : HKEY_CURRENT_CONFIGﻴﻌﺘﺒﺭ ﺠﺯﺀ ﻤـﻥ ﺍﻟﻤﻔﺘـﺎﺡ HKEY_LOCAL_MACHINEﻭﻟﻜـﻥ ﺒﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺃﺨﺭﻯ .
: HKEY_DYN_Dataﻴﺤﻭﻱ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺃﺠﻬﺯﺓ ﺍﻟﻨﻅﺎﻡ ﻭﻁﺭﻕ ﺇﻋﺩﺍﺩﻫﺎ ) ﻏﻴﺭ ﻤﻭﺠﻭﺩ ﻓﻲ Windows NT (. ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻴﺴﻤﺢ ﻟﻙ ﺒﺎﻟﺘﺤﻜﻡ ﺒﺎﻟﻨﻅﺎﻡ ﺒﺸﻜل ﻜﺎﻤل ﻭﻻ ﺒﺩ ﺃﻨﻙ ﺴﻤﻌﺕ ﻋﻥ ﺒﺭﺍﻤﺞ ﺘﺘﺤﻜﻡ ﺒﺴﺭﻋﺔ ﻗﺎﺌﻤـﺔ ﺍﺒﺩﺃ ﻭ ﺘﻐﻴﺭ ﺃﺴﻡ ﺴﻠﺔ ﺍﻟﻤﺤﺫﻭﻓﺎﺕ ﻭﺘﻐﻴﺭ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﻲ ﺘﻅﻬـﺭ ﺒﺠﺎﻨـﺏ ﻗﺎﺌﻤـﺔ ﺍﺒـﺩﺃ ) ﺍﻟـﺼﻭﺭﺓ ﺍﻟﻤﻜﺘـﻭﺏ ﻓﻴﻬـﺎ ﻼ ( ﻭ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺘﻐﻴﺭ ﺼﻭﺭﺓ ﺠﻬﺎﺯ ﻜﻤﺒﻴﻭﺘﺭ ﻭ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﻀﻴﻑ ﻨﻔﺴﻬﺎ WINDOWS Meﻤﺜ ﹰ 151
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﻟﻰ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺘﻲ ﺘﻅﻬﺭ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻴﻤﻴﻥ ﻋﻠﻰ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﺃﻭ ﻤﺴﺘﻜﺸﻑ ﻭﻴﻨﺩﻭﺯ ،ﺤﺘﻰ ﺃﻥ ﺍﻟﺒـﺭﺍﻤﺞ ﺍﻟﺘـﻲ ﺘﺩﻋﻲ ﺃﻨﻬﺎ ﺘﺘﺤﻜﻡ ﺒﺴﺭﻋﺔ ﺍﻻﺘﺼﺎل ﺍﻨﺘﺭﻨﺕ ﺘﺘﻌﺎﻤل ﻤﻊ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ( ......
ﻫﺫﻩ ﻤﻭﺠﺯ ﺼﻐﻴﺭ ﺠﺩﹰﺍ ﻋﻥ Windows Registryﻭﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﺼﺒﺢ ﻤﺒﺭﻤﺠﹰﺎ ﻤﺤﺘﺭﻓﹰﺎ ﻋﻠﻴﻙ ﻗﺭﺍﺀﺓ ﺃﺤﺩ ﺍﻟﻜﺘـﺏ ﺍﻟﻤﺨﺘﺼﺔ ﺒﻬﺫﺍ ﺍﻟﻤﻭﻀﻭﻉ ﻓﻜﺘﺎﺏ Windows 2000 Registryﺒﺤﺠﻡ 800ﺼﻔﺤﺔ ﺘﻘﺭﻴﺒﹰﺎ . ﺍﻟﺘﻌﺎﻤل ﻤﻊ Registryﻓﻲ ﺩﻟﻔﻲ : ﺇﺫﺍ ﻟﻡ ﺘﻜﻥ ﺘﺭﻴﺩ ﺃﻥ ﺘﺘﺤﻜﻡ ﺒﻨﻅﺎﻡ ﻭﻴﻨﺩﻭﺯ ﻤﻥ ﺩﺍﺨل ﺒﺭﻨﺎﻤﺠﻙ ﻓﺄﻨﺕ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺘﺨﺯﻴﻥ ﺒﻌﺽ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺒﺭﻨﺎﻤﺠﻙ ﺩﺍﺨل ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺍﻷﻤﺭ ﺍﻟﺫﻱ ﻴﻁﺭﻙ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻨﻅﺎﻡ .
ﻤﺜﺎل :ﺴﻨﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﺒﻤﻌﺭﻓﺔ ﺍﺴﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺫﻱ ﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺒﺎﺴﻤﻪ ﻭﻤﻥ ﺜﻡ ﺘﻐﻴﺭﻩ ) ﻨـﺴﺘﻁﻴﻊ ﻤﻌﺭﻓـﺔ ﺍﺴﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺃﻴﻘﻭﻨﺔ ﺠﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﻭﺍﺨﺘﻴﺎﺭ ﺨﺼﺎﺌﺹ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ( . ﺍﺴﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﻭﺠﺩ ﺩﺍﺨل ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺘﺤﺕ ﺍﻟﻤﻔﺘﺎﺡ ][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion ﻭﻤﺨﺯﻥ ﻓﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﺼﻴﺔ ) RegisteredOwnerﺍﻓﺘﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ Regeditﻟﻠﺘﺄﻜﺩ ﻤﻥ ﺫﻟﻙ ( . ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺯﺭﻴﻥ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻋﻨﺼﺭ ، Edit1 ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻋﻠﻴﻙ ﺇﻀﺎﻓﺔ ﺍﻟﻭﺤﺩﺓ Registryﺇﻟﻰ ﺍﻟﻘﺴﻡ USES ﻟﻠﻘﺭﺍﺀﺓ ﻤﻥ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ; Var reg:tregistry Begin ﺇﻨﺸﺎﺀ ﺍﻟﻤﺘﺤﻭل ﻭﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓreg:= tregistry.Create ; // try ﺘﺤﺩﻴﺩ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ reg.RootKey := HKEY_LOCAL_MACHINE ;// ; ) reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion',false ﻗﺭﺍﺀﺓ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﺼﻴﺔ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﻭﺴﻴﻁ ﺍﻟﻤﺫﻜﻭﺭedit1.text := reg.ReadString('RegisteredOwner');// ﺇﻏﻼﻕ ﺍﻟﻤﻔﺘﺎﺡreg.CloseKey ; // Finally ﺘﺤﺭﻴﺭ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺘﺤﻭلreg.Free ; // ;end ﺍﻟﺘﻌﻠﻴﻤﺔ OpenKeyﺘﻘﻭﻡ ﺒﻔﺘﺢ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﻤﺭﺭ ﻟﻬﺎ ﻜﻭﺴﻴﻁ ﺃﻭل ﻭﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﻤﻭﺠﻭﺩﹰﺍ ﻓﺘﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﻫﺫﺍ ﺍﻟﻤﻔﺘﺎﺡ ﺇﺫﺍ ﻜﺎﻥ ﻭﺴﻴﻁﻬﺎ ﺍﻟﺜﺎﻨﻲ .True ﻟﻠﻜﺘﺎﺒﺔ ﺇﻟﻰ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ : ; Var reg:tregistry Begin ﺇﻨﺸﺎﺀ ﺍﻟﻤﺘﺤﻭل ﻭﺤﺠﺯ ﻤﻜﺎﻥ ﻟﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ reg:= tregistry.Create ;// try ﺘﺤﺩﻴﺩ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﺭﺌﻴﺴﻲ reg.RootKey := HKEY_LOCAL_MACHINE ;// ; ) reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion',false 152
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻜﺘﺎﺒﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﻓﻲ ﻋﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﺇﻟﻰ ﺍﺴـﻡ reg.WriteString('RegisteredOwner',edit1.Text ); // ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺤﺩﺩﺓ
ﺇﻏﻼﻕ ﺍﻟﻤﻔﺘﺎﺡreg.CloseKey ; // Finally ﺘﺤﺭﻴﺭ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺘﺤﻭلreg.Free ; // ;end ﻤﺜﺎل : 2ﺴﻨﻌﻭﺩ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ : ﻴﻘﻭﻡ ﺒﺭﻨﺎﻤﺠﻨﺎ ﺒﺎﻟﺘﺭﺘﻴﺏ ﺤﺴﺏ ﺍﻻﺴﻡ ﺩﺍﺌﻤﹰﺎ ﻭﻋﻠﻰ ﻓﺭﺽ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﻔﻀل ﺍﻟﺘﺭﺘﻴﺏ ﺤﺴﺏ ﺍﻟﻜﻨﻴﺔ ﻓﺈﻥ ﻋﻠﻴـﻪ ﻋـﻥ
ﻴﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺍﻟﻜﻨﻴﺔ ﻜﻠﻤﺎ ﺩﺨل ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺴﻨﻀﻴﻑ ﺍﻵﻥ ﻤﻔﺘﺎﺡ ﺇﻟﻰ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻴﻘﻭﻡ ﺒﺘﺨﺯﻴﻥ ﺍﻟﺨﻴﺎﺭ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻟﻠﻤﺴﺘﺨﺩﻡ ،ﻭﺴﻨﻘﻭﻡ ﺒﻔﺤﺹ ﻗﻴﻤﺔ ﻫﺫﺍ ﺍﻟﻤﻔﺘﺎﺡ ﻜﻠﻤﺎ ﺩﺨﻠﻨﺎ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ : ﺴﻨﺨﺯﻥ ﻗﻴﻤﺔ ﻋﺩﺩﻴﺔ ﺘﺤﺕ ﺃﺴﻡ IndexByﻓﻲ ﺍﻟﻤﻔﺘﺎﺡ :
HKEY_CURRENT_USER\Software\MyPhone ﻭﻋﻨﺩ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺴﻨﻔﺤﺹ ﻗﻴﻤﺔ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻓﺈﺫﺍ ﻜﺎﻥ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻴﺤﻭﻱ ﻗﻴﻤﺔ 1ﻓﺎﻟﻔﻬﺭﺴﺔ ﺴﺘﺘﻡ ﺤﺴﺏ ﺍﻟﻜﻨﻴـﺔ ﻭﺇﻻ ﻓﺎﻟﻔﻬﺭﺴﺔ ﺴﺘﺘﻡ ﺤﺴﺏ ﺍﻻﺴﻡ . ﺃﻀﻑ ﺯﺭ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل Form1ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ ﻭﺃﻋﻁﻪ ﺍﻟﻌﻨﻭﺍﻥ " ﻓﻬﺭﺱ ﺩﺍﺌﻤﹰﺎ ﺤﺴﺏ ﺍﻟﻜﻨﻴﺔ " . ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
; Var reg:tregistry Begin ; reg:= tregistry.Create try ; reg.RootKey := HKEY_CURRENT_USER ; ) reg.OpenKey('SOFTWARE\MyPhone',True ' Thenﻓﻬﺭﺱ ﺩﺍﺌﻤﹰﺎ ﺤﺴﺏ ﺍﻟﻜﻨﻴﺔ' = if button4.Caption ) reg.WriteInteger ('IndexBy',1 ) else reg.WriteInteger ('IndexBy',0 ; reg.CloseKey Finally ; reg.Free ;end ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ OpenKeyﺒﺈﻨﺸﺎﺀ ﺍﻟﻤﻔﺘﺎﺡ ﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﻤﻭﺠـﻭﺩﹰﺍ ﻭﺘﻘـﻭﻡ ﺍﻟﺘﻌﻠﻴﻤـﺔ WriteIntegerﺒﺈﻨـﺸﺎﺀ ﺍﻟﻘﻴﻤـﺔ IndexByﻭﺘﺨﺯﻥ ﻓﻴﻬﺎ ﺍﻟﻘﻴﻤﺔ 1ﺃﻭ ﺼﻔﺭ ﺤﺴﺏ ﺍﻟﺸﺭﻁ .
ﺍﻵﻥ ﺴﻨﻔﺤﺹ ﻫﺫﺍ ﺍﻟﻤﻔﺘﺎﺡ ﻋﻨﺩ ﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ :
RBTLname ; reg:= tregistry.Create try ; reg.RootKey := HKEY_CURRENT_USER ; )reg.OpenKey('SOFTWARE\MyPhone',True if reg.ReadInteger ('IndexBy') = 1 then begin 153
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;RBTLname.Checked := true ;)RBTLnameClick(Sender ; 'ﺭﺘﺏ ﺩﺍﺌﻤﹰﺎ ﺤﺴﺏ ﺍﻻﺴﻡ' =button5.Caption : ؛end ; reg.CloseKey Finally ; reg.Free ;end ﺘﻔﺤﺹ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺨﺯﻨﺔ IndexByﻓﺈﺫﺍ ﻜﺎﻨﺕ ﺘﺴﺎﻭﻱ 1ﻓﺈﻨﻬﺎ ﺘﻘﻭﻡ ﺒﺘﺤﻔﻴﺯ ﺯﺭ ﺍﻟﺭﺍﺩﻴﻭ ﺍﻟﻜﻨﻴـﺔ ﻭﺘﻨﻔﻴـﺫ ﺍﻟﺤﺩﺙ ﺍﻟﺨﺎﺹ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﻭﺍﻟﺫﻱ ﻓﻴﻪ ﺘﻌﻠﻴﻤﺎﺕ ﺘﻐﻴﻴﺭ ﺍﻟﻔﻬﺭﺱ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺘﻐﻴﺭ ﻋﻨﻭﺍﻥ ﺍﻟﺯﺭ ﺇﻟﻰ ﺭﺘﺏ ﺩﺍﺌﻤﹰﺎ ﺤﺴﺏ ﺍﻻﺴﻡ . ﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺘﻌﻠﻤﻨﺎ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ .
ﻭﻅﻴﻔﺔ :ﻓﻜﺭ ﺒﻁﺭﻴﻘﺔ ﺘﻘﻭﻡ ﺒﻬﺎ ﺒﺈﻀﺎﻓﺔ ﻜﻠﻤﺔ ﺴﺭ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ ،ﺤﻴﺙ ﺴﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﻋﻨـﺩ ﺘـﺸﻐﻴل ﺍﻟﺒﺭﻨـﺎﻤﺞ
ﺘﻁﺎﻟﺏ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺈﺩﺨﺎل ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﻓﺈﺫﺍ ﺃﺩﺨل ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﺍﻟﺼﺤﻴﺤﺔ ﻓﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ ﻭﺇﻻ ﻓﺴﻴﻁﺎﻟﺏ ﺒﺈﺩﺨـﺎل ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﻤﺭﺓ ﺃﺨﺭﻯ ﻭﺇﺫﺍ ﻓﺸل ﻓﻲ ﺍﻟﺩﺨﻭل ﺜﻼﺙ ﻤﺭﺍﺕ ﻤﺘﺘﺎﻟﻴﺔ ﻓﻴﺘﻡ ﺇﻏﻼﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﺨﺯﻥ ﻜﻠﻤﺔ ﺍﻟﺴﺭ ﻓﻲ ﻤـﺴﺠل ﺍﻟﻨﻅﺎﻡ ( .
ﺘﻭﺍﺒﻊ ﻭﺜﻭﺍﺒﺕ ﺍﻟﻭﻴﻨﺩﻭﺯ : Windows API
ﺘﻭﺍﺒﻊ ﻭﺜﻭﺍﺒﺕ ﺍﻟﻭﻴﻨﺩﻭﺯ ﻫﻲ ﻤﺠﻤﻭﻋﺔ ﻫﺎﺌﻠﺔ ﻤﻥ ﺍﻟﺘﻭﺍﺒﻊ ﻭﺍﻟﺜﻭﺍﺒﺕ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ﻭﺍﻟﻤﻭﺠـﻭﺩﺓ ﻀـﻤﻥ ﻤﻜﺘﺒـﺎﺕ
ﻭﻴﻨﺩﻭﺯ ﻓﻲ ﻤﻠﻔﺎﺕ ﺫﺍﺕ ﺍﻻﻤﺘﺩﺍﺩ .DLLﻭﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻨﻭﺍﻓﺫ ﻟﻠﺘﺤﻜﻡ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ﻭﻓﻲ ﻜل ﺸﻲﺀ ﻓﻲ ﻭﻴﻨـﺩﻭﺯ ﺍﺒﺘـﺩﺍﺀ
ﺒﻠﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﺍﻨﺘﻬﺎﺀ ﻤﺭﻭﺭﹰﺍ ﺒﺎﻟﺫﺍﻜﺭﺓ ﻭﺍﻟﻤﻌﺎﻟﺞ ﻭ ﺍﻟﺸﺎﺸﺔ ﺒﻤﺎ ﻓﻲ ﺫﻟﻙ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﺒﺭﺍﻤﺞ ﻭﺍﻟﻨﻭﺍﻓﺫ ﻭﻁﺭﻕ ﺇﻅﻬﺎﺭﻫـﺎ ) ﻴﻤﻜﻨﻙ ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ﺍﻟﺘﺤﻜﻡ ﺒﺎﺭﺘﻔﺎﻉ ﺍﻟﺼﻭﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻭﺍﺒﻊ Apiﻭ ﻤﻌﺭﻓﺔ ﻤﻌﻠﻭﻤﺎﺕ ﻤﻌﻴﻨﺔ ﻋﻥ ﺍﻷﺠﻬﺯﺓ ﻤﺜـل ﻤﻌﺭﻓﺔ ﺤﺠﻡ ﺍﻟﺴﻭﺍﻗﺔ ﺍﻟﺼﻠﺒﺔ Hard Diskﻴﻤﻜﻨﻙ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺁﺨﺭ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻜﺄﻥ ﺘﺤﺼل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﻤﻠﻑ ﻭﺭﺩ ﻭﺍﻟﻤﺯﻴﺩ ﺍﻟﺫﻱ ﻻ ﻴﻤﻜﻥ ﺤﺼﺭﻩ ﻫﻨﺎ . ﺴﻨﺸﺭﺡ ﺃﻤﺜﻠﺔ ﻋﻥ ﺍﻟﺘﻭﺍﺒﻊ ﻭﻁﺭﻕ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ :
1ـ ﺇﻏﻼﻕ : Windows
ﻴﺴﺘﺨﺩﻡ ﺍﻟﺘﺎﺒﻊ ) ( ExitWindowsExﻹﻁﻔﺎﺀ ﺍﻟﺠﻬﺎﺯ ﺃﻭ ﺇﻋﺎﺩﺓ ﺍﻟﺘﺸﻐﻴل : ﺍﺒﺩﺃ ﺒﺭﻨﺎﻤﺠﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺍﻀﻑ ﺯﺭ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; )ExitWindowsEx(ewx_ShutDown,0 ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻗﻡ ﺒﺘﻨﻔﻴﺫﻩ ﻭﻻ ﺘﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ،ﺃﻏﻠﻕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺸﻐﻠﻪ ﻤﻥ ﺨﺎﺭﺝ ﺍﻟﺩﻟﻔﻲ ) ﻤﻥ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﺤﻔﻅﺘﻪ ﻓﻴﻪ ( ،ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻵﻥ ﻭﺴﻴﺘﻡ ﺇﻴﻘﺎﻑ ﺘﺸﻐﻴل ﻭﻴﻨﺩﻭﺯ . ﻹﻋﺎﺩﺓ ﺇﻗﻼﻉ ﺍﻟﻨﻅﺎﻡ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ :
). ExitWindowsEx(ewx_Reboot,0
2ـ ﺍﻟﺘﺤﻜﻡ ﺒﻠﻐﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ :ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻠﻐﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻓﺈﻥ ﺒﺭﻨﺎﻤﺠـﻙ ﺴﻴﻅﻬﺭ ﺍﻟﻤﺅﺸﺭ ﻓﻲ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﺒﺤﻴﺙ ﻴﺘﻡ ﺍﻟﻜﺘﺎﺒﺔ ﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻭﻋﻠﻰ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻥ ﻴﺤﻭل ﺇﻟﻰ ﺃﺴﻠﻭﺏ ﺍﻟﻜﺘﺎﺒﺔ
ﺒﺎﻟﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻜﻠﻤﺎ ﺃﺭﺍﺩ ﺍﻟﻜﺘﺎﺒﺔ ،ﻭﻴﻤﻜﻥ ﺤل ﻫﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ : 154
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
; )LoadKeyboardLayout('00002801',klf_activate ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﻀﻊ ﻓﻴﻪ ﻋﻨﺼﺭ ﺘﺤﺭﻴﺭ Editﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺇﻟﻰ ﺍﻟﺤﺩﺙ OnCreateﻟﻠﻨﻤﻭﺫﺝ ﻭﺸﻐل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺴﺘﻼﺤﻅ ﺃﻥ ﺍﻟﻤﺅﺸﺭ ﺃﺼﺒﺢ ﺒﺠﻬﺔ ﺍﻟﻜﺘﺎﺒﺔ ﺒﺎﻟﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ . ﺍﻟﺭﻗﻡ 00002801ﻫﻭ ﺍﻟﺭﻗﻡ ﺍﻟﺫﻱ ﻴﺭﻤﺯ ﺇﻟﻰ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺍﻟﻌﺭﺒﻴﺔ ﺍﻟﺴﻌﻭﺩﻴﺔ ﺇﺫﺍ ﺃﺭﺩﺕ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴـﺔ ﺍﻷﻤﺭﻴﻜﻴﺔ ﺒﺩل ﻫﺫﺍ ﺍﻟﺭﻗﻡ ﺇﻟﻰ . 00000409
ﺘﻁﺒﻴﻕ :ﺍﺫﻫﺏ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ ﻭﺃﻀﻑ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻟﻠﺤﺩﺙ OnCreateﻟﻠﻨﻤﻭﺫﺝ ﺍﻷﻭل . Form1 ﻴﻭﺠﺩ ﻟﺩﻴﻨﺎ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺇﺩﺨﺎل ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺎﺘﻑ ﺤﻘﻠﻴﻥ ﻴﺠﺏ ﻜﺘﺎﺒﺘﻬﻤﺎ ﺒﺎﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻫﻤﺎ ﺤﻘل ﺍﻟﺒﺭﻴـﺩ ﺍﻹﻟﻜﺘﺭﻭﻨـﻲ ﻭﺤﻘل ﻤﻭﻗﻊ ﺍﻻﻨﺘﺭﻨﺕ ﻟﺫﻟﻙ ﻴﻤﻜﻨﻙ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnEnterﻟﻬﺫﻴﻥ ﺍﻟﺤﻘﻠﻴﻥ : ; )LoadKeyboardLayout('00000409 ',klf_activate ﺤﻴﺙ ﺴﻴﺘﻡ ﺍﻟﺘﺤﻭل ﺇﻟﻰ ﺍﻟﻠﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻋﻨﺩ ﺩﺨﻭل ﺍﻟﻤﺅﺸﺭ ﺇﻟﻰ ﻫﺫﻴﻥ ﺍﻟﺤﻘﻠﻴﻥ ﻭﺍﻜﺕ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻟﺘﺎﻟﻴـﺔ ﻓـﻲ ﺍﻟﺤـﺩﺙ OnExit ; )LoadKeyboardLayout('00002801',klf_activate ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﻴﻌﻭﺩ ﺍﻟﻤﺅﺸﺭ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻋﻥ ﺨﺭﻭﺝ ﺍﻟﻤﺅﺸﺭ ﻤﻥ ﻫﺫﻴﻥ ﺍﻟﺤﻘﻠﻴﻥ . ﺍﻟﺘﺎﺒﻊ : MessageBox
ﺘﻌﺎﻤﻠﻨﺎ ﻤﻊ ﺍﻟﺘﺎﺒﻌﻴﻥ ShowMessageﻭ MessageDlgﺴﺎﺒﻘﹰﺎ ﻭﻟﻜﻥ ﻤﺸﻜﻠﺔ ﻫﺫﻴﻥ ﺍﻟﺘﺎﺒﻌﻴﻥ ﺃﻥ ﻋﻨﺎﻭﻴﻥ ﺍﻷﺯﺭﺍﺭ ﺘﻅﻬﺭ ﺒﺎﻟﻐﺔ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﺩﺍﺌﻤﹰﺎ ﻟﺫﻟﻙ ﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﺎﺒﻊ MEssageBoxﻤﻥ ﻭﻴﻨﺩﻭﺯ Apiﺍﻟﺫﻱ ﺴﻴﻅﻬﺭ ﻋﻨـﺎﻭﻴﻥ ﺍﻷﺯﺭﺍﺭ ﺘﺒﻌﹰﺎ ﻟﻠﻐﺔ ﺍﻟﻨﻅﺎﻡ .
ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : ; ) ' , MB_Okﻫﺫﺍ ﻋﻨﻭﺍﻥ ﺍﻟﺭﺴﺎﻟﺔ ' ' ,ﻫﺫﺍ ﻨﺼﺭ ﺍﻟﺭﺴﺎﻟﺔ'MessageBox ( 0,
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺃﻥ ﺍﻟﺯﺭ Okﺴﻴﻅﻬﺭ ﺒﺎﻟﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ) ﻤﻭﺍﻓﻕ ( ﺇﺫﺍ ﻜﻨﺕ ﺘﺴﺘﺨﺩﻡ ﻭﻴﻨﺩﻭﺯ ﺒﺎﻟﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ . ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺁﺨﺭ :
' ,Mb_YesNo ) = IDYESﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻨﺎﻓﺫﺓ ' ' ,ﻫل ﺘﺭﻴﺩ ﺘﻠﻭﻴﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺎﻟﻠﻭﻥ ﺍﻷﺤﻤﺭ'If MessageBox ( 0, then ;Form1.color := clred ﻟﻤﺯﻴﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻀﻊ ﺍﻟﻤﺅﺸﺭ ﻓﻭﻕ ﺍﺴﻡ ﺍﻟﺘﺎﺒﻊ MessagBoxﻭﺍﻀﻐﻁ ﻋﻠﻰ . F1 ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻨﻭﺍﻓﺫ : ﻟﻜل ﻨﺎﻓﺫﺓ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ﻤﻘﺒﺽ ﺃﻭ ﻤﻤﺴﻙ ﻴﺩﻋﻰ Handleﻭﻫﻭ ﻤﻥ ﺍﻟﻨﻭﻉ Thandleﻭﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻋـﺩﺩ ﺼـﺤﻴﺢ ﻁﻭﻴل ﻴﺘﻌﺎﻤل ﺍﻟﻨﻅﺎﻡ ﻤﻊ ﻫﺫﺍ ﺍﻟﻤﻘﺒﺽ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﻻ ﻴﻘﺼﺩ ﺒﺎﻟﻨﺎﻓﺫﺓ ﻫﻨﺎ ﺍﻟﻨﻤﻭﺫﺝ Formﻓﻘﻁ ﺒل ﻟﻜل ﻋﻨﺼﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻘﺒﺽ ﺃﻴﻀﹰﺎ ﻓﻬﻨﺎﻙ ﻤﻘﺒﺽ ﻟﻠﺯﺭ ﻭﻟﻠﻌﻨﺼﺭ Editﻭ ، ( ....ﺍﻟﻤﻘﺒﺽ ﻟﻴﺱ ﻟﻪ ﻗﻴﻤﺔ ﺜﺎﺒﺘﺔ ﺇﺫ ﻴﻌﻁﻰ ﻟﻠﻨﺎﻓﺫﺓ ﺭﻗﻡ ﻤﻘﺒﺽ ﺠﺩﻴﺩ ﻋﻨﺩ ﻜل ﺇﻨﺸﺎﺀ ﻟﻠﻨﺎﻓﺫﺓ ،ﻋﻨﺩﻤﺎ ﺘﻘﻭﻡ ﻴﺘﺤﺭﻴﻙ ﻨﺎﻓﺫﺓ ﻤﺎ ﻋﻠﻰ ﺴﻁﺢ ﺍﻟﻤﻜﺘـﺏ ﻓـﺈﻥ ﺍﻟﻨﻅـﺎﻡ ﻴـﺴﺘﺩﻋﻲ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺘﻭﺍﺒﻊ Apiﻟﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺤﺭﻜﺔ .
ﻴﻭﺠﺩ ﻋﺩﺩ ﻫﺎﺌل ﻤﻥ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﺎﻟﻨﻭﺍﻓﺫ ﺴﻨﺫﻜﺭ ﺒﻌﺽ ﻤﻨﻬﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﻌﺠﺎﻟﺔ : 155
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﺒﺭﻨﺎﻤﺞ ﻴﻌﻴﺩ ﺃﺴﻤﺎﺀ ﺠﻤﻴﻊ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ : ﺃﻀﻑ ﺯﺭ ﻭ ﻋﻨﺼﺭ ListBoxﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ
:
;var h:Thandle ;p:pchar begin ;)getmem(p,250 ; )h:= gettopwindow ( getdesktopwindow ;)getwindowtext(h,p,250 ;)listbox1.Items.Add(p while h > 0 do begin ;)h:= getnextwindow( h,gw_hwndnext ;)getwindowtext(h,p,250 ; )listbox1.Items.Add(p ;end ;)freemem(p,200 ;end ﺸﺭﺡ ﺍﻟﺒﺭﻨﺎﻤﺞ : ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺘﻡ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﺤﻭل hﻭﻫﻭ ﻤﻥ ﺍﻟﻨﻭﻉ Thandleﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻤﺘﺤﻭل Pﻤﻥ ﺍﻟﻨﻭﻉ ) Pcharﻤﻼﺤﻅـﺔ
ﺠﻤﻴﻊ ﺘﻭﺍﺒﻊ Apiﺘﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻨﻭﻉ ( Pchar
ﺍﻟﺘﻌﻠﻴﻤﺔ ) GetMem( p,200ﺘﺨﺼﺹ 200ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻠﻤﺘﺤﻭل . p : GetDesktopwindowﻴﻌﻴﺩ ﻤﻘﺒﺽ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﻓﻲ ﻭﻴﻨﺩﻭﺯ . GetTopWindowﻴﻌﻴﺩ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺃﻋﻠﻰ ﺍﻟﻨﻭﺍﻓﺫ ﻓﻲ ﺤﻴﺯ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺨﺯﻥ ﻓﻴﻪ ﻤﻘﺒﺽ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺫﻱ ﻴﻤـﺭﺭ ﻜﻭﺴﻴﻁ ﻟﻬﺫﺍ ﺍﻟﺘﺎﺒﻊ
) :getwindowtext(h,p,250ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻓﻲ ﺍﻟﻤﺘﺤﻭل pﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﻤﻘﺒﻀﻬﺎ hﻭﻴﻌﻴﺩ ﻨﺹ ﺒﻁﻭل 250 ﺤﺭﻑ ) : GetNextWindow( h, gw_hwndnextﻴﻌﻴﺩ ﻤﻘﺒﺽ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺘﻠﻲ ﺍﻟﻨﺎﻓﺫﺓ hﻭﻓﻲ ﺤﺎل ﻭﺼﻠﻨﺎ ﺇﻟـﻰ ﺁﺨـﺭ ﻨﺎﻓﺫﺓ ﻓﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ . Nil
2ـ ﺒﺭﻨﺎﻤﺞ ﺇﺨﻔﺎﺀ ﻭﺇﻅﻬﺎﺭ ﺸﺭﻴﻁ ﺍﻟﻤﻬﺎﻡ : ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﻴﻥ : 1ـ ﻋﺭﻑ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ Privateﻟﻠﻭﺤﺩﺓ : ;hTaskBar: THandle 2ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnCreateﻟﻠﻨﻤﻭﺫﺝ : ;)hTaskBar := FindWindow('Shell_TrayWnd', nil ﺘﻌﻴﺩ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﻨﻭﻋﻬﺎ ﻤﺫﻜﻭﺭ ﻓﻲ ﺍﻟﻭﺴﻴﻁ ﺍﻷﻭل ﻭﻋﻨﻭﺍﻨﻬﺎ ﻤﺫﻜﻭﺭ ﻓﻲ ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ 156
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
3ـ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل : ;)ShowWindow(hTaskBar, SW_HIDE ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻅﻬﺎﺭ ﺃﻭ ﺇﺨﻔﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﺘﺒﻌﹰﺎ ﻟﻠﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ . 4ـ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ : ;)ShowWindow(hTaskBar, SW_SHOW ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﻤﻼﺤﻅﺎﺕ :
1ـ ﻟﻠﻤﺯﻴﺩ ﻤﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺫﻜﻭﺭﺓ ﺴﺎﺒﻘﹰﺎ ﺍﻀﻐﻁ F1ﻓﻭﻕ ﺒﻌﺩ ﻭﻀﻊ ﺍﻟﻤﺅﺸﺭ ﻓﻭﻕ ﺍﺴﻡ ﺍﻟﺘﺎﺒﻊ . 2ـ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﺴﻤﺎﺀ ﻤﻌﻅﻡ ﺘﻭﺍﺒﻊ Windows Apiﺍﻜﺘﺏ Windowsﻓﻲ ﺃﻱ ﻤﻜﺎﻥ ﻤﻥ ﻤﺤـﺭﺭ ﺍﻟـﺸﻴﻔﺭﺓ ﻭ
ﻀﻊ ﺍﻟﻨﻘﻁﺔ ،ﻓﺴﻴﺘﻡ ﻜﺘﺎﺒﺔ ﺠﻤﻴﻊ ﺍﻟﺜﻭﺍﺒﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺍﻟﻭﺤﺩﺓ Windows.pasﻭﻫﻲ ﻤﺭﺘﺒﻁﺔ ﻤﺒﺎﺸـﺭﺓ ﻤـﻊ . Windows Api
3ـ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻭﺍﻓﺭﺓ ﻋﻥ Windows Apiﻋﻠﻴﻙ ﻤﺭﺍﺠﻌﺔ ﺍﻟﻜﺘﺏ ﺍﻟﻤﺨﺘـﺼﺔ ﺃﻭ ﺍﻟﺤـﺼﻭل ﻋﻠـﻰ ﻤﺠﻤﻭﻋﺔ ﺍﻷﻗﺭﺍﺹ ﺍﻟﻠﻴﺯﺭﻴﺔ ﺍﻟﻤﺴﻤﺎﺓ MSDN Libraryﻭﺍﻟﺘﻲ ﺘﺒﺎﻉ ﻤﻊ . MicroSoft Visual Studio
ﺇﻋﺩﺍﺩ ﺍﻟﻤﻬﻨﺩﺱ :ﻤﺤﻤﺩ ﺨﺎﻟﺩ ﻨﺎﺼﺭ ﺁﻏﺎ
157
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 24 ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ) : ( Add new omponant ﻗﺒل ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﺇﻟﻰ ﺩﻟﻔﻲ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻌﺭﻑ ﻤﺎ ﻫﻲ ﺍﻟﻌﻨﺎﺼﺭ:
ﻟﻘﺩ ﺘﻌﺎﻤﻠﻨﺎ ﻤﻊ ﻤﺠﻤﻭﻋﺔ ﻜﺒﻴﺭﺓ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺩﻟﻔﻲ ﻤﻨﻬﺎ ﺍﻟﻤﺭﺌﻲ ﻭﻤﻨﻬﺎ ﺍﻟﻤﺨﻔﻲ ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻜﺘل ﺒﺭﻤﺠﻴﻪ ﺠﺎﻫﺯﺓ ﻴﻀﻌﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻹﻋﻁﺎﺀ ﺒﺭﻨﺎﻤﺠﻪ ﺸﻜل ﻭﺨﺼﺎﺌﺹ ﻤﻌﻴﻨﺔ ،ﻭﺘﺨﺘﻠﻑ ﺍﻟﻌﻨﺎﺼﺭ ﺒﻁﺒﻴﻌﺘﻬﺎ ﻓﻤﻨﻬﺎ ﺍﻟﺒﺴﻴﻁ ﺍﻟﻌﻨﺼﺭ TLabelﺃﻭ ﻋﻨﺎﺼﺭ ﻤﻌﻘﺩﺓ ﻜﻌﻨﺎﺼﺭ BDEﻭﻋﻨﺎﺼﺭ ﺍﻟﻁﺒﺎﻋﺔ . ﻤﻥ ﺍﻟﻤﻌﺭﻭﻑ ﺃﻥ ﻟﻐﺔ ﺍﻟﺩﻟﻔﻲ ﻫﻲ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻏﺭﻀﻴﺔ ﺍﻟﺘﻭﺠﻪ object-oriented programmingﺃﻱ ﺃﻨﻨﺎ ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻜﺘﻠﻨﺎ ﺍﻟﺒﺭﻤﺠﻴﺔ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻜﺘل ﺃﺨﺭﻯ ،ﻓﻌﻨﺩ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ ﻟﺴﻨﺎ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻹﻨﺸﺎﺀ
ﺍﻟﻨﻤﻭﺫﺝ ﻭﺇﻅﻬﺎﺭﻩ ﻭﻟﺴﻨﺎ ﺒﺤﺎﺠﺔ ﺃﻴﻀﹰﺎ ﻟﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ ﻹﻅﻬﺎﺭ ﻜل ﻋﻨﺼﺭ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ،ﺇﺫ ﻴﻜﻔﻲ ﺃﻥ ﻨﺴﺤﺏ ﺍﻟﻌﻨﺼﺭ ﻭﻨﻀﻌﻪ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻟﺘﻘﻭﻡ Delphiﺒﺈﻀﺎﻓﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ ﺍﻟﻼﺯﻤﺔ ﻹﻅﻬﺎﺭ ﺍﻟﻌﻨﺼﺭ ﻭﻁﺭﻕ
ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ ( ﺘﻨﺤﺩﺭ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺩﻟﻔﻲ ﻤﻥ ﺍﻟﻌﻨﺼﺭ Tobjectﻭﻫﻭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺭﺌﻴﺴﻲ ) ﺍﻷﺏ ( ﻓﻲ ﺩﻟﻔﻲ ﺤﻴﺙ ﺘﻨﺤﺩﺭ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻨﻪ ﻭﺤﻴﺙ ﺘﺄﺨﺫ ﺍﻟﻌﻨﺎﺼﺭ ﺒﻌﺽ ﺨﻭﺍﺹ ﺍﻟﻌﻨﺼﺭ Tobjectﻭﺘﻀﻴﻑ ﺇﻟﻴﻬﺎ ﺨﻭﺍﺹ ﺠﺩﻴﺩﺓ ﺃﻭ ﺘﻌﺩل ﻓﻲ
ﺒﻌﺽ ﻫﺫﻩ ﺍﻟﺨﻭﺍﺹ ﺒﻤﺎ ﻴﻼﺌﻡ ﻋﻤل ﻜل ﻋﻨﺼﺭ ﻭﺍﻟﺸﺠﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻭﻀﺢ ﺍﻟﺒﻨﺎﺀ ﺍﻟﻬﻴﻜﻠﻲ ﻟﻠﻌﻨﺎﺼﺭ :
ﻟﻤﺎﺫﺍ ﻴﺘﻡ ﺇﻨﺸﺎﺀ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ : ﻴﻘﻭﻡ ﺒﻌﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﺍﻟﻤﺤﺘﺭﻓﻴﻥ ﺃﻭ ﺒﻌﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﺍﻟﻬﻭﺍﺓ ﺒﺈﻨﺸﺎﺀ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﺤﺘﻰ ﻴﺠﻌﻠﻭﺍ ﻤﻥ ﺍﻟﺒﺭﻤﺠﺔ ﺃﻤﺭ ﺴﻬل ﻭﻤﻤﺘﻊ ،ﻷﻨﻙ ﻜﻤﺒﺭﻤﺞ ﻋﺎﺩﻱ ﻻ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﺒﺭﻤﺞ ﻜل ﺸﻲﺀ ﺒﻨﻔﺴﻙ ﻭﻋﻠﻴﻙ ﺃﻥ ﺘﻌﺘﻤﺩ ﻋﻠﻰ ﺍﻟﻐﻴﺭ ﻓﻲ ﺃﻨﺸﺎﺀ 158
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺒﺭﺍﻤﺠﻙ ﻓﻼ ﺤﺩﻭﺩ ﻟﻺﻤﻜﺎﻨﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺴﺘﻁﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺃﻥ ﺘﻘﺩﻤﻬﺎ ﻭﻜل ﻴﻭﻡ ﻨﺴﻤﻊ ﻋﻥ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﻭﺍﺒﺘﻜﺎﺭﺍﺕ ﺠﺩﻴﺩﺓ ﻓﻲ ﻋﺎﻟﻡ ﺍﻟﻌﻨﺎﺼﺭ .
ﻁﺭﻕ ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﺇﻟﻰ ﻟﻭﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ : ﻫﻨﺎﻙ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻁﺭﻕ ﻹﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ ﺇﻟﻰ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ ﻭﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻫﻲ ﻗﺭﺍﺀﺓ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﺘﻲ ﺘﺄﺘﻲ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ﻭﻟﻜﻨﻨﺎ ﺴﻨﺭﻜﺯ ﻋﻠﻰ ﺒﻌﺽ ﺍﻟﻁﺭﻕ ﺍﻟﻌﺎﻤﺔ :
1ـ ﻋﻥ ﻁﺭﻴﻕ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻜﺘﺒﺔ : .bpl
ﺇﺫﺍ ﻭﺠﺩﺕ ﻓﻲ ﻓﻬﺭﺱ ﺍﻟﻌﻨﺼﺭ ﻤﻠﻑ ﻤﻥ ﺍﻟﻨﻭﻉ bplﻓﺎﺘﺒﻊ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻹﻀﺎﻓﺔ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ : ﺃ ـ ﻤﻥ ﺍﻟﺼﻔﺤﺔ Componentﺍﺨﺘﺭ Install Package
ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﺍﺨﺘﺭ ﻤﻨﻬﺎ Addﻭﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﻤﺴﺎﺭ
ﺍﻟﻤﻭﺠﻭﺩ ﻓﻴﻪ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺇﻀﺎﻓﺘﻪ ﻭﺍﺨﺘﺭ ﻤﻠﻑ .bplﻭﺍﻀﻐﻁ ﻋﻠﻰ . Ok ﻤﺜﺎل ) ﻨﻔﺫ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ TIBEAntialiasButton02_all ﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺍﻟﺩﻴﺴﻙ ﺍﻟﻤﺭﻓﻕ ( .ﺃﻭ ﺤﻤﻠﻪ ﻤﻥ ﺍﻟﻤﻭﻗﻊ http://www.ibe-software.com ﺴﺘﻼﺤﻅ ﺃﻥ ﺍﻟﻌﻨﺼﺭ ﻭﻀﻊ ﻨﻔﺴﻪ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻷﺨﻴﺭ ﻓﻲ ﻟﻭﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ .
ﺏ ـ ﺍﻵﻥ ﻴﺠﺏ ﺇﻀﺎﻓﺔ ﻤﺠﻠﺩ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﻤﺴﺎﺭ ﺍﻟﻤﻜﺘﺒﺎﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺩﻟﻔﻲ : ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Tools Æ Environment Options ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺃﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺼﻔﺤﺔ Library
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Library pathﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻌﻨﺼﺭ ﺍﻟﺘﺤﺭﻴﺭ ﺒﺎﻷﺴﻔل ) ( ... 159
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﺤﺩﺩ ﻤﺴﺎﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻗﻤﺕ ﺒﺈﻀﺎﻓﺘﻪ ) ﺤﺩﺩ ﻤﺴﺎﺭ ﻤﻠﻔﺎﺕ bplﺃﻭ ﻤﻠﻔﺎﺕ Dcuﻭﻤﻠﻔﺎﺕ ( pasﺜﻡ ﺍﻀﻐﻁ ﻋﻠﻰ Addﻭﻤﻥ Ok
ﺒﺈﻤﻜﺎﻨﻙ ﺍﻵﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻲ ﻜﻨﺎ ﻨﺴﺘﺨﺩﻤﻬﺎ ﻤﻊ ﺃﻱ ﻋﻨﺼﺭ ﺴﺎﺒﻕ ﻤﻥ ﻋﻨﺎﺼﺭ ﺩﻟﻔﻲ )،ﻴﻔﻀل ﺍﺴﺘﻌﺭﺍﺽ ﺍﻷﻤﺜﻠﺔ ﺍﻟﺘﻲ ﺘﺄﺘﻲ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ﻋﺎﺩﺓ ﻓﻲ ﺍﻟﻔﻬﺭﺱ ( Demo 2ـ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻠﻔﺎﺕ : .Dpk
ﺇﺫﺍ ﻭﺠﺩ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ﻤﻠﻑ ﻤﻥ ﺍﻟﻨﻭﻉ ) .Dpkﻤﻠﻑ ﺤﺯﻤﺔ ﺩﻟﻔﻲ ( Delphi Packageﻓﺎﺘﺒﻊ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻹﻀﺎﻓﺔ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ : ﺃ ـ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ File Æ Openﺤﺩﺩ ﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻻﻤﺘﺩﺍﺩ .Dpkﻭﺍﻀﻐﻁ ﻋﻠﻰ okﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ : ﺍﻀﻐﻁ ﻤﻨﻬﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Installﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺭﺴﺎﻟﺔ ﺘﻌﻠﻤﻙ ﺒﺄﻨﻪ ﻗﺩ ﺘﻡ ﺘﺤﻤﻴل ﺍﻟﻌﻨﺼﺭ .
ﺏ ـ ﺍﻋﺩ ﺍﻟﺨﻁﻭﺓ ﺏ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ . ﻤﻼﺤﻅﺔ ﻗﺩ ﺘﻅﻬﺭ ﺒﻌﺽ ﺍﻟﻤﺸﺎﻜل ﻋﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ، ﻟﺤل ﺍﻟﻤﺸﻜﻠﺔ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ optionﻭﺍﺨﺘﺭ ﻤﻥ ﺍﻟﺼﻔﺤﺔ Descriptionﻭﻏﻴﺭ ﻓﻲ ﺍﻟﻘﺴﻡ ﺍﻟﻤﻭﻀﺢ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺜﻡ ﺃﻏﻠﻕ ﻨﺎﻓﺫﺓ ﺍﻟﺨﻴﺎﺭﺍﺕ ﻭﺍﻀﻐﻁ ﻋﻠﻰ . Install
3ـ ﻓﻲ ﺤﺎل ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﻤﻜﻭﻥ ﻤﻥ ﻤﻠﻑ ﻭﺍﺤﺩ ﻤﻥ ﺍﻻﻤﺘﺩﺍﺩ : Pas ﺃ ـ ﺍﻓﺘﺢ ﺍﻟﻤﻠﻑ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ File : ÆOpen
ﺍﺨﺘﺭ ﺍﻟﻘﺎﺌﻤﺔ Component Æ Install Componentﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ
ﺍﺨﺘﺭ ﺍﻟﺼﻔﺤﺔ Into New package ﻭﺍﻜﺘﺏ ﺃﻱ ﺍﺴﻡ ﺘﺭﻴﺩ ﻓﻲ ﺍﻟﺤﻘل Package file nameﻭﺍﻀﻐﻁ ﻋﻠﻰ ok ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﻭﻀﺤﺔ ﻓﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ ،ﺍﻀﻐﻁ ﻤﻨﻬﺎ ﻋﻠﻰ . Install 160
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺏ ـ ﺃﻋﺩ ﺍﻟﺨﻁﻭﺓ ﺏ ﺍﻟﺴﺎﺒﻘﺔ .
4ـ ﺒﻌﺽ ﺍﻟﻌﻨﺎﺼﺭ ﺘﺄﺘﻲ ﻤﻊ ﺒﺭﻨﺎﻤﺞ ﺘﻨﺼﻴﺏ ) ( Setupﻭﺘﻘﻭﻡ ﺒﺘﻨﺼﻴﺏ ﻨﻔﺴﻬﺎ ﺘﻠﻘﺎﺌﻴ ﹰﺎ . ﻟﻤﺎﺫﺍ ﻫﺫﻩ ﺍﻟﻁﺭﻕ ﺍﻟﻤﺘﻌﺩﺩﺓ : ﻋﻤﻠﻴﹰﺎ ﻫﻨﺎﻙ ﻁﺭﻴﻘﺔ ﻭﺍﺤﺩﺓ ﻟﺘﺭﻜﻴﺏ ﺍﻟﻌﻨﺎﺼﺭ ﻭﻫﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻟﺜﺔ ﻭﻟﻜﻥ ﺒﻌﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﻜﺜﺭ ﻤﻥ ﻭﺤﺩﺓ
Unitﻓﻲ ﻋﻨﺼﺭﻩ ﻭﻟﺫﻟﻙ ﻴﻘﻭﻡ ﺒﺤﺯﻡ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺍﺕ ﻓﻲ ﻤﻠﻑ ﺤﺯﻤﺔ Packageﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻨﺸﺄ ﻋﻨﺩﻨﺎ ﻤﻠﻑ ، .Dpk ﻋﻨﺩﻤﺎ ﺘﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Installﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ Packageﻓﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺃﻭ ﺍﻟﺜﺎﻟﺜﺔ ،ﺘﻘﻭﻡ ﺩﻟﻔﻲ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻻﻤﺘﺩﺍﺩ Bplﻭﻫﻭ ﻤﻠﻑ ﺍﻟﻤﻜﺘﺒﺎﺕ ﻓﻲ ﺩﻟﻔﻲ ) ﻓﻲ ﻟﻐﺔ ﺍﻟﻔﻴﺠﻭل ﺴﻲ ﺃﻭ ﺍﻟﻔﻴﺠﻭل ﺒﻴﺴﻙ ﻴﺘﻡ ﺍﻋﺘﻤﺎﺩ ﺍﻟﻤﻠﻔﺎﺕ ﺫﺍﺕ ﺍﻻﻤﺘﺩﺍﺩ DLLﺃﻭ . ( OCX
ﺘﺘﻤﻴﺯ ﺩﻟﻔﻲ ﻋﻥ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻷﺨﺭﻯ ﺒﺄﻨﻪ ﻻ ﺤﺎﺠﺔ ﻹﻀﺎﻓﺔ ﻤﻠﻔﺎﺕ Bplﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﺘﻭﺯﻴﻌﻪ ﺤﻴﺙ ﻴﺘﻡ ﺇﺩﺭﺍﺝ ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻓﻲ ﺍﻟﻤﻠﻑ ﺍﻟﺘﻨﻔﻴﺫﻱ .Exeﺒﻴﻨﻤﺎ ﻴﺠﺏ ﻋﻠﻴﻙ ﺇﺩﺭﺍﺝ ﻤﻠﻔﺎﺕ ﺍﻟـ .DLLﻭ Ocxﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﻓﻴﺠﻭل ﺴﻲ ﺃﻭ ﻓﻴﺠﻭل ﺒﻴﺴﻙ . ﺇﻨﺸﺎﺀ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺩﻟﻔﻲ : 1ـ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﻭﻟﻰ :ﺴﻭﻑ ﻨﺘﻌﺭﻑ ﺍﻵﻥ ﻋﻠﻰ ﺃﺴﻬل ﻁﺭﻴﻘﺔ ﻹﻨﺸﺎﺀ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺩﻟﻔﻲ : ﺴﻭﻑ ﻨﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﻋﻨﺼﺭ ﺘﺤﺭﻴﺭ ﻻ ﻴﻘﺒل ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ ﻭﻟﻌﻤل ﺫﻟﻙ :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ Editﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ : OnKeyPress ;])const s= [ '1','2','3','4','5','6','7','8','9','0',char(Vk_back begin if not (key in s ) then ) key := char(VK_CAPITAL ;end ﺤﺩﺩ ﺒﻌﺩﻫﺎ ﺍﻟﻌﻨﺼﺭ Edit1ﻭﺍﺨﺘﺭ Component Æ Create Component Templateﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺃﻜﺘﺏ ﻓﻲ ﺍﻟﺤﻘل Component nameﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ) ( TNumEditﻭﺤﺩﺩ ﻓﻲ ﺍﻟﺤﻘل Palette Pageﺍﺴﻡ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺃﻥ ﻴﻅﻬﺭ ﻓﻴﻬﺎ ﺍﻟﻌﻨﺼﺭ ) ﺒﺈﻤﻜﺎﻨﻙ ﺃﻥ ﺘﻜﺘﺏ ﺍﺴﻡ ﺼﻔﺤﺔ ﺠﺩﻴﺩﺓ ( ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﺘﺤﺩﻴﺩ ﺃﻴﻘﻭﻨﺔ ﻟﻠﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . Change
ﺍﻀﻐﻁ ﻋﻠﻰ Okﺴﻴﻅﻬﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻲ ﺤﺩﺩﺘﻬﺎ . ﻴﻤﻜﻨﻙ ﻋﻨﺩﺌ ٍﺫ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻓﻲ ﺠﻤﻴﻊ ﺒﺭﺍﻤﺠﻙ ﺍﻟﻼﺤﻘﺔ .
2ـ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ :ﺴﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﻨﻔﺱ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺒﻁﺭﻴﻕ ﺃﻓﻀل .
ﺃﻏﻠﻕ ﺠﻤﻴﻊ ﺍﻟﻭﺤﺩﺍﺕ ﻓﻲ ﺩﻟﻔﻲ File Æ Close All 161
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: Component Æ New Component ﺍﺨﺘﺭ ﺍﻷﻤﺭ : ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ
TCustemEdit ﺍﻟﻘﻴﻤﺔAncestor type ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻼﺌﺤﺔ . ﻭﻫﻲ ﺍﻟﻌﻨﺼﺭ ﺍﻷﺏ ﺍﻟﺫﻱ ﺴﻴﺭﺙ ﻋﻨﺼﺭﻨﺎ ﺍﻟﺠﺩﻴﺩ ﺨﻭﺍﺼﻪ ﺍﻜﺘﺏ ﺍﺴﻡ ﺍﻟﺼﻨﻑ ﺍﻟﺫﻱ ﺘﺭﻴﺩﻩClass Name ﻓﻲ ﺍﻟﺤﻘل ﻟﻌﻨﺼﺭﻙ ﺃﻥ TMyNumberEdit ( T ) ﻴﺠﺏ ﺃﻥ ﻴﺒﺩﺃ ﺒﺤﺭﻑ
ﺍﻜﺘﺏ ﺍﺴﻡ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺃﻥPalette Page ﻓﻲ ﺍﻟﺤﻘل . ( MyComponent ) ﻴﻅﻬﺭ ﺒﻬﺎ ﺍﻟﻌﻨﺼﺭ : ﺒﺎﻟﺸﻜل ﺍﻟﺘﺎﻟﻲMyNumEdit ﺴﺘﻅﻬﺭ ﺍﻟﻭﺤﺩﺓok ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ unit MyNumberEdit; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls; type T MyNumberEdit = class(TCustomEdit) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [MyNumberEdit]); end; end. : ﺴﻨﺸﺭﺡ ﻜل ﺴﻁﺭ ﻤﻥ ﻫﺫﻩ ﺍﻷﺴﻁﺭ ﺒﺸﻜل ﻤﺒﺴﻁ ﻤﻥTMyNumEdit ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﻌﺭﻑ ﻨﻭﻉ ﺠﺩﻴﺩ ﺒﺎﺴﻡTMyNumberEdit = class(TCustomEdit) ـ1 TEdit ﻫﻭ ﺍﻟﻨﻭﻉTCustomEdit ) ﺍﻟﻨﻭﻉTEdit ﻭﻫﻭ ﺍﻟﻨﻭﻉ ﺍﻟﻤﺸﺘﻕ ﻤﻨﻪ ﺍﻟﻨﻭﻉTCustomEdit ﺍﻟﻨﻭﻉ . ( ﺤﻴﺙ ﺴﻨﻘﻭﻡ ﺒﺈﺩﺨﺎل ﺍﻷﺤﺩﺍﺙ ﻭﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻁﻠﻭﺒﺔ ﺒﻌﺩ ﻗﻠﻴل، ﻭﻟﻜﻥ ﺒﺩﻭﻥ ﺃﻱ ﺨﺎﺼﺔ ﺃﻭ ﺤﺩﺙ 162
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ : protectedﻴﺘﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﺘﻌﺭﻴﻑ ﺒﻌﺽ ﺍﻟﻤﺘﺤﻭﻻﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ ﻭﺍﻟﺨﺼﺎﺌﺹ ﻭﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻬﺎ ﻤﻥ ﻗﺒل ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ ) ﺍﻟﻭﺤﺩﺓ ﺍﻟﻤﻌﺭﻓﺔ ﺒﻬﺎ ( ﻭﻤﻥ ﺃﻱ ﻭﺤﺩﺓ ﻤﺸﺘﻘﺔ ) ﻤﻭﺭﻭﺜﺔ ( ﻤﻥ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ .ﺃﻱ ﺃﻨﻨﺎ ﺇﺫﺍ ﻋﺭﻓﻨﺎ ﻤﺘﺤﻭل ﻓﻲ ﻫﺫﻩ ﺍﻟﻤﻨﻁﻘﺔ ﻓﺈﻨﻨﺎ ﻴﻤﻜﻨﻨﺎ ﻗﺭﺍﺀﺓ ﻗﻴﻤﺘﻪ ﻭﺍﻟﻜﺘﺎﺒﺔ ﻓﻴﻪ ﻀﻤﻥ ﺃﻱ ﻭﺤﺩﺓ ﺘﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻭﺤﺩﺓ
.MyNumberEdit
3ـ : publishedﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻟﺘﻌﺭﻴﻑ ﺍﻟﺨﺼﺎﺌﺹ ﻭﻫﻭ ﻴﺸﺒﻪ ﺍﻟﻘﺴﻡ Publicﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺃﻥ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻌﺭﻓﺔ ﻫﻨﺎ ﺴﺘﻅﻬﺭ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ) ( Object inspectorﻭﻓﻲ ﺼﻔﺤﺔ ... Eventﺴﻴﺘﻀﺢ ﻋﻤﻠﻪ ﻓﻴﻤﺎ ﺒﻌﺩ .
4ـ : procedure Register ﻤﻬﻤﺔ ﺍﻹﺠﺭﺍﺀ ﻫﻲ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻹﺠﺭﺍﺀ ;)] RegisterComponents('Standard', [MyNumberEditﻭﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﺈﻅﻬﺎﺭ ﺍﻟﻌﻨﺼﺭ MyNumberEditﻓﻲ ﺍﻟﺼﻔﺤﺔ Standardﻤﻥ ﺼﻔﺤﺎﺕ ﺍﻟﻌﻨﺎﺼﺭ .
ﺍﻵﻥ ﺴﻭﻑ ﻨﺒﺩﺃ ﺒﺈﻀﺎﻓﺔ ﺒﻌﺽ ﺍﻟﺨﺎﺼﺔ Aboutﻭﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ ﺼﻔﺤﺔ ﺍﻟﺨﻭﺍﺹ ﺍﻟﺨﺎﺼﺔ Aboutﻭﻓﻴﻬﺎ ﺍﺴﻡ ﻤﺒﺭﻤﺞ ﺍﻟﻌﻨﺼﺭ .
ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﻘﺴﻡ : Public ;constructor Create(AOwner: TComponent); override ﺤﻴﺙ Constructorﻫﻭ ﻤﻨﻬﺞ ﺨﺎﺹ ﻴﺴﺘﺨﺩﻡ ﻤﻊ Createﻓﻘﻁ ﻭﻴﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻌﻨﺼﺭ ﻭﺘﻬﻴﺌﺘﻪ ﺃﻱ ﺇﻋﻁﺎﺀﻩ ﺍﻟﻘﻴﻡ ﻻ ﻤﻥ . Procedure ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻭﻴﻤﻜﻥ ﺍﻋﺘﺒﺎﺭﻩ ﺇﺠﺭﺍﺀ ﺘﺴﺘﺨﺩﻡ ﻓﻴﻪ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻭﺯﺓ Constructorﺒﺩ ﹰ ـ ﺃﻀﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Publishedﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;Property About : string Read FAbout Write Fabout ﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺘﺤﺭﻴﺭ ) ﻤﺅﺸﺭ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ( ﻋﻨﺩ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺎﺘﻴﺢ Ctrl + Shift + Cﺴﻴﻀﺎﻑ ﻋﻨﺩﻫﺎ ﺍﻟﻤﺘﺤﻭل FAboutﻤﻥ ﺍﻟﻨﻭﻉ Stringﺇﻟﻰ ﺍﻟﻘﺴﻡ . private
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﻌﺭﻴﻑ ﺨﺎﺼﺔ ﻤﻥ ﺍﺴﻤﻬﺎ Aboutﻤﻥ ﺍﻟﻨﻭﻉ Stringﺘﺄﺨﺫ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻗﻴﻤﺘﻬﺎ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ Read FAboutﻭﺘﺄﺨﺫ ﻗﻴﻤﺘﻬﺎ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ . Write FAbout ـ ﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺘﺤﺭﻴﺭ ﻋﻠﻰ ﺍﻟﻤﻨﻬﺞ Constructorﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺎﺘﻴﺢ Ctrl + Shift + Cﺴﻴﻀﺎﻑ ﻋﻨﺩﻫﺎ ﻫﺫﺍ ﺍﻟﻤﻨﻬﺞ ﺇﻟﻰ ﺍﻟﻘﺴﻡ Implementationﻭﺍﻟﺫﻱ ﺴﻴﺒﺩﺃ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ Inheritedﻭﺍﻟﺘﻲ ﺘﺠﻌل ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻴﺭﺙ ﺠﻤﻴﻊ
ﺨﻭﺍﺹ ﺍﻟﺘﺎﺒﻊ ﺍﻷﺼل ﺍﻟﻤﻌﺭﻑ ﻓﻲ ﺍﻟﻭﺤﺩﺓ . TCustomEdit ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻌﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ : Inherited
;'FABout := 'M.Khaled Nasser Agha ﻗﻡ ﺒﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﺎﺴﻡ . MyNumberEdit ـ ﺍﻓﺘﺢ ﺍﻟﻨﺎﻓﺫﺓ Component Æ install componentﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺸﺭﻭﺤﺔ ﻓﻲ ﺍﻟﻔﻘﺭﺓ ﺍﻟﺜﺎﻟﺜـﺔ ﻤـﻥ ﻁـﺭﻕ ﺘﺭﻜﻴﺏ ﻋﻨﺼﺭ ﺠﺩﻴﺩ ﻋﻠﻰ ﻜل ﺤﺎل ﺍﻓـﺘﺢ ﺍﻟـﺼﻔﺤﺔ into new packageﻭﺍﻜﺘـﺏ Editnumberﻓـﻲ ﺍﻟﺤﻘـل Package File Nameﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ okﺴﺘﻔﺘﺢ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺠﺩﻴﺩﺓ ﺍﻀﻐﻁ ﻓﻴﻬﺎ ﻋﻠﻰ ﺃﺤﺩ ﺍﻟﺯﺭﻴﻥ Installﺃﻭ 163
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
، Compileﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﺁﺨﺭ ﺍﻟﺼﻔﺤﺔ ) Standardﺇﺫﺍ ﻜﻨﺕ ﻗﺩ ﻜﺘﺒﺕ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟـﺴﺎﺒﻘﺔ ﺒـﺩﻭﻥ ﺃﺨﻁﺎﺀ ( ﺃﻏﻠﻕ ﻨﺎﻓﺫﺓ ﻭﺍﺤﻔﻅ ﺍﻟﻤﻠﻔﺎﺕ ﺇﺫﺍ ﻁﹲﻠﺏ ﺫﻟﻙ .
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﻀﻊ ﻋﻠﻴﻪ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﺴﺘﺠﺩ ﺃﻥ ﺃﻭل ﺨﺎﺼﺔ ﻟﻪ ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻫﻲ ﺍﻟﺨﺎﺼـﺔ About ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺃﻥ ﺍﻟﺨﻭﺍﺹ ﻤﺨﺘﺼﺭﺓ ﺒﺸﻜل ﻜﺒﻴﺭ ،ﺍﻓﺘﺢ ﺍﻟﺼﻔﺤﺔ Eventsﻭﻻﺤﻅ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﻱ ﺤﺩﺙ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ . ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﺈﻀﺎﻓﺔ ﺍﻟﺨﺎﺼﺔ Numﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺤﻴﺙ ﺴﻴﺘﻡ ﺇﺩﺨﺎل ﺭﻗﻡ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ﻭ ﺍﻟﺤﺼﻭل ﻤﻨﻪ ﻋﻠﻰ ﺭﻗﻡ ﻤـﻥ ﺨﻼل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ) ﺴﺘﺤل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻤﺤل ﺍﻟﺨﺎﺼﺔ Textﻓﻲ ﺍﻟﻌﻨﺼﺭ ﻤﻥ ﺍﻟﻨﻭﻉ . ( TEdit
ﺃﻏﻠﻕ ﺍﻵﻥ ﺠﻤﻴﻊ ﺍﻟﻨﻭﺍﻓﺫ ﻭﻤﻥ ﺍﻟﻘﺎﺌﻤـﺔ File Æ ReOpenﺍﺨﺘـﺭ Editnumber.dpkﺴﺘﻅﻬﺭ ﺍﻵﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ،ﺍﻀﻐﻁ ﻤـﺭﺘﻴﻥ MyNumberEdit.pasﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ ﻓـﻲ ﻤﺤـﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ،ﻨﺴﺘﻁﻴﻊ ﺍﻵﻥ ﺇﺠﺭﺍﺀ ﺍﻟﺘﻌﺩﻴﻼﺕ ﺍﻟﺘﻲ ﻨﺭﻴﺩ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ
ﻭﻤﻥ ﺜﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Compileﻟﻠﺘﻨﻘل ﺍﻟﺘﻌﺩﻴﻼﺕ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ
TMyNumberEditﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺍﻟﺼﻔﺤﺔ ... Standard ﺃﻀﻑ ﺍﻵﻥ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﺇﻟﻰ ﺍﻟﻘﺴﻡ . Published
;property Num: Extended read FNum write SetFNum ﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺘﺤﺭﻴﺭ ﻋﻨﺩ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﻭﺍﻀﻐﻁ ﻋﻠﻰ Ctrl + Shift + Cﺴﻴﺘﻡ ﻋﻨﺩﻫﺎ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﺤﻭل FNumﻓﻲ ﺍﻟﻘﺴﻡ Privateﻭﺘﻌﺭﻴﻑ ﺍﻹﺠﺭﺍﺀ SetNumﺃﻴﻀﹰﺎ ،ﻭﻓﻲ ﺍﻟﻘﺴﻡ Implementationﺴﻴﺘﻡ ﺇﻀﺎﻓﺔ ﺠـﺴﻡ ﺍﻹﺠـﺭﺍﺀ
ﺃﻀﻑ ﺇﻟﻴﻬﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : SetNumﻭﺴﺘﻭﺠﺩ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ FNum := Value : ;)Text := floattostr(value ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﻭﻋﺩ ﺇﻟﻰ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺴﺎﺒﻘﺔ ) ﺴﺘﻜﻭﻥ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺨﻠﻑ ﻋﺎﺩﺓ ( ﺍﻀﻐﻁ ﻤﻨﻬﺎ ﻋﻠﻰ ﺍﻟـﺯﺭ Compileﺜـﻡ ﺃﻏﻠﻕ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻭﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ MyNumberEditﻤﻥ ﺍﻟﺼﻔﺤﺔ Standardﺴـﺘﻼﺤﻅ ﺃﻥ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺨﺎﺼﺔ Numﺃﺩﺨل ﻓﻴﻬﺎ ﺃﻱ ﻗﻴﻤﺔ ﻋﺩﺩﻴﺔ ﻟﺘﻅﻬﺭ ﻓﻲ ﺍﻟﻌﻨﺼﺭ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ ،ﺃﺩﺨل ﻤﺠﻤﻭﻋﺔ ﻤـﻥ ﺍﻷﺤﺭﻑ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Enterﺴﺘﻼﺤﻅ ﻋﺩﻡ ﻗﺒﻭل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻹﺩﺨﺎل ﺍﻷﺤﺭﻑ . ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺃﺩﺨل ﺤﺭﻭﻑ ﻓﻲ ﺍﻟﻌﻨﺼﺭ ﺴﺘﻼﺤﻅ ﻗﺒﻭل ﺍﻟﻌﻨﺼﺭ ﻟﻬﺎ ﻭﻫﺫﺍ ﻴﺩﻓﻌﻨﺎ ﺇﻟﻰ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺘﺎﻟﻴـﺔ ﻓـﻲ ﺘﻁـﻭﻴﺭ
ﺍﻟﻌﻨﺼﺭ ﻭﻫﻲ ﻤﻨﻊ ﺇﺩﺨﺎل ﺍﻷﺤﺭﻑ ﺇﻟﻴﻪ .
ﺍﻓﺘﺢ ﺍﻟﺤﺯﻤﺔ EditNumber.dpkﺜﻡ ﺍﻓﺘﺢ ﺍﻟﻭﺤﺩﺓ . MyNumberEdit.pas ﺴﻭﻑ ﻨﻀﻴﻑ ﺍﻟﺘﺎﺒﻊ KeyPressﺇﻟﻰ ﻭﺤﺩﺘﻨﺎ ﻭﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﻤﻌﺭﻑ ﻓﻲ ﺍﻟﻭﺤﺩﺓ TCustomEditﻭﻫﻭ ﺍﻟﻤـﺴﺅﻭل ﻋـﻥ ﺍﺴﺘﻘﺒﺎل ﺃﺤﺭﻑ ﻟﻭﺤﺩﺓ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻟﺫﻟﻙ ﺃﻀﻑ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ : Public ;procedure KeyPress(var Key: Char); override ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺎﺘﻴﺢ Ctrl + Shift + Cﻟﻴﻀﺎﻑ ﺠﺴﻡ ﺍﻹﺠﺭﺍﺀ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻭﺘﻀﺎﻑ ﻓﻴـﻪ ﺍﻟﺘﻌﻠﻴﻤـﺔ Inheritedﻟﻜـﻲ ﻴﻭﺭﺙ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻹﺠﺭﺍﺀ KeyPressﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﻭﺤﺩﺓ ﺍﻷﺏ ﺍﻟﻤﻌﺭﻑ ﻓﻴﻬﺎ TCustomEdit
ﺃﻀﻑ ﺍﻵﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻭﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ Implementationﻤﺒﺎﺸﺭﺓ : 164
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
const NumberChar = [ '1','2','3','4','5','6','7','8','9','0','.']; : Inherited ﻭﺒﻌﺩ ﺍﻟﺘﻌﻠﻴﻤﺔKeyPress ﻭﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺠﺴﻡ ﺍﻹﺠﺭﺍﺀ If not (key in NumberChar ) Then key := char(VK_Capital); . ﺜﻡ ﺃﻏﻠﻘﻬﺎEditNumber.dpk ﻓﻲ ﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﻤﻭﻋﺔCompile ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭﻨﺎ ﺍﻟﺠﺩﻴﺩ ﻭﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻹﻀـﺎﻓﺔEdit ﺒﻘﻴﺕ ﻤﺸﻜﻠﺔ ﻭﺤﻴﺩﺓ ﻓﻲ ﻋﻨﺼﺭﻨﺎ ﻭﻫﻲ ﻋﺩﻡ ﻭﺠﻭﺩ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻌﻨﺼﺭ ﻭﺃﻜﺘﺏ ﺃﺴـﻤﺎﺀ ﺍﻟﺨـﻭﺍﺹ ﻭﺍﻷﺤـﺩﺍﺙ ﺍﻟﺘـﻲEditnumber.dbk ﺇﻟﻰ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺤﺩﺍﺙ ﻭﻹﻀﺎﻓﺘﻬﺎ ﺍﻓﺘﺢ ﺍﻟﺤﺯﻤﺔ : ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜلPublished ﺘﺤﺘﺎﺠﻬﺎ ﻓﻲ ﻋﻨﺼﺭﻙ ﻓﻲ ﺍﻟﻘﺴﻡ
property BiDiMode; property CharCase; property Color; property OnEnter; property OnKeyPress; property OnKeyDown; property OnKeyUp; ﺜﻡ ﺃﻀﻑ ﻋﻨﺼﺭﻨﺎ ﺍﻟﺠﺩﻴﺩ ﺇﻟﻰ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﻟـﺘﻼﺤﻅ ﻭﺠـﻭﺩ ﻫـﺫﻩCompile ﻭﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﻌﺩﻫﺎ ﻭﺍﻀﻐﻁ ﻋﻠﻰ . ﺍﻟﺨﻭﺍﺹ ﻓﻴﻪ
: MynumberEdit.pas ﻭﻓﻴﻤﺎ ﻴﻠﻲ ﺍﻟﻨﺹ ﺍﻟﻜﺎﻤل ﻟﻠﻭﺤﺩﺓ unit MyNumberEdit; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls; type TMyNumberEdit = class(TCustomEdit) private FAbout: string; FNum: Extended; procedure SetFNum(const Value: Extended); { Private declarations } protected { Protected declarations } public constructor Create(AOwner: TComponent); override; procedure KeyPress(var Key: Char); override; { Public declarations } published Property About : string Read FAbout Write Fabout; property Num: Extended read FNum write SetFNum; property BiDiMode; property CharCase; property Color; 165
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
property Enabled; property Font; property ParentBiDiMode; property ParentColor; property ParentCtl3D; property ParentFont; property PasswordChar; property ReadOnly; property ShowHint; property TabOrder; property TabStop; property Visible; property OnChange; property OnClick; property OnDblClick; property OnEnter; property OnExit; property OnKeyDown; property OnKeyUp; { Published declarations } end; procedure Register; const NumberChar = [ '1','2','3','4','5','6','7','8','9','0','.']; implementation procedure Register; begin RegisterComponents('Standard', [TMyNumberEdit]); end; { TMyNumberEdit } constructor TMyNumberEdit.Create(AOwner: TComponent); begin inherited; FABout := 'M.Khaled Nasser Agha'; end; procedure TMyNumberEdit.KeyPress(var Key: Char); begin inherited; if not (key in NumberChar ) then key := char(VK_Capital); end; procedure TMyNumberEdit.SetFNum(const Value: Extended); begin FNum := Value; Text := floattostr(value); end; end. 166
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 25 ﺍﻟﺴﺤﺏ ﻭﺍﻹﻓﻼﺕ : Drag and Drop : 1ـ ﻓﻬﻡ ﺍﻟﻭﺴﻴﻁ : Sender ﻻ ﺒﺩ ﺃﻨﻙ ﻻﺤﻅﺕ ﺃﻥ ﺍﻟﻭﺴﻴﻁ Senderﻴﺩﺨل ﻓﻲ ﺠﻤﻴﻊ ﻤﻌﺎﻟﺠﺎﺕ ﺃﺤﺩﺍﺙ ﺍﻟﺼﻔﺤﺔ Eventﻓﻔﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ
ﺍﻟﺯﺭ ﻴﻅﻬﺭ ﺍﻹﺠﺭﺍﺀ ﺍﻟﺘﺎﻟﻲ ﻭﺍﻟﺫﻱ ﻟﻪ ﻭﺴﻴﻁ ﻭﺍﺤﺩ ﻫﻭ Senderﻤﻥ ﺍﻟﻨﻭﻉ . TObject ;)procedure TForm1.Button1Click(Sender: TObject ﻤﻬﻤﺔ ﻫﺫﺍ ﺍﻟﻭﺴﻴﻁ ﻫﻲ ﺇﺭﺠﺎﻉ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻗﺎﻡ ﺒﺎﻟﺤﺩﺙ ﺃﻱ ﺃﻥ ﻗﻴﻤﺘﻪ ﻋﻥ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟـﺯﺭ Button1ﻫـﻲ . Button1
ﻭﻟﻔﻬﻡ ﺃﻋﻤﻕ ﻟﻬﺫﺍ ﺍﻟﻭﺴﻴﻁ ﻨﻔﺫ ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ : ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﻴﻥ : Button 1ـ ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Button1ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;)' If sender = Button1 Then Showmessage ( ' You Click On Button1 ;)' If sender = Button2 Then Showmessage ( ' You Click on Button2 2ـ ﺤﺩﺩ ﺍﻟﺯﺭ Button2ﺜﻡ ﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺴﻬﻡ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﺨﺎﺼﺔ OnClickﻭﺍﺨﺘـﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ . Button1Click ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭﻴﻥ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ . 2ـ ﺍﻟﺴﺤﺏ ﻭﺍﻹﻓﻼﺕ :
ﻤﺜﺎل : 1ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻤﺸﺭﻭﻉ ﺠﺩﻴﺩ ﺜﻼﺜﺔ ﻋﻨﺎﺼﺭ Labelﻭﻋﻨـﺼﺭ : ListBoxﺴـﻨﻘﻭﻡ ﺍﻵﻥ ﺒﻜﺘﺎﺒـﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﺘﻲ ﺘﻤﻜﻨﻨﺎ ﻤﻥ ﺴﺤﺏ ﺍﻟﻌﻨﺎﺼﺭ Labelﻭﺇﻓﻼﺘﻬﺎ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ ListBoxﺒﺤﻴـﺙ ﻴـﺼﺒﺢ ﻟـﻭﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ LIstBox1ﺒﻠﻭﻥ ﺍﻟﻌﻨﺼﺭ Labelﺍﻟﻤﺴﺤﻭﺏ ،ﻟﺫﻟﻙ ﺃﻋﻁ ﻜل ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ Labelﻟـﻭﻥ ﻤﺨﺘﻠـﻑ ﻭﺃﻋﻁﻬﻡ ﺠﻤﻴﻌﹰﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ DragModeﺍﻟﻘﻴﻤﺔ . dmAutomatic ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnDragOverﻟﻠﻌﻨﺼﺭ ListBox1ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;Accept := Source is Tlabel ﻴﺤﻭﻱ ﺍﻹﺠﺭﺍﺀ ListBox1DragOverﺍﻟﻭﺴﻁﺎﺀ ﺍﻟﺘﺎﻟﻴﺔ : : Senderﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻴﺴﺘﺩﻋﻲ ﺍﻹﺠﺭﺍﺀ ﻭﻫﻭ ﻫﻨﺎ ﺍﻟﻌﻨﺼﺭ . ListBox1
: Sourceﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻴﺘﻡ ﺴﺤﺒﻪ ﻭﻫﻭ ﺃﺤﺩ ﺍﻟﻌﻨﺎﺼﺭ Labelﻓﻲ ﻤﺜﺎﻟﻨﺎ . : X,Yﺇﺤﺩﺍﺜﻴﺎﺕ ﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ . : Stateﻴﺤﺩﺩ ﻁﺭﻴﻘﺔ ﺘﺤﺭﻙ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ .
: Acceptﻋﻨﺩﻤﺎ ﻴﺄﺨﺫ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﺍﻟﻘﻴﻤﺔ Trueﻓﺈﻥ ﺍﻟﻌﻨﺼﺭ ﺴﻭﻑ ﻴﻜﻭﻥ ﺠﺎﻫﺯﹰﺍ ﻹﻓﻼﺕ ﺍﻟﻌﻨﺼﺭ ﻓﻭﻗﻪ ) ﺴـﻴﺘﻐﻴﺭ ﺸﻜل ﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﻟﻴﻅﻬﺭ ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ ﻴﺒﻴﻥ ﺃﻥ ﺍﻹﻓﻼﺕ ﻤﻘﺒﻭل (ﻭﺇﻻ ﻓﺈﻥ ﺍﻟﻌﻨﺼﺭ ﺴﻴﺭﻓﺽ ﺇﻓﻼﺕ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺴﺤﻭﺏ
ﻓﻭﻗﻪ .
167
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: Source Is Tlabelﺘﻌﻴﺩ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺘﺤﻭل Sourceﻤﻥ ﺍﻟﻨﻭﻉ . Tlabel ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnDragDropﻟﻨﻔﺱ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; ( sender as Tlistbox ).color := (Source as Tlabel ).color ﺍﻟﺘﻌﻠﻴﻤﺔ Sender As TlistBoxﺘﺴﻤﺢ ﻟﻨﺎ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻭﺴﻴﻁ Senderﻜﻤﺎ ﻨﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻌﻨﺼﺭ Tlistboxﻨﻔﺴﻪ .
ﻜﺫﻟﻙ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻌﻨﺼﺭ . Source As Tlabel ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺴﺤﺏ ﺃﺤﺩ ﺍﻟﻌﻨﺎﺼﺭ Labelﻭﺃﺘﺭﻜﻪ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ ListBox1ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ . ﻤﺜﺎل : 2
ﺃﻀﻑ ﻋﻨﺼﺭ ﺼﻭﺭﺓ Imageﺇﻟﻰ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭﺍﺠﻌﻠﻪ ﻴﻅﻬﺭ ﺼﻭﺭﺓ ﻤﺎ ﻋﻥ ﻁﺭﻴـﻕ ﺍﻟﺨﺎﺼـﺔ ،Pictureﺃﻋـﻁ ﺍﻟﺨﺎﺼﺔ DragModeﺍﻟﻘﻴﻤﺔ dmAutomaticﺴﻨﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻼﺯﻤﺔ ﺍﻟﺘﻲ ﺘﻤﻜﻨﻨﺎ ﻤﻥ ﻭﻀﻊ ﺍﻟﻌﻨﺼﺭ Image1
ﻓﻲ ﻤﻜﺎﻥ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ .
ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnDragOverﻟﻠﻨﻤﻭﺫﺝ Form1ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;accept := Source is Timage ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﺩﺙ OnDragDropﻟﻠﻨﻤﻭﺫﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;(Source as Timage).Top := y ;(Source as Timage).Left := X ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺤﺭﻙ ﺍﻟﻌﻨﺼﺭ Image1ﻭﻻﺤﻅ ﺘﻨﻘﻠﻪ ﻓﻭﻕ ﺃﻱ ﻤﻜﺎﻥ ﻤﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻻﺤﻅ ﺃﻴﻀﹰﺎ ﺃﻨﻪ ﻻ ﻴﻤﻜـﻥ ﺇﻓﻼﺘـﻪ
ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ .ListBox
168
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺭﺴﻡ ﻓﻲ ﺩﻟﻔﻲ : ﻴﺘﻡ ﺍﻟﺭﺴﻡ ﻓﻲ ﺩﻟﻔﻲ ﻓﻭﻕ ﻋﻨﺼﺭ ﺍﻟﻜﻨﻔﺎ Canvasﻭﻫﻭ ﺃﺤﺩ ﺨﺼﺎﺌﺹ ﺍﻟﻌﻨﺼﺭ TFormﻭﺍﻟﻌﻨﺼﺭ Timageﻭﻴﻤﻜﻨﻨﺎ ﺭﺴﻡ ﻋﺩﺩ ﻤﻥ ﺍﻷﺸﻜﺎل ﺍﻟﻬﻨﺩﺴﻴﺔ ﺒﻭﺍﺴﻁﺔ ﺘﻭﺍﺒﻊ ﻤﻌﺭﻓﺔ ﻓﻭﻕ ﻋﻨﺼﺭ ﺍﻟﻜﻨﻔﺎ .
ﺭﺴﻡ ﻤﺴﺘﻘﻴﻡ :
ﻟﺭﺴﻡ ﻤﺴﺘﻘﻴﻡ ﻴﺠﺏ ﺘﺤﺩﻴﺩ ﻨﻘﻁﺔ ﺍﻟﺒﺩﺍﻴﺔ ﻭﻨﻘﻁﺔ ﻟﻠﻨﻬﺎﻴﺔ ﺃ ـ ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﻨﻘﻁﺔ ﺍﻟﺒﺩﺍﻴﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ ) Form1.Canvas.MoveTo(x,yﺤﻴﺙ x,yﻫﻤﺎ ﺇﺤﺩﺍﺜﻴﺎﺕ ﻨﻘﻁﺔ ﺍﻟﺒﺩﺍﻴﺔ ،ﺇﺫﺍ ﺃﺭﺩﺕ ﻤﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻥ ﻴﺤﺩﺩ ﻨﻘﻁﺔ ﺍﻟﺒﺩﺍﻴﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻕ ﺍﻟﻨﻤﻭﺫﺝ ﻀـﻊ ﻫـﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseDownﻟﻠﻨﻤﻭﺫﺝ . Form1
ﺏ ـ ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﻨﻘﻁﺔ ﺍﻟﻨﻬﺎﻴﺔ ﻟﻠﻤﺴﺘﻘﻴﻡ ﻀﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺭﺴﻡ ﻤﺴﺘﻘﻴﻡ ﻭﻫﻲ ) Form1.Canvas.LineTo(x,yﺤﻴﺙ x,y ﻫﻤﺎ ﺇﺤﺩﺍﺜﻴﺎﺕ ﻨﻘﻁﺔ ﺍﻟﻨﻬﺎﻴﺔ ﻟﻤﺴﺘﻘﻴﻡ ،ﻭﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﻴﺘﻡ ﺭﺴﻡ ﺍﻟﻤﺴﺘﻘﻴﻡ ﻓﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﻴﺤﺭﺭ ﻓﻴـﻪ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻀﻊ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseUpﻟﻠﻨﻤﻭﺫﺝ . Form1 ﻨﻔﺫ ﺍﻵﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﻭﺃﺒﻘﻪ ﻤﻀﻐﻭﻁﹰﺎ ﺜﻡ ﺤﺭﻙ ﺍﻟﻔﺄﺭﺓ ﺇﻟﻰ ﻤﻜﺎﻥ ﺠﺩﻴﺩ ﻭﺤـﺭﺭ ﺯﺭ ﺍﻟﻔـﺄﺭﺓ ، ﺴﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺨﻁ ﻤﺴﺘﻘﻴﻡ ﺒﻴﻥ ﻨﻘﻁﺘﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻭﺍﻟﻨﻬﺎﻴﺔ .
ـ ﻹﻅﻬﺎﺭ ﺍﻟﺨﻁ ﺃﺜﻨﺎﺀ ﺘﺤﺭﻴﻙ ﺍﻟﻔﺄﺭﺓ ﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻀﻤﻥ ﺍﻟﺤﺩﺙ OnMouseMoveﻭﺍﻟـﺫﻱ ﻴﺤـﺩﺙ ﺃﺜﻨـﺎﺀ
ﺘﺤﺭﻴﻙ ﺍﻟﻔﺄﺭﺓ : ;)Form1.Canvas.LineTo(x,y ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻟﺭﺴﻡ ﻓﻭﻕ ﺍﻟﻨﺎﻓﺫﺓ ﻋﻨﺩ ﺘﺤﺭﻴﻙ ﺍﻟﻔﺄﺭﺓ ،ﻭﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻟﺭﺴﻡ ﻓﻘﻁ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺯﺭ ﺍﻟﻔـﺄﺭﺓ ﻤـﻀﻐﻭﻁﹰﺎ ﻴﺠﺏ ﺇﻀﺎﻓﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ: ﺃ ـ ﻋﺩل ﺍﻟﻘﺴﻡ Varﻟﻠﻭﺤﺩﺓ ﺒﺤﻴﺙ ﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل : var ;Form1: TForm1; Drawing : boolean = false ﺏ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseDownﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;Drawing := True ;)Canvas.MoveTo(x,y ﺝ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseMoveﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;)if Drawing Then Form1.Canvas.LineTo(x,y ﺩ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseUpﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;Drawing := false ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻭﺍﺭﺴﻡ ﺍﻟﺨﻁ . ﺇﻥ ﻤﺸﻜﻠﺔ ﺍﻟﺤﺩﺙ OnMouseMoveﻫﻭ ﺃﻨﻪ ﻴﺭﺴﻡ ﺨﻁ ﻤﻨﺤﻨﻲ ﻭﻻ ﻴﺭﺴﻡ ﻤﺴﺘﻘﻴﻡ ﺒﻴﻥ ﻨﻘﻁﺘﻴﻥ ﻴﺤـﺩﺩﻫﻤﺎ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﻭﻟﺫﻟﻙ ﻨﻀﻴﻑ ﻤﺘﺤﻭل ﺠﺩﻴﺩ ﻋﻠﻰ ﺍﻟﻭﺤﺩﺓ ﻴﻘﻭﻡ ﺒﺤﻔﻅ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻫﺫﺍ ﺍﻟﻤﺘﺤـﻭل ﻤـﻥ ﺍﻟﻨـﻭﻉ
TPointﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺠل ﻴﺤﻭﻱ ﻤﺘﺤﻭﻟﻴﻥ X,yﻤﻥ ﺍﻟﻨﻭﻉ Integerﻴﺨﺯﻥ ﻓﻴﻬﻤﺎ ﺇﺤﺩﺍﺜﻴﺎﺕ ﺍﻟﻨﻘﻁﺔ . ﺃ ـ ﺃﻀﻑ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﺤﻭل ﻋﻠﻰ ﺍﻟﻘﺴﻡ privateﻜﻤﺎ ﻴﻠﻲ :
;Origin : TPoint 169
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺏ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseDownﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;)Drawing := True; Canvas.MoveTo(x,y ;)Origin := point(x,y ﺝ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseMoveﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : If Drawing then Begin ;)Canvas.MoveTo(origin.X,origin.y) ; Form1.Canvas.LineTo(x,y ;end ﺩ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseUpﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : ;)Canvas.MoveTo(origin.X,origin.Y ;)canvas.LineTo(x,y ;Drawing := false ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﻭﺤﺭﻜﻬﺎ ﺴﻴﺘﻡ ﺭﺴﻡ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﺴﺘﻘﻴﻤﺎﺕ ﻤﻥ ﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻀﻐﻁﺕ ﻋﻠﻴﻬﺎ ﺇﻟـﻰ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻴﺘﺤﺭﻙ ﻤﺅﺸﺭ ﺍﻟﻔﺄﺭﺓ ﻓﻭﻗﻬﺎ ،ﻭﻟﻜﻨﻨﺎ ﻨﺭﻴﺩ ﻓﻘﻁ ﺃﻥ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﻨﻬﺎﻴـﺔ ﺍﻟﻤـﺴﺘﻘﻴﻡ ﺍﻟـﺫﻱ ﻴﺭﺴـﻤﻪ ﺍﻟﺤـﺩﺙ ، OnMouseUpﻟﺫﻟﻙ ﺴﻨﻘﻭﻡ ﺒﻤﺴﺢ ﺍﻟﻤﺴﺘﻘﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺭﺴﻡ ﻓﻲ ﺍﻟﺤﺩﺙ ، OnMouseMoveﻟﻜﻥ ﻻﺘﻭﺠـﺩ ﺘﻌﻠﻴﻤـﺔ
ﻟﺤﺫﻑ ﻤﺴﺘﻘﻴﻡ ﻤﻌﻴﻥ ﻟﺫﻟﻙ ﺴﻨﻘﻭﻡ ﺒﺭﺴﻡ ﺨﻁ ﺠﺩﻴﺩ ﻓﻭﻕ ﺍﻟﺨﻁ ﺍﻟﺫﻱ ﻴﺭﺴﻡ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseMoveﻭﻟﻜﻥ ﺒﻠـﻭﻥ
ﺍﻷﺭﻀﻴﺔ ﻭﺒﻬﺫﺍ ﻴﺒﺩﻭﺍ ﻋﻤﻠﻴﹰﺎ ﺃﻥ ﺍﻟﺨﻁ ﻗﺩ ﺘﻡ ﻤﺴﺤﻪ ،ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﻭﺤﺩﺓ ﻟﺘﻐﺩﻭ ﺒﺎﻟﺸﻜل : ﺃ ـ ﺃﻀﻑ ﻋﻠﻰ ﺍﻟﻘﺴﻡ Privateﺍﻟﻤﺘﺤﻭل Moveptﻤﻥ ﺍﻟﻨﻭﻉ Tpointﺍﻟﺫﻱ ﺴﻨﺨﺯﻥ ﻓﻴﻪ ﻗﻴﻤﺔ ﺁﺨﺭ ﻨﻘﻁﺔ ﻤﺭ ﻋﻠﻴﻬﺎ ﺍﻟﺤﺩﺙ OnMoseMoveﻭﺒﺎﻟﺘﺎﻟﻲ ﻫﻲ ﻨﻔﺴﻬﺎ ﺇﺤﺩﺍﺜﻴﺎﺕ ﻨﻬﺎﻴﺔ ﺍﻟﺨﻁ ﺍﻟﺫﻱ ﺭﺴﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻫﺫﺍ ﺍﻟﺤﺩﺙ . ;Origin,Movept :Tpoint ﺏ ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﻨﻬﺎﻴﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺩﺙ ﺍﻟﺤﺩﺙ : OnMouseDown ;)Movept := Point(x,y ﺝ ـ ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseMoveﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : If Drawing then begin ;canvas.Pen.Mode := pmNotXor ; )canvas.MoveTo(origin.X,origin.y 1 ;)Canvas.LineTo(Movept.x,movept.y ; )Canvas.moveto(origin.X,origin.y 2 ;)Canvas.LineTo(x,y ;end ;)movept := point(x,y ;Canvas.Pen.Mode := pmCopy ;end ﻋﻨﺩﻤﺎ ﻏﻴﺭﻨﺎ ﺍﻟﺨﺎﺼﺔ Modeﻟﻠﻘﻠﻡ penﻭﺃﻋﻁﻴﻨﺎﻫﺎ ﺍﻟﻘﻴﻤﺔ pmNotXorﻓﺈﻨﻨﺎ ﺒﺫﻟﻙ ﻁﻠﺒﻨﺎ ﺩﻤﺞ ﺍﻟﺨﻁ ﻤﻊ ﻋﻨﺼﻭﺭﺍﺕ ﺍﻷﺭﻀﻴﺔ ﻭﺒﺫﻟﻙ ﺴﻴﺭﺴﻡ ﺍﻟﺨﻁ ﺒﻨﻔﺱ ﻟﻭﻥ ﺍﻷﺭﻀﻴﺔ ﻭﺴﻴﺒﺩﻭ ﻭﻜﺄﻨﻪ ﻤﻤﺴﻭﺡ ﻭﻗﺩ ﺃﻋﺩﻨﺎ ﺍﻟﻘﻴﻤﺔ PmCopyﻓـﻲ ﺁﺨـﺭ ﺘﻌﻠﻴﻤﺔ ﻟﻜﻲ ﻴﻜﻭﻥ ﺍﻟﻘﻠﻡ ﺠﺎﻫﺯ ﻟﺭﺴﻡ ﺍﻟﺨﻁ ﺍﻟﻨﻬﺎﺌﻲ ﻋﻨﺩﻤﺎ ﻨﺤﺭﺭ ﺯﺭ ﺍﻟﻔﺄﺭﺓ .
170
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ـ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ 1ﺘﻘﻭﻤﺎﻥ ﺒﺭﺴﻡ ﺨﻁ ﺒﻴﻥ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﺤﺩﺩﻫﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺒﻴﻥ ﺁﺨﺭ ﻨﻘﻁﺔ ﻤﺭﺕ ﻓﻭﻗﻬﺎ ﺍﻟﻔـﺄﺭﺓ ) ﺍﻟﻨﻘﻁـﺔ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﻤﺘﺤﻭل ( Moveptﻭﺴﻴﻜﻭﻥ ﻟﻭﻥ ﺍﻟﺨﻁ ﺒﻠﻭﻥ ﺍﻷﺭﻀﻴﺔ ) ﺒﻤﺎ ﺃﻨﻨﺎ ﻨﺭﺴﻡ ﺨﻁ ﺠﺩﻴﺩ ﻓﻭﻕ ﺨﻁ ﺴﺎﺒﻕ ﻟﻭﻨﻪ
ﺃﺴﻭﺩ ﻓﺈﻥ ﺍﻟﺨﺎﺼﺔ modeﺫﺍﺕ ﺍﻟﻘﻴﻤﺔ pmNotXorﺴﺘﻘﻭﻡ ﺒﻁﺭﺡ ﺍﻟﻠﻭﻨﻴﻥ ﻤﻥ ﺒﻌﻀﻬﻤﺎ ﻭﺇﻋﺎﺩﺓ ﻟﻭﻥ ﺍﻟﺨﻠﻔﻴﺔ (
ـ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ 2ﺘﻘﻭﻤﺎﻥ ﺒﺭﺴﻡ ﺨﻁ ﺠﺩﻴﺩ ﺒﻴﻥ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﺘﺘﺤﺭﻙ ﺍﻟﻔـﺄﺭﺓ ﻓﻭﻗﻬـﺎ ﻭﺴﻴﻅﻬﺭ ﺍﻟﺨﻁ ﺒﺎﻟﻠﻭﻥ ﺍﻷﺴﻭﺩ. ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﺘﺄﻗﻠﻡ ﻤﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ) ﺃﻥ ﺘﻔﻬﻤﻬﺎ ﺒﺸﻜل ﺠﻴﺩ ( ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤـﺩﺙ OnMouseMove ﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل : If Drawing then begin ; canvas.Pen.Color := form1.Color ; )canvas.MoveTo(origin.X,origin.y ;)Canvas.LineTo(Movept.x,movept.y ;canvas.Pen.Color := clblack ; )canvas.moveto(origin.X,origin.y ;)Form1.Canvas.LineTo(x,y ;end ;)movept := point(x,y ﻟﻜﻥ ﻋﻠﻴﻙ ﺃﻥ ﺘﻌﻴﺩﻫﺎ ﻋﻠﻰ ﺸﻜﻠﻬﺎ ﺍﻟﺴﺎﺒﻕ ﻟﻜﻲ ﻨﻜﻤل ﺒﺭﻨﺎﻤﺠﻨﺎ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺼﺤﻴﺤﺔ ... ﺤﺘﻰ ﺍﻵﻥ ﺍﺴﺘﻁﻌﻨﺎ ﺃﻥ ﻨﺭﺴﻡ ﻤﺴﺘﻘﻴﻡ ﻭﻟﺭﺴﻡ ﺒﻘﻴﺔ ﺍﻷﺸﻜﺎل ﺍﻟﻬﻨﺩﺴﻴﺔ ﺴﻨﻘﻭﻡ ﺒﺈﻀﺎﻓﺔ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ ﻟﻠﺒﺭﻨﺎﻤﺞ ﻟﻠﺘﻤﻜﻥ ﻤـﻥ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺸﻜل ﺍﻟﺫﻱ ﻨﺭﻴﺩ ﺭﺴﻤﻪ : ﺇﻀﺎﻓﺔ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ ﻟﻠﺸﻜل :
ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ Toolbarﺇﻟﻰ ﺍﻟﺸﻜل ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺍﺨﺘﺭ New Buttonﻤﻥ ﺍﻟﻘﺎﺌﻤـﺔ ،ﻜـﺭﺭ ﺍﻟﻌﻤﻠﻴﺔ ﻹﻀﺎﻓﺔ ﺃﺭﺒﻊ ﺃﺯﺭﺍﺭ. ﻴﺠﺏ ﺇﻋﻁﺎﺀ ﻜل ﺯﺭ ﻤﻥ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺴﺎﺒﻘﺔ ﺼﻭﺭ ﻤﺎ ﺘﺩل ﻋﻠﻰ ﺍﻟﻌﻤل ﺍﻟﺫﻱ ﺴﻴﻘﻭﻡ ﺒﻪ ﺍﻟﺯﺭ ،ﻓﺈﺫﺍ ﻜﻨﺕ ﺘﻤﻠـﻙ ﺃﻴﻘﻭﻨـﺎﺕ ﺠﺎﻫﺯﺓ ﻓﺒﺈﻤﻜﺎﻨﻙ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻭﺇﻻ ﻓﻌﻠﻴﻙ ﺃﻥ ﺘﺭﺴﻡ ﻫﺫﻩ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺒﻨﻔﺴﻙ ،ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﺈﻨـﺸﺎﺀ ﺍﻹﻴﻘﻭﻨـﺎﺕ ﻗـﻡ ﺒﺤﻔـﻅ ﺍﻟﻤﺸﺭﻭﻉ ) ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﺎﺴﻡ Graghﻭﺍﺤﻔﻅ ﺍﻟﻤﺸﺭﻭﻉ ﺒﺎﺴﻡ . ( Painting ﺇﻨﺸﺎﺀ ﺃﻴﻘﻭﻨﺎﺕ ﺠﺩﻴﺩﺓ :
ﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Toolsﺍﻷﻤـﺭ Image Editorﺴـﻴﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺒﺭﻨﺎﻤﺞ ﺘﺤﺭﻴﺭ ﺍﻟﺼﻭﺭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل : ﺍﺨﺘﺭ File ÆNew Æ icon File ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﺍﺨﺘﺭ ﻤﻨﻬﺎ Small Iconﻭ 16 Color
ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ Icon1.icoﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ ﻓﻴﻬﺎ ﻤﺭﺒﻊ ﺍﻷﺨﻀﺭ ﻭﻫﻭ ﻴﺩل ﻋﻠﻰ ﺍﻟﻤـﺴﺎﺤﺔ ﺍﻟـﺸﻔﺎﻓﺔ ﻓـﻲ ﺍﻷﻴﻘﻭﻨﺔ 171
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺴﺘﺨﺩﻡ ﺃﺩﺍﺓ ﺭﺴﻡ ﺨﻁ ﻟﺭﺴﻡ ﺨﻁ ﺒﻴﻥ ﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻴﺴﺭﻯ ﺍﻟﻌﻠﻭﻴﺔ ﻭﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻴﻤﻨﻰ ﺍﻟﺴﻔﻠﻴﺔ ﻭﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺭﺴﻤﻨﺎ ﺃﻴﻘﻭﻨـﺔ ﻟﺯﺭ ﺭﺴﻡ ﺨﻁ ﺍﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺒﺎﺴﻡ Line.icoﻭﺃﻏﻠﻘﻪ ،ﺜﻡ ﺃﻨﺸﺄ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺍﻷﺨﺭﻯ ﺠﺩﻴﺩﺓ ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﺒﺤﻴﺙ ﺘﻅﻬـﺭ ﺍﻷﺸﻜﺎل ﺍﻟﺘﺎﻟﻴﺔ ﻓﻴﻬﺎ :
ﻻﺘﻨﺱ ﺃﻥ ﺘﺤﻔﻅ ﻜل ﺃﻴﻘﻭﻨﺔ ﺒﺎﺴﻡ ﻤﻨﺎﺴﺏ .
ﻨﻌﻭﺩ ﺍﻵﻥ ﺇﻟﻰ ﻤﺸﺭﻭﻋﻨﺎ :
ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ ImageListﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﻤﺭﺘﻴﻥ ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺃﺨﺘﺭ ﻤﻨﻬﺎ Addﻭﺃﻀﻑ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺍﻷﺭﺒﻌﺔ ﺍﻟﺘﻲ ﺭﺴﻤﺘﻬﺎ .
ﺍﺨﺘﺭ ﺍﻟﻌﻨﺼﺭ Toolbar1ﻭﺍﻋﻁ ﺍﻟﻘﻴﻤﺔ Imagelist1ﻟﻠﺨﺎﺼﺔ Imagesﺜﻡ ﻋﺩل ﺍﻟﺨﺎﺼﺔ ImageIndexﻟﻜـل ﺯﺭ ﻋﻠﻰ ﻟﻜﻲ ﺘﻅﻬﺭ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺒﺎﻟﺘﺭﺘﻴﺏ ﺍﻟﺘﺎﻟﻲ : ﺤﺩﺩ ﺍﻟﻌﻨﺼﺭ ToolBarsﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Flatﺍﻟﻘﻴﻤﺔ . True ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻷﺭﺒﻌﺔ ﺴﻭﻴﺔ ﻭﺃﻋﻁﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Groupedﺍﻟﻘﻴﻤﺔ ،Trueﻟﺘﺠﻤﻴﻊ ﻫﺫﻩ ﺍﻷﺯﺭﺍﺭ ﻤﻊ ﺒﻌﻀﻬﺎ
ﻭﺃﻋﻁﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Styleﺍﻟﻘﻴﻤﺔ ، tbsCheckﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺴﺘﺠﻌل ﺃﺤﺩ ﺍﻷﺯﺭﺍﺭ ﻤﻀﻐﻭﻁﹰﺎ ﻓﻘﻁ ﻭﻻﻴﻤﻜﻥ ﺃﻥ ﻨﺒﻘﻲ
ﺯﺭﻴﻥ ﻤﻀﻐﻭﻁﻴﻥ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ . ﻋﻨﺩﻤﺎ ﻨﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﺍﻷﺯﺭﺍﺭ ﻓﺈﻨﻨﺎ ﺴﻨﺤﺩﺩ ﺍﻟﺸﻜل ﺍﻟﺫﻱ ﺴﺘﺭﺴﻤﻪ ﺍﻟﻔﺄﺭﺓ ﺃﺜﻨﺎﺀ ﺘﺤﺭﻴﻜﻬﺎ ﻟﺫﻟﻙ ﺴﻨﻌﺭﻑ ﻤﺘﺤﻭل ﻴﺄﺨـﺫ ﻗﻴﻤﺔ ﻤﺨﺘﻠﻔﺔ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻜل ﺯﺭ ﻤﻥ ﺍﻷﺯﺭﺍﺭ ﻭﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻫﻲ ﺘﻌﺭﻴﻑ ﻨﻭﻉ ﻤﻌﻁﻴﺎﺕ ﺘﻌﺩﺍﺩﻱ ،ﻫـﺫﺍ ﺍﻟﻨـﻭﻉ ﺴﻴﺭﺒﻁ ﺒﻴﻥ ﺴﻠﺴﻠﺔ ﺭﻤﺯﻴﺔ ﻭﺒﻴﻥ ﺭﻗﻡ ﺩﺍﺨﻠﻲ ﻭﻴﺴﺘﺒﺩﻟﻪ ﺘﻠﻘﺎﺌﻴﹰﺎ ،ﻟﺫﻟﻙ ﺼﺭﺡ ﻋﻥ ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ Type
ﻤﻥ ﺍﻟﻭﺤﺩﺓ : Gragh
type ;)TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect )TForm1 = class(TForm ﻤﻼﺤﻅﺔ :ﺘﻌﺭﻴﻑ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻴﻜﺎﻓﺊ ﺍﻟﺘﻌﺭﻴﻑ ﺍﻟﺘﺎﻟﻲ : const ;dtLine = 0 ;dtRectangle = 1 ;dtEllipse = 2 ;dtRoundRect = 3 ﺒﻤﺎ ﺃﻨﻨﺎ ﻋﺭﻓﻨﺎ ﻨﻭﻉ ﻓﻌﻠﻴﻨﺎ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل ﻤﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ،ﻟﺫﻟﻙ ﺃﻀﻑ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ ﻟﻠﻘﺴﻡ : Private ;DrawingTool: TDrawingTool ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل : ;DrawingTool := dtLine ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ : ;DrawingTool := dtRectangle ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻟﺙ : 172
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
DrawingTool := dtEllipse; : ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺭﺍﺒﻊ DrawingTool := dtRoundRect; . ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻜل ﺯﺭ ﻤﻥ ﺍﻷﺯﺭﺍﺭDrawingTool ﻭﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺃﻋﻁﻴﻨﺎ ﻗﻴﻤﺔ ﻤﺤﺩﺩﺓ ﻟﻠﻤﺘﺤﻭل OnMouseUp ﻋﻨﺩ ﺭﺴﻡ ﺍﻷﺸﻜﺎل ﻟﺫﻟﻙ ﻨﻌﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤـﺩﺙDrawingTool ﺍﻵﻥ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻔﺤﺹ ﻗﻴﻤﺔ ﻟﻠﻨﻤﻭﺫﺝ ﻜﻤﺎ ﻴﻠﻲ case DrawingTool of dtLine: begin Canvas.MoveTo(Origin.X, Origin.Y); Canvas.LineTo(X, Y) end; dtRectangle: Canvas.Rectangle(Origin.X, Origin.Y, X, Y); dtEllipse: Canvas.Ellipse(Origin.X, Origin.Y, X, Y); dtRoundRect: Canvas.RoundRect(Origin.X, Origin.Y, X, Y, (Origin.X - X) div 2, (Origin.Y - Y) div 2); end; Drawing := False; End; ﻟﺘـﺼﺒﺢOnMuseMove ﻭﻟﻜﻲ ﻨﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺸﻜل ﺍﻟﺫﻱ ﻴﺭﺴﻡ ﺃﺜﻨﺎﺀ ﺘﺤﺭﻴﻙ ﺍﻟﻔﺄﺭﺓ ﻨﻌﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺩﺙ : ﺒﺎﻟﺸﻜل
if Drawing then begin Canvas.Pen.Mode := pmNotXor; case DrawingTool of dtLine: begin Canvas.MoveTo(Origin.X, Origin.Y); Canvas.LineTo(MovePt.X, MovePt.Y); Canvas.MoveTo(Origin.X, Origin.Y); Canvas.LineTo(X, Y); end; dtRectangle: begin Canvas.Rectangle(Origin.X, Origin.Y, MovePt.X, MovePt.Y); Canvas.Rectangle(Origin.X, Origin.Y, X, Y); end; dtEllipse: begin Canvas.Ellipse(Origin.X, Origin.Y, X, Y); Canvas.Ellipse(Origin.X, Origin.Y, X, Y); end; dtRoundRect: begin Canvas.RoundRect(Origin.X, Origin.Y, X, Y, (Origin.X - X) div 2, (Origin.Y - Y) div 2); Canvas.RoundRect(Origin.X, Origin.Y, X, Y, 173
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)(Origin.X - X) div 2, (Origin.Y - Y) div 2 ;end ;end ;end ;)MovePt := Point(X, Y ;Canvas.Pen.Mode := pmCopy ;end ﺸﺭﺡ ﺒﻌﺽ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻭﺍﺭﺩﺓ ﻓﻲ ﺍﻟﺤﺩﺜﻴﻥ ﺍﻟﺴﺎﺒﻘﻴﻥ :
ﺘﻌﻠﻴﻤﺔ ﺭﺴﻡ ﻤﺴﺘﻁﻴل ) : ( Rectangle
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺭﺴﻡ ﻤﺴﺘﻁﻴل ﺒﻤﻌﺭﻓﺔ ﺇﺤﺩﺍﺜﻴﺎﺕ ﻨﻘﻁﺘﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻭﺍﻟﻨﻬﺎﻴﺔ ﻷﺤﺩ ﺃﻗﻁﺎﺭﻩ .
ﺘﻌﻠﻴﻤﺔ ﺭﺴﻡ ﻗﻁﻊ ﻨﺎﻗﺹ ): ( Ellipse
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺭﺴﻡ ﻗﻁﻊ ﻨﺎﻗﺹ ﺃﻭ ﺩﺍﺌﺭﺓ ﺒﻤﻌﺭﻓﺔ :ﺇﺤﺩﺍﺜﻴﺎﺕ ﻨﻘﻁﺘﻲ ﻗﻁﺭ ﺍﻟﻤﺴﺘﻁﻴل ﺍﻟﺫﻱ ﻴﻤﺱ ﺍﻟﻘﻁـﻊ ﺍﻟﻨـﺎﻗﺹ ﺃﻗﻁﺎﺭﻩ ﺍﻷﺭﺒﻌﺔ ﺃﻀﻼﻉ
ﺘﻌﻠﻴﻤﺔ ﺭﺴﻡ ﻤﺴﺘﻁﻴل ﺫﻭ ﺯﻭﺍﻴﺎ ﻤﺴﺘﺩﻴﺭﺓ ) : ( RoundRect ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺭﺴﻡ ﻤﺴﺘﻁﻴل ﺫﻭ ﺯﻭﺍﻴﺎ ﻤﺴﺘﺩﻴﺭﺓ ﺒﻤﻌﺭﻓﺔ ﻨﻘﻁﻲ ﺍﻟﻘﻁﺭ ﻜﻤﺎ ﻓﻲ ﺭﺴﻡ ﻤﺭﺒﻊ ) ﺍﻟﻭﺴـﻁﺎﺀ ﺍﻷﺭﺒﻌـﺔ ﺍﻷﻭﻟﻰ ( ﻭﻤﻌﺭﻓﺔ ﺍﻟﻁﻭل ﺍﻟﺫﻱ ﺴﻴﺄﺨﺫﻩ ﺍﻟﻘﻭﺱ ﻤﻥ ﺍﺭﺘﻔﺎﻉ ﻭﻋﺭﺽ ﺍﻟﻤﺴﺘﻁﻴل . ﺘﻐﻴﺭ ﺸﻜل ﺍﻟﺨﻁ :
ﻴﻤﻜﻨﻨﺎ ﺍﻟﺘﺤﻜﻡ ﺒﺸﻜل ﺍﻟﺨﻁ ،ﺤﻴﺙ ﻴﻤﻜﻥ ﺃﻥ ﻴﻅﻬﺭ ﺒﺸﻜل ﻤﻨﻘﻁ ﺃﻭ ﺨﻁﻭﻁ ﻤﺘﺘﺎﻟﻴﺔ ﺃﻭ ﺨﻁ ﻭﻨﻘﻁـﺔ ، ...ﻜﻤـﺎ ﻴﻤﻜﻨﻨـﺎ ﺍﻟﺘﺤﻜﻡ ﺒﻠﻭﻥ ﺍﻟﺨﻁ ﻭﻋﺭﻀﻪ.
ﺴﻨﻀﻴﻑ ﺍﻵﻥ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ ﺠﺩﻴﺩ ﻟﻠﺘﺤﻜﻡ ﺒﺸﻜل ﺍﻟﺨﻁ ،ﻫﺫﺍ ﺍﻟﺸﺭﻴﻁ ﺴﻴﺒﻘﻰ ﻤﺨﻔﻴﹰﺎ ﺤﺘﻰ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺯﺭ ﻓﻲ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺴﺎﺒﻕ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ : ﺃ ـ ﺃﻀﻑ ﺸﺭﻴﻁ ﺍﺩﻭﺍﺕ Toolbarﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Visibleﺍﻟﻘﻴﻤﺔ . False ﺏ ـ ﺃﻀﻑ ﺍﻵﻥ ﺴﺘﺔ ﺃﺯﺭﺍﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . New Button
ﺝ ـ ﺃﻀﻑ ﻋﻨﺼﺭ ImageList1ﺠﺩﻴﺩ ﻭﺍﺭﺒﻁ ﺍﻟﻌﻨﺼﺭ Toolbar2ﻤﻌﻪ ﻭﺃﻀﻑ ﻤﺠﻤﻭﻋـﺔ ﻤـﻥ ﺍﻷﻴﻘﻭﻨـﺎﺕ ﺃﻭ
ﺍﻟﺼﻭﺭ ﺇﻟﻰ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ) ﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﻤﺠﻠﺩ C:\Program Files\Borland\Delphi6\Demos\Doc\Graphex ﻭﺍﻀﻑ ﺍﻟﺼﻭﺭ ﺍﻟﺘﺎﻟﻴﺔ ﻤﻨﻪ ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ : solid.bmp - dashed.bmp - dotted.bmp - dashdot.bmp - dashdot2.bmp - clear.bmp ﺒﺤﻴﺙ ﻴﺼﺒﺢ ﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﺒﺎﻟﺸﻜل : ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺴﺘﺔ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Groupedﻟﻬﺎ ﺍﻟﻘﻴﻤﺔ Trueﻭﺍﻟﺨﺎﺼﺔ Styleﺍﻟﻘﻴﻤﺔ tbsCheck ﺩ ـ ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ toolbar1ﻭﺍﺨﺘﺭ New Separatorﺜﻡ ﺃﻀﻑ ﺯﺭ ﺠﺩﻴـﺩ ﻭﺃﻀـﻑ ﺍﻟﺼﻭﺭ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ImageList1ﻤﻥ ﺍﻟﻤﺠﻠﺩ ﺍﻟﺴﺎﺒﻕ : 174
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
pen.bmp - brush.bmp ﺃﻋﻁ ﻫﺫﺍ ﺍﻟﺯﺭ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Styleﺍﻟﻘﻴﻤﺔ tbsCheck ﻫـ ـ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; toolbar2.Visible := not toolbar2.Visible ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻫﺫﺍ ﺍﻟﺯﺭ ﻓﺴﻴﻅﻬﺭ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺜﺎﻨﻲ ﻭﺴﻴﺨﺘﻔﻲ ﺇﺫﺍ ﻜﺎﻥ ﻅﺎﻫﺭﹰﺍ . ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﻓﻲ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺜﺎﻨﻲ : Toolbar2 ;canvas.Pen.Style := pssolid ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ : ;canvas.Pen.Style := psDash ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ : ;canvas.Pen.Style := psdot ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ : ; canvas.Pen.Style := psdashdot ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ : ; canvas.Pen.Style := psdotdot ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺫﻱ ﻴﻠﻴﻪ : ; canvas.Pen.Style := psclear ﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻘﻠﻡ : ﻴﻤﻜﻥ ﺃﻥ ﻨﺭﺴﻡ ﺒﺄﻟﻭﺍﻥ ﻤﺨﺘﻠﻔﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻋﻨﺼﺭ ﺍﻟﻘﻠﻡ Tpenﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ : ﺃ ـ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ ColorDialogﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ . ﺏ ـ ﺃﻀﻑ ﺇﻟﻰ Toolbar2ﻓﺎﺼل ) ( Separatorﻭﻤﻥ ﺜﻡ ﺯﺭ ﺠﺩﻴﺩ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟـﺯﺭ ﺃﻜﺘـﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : if ColorDialog1.Execute then ;Canvas.Pen.Color := ColorDialog1.Color ﺝ ـ ﺃﻋﻁ ﻫﺫﺍ ﺍﻟﺯﺭ ﺃﻴﻘﻭﻨﺔ ﻤﻨﺎﺴﺒﺔ ) ﺍﻷﻴﻘﻭﻨﺔ colors.bmpﻤﻥ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺴﺎﺒﻕ ( . ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .
ﺘﻐﻴﺭ ﻋﺭﺽ ﺍﻟﻘﻠﻡ :
ﻟﻜﻲ ﻴﺘﻤﻜﻥ ﺒﺭﻨﺎﻤﺠﻨﺎ ﺒﺎﻟﺘﺤﻜﻡ ﺒﻌﺭﺽ ﺍﻟﺨﻁ ﺍﻟﻤﺭﺴﻭﻡ ﺃﻀﻑ ﻤﺎ ﻴﻠﻲ : ﺃ ـ ﻋﻨﺼﺭ Editﻀﻌﻪ ﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ . ToolBar2
ﺏ ـ ﻋﻨﺼﺭ UpDownﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﺃﻋﻁﻪ ﻓﻲ ﺍﻟﻘﻴﻤﺔ Edit1ﻓﻲ ﺍﻟﺨﺎﺼﺔ : Associate ﺝ ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnChangeﻟﻠﻌﻨﺼﺭ :Edit1 ;) canvas.Pen.Width := strtoint(edit1.Text ﺘﻐﻴﺭ ﻨﻭﻉ ﺍﻟﻔﺭﺸﺎﺓ : ﺘﺴﺘﺨﺩﻡ ﺍﻟﻔﺭﺸﺎﺓ ﻓﻲ ﺩﻟﻔﻲ ﻟﺘﺤﺩﻴﺩ ﺍﻟﻨﻤﻁ ﺍﻟﺫﻱ ﺴﺘﻤﺘﻠﺊ ﺒﻪ ﺍﻷﺸﻜﺎل ﻓﻲ ﺩﻟﻔﻲ : 175
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺴﻨﻀﻴﻑ ﺍﻵﻥ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ ﺠﺩﻴﺩ ﻟﻠﺘﺤﻜﻡ ﺒﺎﻟﻔﺭﺸﺎﺓ ﻋﻠﻰ ﻏﺭﺍﺭ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻟﻠﺘﺤﻜﻡ ﺒﺎﻟﻘﻠﻡ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ : ﺃ ـ ﺃﻀﻑ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ .
ﺏ ـ ﺃﻀﻑ ﺯﺭ ﺠﺩﻴﺩ ﺇﻟﻰ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ Toolbar1ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Styleﻟﻬﺫﺍ ﺍﻟﺯﺭ ﺍﻟﻘﻴﻤﺔ tbsCheckﻭﺍﻜﺘـﺏ
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Toolbar3.Visible := Not Toolbar3.Visible ﺝ ـ ﺃﻀﻑ ﺇﻟﻰ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺠﺩﻴﺩ ﺘﺴﻌﺔ ﺃﺯﺭﺍﺭ ،ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺜﻤﺎﻨﻴﺔ ﺍﻷﻭﻟﻰ ﻤﻨﻬﺎ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Grouped ﻟﻬﺎ ﺍﻟﻘﻴﻤﺔ Trueﻭﺍﻟﺨﺎﺼﺔ Styleﺍﻟﻘﻴﻤﺔ tbsCheckﻭﺃﻋﻁﻬﺎ ﺼﻭﺭ ﻤﻥ ﺍﻟﻤﺠﻠﺩ ﺍﻟﺴﺎﺒﻕ ﺒﺤﻴﺙ ﺘﻅﻬﺭ ﺒﺎﻟﺸﻜل :
ﺃﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﻭل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;canvas.Brush.Style := bssolid ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻟﻘﻴﻤﺔ : ;canvas.Brush.Style := bsclear ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻟﻘﻴﻤﺔ : ;canvas.Brush.Style := bshorizontal ﻜﺭﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﻏﻴﺭ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺤﻠﻘﺔ ﺒﺎﻟﻤﻨﻬﺞ Styleﻟﻸﺯﺭﺍﺭ ﺍﻟﺒﺎﻗﻴﺔ ﻋﻠﻰ ﺍﻟﺘﻭﺍﻟﻲ : bsVertical – bsFdiagonal – bsbdiaognal – bsColor – bsDiagCross ﺘﻐﻴﻴﺭ ﻟﻭﻥ ﺍﻟﻔﺭﺸﺎﺓ : ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﺎﺴﻊ ﻓﻲ ﺸﺭﻴﻁ ﺍﻷﺩﻭﺍﺕ : ToolBar3 ; If ColorDialog1.Excetue then canvas.Brush.Color := ColorDialog1.Color ﺇﻀﺎﻓﺔ ﺸﺭﻴﻁ ﺍﻟﺤﺎﻟﺔ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ : ﻴﺴﺘﺨﺩﻡ ﺸﺭﻴﻁ ﺍﻟﺤﺎﻟﺔ Status barﻹﻅﻬﺎﺭ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺤﺎﻻﺕ ﻤﻌﻴﻨﺔ ﻀﻤﻥ ﺍﻟﺘﻁﺒﻴﻕ ،ﺴﻴﻅﻬﺭ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻤﻌﻠﻭﻤـﺎﺕ ﻋﻥ ﻤﻭﻗﻊ ﺍﻟﻤﺸﻴﺭﺓ ﺍﻟﺤﺎﻟﻲ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺒﺩﺍﺌﻴﺔ ﺍﻟﺘﻲ ﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ :
ﺃ ـ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ StatusBarﻤﻥ ﺍﻟﺼﻔﺤﺔ . Win32 2ـ ﺇﻀﻐﻁ ﻋﻠﻴﻪ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻭﺍﺨﺘﺭ Panel Editorﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺘﺤﺭﻴﺭ ﺍﻟﻠﻭﺤﺎﺕ ﺍﻀﻐﻁ ﻓﻴﻬﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Add Newﻤﺭﺘﻴﻥ ﻹﻀﺎﻓﺔ ﻟﻭﺤﺘﻴﻥ . 3ـ ﺤﺩﺩ ﺍﻟﻠﻭﺤﺔ 0ﻭﺃﻋﻁﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Widthﺍﻟﻘﻴﻤﺔ . 150
4ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ OnMouseDownﻟﻠﻨﻤﻭﺫﺝ : ;)]StatusBar1.Panels[0].Text := Format ('origin = %d , %d',[x,y 5ـ ﺃﻀﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseMoveﻟﻠﻨﻤﻭﺫﺝ : ;)]StatusBar1.Panels[1].Text := Format ('Point = %d , %d',[x,y
176
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 26 ﺍﻟﺭﺴﻡ ﻋﻠﻰ ﻋﻨﺼﺭ ﺼﻭﺭﺓ : ﺒﻤﺎ ﺃﻨﻨﺎ ﻨﺭﺴﻡ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻤﺒﺎﺸﺭﺓ ﻓﻠﻥ ﻨﺴﺘﻁﻴﻊ ﺇﺠﺭﺍﺀ ﻋﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺼﻭﺭ ﺍﻟﻤﺭﺴﻭﻤﺔ ﻜﺎﻟﻨﺴﺦ ﻭﺍﻟﻠـﺼﻕ ﻭﺍﻟﺤﻔـﻅ
ﻭﺍﻟﻁﺒﺎﻋﺔ ،ﻟﺫﻟﻙ ﻋﻠﻴﻨﺎ ﺘﻁﻭﻴﺭ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻟﻴﻜﻭﻥ ﻗﺎﺩﺭﹰﺍ ﻋﻠﻰ ﺍﻟﺭﺴﻡ ﻓﻭﻕ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ ،ﻗﺒل ﺇﻀﺎﻓﺔ ﻋﻨﺼﺭ ﺍﻟـﺼﻭﺭﺓ
ﺇﻟﻰ ﺍﻟﺸﻜل ﻋﻠﻴﻙ .
1ـ ﺇﻀﺎﻓﺔ ﻤﺴﺎﺤﺔ ﻗﺎﺒﻠﺔ ﻟﻠﺘﺩﺭﺝ :
ﺒﻤﺎ ﺃﻨﻙ ﺴﺘﺭﺴﻡ ﻓﻭﻕ ﻋﻨﺼﺭ ﺼﻭﺭﺓ ﻓﻘﺩ ﻴﻜﻭﻥ ﺤﺠﻡ ﺍﻟﺼﻭﺭﺓ ﺃﻜﺒﺭ ﻤﻥ ﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻋﻠﻴﻨﺎ ﺇﻀـﺎﻓﺔ ﺃﺸـﺭﻁﺔ ﺘﻤﺭﻴﺭ ﻟﻜﻲ ﻴﻤﻜﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺠﺯﺍﺀ ﺍﻟﺼﻭﺭﺓ ﺍﻟﻐﻴﺭ ﻅﺎﻫﺭﺓ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ: ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ ScrollBoxﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Alignﺍﻟﻘﻴﻤﺔ . alClient
2ـ ﺇﻀﺎﻓﺔ ﻋﻨﺼﺭ ﺼﻭﺭﺓ Imageﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ ScrollBox1ﻭﺃﻋﻁﺎﻩ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ True AutoSize 0 Left True Stretch 0 Right ﺘﺤﺩﻴﺩ ﺍﻟﺤﺠﻡ ﻭﺍﻟﺼﻭﺭﺓ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻟﻌﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ :
ﻋﻨﺩﻤﺎ ﻭﻀﻌﻨﺎ ﺼﻭﺭ ﻋﻠﻰ ﺍﻟﺸﻜل ﻓﺈﻨﻨﺎ ﻟﻡ ﻨﺤﺩﺩ ﺼﻭﺭﺓ ﻟﻌﺭﻀﻬﺎ ﻭﻟﻜﻨﻨﺎ ﺤﺩﺩﻨﺎ ﻤﻜﺎﻥ ﻟﺘﻌﺭﺽ ﻓﻴﻪ ﺍﻟﺼﻭﺭﺓ ،ﻭﻤﺎ ﻋﻠﻴﻨـﺎ ﺍﻵﻥ ﺇﻻ ﻭﻀﻊ ﺼﻭﺭﺓ ﻓﺎﺭﻏﺔ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Pictureﻟﻠﻌﻨﺼﺭ Image1ﻭﻴﻤﻜﻥ ﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺒﻁﺭﻴﻘﺘﻴﻥ :
1ـ ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ :ﺇﻀﺎﻓﺔ ﺼﻭﺭﺓ ﻓﺎﺭﻏﺔ ﺫﺍﺕ ﻟﻭﻥ ﺃﺒﻴﺽ ﺫﺍﺕ ﺍﻤﺘﺩﺍﺩ .Bmpﺇﻟـﻰ ﺍﻟﺨﺎﺼـﺔ Pictureﻟﻌﻨـﺼﺭ
ﺍﻟﺼﻭﺭﺓ .
2ـ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ :ﺇﻨﺸﺎﺀ ﻋﻨﺼﺭ ﺼﻭﺭﺓ ﻨﻘﻁﻴﺔ Bitmapﻭﺇﻟﺤﺎﻗﺔ ﺒﺎﻟﺼﻭﺭﺓ Image1ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ
ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnCreateﻟﻠﻨﻤﻭﺫﺝ : Var ; Bitmap : TBitmap Begin ; Bitmap := Tbitmap.Create ;Bitmap.Width := 200 ;Bitmap.Height := 200 ;Image1.Picture.Graphic := Bitmap ; Bitmap.Free ﺍﻟﺭﺴﻡ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ : ﻟﻥ ﻴﺨﺘﻠﻑ ﺍﻟﺭﺴﻡ ﻋﻠﻰ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ ﻋﻥ ﺍﻟﺭﺴﻡ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ ،ﻓﻌﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ ﻴﻤﻠﻙ ﺍﻟﺨﺎﺼﺔ Canvasﻭﻟﺘﺤﻘﻴﻕ ﺍﻟﺭﺴﻡ ﺒﺩﻭﻥ ﺇﺠﺭﺍﺀ ﺘﻐﻴﺭﺍﺕ ﻜﺒﻴﺭﺓ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻨﻔﺫ ﻤﺎﻴﻠﻲ :
177
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
1ـ ﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺘﺤﺭﻴﺭ ﻓﻲ ﺃﻭل ﺍﻟﻭﺤﺩﺓ Graphﻭﺍﺨﺘـﺭ ﻤـﻥ ﺍﻷﻤﺭ Search Æ Replaceﻓﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ :
ﺍﻜﺘﺏ ﻓﻲ ﺍﻟﺤﻘل Text To Findﺍﻟﻘﻴﻤﺔ Canvas ﻭﺍﻜﺘﺏ ﻓﻲ Replace Withﺍﻟﻘﻴﻤﺔ Image1.Canvas ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Replace All ﻼ ﺴﻴﺘﻐﻴﺭ ﺍﻵﻥ ﻜل ﺴﻁﺭ ﻓﻲ ﺍﻟﻭﺤﺩﺓ ﻤﻥ … Canvas.penﻤﺜ ﹰ ﺇﻟﻰ Image1.Canvas.pen..
2ـ ﺤﺩﺩ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ ﻭﺃﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺼﻔﺤﺔ Eventﻭﺍﻀﻐﻁ
ﺍﻟﺴﻬﻡ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﺤﺩﺙ OnMousemoveﻭﺍﺨﺘﺭ ﻤـﻥ ﺍﻟﻘﺎﺌﻤـﺔ ، FormMouseMoveﻜﺫﻟﻙ ﺃﺭﺒﻁ ﺍﻟﺤﺩﺙ OnMouseupﻟﻠﺼﻭﺭﺓ ﻤﻊ ﺍﻟﺤـﺩﺙ Form1MouseUpﻟﻠﻨﻤـﻭﺫﺝ ﻭﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﺤﺩﺙ .. OnmouseDown ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻻﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ .
178
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﻀﺎﻓﺔ ﻗﺎﺌﻤﺔ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺴﻡ : ﺴﻨﻀﻴﻑ ﺍﻵﻥ ﻗﺎﺌﻤﺔ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺴﻡ ﻟﻠﺘﺤﻜﻡ ﺒﻌﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ :
ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ MainMenuﻤﻥ ﺍﻟﺼﻔﺤﺔ Standardﻭﺃﻨﺸﺄ ﺍﻟﻘﺎﺌﻤﺔ Fileﺘﺤﻭﻱ ﺍﻷﻭﺍﻤﺭ ﺍﻟﻤﻭﻀﺤﺔ ﺒﺎﻟﺸﻜل : ﻭﺃﻨﺸﺄ ﻓﻴﻬﺎ ﺍﻟﻘﺎﺌﻤﺔ Editﺍﻟﺘﻲ ﻴﺠﺏ ﺃﻥ ﺘﻅﻬﺭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
ﺴﻨﻜﺘﺏ ﺍﻵﻥ ﺍﻷﻭﺍﻤﺭ ﺍﻟﺘﻲ ﻴﺠﺏ ﺘﻨﻔﻴﺫﻫﺎ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﻜل ﺯﺭ ﻤﻥ ﺃﺯﺭﺍﺭ ﺍﻟﻘﺎﺌﻤﺔ : 1ـ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Exitﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ Fileﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; Close 2ـ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺯﺭ Newﺴﺘﻅﻬﺭ ﻨﺎﻓﺫﺓ ﺘﻁﻠﺏ ﻤﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﻭﻋﺭﺽ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺠﺩﻴﺩﺓ ﻭﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻤﻭﺍﻓﻕ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀ ﺼﻭﺭﺓ ﻓﺎﺭﻏﺔ : ﺃﻨﺸﺄ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻋﻁﻪ ﺍﻟﺨﻭﺍﺹ ﺍﻟﻤﻨﺎﺴﺒﺔ ﺒﺤﻴﺙ ﻴﺒﺩﻭ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
ﺃﻀﻑ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ Publicﻟﻠﻭﺤﺩﺓ ) Graphﺍﻟﻭﺤﺩﺓ ﺍﻷﻭﻟﻰ ( ;CurrentFile : String ﺴﻨﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻟﺤﻔﻅ ﺍﻟﻤﻠﻑ ﻻﺤﻘﹰﺎ .
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Newﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;Form2.ShowModal ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻤﻭﺍﻓﻕ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var bitmap : tbitmap begin ; Bitmap := Tbitmap.Create ;) Bitmap.Width := strtoint(edit1.Text ;) Bitmap.Height := strtoint(edit2.Text ;form1.Image1.Picture.Graphic := Bitmap ; bitmap.Free ; '' =Form1.CurrentFile : ;close ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻟﻐﺎﺀ ﺍﻷﻤﺭ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ Close; : ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺃﻨﺸﺄ ﺼﻭﺭﺓ ﺠﺩﻴﺩﺓ .
179
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
4ـ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Openﺴﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻔﺘﺢ ﺼﻭﺭﺓ ﻓﻲ ﺍﻟﻌﻨﺼﺭ Imageﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻥ ﺘﺤﺭﻴﺭ ﻫﺫﻩ ﺍﻟﺼﻭﺭﺓ ﺃﻭ ﺍﻟﺭﺴﻡ ﻓﻭﻗﻬﺎ :
ـ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ OpenPictureDialogﻤﻥ ﺍﻟﺼﻔﺤﺔ . Dialog ـ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Openﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Fileﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : if OpenPictureDialog1.Execute then begin ;CurrentFile := OpenPictureDialog1.FileName ;Image1.Picture.LoadFromFile(CurrentFile); end 3ـ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺯﺭ Saveﺴﻨﻘﻭﻡ ﺒﺤﻔﻅ ﺍﻟﺼﻭﺭﺓ ﻓﻲ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﻤﺨﺯﻥ ﻓﻲ ﺍﻟﻤﺘﺤﻭل CurrentFileﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻥ '' = CurrentFileﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﺼﻭﺭﺓ ﺠﺩﻴﺩﺓ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻨﺴﺘﺩﻋﻲ ﺍﻷﺠﺭﺍﺀ : Saveas1Click ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . Save if CurrentFile <> '' then )Image1.Picture.SaveToFile(CurrentFile ;)else SaveAs1Click(Sender 4ـ ﻋﻨﺩﻤﺎ ﻴﺭﻴﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻥ ﻴﺤﻔﻅ ﺍﻟﺼﻭﺭﺓ ﻓﻲ ﻤﻠﻑ ﺠﺩﻴﺩ ﻓﺈﻨﻪ ﺴﻴﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : Save As ﺍﻀﻑ ﺍﻟﻌﻨﺼﺭ SavePictureDialogﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Save Asﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Fileﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ if SavePictureDialog1.Execute then begin ;CurrentFile := SavePictureDialog1.FileName ;Image1.Picture.SaveToFile(CurrentFile); end 5ـ ﻁﺒﺎﻋﺔ ﺍﻟﺼﻭﺭﺓ : ﺘﻌﺎﻤﻠﻨﺎ ﺴﺎﺒﻘﹰﺎ ﻤﻊ ﺍﻟﺼﺒﺎﻋﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ ،QReportﻭﺒﺈﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺼﻔﺤﺔ ﻟﻠﺼﺒﺎﻋﺔ ﻫﻨﺎ ﻭﻟﻜﻥ ﺴﻨﺴﺘﺨﺩﻡ ﺃﺴﻠﻭﺒﹰﺎ ﺠﺩﻴﺩﹰﺍ ) ﻋﻠﻤﹰﺎ ﺃﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ Qreportﻴﺒﻘﻰ ﺃﻓﻀل ( :
ﺃ ـ ﺃﻀﻑ ﺍﻟﻭﺤﺩﺓ Printersﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻠﻭﺤﺩﺓ Graphﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Printﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Fileﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ; printer.BeginDoc ;) printer.Canvas.Draw(0,0,image1.Picture.Graphic ; printer.EndDoc ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻨﻬﺞ BeginDocﻹﻋﻁﺎﺀ ﺍﻟﻁﺎﺒﻌﺔ ﺇﻴﻌﺎﺯ ﺘﺒﺩﺃ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻁﺒﺎﻋﺔ . ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻨﻬﺞ Canvas.Drawﻟﻨﺴﺦ ) ﺭﺴﻡ ( ﺍﻟﺼﻭﺭﺓ Image1ﻓﻲ ﺍﻟﺨﺎﺼﺔ Canvasﻟﻌﻨﺼﺭ ﺍﻟﻁﺎﺒﻌﺔ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ EndDocﻹﻨﻬﺎﺀ ﺘﻜﻠﻴﻑ ﺍﻟﻁﺎﺒﻌﺔ ﻭﻋﻨﺩ ﻫﺫﺍ ﺍﻷﻤﺭ ﺘﺒﺩﺃ ﻋﻤﻠﻴﺔ ﺍﻟﻁﺒﺎﻋﺔ .
ﻻ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ Drawﻤﺜﺎل : ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﺘﺤﻜﻡ ﺒﺤﺠﻡ ﺍﻟﺼﻭﺭﺓ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ StretchDrawﺒﺩ ﹰ ;) printer.Canvas.StretchDraw(rect(0,0,4000,4000),image1.Picture.Graphic ﺤﻴﺙ ﺍﻟﺘﺎﺒﻊ Rectﻴﺤﺩﺩ ﺍﻟﻤﺴﺘﻁﻴل ﺍﻟﺫﻱ ﺴﺘﺘﻤﺩﺩ ﺍﻟﺼﻭﺭﺓ ﻓﻴﻪ . 180
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺤﺎﻓﻅﺔ Clipboardﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ : ﺴﻨﺴﺘﺨﺩﻡ ﺍﻟﺤﺎﻓﻅﺔ ﻟﻜﻲ ﻨﺘﻤﻜﻥ ﻤﻥ ﻨﺴﺦ ﺼﻭﺭﺓ ﻭﻟﺼﻘﻬﺎ ﺒﻺﻀﺎﻓﺔ ﺇﻟﻰ ﻗﺼﻬﺎ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ :
ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﺤﺎﻓﻅﺔ ﺴﺎﺒﻘﹰﺎ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻌﻨﺼﺭ DbImageﺤﻴﺙ ﻜﺎﻥ ﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﻨﻬﺠﻴﻥ CopyToClipbordﻭ CutToClipordﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ PasteFromClipboardﻭﻟﻜﻥ ﻟﻸﺴﻑ ﺍﻟﻌﻨﺼﺭ Imageﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨـﺎ ﻻ ﻴﻤﻠﻙ ﻫﺫﻩ ﺍﻟﻤﻨﺎﻫﺞ ﻭﻟﺫﻟﻙ ﻋﻠﻴﻨﺎ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻭﺤﺩﺓ ClipBrdﻟﻠﺘﻌﺎﻤل ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻤﻊ ﺍﻟﺤﺎﻓﻅﺔ ،ﻟـﺫﻟﻙ ﺃﻀـﻑ ﺍﻟﻭﺤﺩﺓ ClipBrdﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻠﻭﺤﺩﺓ Graph 1ـ ﻨﺴﺦ ﺍﻟﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ :
ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Copy ;)Clipboard.Assign(Image.Picture ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻟﺤﺎﻕ ﻫﺩﻑ ﺍﻟﺼﻭﺭﺓ ﺒﻬﺩﻑ ﺍﻟﺤﺎﻓﻅﺔ . Clipboard
2ـ ﻗﺹ ﺍﻟﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ : ﻻ ﺒﻨﺴﺦ ﺍﻟﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻭﻤﻥ ﺜﻡ ﻤﺴﺢ ﺍﻟﺼﻭﺭﺓ : ﻟﻘﺹ ﺍﻟﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻨﻘﻭﻡ ﺃﻭ ﹰ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : Cut ; Var ARect :TRect ;)Clipboard.Assign(Image.Picture ;image1.Canvas.CopyMode := cmwhiteness ;)ARect :=rect(0,0,image1.Width,image1.Height ;)image1.Canvas.CopyRect( ARect,image1.Canvas,ARect ;image1.canvas.copymode := cmsrccopy ﺍﻟﻨﻭﻉ TRectﻋﺒﺎﺭﺓ ﻋﻥ ﻨﻭﻉ ﻤﺴﺘﻁﻴل ﻭﻫﻭ ﻴﻌﺭﻑ ﻤﺴﺘﻁﻴل ﻤﻥ ﺨﻼل ﻤﻌﺭﻓﺔ ﺇﺤﺩﺍﺜﻴﺎﺕ ﺍﻟﺒﺩﺍﻴﺔ ﻭﺍﻟﻨﻬﺎﻴـﺔ ﻟﻠﻤـﺴﺘﻘﻴﻡ ﺍﻟﺫﻱ ﻴﻤﺜل ﺃﺤﺩ ﺍﻷﻗﻁﺎﺭ. : Canvas.CopyMode := cmWhitenessﺘﻌﻨﻲ ﺃﻥ ﻋﻤﻠﻴﺔ ﻨﺴﺦ ﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﺴﺘﺘﻡ ﺒﺎﻟﻠﻭﻥ ﺍﻷﺒﻴﺽ ) ﺃﻱ ﺃﻥ ﺍﻟﺼﻭﺭﺓ ﺴﺘﺼﺒﺢ ﺒﻴﻀﺎﺀ ( .
)… : ARect := Rect ( 0,0,ﺘﺤﺩﺩ ﺃﺒﻌﺎﺩ ﺍﻟﻤﺴﺘﻁﻴل ﺒﺄﺒﻌﺎﺩ ﺍﻟﻌﻨﺼﺭ Imageﺍﻟﺤﺎﻟﻴﺔ . ) : Canvas.CopyRect( ARect,Image.Canvas,ARectﻋﻤﻠﻴﺔ ﻨﺴﺦ ﺇﻟﻰ ﺍﻟﻤﺴﺘﻁﻴل ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﻭﺴـﻴﻁ ﺍﻷﻭل
ARectﻤﻥ ﺍﻟﻜﻨﻔﺎ ﺍﻟﻤﺤﺩﺩﺓ ﺒﺎﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ ﻭﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻟﺙ ﻴﺤﺩﺩ ﺃﺒﻌﺎﺩ ﺍﻟﻤﺴﺘﻁﻴل ﺍﻟﺫﻱ ﺴﻴﻨﺴﺦ ﻤﻥ ﺍﻟﻜﻨﻔﺎ ﺍﻷﺼل . ﺒﻜﻠﻤﺎﺕ ﺃﺨﺭﻯ ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻨﺴﺦ ﻤﺴﺘﻁﻴل ﺒﺤﺠﻡ ﺍﻟﺼﻭﺭﺓ ﻤﻥ ﻋﻨﺼﺭ ﺍﻟﻜﻨﻔﺎ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﻜﻨﻔﺎ ﻨﻔـﺴﻪ ﻭﺴـﺘﻜﻭﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺼﻭﺭﺓ ﺒﻴﻀﺎﺀ ﻷﻨﻨﺎ ﺍﻟﺨﺎﺼﺔ . CopyMode := cmWhiteness
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﺨﻴﺭﺓ : Canvas.CopyMode := cmsrcCopyﺘﻌﻴﺩ ﺍﻟﺨﺎﺼﺔ CopyModeﺇﻟﻰ ﻗﻴﻤﺘﻬﺎ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ
. ﻟﺼﻕ ﺍﻟﺭﺴﻭﻤﺎﺕ ﻤﻥ ﺍﻟﺤﺎﻓﻅﺔ : ﻋﻤﻠﻴﺔ ﻟﺼﻕ ﺼﻭﺭﺓ ﻤﻥ ﺍﻟﺤﺎﻓﻅﺔ ﻫﻲ ﻋﻤﻠﻴﺔ ﻤﻌﺎﻜﺴﺔ ﻟﻌﻤﻠﻴﺔ ﻨﺴﺦ ﺼﻭﺭﺓ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻭﺘﺘﻡ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : 181
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
; )image1.Picture.Bitmap.Assign(clipboard ﻭﻟﻜﻥ ﺘﻅﻬﺭ ﻟﺩﻴﻨﺎ ﻫﻨﺎ ﺍﻟﻤﺸﻜﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ :ﺘﺼﻭﺭ ﺃﻥ ﺍﻟﺤﺎﻓﻅﺔ ﺘﺤﻭﻱ ﻋﻨﺼﺭ ﻨﺹ ) ﻗﺩ ﺘﻜﻭﻥ ﻨﻘﻠﺕ ﻨﺹ ﺇﻟﻰ ﺍﻟﺤﺎﻓﻅﺔ ﻓﻲ ﺃﻱ ﺒﺭﻨﺎﻤﺞ ﺘﺤﺭﻴﺭ ﻨﺼﻭﺹ ( ﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﺘﻜﻭﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻁﻠﺏ ﻟﺼﻕ ﻨﺹ ﻓﻭﻕ ﻋﻨﺼﺭ ﺼﻭﺭﺓ ﺍﻷﻤـﺭ ﺍﻟـﺫﻱ ﺴﻴﻅﻬﺭ ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﻭﻟﺫﻟﻙ ﻋﻠﻴﻨﺎ ﻓﺤﺹ ﻨﻭﻉ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺍﻟﺤﺎﻓﻅﺔ ﻗﺒل ﺇﺠﺭﺍﺀ ﻋﻤﻠﻴﺔ ﺍﻟﻠﺼﻕ : ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ : Paste if Clipboard.HasFormat(cf_BITMAP) then ; )image1.Picture.Bitmap.Assign(clipboard ﺘﻌﻴﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ ) HasFormat (CF_BITMAPﺇﺫﺍ ﻜﺎﻨﺕ ﻫﻨﺎﻙ ﺼﻭﺭﺓ ﻓﻲ ﺍﻟﺤﺎﻓﻅﺔ . ﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺍﻨﻬﻴﻨﺎ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺴﻡ ﻭﺴﻨﻨﺘﻘل ﺍﻵﻥ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻭﺴﺎﺌﻁ ﺍﻟﻤﺘﻌﺩﺩﺓ ) ﺍﻟﻤﻠﺘﻤﻴﺩﻴﺎ ( ﻓﻲ ﺩﻟﻔﻲ : ﺒﺭﻤﺠﺔ ﺍﻷﻭﺴﺎﻁ ﺍﻟﻤﺘﻌﺩﺩﺓ : ﺇﻥ ﻤﺼﻁﻠﺢ ﺍﻷﻭﺴﺎﻁ ﺍﻟﻤﺘﻌﺩﺩﺓ ﻴﺸﻴﺭ ﺇﻟﻰ ﺃﻱ ﺸﻜل ﻤﻥ ﺃﺸﻜﺎل ﺍﻟﻌﺭﻭﺽ ﺍﻟﻤﺘﺤﺭﻜﺔ ) ﺍﻷﻓﻼﻡ ( ﻭﺍﻟﺼﻭﺕ ﻭﺍﻟﻤﺴﺘﺨﺩﻤﺔ
ﻓﻲ ﺍﻟﺤﺎﺴﺏ ،
ﻴﺴﺘﺨﺩﻡ ﺍﻟﻌﻨﺼﺭ MediaPlayerﻓﻲ ﺍﻟﺼﻔﺔ Systemﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻷﻭﺴﺎﻁ ﺍﻟﻤﺘﻌﺩﺩ ﻓﻲ ﺩﻟﻔﻲ :
ﺍ ـ ﺘﺸﻐﻴل ﻤﻠﻔﺎﺕ ﺍﻷﺼﻭﺍﺕ : ﻤﺜﺎل : 1
ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ MediaPlayerﻭﺃﻋﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : C:\WINDOWS\MEDIA\ CHORD.WAV Filename ﺘﺤﺩﻴﺩ ﺍﻟﻤﻠﻑ ﺍﻟﺼﻭﺘﻲ ﺍﻟﺫﻱ ﺴﻴﻌﺭﻀﻪ ﺍﻟﻌﻨﺼﺭ
Autoopen
ﺇﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﺸﻐﻴل ﺍﻟﺘﻠﻘﺎﺌﻲ
True
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﺨﻀﺭ ﻭﺴﺘﺴﻤﻊ ﺍﻟﺼﻭﺕ ﺇﺫﺍ ﻜﺎﻨﺕ ﺃﺠﻬﺯﺓ ﺍﻟﺼﻭﺕ ﻓﻲ ﺤﺎﺴﻭﺒﻙ ﺠﺎﻫﺯﺓ . ﻤﺜﺎل : 2ﺘﺤﺩﻴﺩ ﺍﻟﻤﻠﻑ ﺍﻟﺼﻭﺘﻲ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻔﻴﺫ : ﺃﻀﻑ ﺯﺭ ﻭﻋﻨﺼﺭ OpenDialogﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
ﻋﺩل ﺍﻟﺨﺎﺼﺔ Filterﻟﻠﻌﻨﺼﺭ OpenDialog1ﺒﺤﻴﺙ ﻴﻌﺭﺽ ﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻻﻤﺘﺩﺍﺩ .WAVﻭ ﺍﻻﻤﺘﺩﺍﺩ .MP3ﻓﻘﻁ
. ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ; MediaPlayer1.Close if openDialog1.Execute then begin ; MediaPlayer1.FileName := Opendialog1.FileName ; MediaPlayer1.Open ;end ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﺘﻌﻤل ﻋﻠﻰ ﺇﻴﻘﺎﻑ ﻋﻤل ﺍﻟﻌﻨﺼﺭ MediaPlayerﺇﺫﺍ ﻜﺎﻥ ﻴﻌﺭﺽ ﻤﻠﻑ ﺼﻭﺘﻲ ﻋﻨﺩ ﻀﻐﻁ ﺍﻟﺯﺭ .
182
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﺨﺭﻯ ﺘﺴﻨﺩ ﺃﺴﻡ ﻤﻠﻑ ﺠﺩﻴﺩ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ، MediaPlayerﺃﻤﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ Mediaplayer.Openﻓﻤﻬﻤﺘﻬﺎ ﻻ ،ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺤﺩﺩ ﻤﻠﻑ ﻤﺎ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻷﺨﻀﺭ . ﺠﻌل ﺍﻟﻌﻨﺼﺭ ﻓﻌﺎ ﹰ ﻋﺭﺽ ﻤﻠﻔﺎﺕ ﺍﻟﻔﻴﺩﻴﻭ :
ﻟﻌﺭﺽ ﻤﻠﻔﺎﺕ ﺍﻟﻔﻴﺩﻴﻭ ﺃﻀﻑ ﺍﻟﻌﻨﺼﺭ Panelﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ MediaPlayerﻓﻲ ﺍﻟﺨﺎﺼﺔ Displayﺍﻟﻘﻴﻤﺔ ، Panel1ﺜﻡ ﻋﺩل ﺍﻟﺨﺎﺼﺔ Filterﻟﻠﻌﻨﺼﺭ OpenDialog1ﺒﺤﻴﺙ ﻴﻌﺭﺽ ﻤﻠﻔﺎﺕ .AVIﻭ .DATﻭ . .MPG ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻭﺤﺩﺩ ﺍﻟﻤﻠﻑ ) ﻁﺒﻌﹰﺎ ﺇﺫﺍ ﻜﻨﺕ ﻻ ﺘﻤﻠﻙ ﻏﻴﺭﻩ ( : C:\Program Files\Borland\Delphi6\Demos\CoolStuf\ speedis.avi ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Playﻭﺸﺎﻫﺩ ﺍﻟﻌﺭﺽ . ﺴﻤﺎﻉ ﺍﻟﺼﻭﺕ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ : MediaPlayer
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﺯﺭ : SpeedButton ﺃﻀﻑ ﺍﻟﻭﺤﺩﺓ MMSystemﻟﻠﻘﺴﻡ Usesﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺤﺩﺙ OnMouseUPﻟﻠﻌﻨﺼﺭ SpeedButton )PlaySound('C:\WINDOWS\MEDIA\DING.WAV',0,0 ﻁﺒﻌﹰﺎ ﺒﺈﻤﻜﺎﻨﻙ ﺘﺤﺩﻴﺩ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﻓﻲ ﺍﻟﻭﺴﻴﻁ ﺍﻷﻭل .
183
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 27 ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ :
ﺍ ـ ﻨﺴﺦ ﻤﻠﻑ : ﻤﺜﺎل :
ﺃﻨﺸﺊ ﺼﻭﺭﺓ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺴﺎﻡ ﻭﺍﺤﻔﻅﻬﺎ ﻋﻠﻰ ﺍﻟﻘﺭﺹ \ C:ﺒﺎﺴﻡ Test.Bmpﻭﺃﻨـﺸﺄ ﺍﻟﻤﺠﻠـﺩ ،C:\temp ﻭﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻼﺯﻤﺔ ﻟﻨﺴﺦ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﺇﻟﻰ ﺍﻟﻤﺠﻠﺩ : C:\temp ; )copyfile('c:\Test.bmp','c:\Temp\Test.bmp',False ﺍﻟﻭﺴﻴﻁ ﺍﻷﻭل :ﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻟﻤﺼﺩﺭ ) ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﻨﺴﺨﻪ ( . ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ :ﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻟﻬﺩﻑ ) ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀﻩ ﻭﺴﻴﻜﻭﻥ ﻨﺴﺨﺔ ﻋﻥ ﺍﻷﺼل ﻓﻲ ﺍﻟﻤﻠﻑ ﺍﻷﻭل ( ﻴﻤﻜـﻥ ﺃﻴﻀﹰﺎ ﺘﻐﻴﺭ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﻬﺩﻕ ﺃﻱ ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ ' 'C:\Temp\Des.bmpﻭﺒﻬﺫﺍ ﺴﻴﺘﻡ ﻨـﺴﺦ ﺍﻟﻤﻠـﻑ C:\test.bmpﺇﻟﻰ ﺍﻟﻤﻠﻑ C:\temp\des.bmpﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﻴﻜﻭﻥ ﻟﻠﻤﻠﻔﻴﻥ ﺃﺴﻤﻴﻥ ﻤﺨﺘﻠﻔﻴﻥ ﻭﻟﻜﻨﻬﻤﺎ ﺴـﻴﺤﻭﻴﺎﻥ ﻨﻔـﺱ
ﺍﻟﺒﻴﺎﻨﺎﺕ .
ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻟﺙ :ﻓﻲ ﺤﺎل ﺃﻋﻁﻴﺕ ﻫﺫﺍ ﺍﻟﻭﺴﻴﻁ ﺍﻟﻘﻴﻤﺔ Trueﻓﺈﻥ ﺍﻟﺘﺎﺒﻊ ﺴﻴﻔﺸل ﻓﻲ ﺤﺎل ﻜﺎﻥ ﻫﻨﺎﻙ ﻤﻠﻑ ﺒﻨﻔﺱ ﺍﻷﺴـﻡ ﻓﻲ ﺍﻟﻤﺠﻠﺩ ﺍﻟﻬﺩﻑ ﻭﺃﻤﺎ ﺃﻥ ﻜﺎﻨﺕ ﻗﻴﻤﺘﻪ Falseﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻨﻪ ﺴﺘﺘﻡ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻭﻕ ﺍﻟﻤﻠﻑ ﺍﻟﻬﺩﻑ ﺇﺫﺍ ﻜﺎﻥ ﻤﻭﺠﻭﺩﹰﺍ . 2ـ ﻨﻘل ﻤﻠﻑ :
ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻨﻘل ﺍﻟﻤﻠﻑ ﻤﻥ ﻤﻜﺎﻥ ﺇﻟﻰ ﺁﺨﺭ ﻤﻊ ﺇﻤﻜﺎﻨﻴﺔ ﺘﻐﻴﻴﺭ ﺃﺴﻤﻪ ) :ﺃﻀﻑ ﺯﺭ ﺇﻟـﻰ ﺍﻟﻤـﺸﺭﻭﻉ ﺍﻟـﺴﺎﺒﻕ ﻭﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;)'Movefile('c:\temp\test.bmp','c:\movetest.bmp ﺍﻟﻭﺴﻴﻁ ﺍﻷﻭل ﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻷﺼل ،ﻭﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ ﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻟﻬﺩﻑ ،ﺴﻴﻔﺸل ﺍﻟﺘﺎﺒﻊ ﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻤﻠﻑ ﺍﻷﺼل ﻏﻴﺭ ﻤﻭﺠﻭﺩ ﺃﻭ ﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻭﺠﻬﺔ ﻤﻭﺠﻭﺩﹰﺍ ) ﻟﻴﺱ ﻫﻨﺎﻙ ﻫﻨﺎ ﺍﻜﺎﻨﻴﺔ ﻟﻠﻜﺘﺎﺒﺔ ﻓﻭﻕ ﺍﻟﻤﻠﻑ ( .
3ـ ﺤﺫﻑ ﻤﻠﻑ :
ﻟﺤﺫﻑ ﻤﻠﻑ ﻤﺎ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ;)'DeleteFile('c:\movetest.bmp 4ـ ﻁﺭﻕ ﺃﻨﺸﺎﺀ ﺍﻟﻤﻠﻔﺎﺕ ﻭﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ﻓﻲ ﺩﻟﻔﻲ : 1ـ ﻤﻠﻔﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺎﺴﻜل :ﻴﻤﻜﻨﻙ ﺇﻨﺸﺎﺀ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻨﺼﻴﺔ ﻭﺍﻟﻤﻠﻔﺎﺕ ﻤﺤﺩﺩﺓ ﺍﻟﻨﻭﻉ ﻭﺍﻟﻤﻠﻔـﺎﺕ ﻏﻴـﺭ ﻤﺤـﺩﺩﺓ ﺍﻟﻨـﻭﻉ ) ( Untyped Fileﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺭﻭﻓﺔ ﻓﻲ ﻟﻐﺔ ﺘﺭﺒﻭ ﺒﺎﺴﻜل ﻤﺜل) AssignFileﻭ Resetﻭ Rewriteﻭ Readlnﻭ Writelnﻭ ،( .. CloseFileﺘﻌﺘﺒﺭ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻏﻴﺭ ﻤﺘﻭﺍﻓﻘﺔ ﻤﻊ ﻭﻴﻨﺩﻭﺯ ﻭﻟﻜﻨﻬﺎ ﺘﻌﻤل ﻋﻠﻰ ﺃﻴﺔ ﺤﺎل ﻭﻟﻜﻥ ﺘﻔﻀل ﺍﻟﻁﺭﻕ ﺍﻷﺨﺭﻯ . 2ـ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﻘﺎﺒﺽ ﺍﻟﻤﻠﻑ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ) : ( File Handlesﻴﺘﻡ ﺘﻌﻴﻥ ﻤﻘﺒﺽ ﻟﻠﻤﻠﻑ ﻋﻨﺩ ﺇﻨﺸﺎﺀﻩ ﺃﻭ ﻓﺘﺤﺔ ﻭﻤﻥ
ﺜﻡ ﻴﺘﻡ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﺍ ﺍﻟﻤﻘﺒﺽ ﺤﻴﺙ ﺘﺴﺘﺩﻋﻲ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺘﻭﺍﺒﻊ Windows Apiﻹﺘﻤﺎﻡ ﻋﻤﻠﻬﺎ ﻭﺠﻤﻴﻊ ﻫﺫﻩ ﺍﻟﺘﻭﺍﺒﻊ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﺤﺩﺓ . SysUtils 184
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
3ـ ﻤﻠﻔﺎﺕ ﺴﺘﺭﻴﻡ ) : File Streamsﻤﻌﻨﻰ ﻜﻠﻤﺔ Streamﻫﻭ ﻨﻬﺭ ﺃﻭ ﺠﺩﻭل ﺃﻭ ﺴﻴل ﻭﻻ ﺃﻋﺭﻑ ﻜﻴﻑ ﺃﺘﺭﺠﻤﻬـﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻭﻗﺩ ﺠﺭﺕ ﺍﻟﻌﺎﺩﺓ ﺒﻴﻥ ﺍﻟﻤﺒﺭﻤﺠﻥ ﺍﻟﺤﺩﻴﺙ ﻋﻨﻬﺎ ﺒـ ﺴﺘﺭﻴﻡ ﻓﻴل ( ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻟﻨﻭﻉ TFileStream ﻭﻫﻲ ﻤﻠﻔﺎﺕ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﺨﺯﻥ ﻓﻴﻬﺎ ﺃﻱ ﻨﻭﻉ ﻤﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﻔﻅ ﻓﻴﻬﺎ ﺒﻴﺎﻨﺎﺘﻙ ﺒﻁﺭﻴﻘﺔ ﻤـﺸﻔﺭﺓ ﺒﺤﻴـﺙ ﻻ
ﻴﺴﺘﻁﻴﻊ ﺃﺤﺩ ﻏﻴﺭﻙ ﺍﻹﻁﻼﻉ ﻋﻠﻴﻬﺎ ﺘﺘﻌﺎﻤل ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻊ ﺍﻟﻨﻭﻋﻴﻥ TStreamﻭ TMemoryStreamﻭﻫﺫﺍ ﻴﻤﻜﻨﻙ ﻤﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺸﻜل ﻤﺒﺎﺸﺭ ﻭﻴﻤﻜﻨﻙ ﺘﺤﻤﻴل ﺒﻴﺎﻨﺎﺘﻙ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻤﻥ ﺜﻡ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﻤﻠﻑ ﺃﻭ ﻴﻤﻜﻨﻙ ﺘﺤﻤﻴﻠﻬﺎ ﺒﻴﺎﻨﺎﺘﻙ ﺇﻟىﺎﻟﺫﺍﻜﺭﺓ ﻟﻴﺘﺸﺎﺭﻙ ﻋﻠﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﺠﺯﺀ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ . ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻤﻘﺒﺽ ) : ( Working With File Handles ﺴﻨﻭﻀﺢ ﻤﺜﺎ ﹰﻻ ﻴﺒﻴﻥ ﻁﺭﻴﻘﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ : ﺃ ـ ﺍﻟﻜﺘﺎﺒﺔ ﺇﻟﻰ ) ﻓﻲ ( ﻤﻠﻑ : ﺃﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var FileHandle:integer ;S:string Begin if Not FileExists('c:\MyFile.mka') then FileHandle:= FileCreate('c:\MyFile.mka') Else ; )FileHandle:= FileOpen('c:\MyFile.mka',fmOpenReadWrite ; 's:= 'khaled Nassr Agha ;)) FileWrite(FileHandle,Pointer(s)^,length(s ;)Fileclose(FileHandle ;end ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ FileExistsﺍﻟﺘﻲ ﺘﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Trueﻓﻲ ﺤﺎل ﻜﺎﻥ ﺍﻟﻤﻠﻑ ﻤﻭﺠﻭﺩﹰﺍ ﻭﻓﻲ ﺤﺎل ﻋﺩﻡ ﻭﺠـﻭﺩ ﺍﻟﻤﻠﻑ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﺎﺒﻊ FileCreateﺍﻟﺘﻲ ﻴﻨﺸﺄ ﺍﻟﻤﻠﻑ ﻭﻴﻌﻴﺩ ﺭﻗﻡ ﻤﻘﺒﺽ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﻓﻲ ﺍﻟﻤﺘﺤﻭل ، FileHandleﺃﻤـﺎ ﻓﻲ ﺤﺎل ﻭﺠﻭﺩ ﺍﻟﻤﻠﻑ ﺴﺎﺒﻘﹰﺎ ﻓﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﺎﺒﻊ FileOpenﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﻔﺘﺢ ﺍﻟﻤﻠﻑ ﻭﻴﻌﻴﺩ ﺭﻗﻡ ﻤﻘﺒﺽ ﻫـﺫﺍ ﺍﻟﻤﻠـﻑ ﻓـﻲ
ﺍﻟﻤﺘﺤﻭل ، FileHandleﻭﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ fmOpenReadWriteﻫﻭ ﺃﺤﺩ ﺍﻟﻘﻴﻡ ﺍﻟﺘﻲ ﻴﺄﺨﺫﻫﺎ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﻭﻴﻌﻨﻲ ﺍﻨـﻪ ﺴﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﻠﻑ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﻭﻫﻨﺎﻙ ﻋﺩﺓ ﻗﻴﻡ ﺃﺨﺭﻯ ﺭﺍﺠﻊ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺴﺎﻋﺩﺓ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻨﻬﺎ.
ﺍﻟﺘﺎﺒﻊ FileWriteﻴﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺍﻟﻘﻴﻤﺔ Sﻭﺍﻟﺘﻲ ﻫﻲ ﻤﻥ ﻨﻭﻉ ﻤﺅﺸﺭ ﻓﻲ ﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻟﻤﻘـﺒﺽ FileHandleﻭﺒﻁـﻭل ﺍﻟﻤﺘﺤﻭل ﺍﻟﺜﺎﻟﺙ ﻭﺍﻟﺫﻱ ﻴﺸﻴﺭ ﻫﻨﺎ ﺇﻟﻰ ﻁﻭل ﺍﻟﺴﻠﺴﻠﺔ . S ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﺨﻴﺭﺓ FileCloseﺘﻘﻭﻡ ﺒﺈﻏﻼﻕ ﺍﻟﻤﻠﻑ ﺍﻟﻤﻔﺘﻭﺡ .
ﺏ ـ ﺍﻟﻘﺭﺍﺀﺓ ﻤﻥ ﻤﻠﻑ :
ﺃﻀﻑ ﻋﻨﺼﺭ Memoﻭ ﺯﺭﹰﺍ ﺠﺩﻴﺩﹰﺍ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var FileHandle,FileSize : integer ;s:string begin if FileExists ('c:\MyFile.mka') then begin ; )FileHandle:= FileOpen('c:\MyFile.mka',fmOpenReadWrite 185
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)FileSize:=getfilesize(FileHandle,nil ;)setlength(s,FileSize ;)Fileread(FileHandle,pointer(s)^,FileSize ;Memo1.Text := s ;)Fileclose(FileHandle ;end ﻟﻠﺘﻨﻘل ﻀﻤﻥ ﺍﻟﻤﻠﻑ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ) : SeekFile ( Handle, Offset ,originﺤﻴﺙ Handleﻫﻭ ﻤﻘﺒﺽ ﺍﻟﻤﻠﻑ ﻭ Offsetﻤﻘﺩﺍﺭ ﺍﻹﺯﺍﺤﺔ ﻋﻥ Originﻭﻴﺄﺨﺫ Originﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :
0
ﻴﺘﻡ ﺍﻋﺘﺒﺎﺭ ﺍﻹﺯﺍﺤﺔ Offsetﻤﻥ ﺃﻭل ﺍﻟﻤﻠﻑ .
1
ﻴﺘﻡ ﺍﻋﺘﺒﺎﺭ ﺍﻹﺯﺍﺤﺔ Offsetﻤﻥ ﻤﻭﻗﻊ ﺍﻟﻤﺅﺸﺭ ﺍﻟﺤﺎﻟﻲ .
2
ﻴﺘﻡ ﺍﻋﺘﺒﺎﺭ ﺍﻹﺯﺍﺤﺔ Offsetﻤﻥ ﺁﺨﺭ ﺍﻟﻤﻠﻑ .
ﻼ ﺍﻟﺘﻌﻠﻴﻤــﺔ ) SeekFile(FileHandle,0,0ﺘــﻀﻊ ﻤﺅﺸــﺭ ﺍﻟﻤﻠــﻑ ﻓــﻲ ﺒﺩﺍﻴــﺔ ﺍﻟﻤﻠــﻑ ﻭ ﺍﻟﺘﻌﻠﻴﻤــﺔ ﻤــﺜ ﹰ ) Seekfile(FileHandle,12,2ﺘﻀﻊ ﻤﺅﺸﺭ ﺍﻟﻤﻠﻑ ﻋﻠﻰ ﺒﻌﺩ 12ﺤﺭﻑ ﻤﻥ ﺁﺨﺭ ﺍﻟﻤﻠﻑ . ﺍﻟﻤﻠﻔﺎﺕ ﺴﺘﺭﻴﻡ : File Stream
ﺴﻨﺄﺨﺫ ﻤﺜﺎ ﹰﻻ ﺒﺴﻴﻁ ﹰﺎ ﻋﻥ ﻜﻴﻔﻴﺔ ﺃﻨﺸﺎﺀ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﻤﻠﻔﺎﺕ ﺯﻤﻥ ﺍﻟﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﺇﻟﻴﻬﺎ :
ﺇﻨﺸﺎﺀ ﻤﻠﻑ ﻤﻥ ﺍﻟﻨﻭﻉ TFileStreamﻭﺍﻟﻜﺘﺎﺒﺔ ﺇﻟﻴﻪ :
ﺃﻀﻑ ﺯﺭ ﺇﻟﻰ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻭﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ; Var FileStream : TFileStream ;buffer : String begin ; )FileStream := TFileStream.Create('c:\MyStream.tst',fmCreate ; ' Buffer := ' This Line Will Be Save to File ;))FileStream.Write(pointer(Buffer)^,Length(Buffer ; FileStream.Free ;end ﺍﻟﺘﻌﻠﻴﻤﺔ TFileStream.Createﺘﻨﺸﺄ ﺍﻟﻤﻠﻑ MyStream.Tstﻋﻠﻰ ﺍﻟﻘﺭﺹ Cﺃﻤﺎ ﺍﻟﻭﺴﻴﻁ fmCreateﻓﺈﻨﻪ ﻴﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻤﻠﻑ ﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﻤﻭﺠﺩﹰﺍ ﻭﻓﻲ ﺤﺎل ﻜﺎﻥ ﻤﻭﺠﻭﺩﹰﺍ ﻴﻔﺘﺢ ﺍﻟﻤﻠﻑ ﻓﻲ ﻭﻀﻊ ﻟﻠﻜﺘﺎﺒﺔ ﻓﻘﻁ .
ﺍﻟﺘﻌﻠﻴﻤﺔ : FileStream.Writeﺘﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺍﻟﻨﺹ ﻓﻲ ﺍﻟﻤﺘﺤﻭل ) Bufferﻻ ﺘﺘﻌﺎﻤل ﺇﻻ ﻤﻊ ﺍﻟﻤﺅﺸﺭﺍﺕ ( ﺍﻟﺘﻌﻠﻴﻤﺔ : FileStream.Freeﺘﻘﻭﻡ ﺒﺘﺤﺭﻴﺭ ﺍﻟﻤﺘﺤﻭل FileStreamﻭﺇﻏﻼﻕ ﺍﻟﻤﻠﻑ ﺍﻟﻤﺭﺘﺒﻁ ﻤﻌﻪ . ﺍﻟﻘﺭﺍﺀﺓ ﻤﻥ ﻤﻠﻑ : TFileStream ﺃﻀﻑ ﻋﻨﺼﺭ Memoﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺠﺩﻴﺩ : ; Var FileStream : TFileStream ;buffer : String ;FileSize : integer begin ; )FileStream := TFileStream.Create('c:\MyStream.tst',fmOpenRead ;) FileSize := (FileStream.size 186
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)Setlength(Buffer,FileSize ;)FileStream.read(pointer(Buffer)^,FileSize ;memo1.text := Buffer ; FileStream.Free ;end ﻻ ﺒﻔﺘﺢ ﺍﻟﻤﻠﻑ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ Createﻭﻤﻥ ﺜﻡ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ FileStream.Sizeﻟﺘﺤﺩﻴﺩ ﺤﺠـﻡ ﻗﻤﻨﺎ ﺍﻭ ﹰ ﺍﻟﻤﻠﻑ ﻭﺃﻋﻁﻴﻨﺎ ﺍﻟﻤﺘﺤﻭل Bufferﺤﺠﻡ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺔ SetLengthﺜﻡ ﻗﺭﺃﻨﺎ ﻤﻥ ﺍﻟﻤﻠﻑ ﺇﻟﻰ ﺍﻟﻤﺘﺤﻭل Bufferﻭﻭﻀﻌﻨﺎ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ﺍﻟﻌﻨﺼﺭ . Memo1
ﻤﻼﺤﻅﺎﺕ : 1ـ ﺍﻟﺘﻌﻠﻴﻤﺔ : FieStream.Seekﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Seekﻟﻨﻘل ﻤﺅﺸﺭ ﺍﻟﻤﻠﻑ ﻟﻤﺴﺎﻓﺔ ﻤﺤﺩﺩﺓ ﺘﺒﻌﹰﺎ ﻟﻠﻭﺴـﻴﻁ ( Origin ﺭﺍﺠﻊ ﺍﻟﻭﺴﻴﻁ Originﻟﻠﺘﻌﻠﻴﻤﺔ SeekFileﻟﻺﻁﻼﻉ ﺃﻜﺜﺭ ﻋﻠﻰ ﻭﺴﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ (. ﻤﻌﻠﻭﻤﺎﺕ ﻤﻔﻴﺩﺓ : ﺍ ـ ﺘﺸﻐﻴل ﺒﺭﻨﺎﻤﺞ ﺁﺨﺭ ﻤﻥ ﺩﺍﺨل ﺒﺭﻨﺎﻤﺠﻙ :
ﺒﻔﺭﺽ ﺃﻨﻙ ﺘﺭﻴﺩ ﺘﺴﺘﺩﻋﻲ ﺒﺭﻨﺎﻤﺞ ﺍﻵﻟﺔ ﺍﻟﺤﺎﺴﺒﺔ ﻀﻤﻥ ﺒﺭﻨﺎﻤﺞ :ﻤﻥ ﺍﻟﻤﻌﻠﻭﻡ ﺃﻥ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺤﺎﺴﺒﺔ ﻴﺘﻡ ﺘﻨﻔﻴﺫﺓ ﻋﻥ ﻁﺭﻴﻕ
ﺍﻟﻤﻠﻑ Calc.exeﺍﻟﻤﻭﺠﻭﺩ ﻀﻤﻥ ﻓﻬﺭﺱ ﺍﻟﻭﻴﻨﺩﻭﺯ ﻭﻻﺴﺘﺩﻋﺎﺀ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺒﺭﻨﺎﻤﺞ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴـﺔ ﻓـﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ : ; )WinExec('C:\Windows\Calc.exe' ,Sw_Show ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺈﻅﻬﺎﺭ ﺒﺘﺸﻐﻴل ﺒﺭﻨﺎﻤﺞ ﺍﻵﻟﺔ ﺍﻟﺤﺎﺴﺒﺔ . ﻤﻼﺤﻅﺔ :ﺘﻔﺘﺭﺽ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻥ ﻤﺠﻠﺩ ﺍﻟﻭﻴﻨﺩﻭﺯ ﻋﻠﻰ ﺠﻬﺎﺯﻙ ﻫﻭ C:\Windowsﻭﻫﺫﺍ ﻴﺤﺼل ﺒﺸﻜل ﺍﻓﺘﺭﺍﻀـﻲ ﻋﻨﺩ ﺘﻨﺼﻴﺏ Windows 98ﻭ Windows Meﺃﻤﺎ ﺍﻟﻔﻬﺭﺱ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻟــ Windows 2000ﻭ Windows Xpﻓﻬﻭ C:\Win32ﻭﻜﻤﺎ ﺘﻌﻠﻡ ﻴﻤﻜﻥ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺘﻐﻴﺭ ﻫﺫﻩ ﺍﻟﻔﻬﺎﺭﺱ ﺃﺜﻨﺎﺀ ﺘﻨﺼﻴﺏ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻟﺫﻟﻙ ﺘﺴﺘﺨﺩﻡ ﻋـﺎﺩﺓ
ﺍﻟﺘﻌﻠﻴﻤﺔ GetWindowsDirectoryﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻓﻬﺭﺱ ﻨﻅﺎﻡ ﺍﻟﺘـﺸﻐﻴل ﻤﺜـﺎل :
GetWindowsDirectoy
;) (p,200ﺤﻴﺙ pﻤـﻥ ﺍﻟﻨـﻭﻉ Pcharﻭﺴـﻴﻜﻭﻥ ﻓﻴـﻪ ﺍﺴـﻡ ﻤﺠﻠـﺩ ﺍﻟﻭﻴﻨـﺩﻭﺯ ) ﻻﺘـﻨﺱ ﺍﺴـﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤـﺔ ) GetMem(p,200ﻗﺒل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ) FreeMem(p,200ﺒﻌﺩﻫﺎ .
2ـ ﺘﺸﻐﻴل ﻤﻠﻑ ﺘﺎﺒﻊ ﻟﺒﺭﻨﺎﻤﺞ ﺁﺨﺭ ﻤﻥ ﺒﺭﻨﺎﻤﺞ :
ﺒﻘﺭﺽ ﺃﻨﻙ ﺘﺭﻴﺩ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ ﺃﻥ ﻴﺸﻐل ﺒﺭﻨﺎﻤﺞ ﻤﺎﻴﻜﺭﻭﺴﻭﻓﺕ ﻭﻭﺭﺩ ) ( Microsoft Wordﻭﻴﻌﺭﺽ ﺃﺤﺩ ﺍﻟﻤﻠﻔﺎﺕ
ﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
ﺃﻀﻑ ﺃﻭ ﹰ ﻻ ﺍﻟﻭﺤﺩﺓ ShellApiﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻭﻤﻥ ﺜﻡ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ . ; )shellapi.ShellExecute(0 ,'Open','C:\My Documents\Test.doc',Nil,Nil,0 ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻔﺘﺢ ﺍﻟﻤﻠﻑ Test.docﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﻤﺠﻠﺩ . My Document ﺇﺫﺍ ﺃﺭﺩﺕ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻓﺘﺢ ﺍﻟﻤﻠﻑ ﻭﻁﺒﺎﻋﺘﻪ ﻤﺒﺎﺸﺭﺓ ﺍﺴﺘﺒﺩل ﺍﻟﻭﺴﻴﻁ ' 'Openﺒﺎﻟﻭﺴﻴﻁ '. 'Print 187
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺒﻴﺌﺔ ﻭﻴﻨﺩﻭﺯ ﻟﻤﻌﺭﻓﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺍﻟﺫﻱ ﺘﺴﺘﺨﺩﻤﻪ ﻟﻔﺘﺢ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﺍﻟﻤﻠﻔﺎﺕ ﻭﻤـﻥ ﺜﻡ ﺘﻘﻭﻡ ﺒﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻓﺘﺢ ﺍﻟﻤﻠﻑ ﺒﺩﺍﺨﻠﻪ ﻓﺈﺫﺍ ﺍﺨﺘﺭﺕ ﺍﺴﺘﺨﺩﻤﺕ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻠﻑ C:\Mypicture.jpgﺴﺘﻘﻭﻡ
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻟﺒﺤﺙ ﻋﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺍﻟﺫﻱ ﻴﻔﺘﺢ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺼﻭﺭ ﻓﻘﺩ ﻴﻜﻭﻥ ﻓﻭﺘﻭﺸﻭﺏ ﺃﻭ Internet . Explorer ـ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻟﻔﺘﺢ ﻤﺠﻠﺩ ﻤﺎ :
ﺇﺫﺍ ﺃﺭﺩﺕ ﻓﺘﺢ ﻤﺠﻠﺩ ﻤﺎ ﻓﻲ ﻤﺴﺘﻜﺸﻑ ﻭﻴﻨﺩﻭﺯ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; )shellapi.ShellExecute(0 ,'Open','C:\My Documents',Nil,Nil,0 ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﻔﺘﺢ ﻤﺠﻠﺩ . C:\My Document
188
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 27 ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ : ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﺸﺎﺒﻪ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ) ( Notepadﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺄﻨﻪ ﺴﻴﺘﻌﺎﻤل ﻤﻊ ﻤﻠﻔﺎﺕ
ﻤﻥ ﺍﻟﻨﻭﻉ Rtfﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻤﻠﻔﺎﺕ ، Txtﻜﻤﺎ ﺃﻨﻪ ﺴﻴﻜﻭﻥ ﻤﻥ ﺍﻟﻨﻭﻉ MDIﺒﺤﻴﺙ ﻴﻤﻜﻨﻨﺎ ﺃﻥ ﻨﻔﺘﺢ ﺃﻜﺜﺭ ﻤﻥ ﻤﻠﻑ ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ . ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ MainMenuﻭﺍﻟﻌﻨﺼﺭ OpenDialogﻭﺃﻋﻁ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﻌﻨﺎﺼﺭ : ﻋﻨﺼﺭ ﺍﻟﻨﻤﻭﺫﺝ : Form1 ﺍﻟﻘﻴﻤﺔ
ﺍﻟﺨﺎﺼﺔ BiDiMode Caption
bdRightToLeft ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ fsMDIForm FormStyle MainForm Name poDesktopCenter Position ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ : MainMenuﺃﻨﺸﺊ ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ) ﻤﻠﻑ ( ﻭﺍﻟﻘﺎﺌﻤﺔ ) ﺇﻁﺎﺭ (:
ﺃﻋﻁ ﺍﻟﺯﺭ )ﻤﻠﻑ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ FileMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ : ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption &ﺠﺩﻴﺩ
New
&ﻓﺘﺢ
OpenFile
&ﺨﺭﻭﺝ
CloseApp
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺇﻁﺎﺭ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ Window1ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ : ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut
ﺘﺭﺘﻴﺏ ﺘﺘﺎﻟﻲ ﺍﻟﻌﻨﺼﺭ : OpenDialog1 .rtf DefaultExt Filter ﻀﻊ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻷﺴﻁﺭ ﺍﻟﺘﺎﻟﻴﺔ : Filter Name Filter Rich Text *.rtf Text File *.Txt All File **. ﺍﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ ﺒﺎﺴﻡ Main.pasﻭﺍﻟﻤﺸﺭﻭﻉ ﺒﺎﺴﻡ . MyTextEditor.Dpr 189
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﻨﻤﻭﺫﺠﹰﺎ ﺠﺩﻴﺩﹰﺍ FileÆ New Æ Formﻭﺃﻀﻑ ﺃﻟﻴﻪ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ :ﻋﻨﺼﺭ MainMenu ﻭ ﻋﻨﺼﺭ RichTextﻤﻥ ﺍﻟﺼﻔﺤﺔ Win32ﻭﻋﻨﺼﺭ SaveDialogﻭ PrintDialogﻭﻋﻨﺼﺭ .FontDialog
ﺃﻋﻁ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺠﺩﻴﺩ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : bdRightToLeft BiDiMode fsMDIChild FormStyle EditForm Name ﺃﻨﺸﺊ ﻓﻲ ﺍﻟﻌﻨﺼﺭ MainMenu1ﺜﻼﺙ ﻗﻭﺍﺌﻡ ﺒﺎﺴﻡ ) ﻤﻠﻑ ( ﻭ ) ﺘﺤﺭﻴﺭ ( ﻭ ) ﺘﻨﺴﻴﻕ ( ﻭﺃﻨﺸﺊ ﻓﻲ ﻜل ﻤﻨﻬﺎ ﺃﺯﺭﺍﺭ ﺤﺴﺏ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ : ﺃﻋﻁ ﺍﻟﺯﺭ )ﻤﻠﻑ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ FileMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ : ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name New
&ﻓﺘﺢ
OpenFile
ﺤﻔﻅ
Save
ﺤﻔﻅ ﺒﺎﺴﻡ
SaveAs
ﻁﺒﺎﻋﺔ
PrintFile
ﺇﻏﻼﻕ
CloseFile
&ﺨﺭﻭﺝ
CloseAll
&ﺠﺩﻴﺩ
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut
Ctrl+S
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺘﺤﺭﻴﺭ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ EditMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ : ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name CopyText
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut Ctrl+C
ﻗﺹ
Cuttext
Ctrl+X
ﻟﺼﻕ
PasteText
Ctrl+V
ﺘﺤﺩﻴﺩ ﺍﻟﻜل
SelectAll
Ctrl+A
ﻨﺴﺦ
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺘﻨﺴﻴﻕ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ EditMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ : ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ
Left1
ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﻤﻴﻥ
Right1
ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻭﺴﻁ
Center1
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut
ﺍﻟﺘﻔﺎﻑ ﺘﻠﻘﺎﺌﻲ
WordWrap1
ﺨﻁ
Font1
ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺜﻼﺜﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺘﻨﺴﻴﻕ ﻭﺃﻋﻁﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ RadioItemﺍﻟﻘﻴﻤﺔ Trueﻫﺫﺍ ﺴـﻴﺠﻌﻠﻬﺎ ﺘﺒـﺩﻭ 190
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻜﺄﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﻭﻻ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺇﻻ ﻭﺍﺤﺩ ﻤﻨﻬﺎ ﻓﻲ ﺫﺍﺕ ﺍﻟﻭﻗﺕ . ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Richedit1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : alClient Align Editor Name ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Savedialog1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ : .rtf DefaultExt Filter ﻀﻊ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻷﺴﻁﺭ ﺍﻟﺘﺎﻟﻴﺔ : Filter *.rtf *.Txt _ ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺴﻤﻲ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺠﺩﻴﺩﺓ ﺒﺎﺴﻡ EditText.pas
Filter Name Rich Text Text File
ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺠﺩﻴﺩ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ : MainForm ;)TEditForm.Create(Self ﺍﻟﻭﺴﻴﻁ Selfﻭﺴﻴﻁ ﻤﻌﺭﻑ ﻴﻌﻭﺩ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺫﻱ ﻴﻁﻠﺏ ﻓﻴﻪ ﻫﺫﺍ ﺍﻟﻭﺴﻴﻁ . ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺠﺩﻴﺩ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ :EditForm;)TEditForm.Create(Self ﻓﻲ ﺍﻟﺤﺩﺙ OnCloseﻟﻠﻨﻤﻭﺫﺝ EditFormﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :; Action := CaFree ﺘﻤﻜﻨﻨﺎ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻻﺒﻥ ﻭﺘﻜﻭﻥ ﻗﻴﻤﺘﻬﺎ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﺒﻥ ﻫﻲ CaMinimizedﺤﻴﺙ ﻻ ﻤﻥ ﺇﻏﻼﻗﻪ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻏﻼﻕ . ﻴﺘﻡ ﺘﺼﻐﻴﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﺒﻥ ﺒﺩ ﹰ
ـ ﻋﻨﺩﻤﺎ ﻴﻘﻭﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻓﺘﺢ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ) ﺴﻭﺍﺀ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﺃﻭ ﺍﻻﺒﻥ ( ﺴﻨﻘﻭﻡ ﺒﺈﻨﺸﺎﺀ ﻨﺎﻓـﺫﺓ ﺍﺒﻥ ﺠﺩﻴﺩﺓ ﻭﺴﻨﻘﻭﻡ ﺘﺤﻤﻴل ﺍﻟﻤﻠﻑ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ، ( TrichEdit ) Editorﻜﻤﺎ ﺴﻨﻐﻴﺭ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓـﺫﺓ ﻟﻴﻜـﻭﻥ ﺒﺎﺴـﻡ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﻨﻔﺘﺤﻪ . ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﺎﺼﺔ ﺒﻔﺘﺢ ﻤﻠﻑ ﺴﻨﻘﻭﻡ ﺒﺘﻌﺭﻴﻑ ﻤﺎ ﻴﻠﻲ :
ـ ﻋﺭﻑ ﺍﻟﻤﺘﺤﻭل PathNameﻤﻥ ﺍﻟﻨﻭﻉ Stringﻓﻲ ﺍﻟﻘﺴﻡ Privateﻟﻠﻭﺤﺩﺓ . EditText _ ﻋﺭﻑ ﺍﻟﺜﺎﺒﺕ : const ;'ﺒﺩﻭﻥ ﻋﻨﻭﺍﻥ' = DefaultFileName _ ﺃﻀﻑ ﺘﻌﺭﻴﻑ ﺍﻹﺠﺭﺍﺀ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻘﺴﻡ publicﻟﻠﻭﺤﺩﺓ : EditText ;)Procedure Open(const AFileName: string ـ ﻀﻊ ﻤﺅﺸﺭ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻋﻨﺩ ﺍﻟﺴﻁﺭ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻀﻐﻁ ﺍﻷﺯﺭﺍﺭ Ctrl+Alt+Cﺴﻴﺘﻡ ﻋﻨﺩﻫﺎ ﺇﻀﺎﻓﺔ ﺍﻟﺘﺎﺒﻊ ﺍﻟـﺴﺎﺒﻕ
ﺇﻟﻰ ﺍﻟﻘﺴﻡ ، Implementationﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺠﺴﻡ ﺍﻟﺘﺎﺒﻊ : ;PathName := AFileName 191
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;)Caption := ExtractFileName(AFileName with Editor do begin ;)Lines.LoadFromFile(PathName ;SelStart := 0 ;Modified := False ;end ﺍﻟﺘﺎﺒﻊ ) : ExtractFileName ( AFileNameﻴﻌﻴﺩ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﻤﻊ ﺍﻤﺘﺩﺍﺩﻩ ﻭﺒﺩﻭﻥ ﺫﻜﺭ ﺍﻟﻤﺴﺎﺭ . ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻀﻤﻥ ﺍﻟﻜﺘﻠﺔ ; With Editor Do begin …. Endﺘﻜﺎﻓﺊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ : ;)Editor.Lines.LoadFromFile(PathName ;Editor.SelStart := 0 ;Editor .Modified := False ﺃﻱ ﺃﻨﻨﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Widthﻟﻨﺘﺨﻠﺹ ﻤﻥ ﺫﻜﺭ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻜل ﺴﻁﺭ ﻤﻥ ﺴﻁﻭﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ . ﺍﻟﺘﻌﻠﻴﻤﺔ Editor.selstart := 0ﻀﻊ ﻤﺅﺸﺭ ﺍﻟﺘﺤﺭﻴﺭ ﻟﻠﻌﻨﺼﺭ Editorﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﻤﻠﻑ .
ﺍﻟﺘﻌﻠﻴﻤﺔ Editorr.Modifiedﺘﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ Trueﻓﻲ ﺤﺎل ﻋﺩل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺃﻱ ﻨﻘﻁﺔ ﻤﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻤﻔﺘﻭﺡ . ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻓﺘﺢ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ MainFormﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : If OpenDialog1.Execute Then ; ) TeditForm.Create(Self).Open(OpenDialog1.FileName ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻌﺩ Thenﺒﺈﻨﺸﺎﺀ ﻨﺎﻓﺫﺓ ﺠﺩﻴﺩﺓ ﻭﻤﻥ ﺜﻡ ﻁﻠﺏ ﺘﻨﻔﻴﺫ ﺍﻹﺠﺭﺍﺀ Openﺍﻟﺫﻱ ﻜﺘﺒﻨﺎﻩ ﺴﺎﺒﻘﹰﺎ . ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻓﺘﺢ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ EditFormﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ; MainForm.Openfile.Click _ ﻋﻨﺩ ﺇﻨﺸﺎﺀ ﻤﻠﻑ ﺠﺩﻴﺩ ﺴﻨﻌﻁﻲ ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﻲ ﺘﻔﺘﺢ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﺍﺴﻡ ﺍﻓﺘﺭﺍﻀﻲ ﻟﺫﻟﻙ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓـﻲ ﺍﻟﺤﺩﺙ OnCreateﻟﻠﻨﻤﻭﺫﺝ : EditForm ;PathName := DefaultFileName ﺃﻱ ﺃﻥ ﺍﻟﻤﺘﺤﻭل PathNameﺴﻴﺩل ﻋﻠﻰ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻟﻠﻤﻠﻑ ﺍﻟﺠﺩﻴﺩ . ﺤﻔﻅ ﺍﻟﻤﻠﻑ : ﺍﻟﻌﻨﺼﺭ Editorﻭﻫﻭ ﻤﻥ ﺍﻟﻨﻭﻉ TRichEditﻴﻘﻭﻡ ﺒﺤﻔﻅ ﺍﻟﻤﻠﻔﺎﺕ ﺒﺎﻤﺘﺩﺍﺩ rtfﻓﻘﻁ ﻭﻋﻠﻰ ﺒﺭﻨﺎﻤﺠﻨـﺎ ﺤﻔـﻅ ﺍﻟﻤﻠـﻑ ﺒﺎﻤﺘﺩﺍﺩ rtfﺃﻭ ﺒﺎﻻﻤﺘﺩﺍﺩ Txtﻟﺫﻟﻙ ﺴﻨﺴﺘﺨﺩﻡ ﻤﺘﺤﻭل ﻤﻥ ﺍﻟﻨﻭﻉ Tstringsﻟﻨﻘل ﺃﺴﻁﺭ ﺍﻟﻌﻨﺼﺭ Editorﺇﻟﻴﻪ ﻭﻤﻥ ﺜﻡ
ﺤﻔﻅ ﺃﺴﻁﺭ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻋﻠﻰ ﻤﻠﻑ ÷ﺫﺍ ﻁﺒﻌﹰﺎ ﻋﻨﺩ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺒﺎﻻﻤﺘﺩﺍﺩ . .Txt
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺤﻔﻅ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ EditFormﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ : ;var S: Tstringlist begin if PathName = DefaultFileName then )SaveAsClick(Sender else begin if uppercase(rightstr(PathName,3)) = uppercase( 'rtf' ) then Editor.Lines.SaveToFile(PathName) else try 192
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
; S:=Tstringlist.Create ) s.AddStrings(Editor.Lines finally ; )s.SaveToFile(PathName ;end ;Editor.Modified := False ;end ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﺒﻔﺤﺹ ﺍﻟﻤﺘﺤﻭل PathNameﻓﺈﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺘﻪ ﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀـﻴﺔ ﺃﻱ "ﺒـﺩﻭﻥ ﻋﻨـﻭﺍﻥ" ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﻤﻠﻑ ﺠﺩﻴﺩ ﻭﻟﻡ ﻴﺘﻡ ﺤﻔﻅﻪ ﺴﺎﺒﻘﹰﺎ ،ﻤﻤﺎ ﻴﺴﺘﺩﻋﻲ ﻁﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻨﻔﺫ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺤﻔﻅ ﺒﺎﺴﻡ ﺃﻤﺎ ﺃﺫﺍ ﻜﺎﻥ PathNameﻻ ﻴﺴﺎﻭﻱ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻤﻤﺎ ﻴﺩل ﺃﻥ ﻟﻠﻤﻠﻑ ﻤﺴﺎﺭ ﻭﺃﺴﻡ ﻤﺤﺩﺩﻴﻥ ﻭﺴﻨﺩﺭﺱ ﻫﻨﺎ ﺍﺤﺘﻤﺎﻟﻴﻥ :
1ـ ﺃﻥ ﻴﻜﻭﻥ ﺍﻤﺘﺩﺍﺩ ﺍﻟﻤﻠﻑ ﻫﻭ rtfﻭﺒﺎﻟﺘـﺎﻟﻲ ﻨﻨﻔـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ )Editor.Lines.SaveToFile(PathName
)
ﻭﺍﻀﺢ ﺃﻥ ﺍﻟﺸﺭﻁ ﺍﻟﺫﻱ ﻴﺴﺒﻕ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﻘﺎﺭﻥ ﺍﻷﺤﺭﻑ ﺍﻟﺜﻼﺜﺔ ﺍﻷﺨﻴﺭﺓ ﻓﻲ ﺍﻟﻤﺘﺤﻭل PathNameﻤﻊ ﺍﻟﻘﻴﻤﺔ ''rtf ﺒﻌﺩ ﺘﺤﻭﻴل ﺍﻟﻘﻴﻤﺘﻴﻥ ﻋﻠﻰ ﺃﺤﺭﻑ ﻜﺒﻴﺭﺓ . 2ـ ﺃﻥ ﻴﻜﻭﻥ ﺍﻤﺘﺩﺍﺩ ﺍﻟﻤﻠﻑ ﻫﻭ Txtﻭﺒﺎﻟﺘﺎﻟﻲ ﻨﻨﺸﺊ ﺍﻟﻤﺘﺤﻭل Sﻤﻥ ﺍﻟﻨﻭﻉ TStringListﻭﻨﻨﻘل ﺃﺴـﻁﺭ ﺍﻟﻌﻨـﺼﺭ Editorﺇﻟﻴﻪ ﻭﻤﻥ ﺜﻡ ﻨﺤﻔﻅﻪ ،ﺜﻡ ﻨﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ Falseﻟﻠﺨﺎﺼﺔ Editor.Modifiedﺃﻱ ﺃﻥ ﺍﻟﻤﻠﻑ ﻟﻡ ﻴﺘﻡ ﺘﻌﺩﻴﻠﻪ ﺒﻌـﺩ
ﺍﻟﺤﻔﻅ ﺍﻷﺨﻴﺭ .
ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺒﺎﺴﻡ : ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺤﻔﻅ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ : EditForm ;SaveDialog1.FileName := PathName if SaveDialog1.Execute then begin ;PathName := SaveDialog1.FileName ;)Caption := ExtractFileName(PathName ;)SaveClick(Sender ;end ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﺘﺠﻌل ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﺒﺎﺴﻡ ﺃﻥ ﻴﻅﻬﺭ ﺍﻻﺴﻡ ﺍﻟﺤﺎﻟﻲ ﻟﻠﻤﻠﻑ ﻜﺎﺴﻡ ﺍﻓﺘﺭﺍﻀﻲ ﻭﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﺘﺎﻟﻴـﺔ ﺘﻘﻭﻡ ﺒﻭﻀﻊ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺍﺨﺘﺎﺭﻩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﺒﺎﺴﻡ ﻓـﻲ ﺍﻟﻤﺘﺤـﻭل PathNameﻭﺘﻐﻴـﺭ
ﻋﻨﻭﺍﻥ ﺍﻟﻨﺎﻓﺫﺓ ﻟﻴﺄﺨﺫ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﺠﺩﻴﺩ .ﻭﻤﻥ ﺜﻡ ﺘﺴﺘﺩﻋﻲ ﺍﻹﺠﺭﺍﺀ ) SaveClick ( Senderﻟﻴﺘﻡ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﻭﻓـﻕ
ﺍﻻﻤﺘﺩﺍﺩ ﺍﻟﺫﻱ ﺍﺨﺘﺎﺭﻩ ﺍﻟﻤﺴﺘﺨﺩﻡ . ﺇﻏﻼﻕ ﺍﻟﻤﻠﻑ : ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻏﻼﻕ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ : EditForm ;Close ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ : ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺨﺭﻭﺝ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ:MainForm ;Close 193
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺨﺭﻭﺝ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ : EditForm ; MainForm.CloseApp.Click ﻴﺘﻡ ﺇﻏﻼﻕ ﺠﻤﻴﻊ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺒﻨﺎﺀ ﻋﻨﺩ ﺇﻏﻼﻕ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ . ـ ﺃﻤﺎﻤﻨﺎ ﺍﻵﻥ ﻤﺸﻜﻠﺔ ﺠﺩﻴﺩﺓ ،ﺍﻓﺭﺽ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﺩ ﻋﺩل ﺍﻟﻤﻠﻑ ﺜﻡ ﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻏﻼﻕ ﺒﺩﻭﻥ ﺤﻔﻅ ﺍﻟﻤﻠـﻑ ، ﺴﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺒﺈﻏﻼﻕ ﺍﻟﻤﻠﻑ ﺩﻭﻥ ﺤﻔﻅ ﻭﻟﺫﻟﻙ ﻋﻠﻴﻨﺎ ﺇﻅﻬﺎﺭ ﺭﺴﺎﻟﺔ ﺤﻭﺍﺭ ﺘﺴﺄل ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺇﺫﺍ ﻜـﺎﻥ
ﻴﺭﻴﺩ ﺃﻥ ﻴﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺃﻡ ﻻ .
ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺤﺩﺙ OnCloseQueryﻟﻠﻨﻤﻭﺫﺝ : EditForm Const ;'ﻫل ﺘﺭﻴﺩ ﺤﻔﻅ ﺍﻟﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺩﺨﻠﺔ ﻋﻠﻰ ﺍﻟﻤﻠﻑ' = SWarningText begin if Editor.Modified then begin case MessageDlg(Format(SWarningText + #13 + '%s', [PathName]), mtConfirmation, [mbYes, mbNo, mbCancel], 0) of ;)mrYes: SaveClick(Self ;mrCancel: CanClose := False ;end ;end ;end ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺤﺩﺙ OnCloseQueryﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺯﺭ ﺇﻏﻼﻕ ﻭﻗﺒل ﺃﻥ ﻴﺘﻡ ﺇﻏﻼﻕ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻴﺠﻭﺩ ﻤﻊ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺍﻟﻭﺴﻴﻁ CanCloseﻭﺍﻟﺫﻱ ﻴﺄﺨﺫ ﻗﻴﻤﺔ ﺍﻓﺘﺭﺍﻀﻴﺔ ، Trueﻭﻋﻨﺩ ﺇﻋﻁﺎﺀﻩ ﺍﻟﻘﻴﻤﺔ Falseﻴﺭﻓﺽ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ . ﻨﻔﺤﺹ ﻋﻨﺩﻫﺎ ﺍﻟﻤﺘﺤﻭل ) Editor.Modifiedﺍﻟﺫﻱ ﻴﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒـﺈﺠﺭﺍﺀ ﺃﻱ ﺘﻌـﺩﻴل ﻋﻠـﻰ
ﺍﻟﻤﻠﻑ ( ،ﻭﻋﻨﺩﻫﺎ ﻨﻅﻬﺭ ﺼﻨﺩﻭﻕ ﺤﻭﺍﺭ ﻴﺴﺄل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺫﺍ ﻜﺎﻥ ﻴﺭﻴﺩ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﻭﻫﺫﺍ ﺍﻟﺼﻨﺩﻭﻕ ﺫﻭ ﺜﻼﺙ ﺃﺯﺭﺍﺭ : : Yesﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﻓﺈﻨﻪ ﻴﺭﻴﺩ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﻭﻨﺴﺘﺩﻋﻲ ﻋﻨﺩﻫﺎ ﺍﻟﺘﺎﺒﻊ . SaveClick : Noﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﻓﺈﻨﻪ ﻻ ﻴﺭﻴﺩ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﻭﺴﻴﺘﻡ ﺇﻏﻼﻕ ﺍﻟﻨﺎﻓﺫﺓ .
: Cancelﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺯﺭ ﻓﺈﻨﻪ ﻻ ﻴﺭﻴﺩ ﺇﻏﻼﻕ ﺍﻟﻤﻠﻑ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻨﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﻭﺴـﻴﻁ CanClose ﺇﻟﻰ Falseﻭﺒﺎﻟﺘﺎﻟﻲ ﻟﻥ ﻴﺴﺘﺠﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺇﻏﻼﻕ .
ﺍﻟﺭﻤﺯ #13ﻓﻲ ﺍﻟﺘﺎﺒﻊ MessageDlgﻴﺠﻌل ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ ﻤﻥ ﺍﻟﺭﺴﺎﻟﺔ ،ﻫﺫﺍ ﻴﻜﺎﻓﺊ ﻜﺘﺎﺒﺔ ﻨﺹ
ﺍﻟﺭﺴﺎﻟﺔ ﻭﻤﻥ ﺜﻡ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ Enterﻭﻤﻥ ﺜﻡ ﻜﺘﺎﺒﺔ ﺍﺴﻡ ﺍﻟﻤﻠﻑ . ﺒﺭﻤﺠﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺭﻴﺭ : ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻨﺴﺦ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺭﻴﺭ : ;Editor.CopyToClipboard ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻗﺹ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺭﻴﺭ : ;Editor.CutToClipboard ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻟﺼﻕ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺭﻴﺭ : 194
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
Editor.PasteFromClipboard; : ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺘﺤﺩﻴﺩ ﺍﻟﻜل ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺭﻴﺭ Editor.SelectAll; ، Editor ﻤﻥ ﺍﻟﻭﺍﻀﺢ ﺃﻥ ﺍﻟﺯﺭﻴﻥ ﻨﺴﺦ ﻭ ﻗﺹ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻨﺎ ﻏﻴﺭ ﻓﻌﺎﻟﻴﻥ ﺇﺫﺍ ﻟﻡ ﻴﺤﺩﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻨﺼﹰﺎ ﻤﺎ ﻓﻲ ﺍﻟﻌﻨﺼﺭ ، ( ﻜﻤﺎ ﺃﻥ ﺍﻟﺯﺭ ﻟﺼﻕ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﻏﻴﺭ ﻓﻌﺎل ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺤﺎﻓﻅﺔ ﻓﺎﺭﻏﺔ ) ﺃﻭ ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻓﻴﻬـﺎ ﺼـﻭﺭﺓ : ﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺘﺤﺭﻴﺭ Copytext.Enabled := editor.SelLength > 0; Cuttext.Enabled := editor.SelLength > 0; Pastetext.Enabled := clipboard.HasFormat(CF_text); . EditForm ﻓﻲ ﻟﻠﻭﺤﺩﺓuses ﺇﻟﻰ ﺍﻟﻘﺴﻡClipBrd ﻭﺃﻀﻑ ﺍﻟﻭﺤﺩﺓ ﻭﻫﻲ ﺘﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ ﺇﺫﺍ ﻟﻡ ﻴﺤﺩﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻱEditor ﻴﻌﻴﺩ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺤﺩﺩﺓ ﻓﻲ ﺍﻟﻌﻨﺼﺭSelLength ﺍﻟﻤﻨﻬﺞ
. ﺤﺭﻑ : ﺒﺭﻤﺠﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺘﻨﺴﻴﻕ : ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ with Sender as TMenuItem do Checked := True; with Editor.Paragraph do if Left1.Checked then Alignment := taLeftJustify else if Right1.Checked then Alignment := taRightJustify else if Center1.Checked then Alignment := taCenter; ﻓـﻲOnClick ﺜﻡ ﺤﺩﺩ ﺍﻟﺯﺭﻴﻥ ) ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﻤﻴﻥ ( ﻭ)ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ ( ﺜﻡ ﺃﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺴﻬﻡ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﺤﺩﺙ . Left1Click ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔEvent ﺍﻟﺼﻔﺤﺔ : ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺘﻔﺎﻑ ﺘﻠﻘﺎﺌﻲ with Editor do begin WordWrap := not WordWrap; { toggle word wrapping } if WordWrap then ScrollBars := ssVertical else ScrollBars := ssBoth; WordWrap1.Checked := WordWrap; { set menu item check } end; : ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺨﻁ FontDialog1.Font := Editor.Font; if FontDialog1.Execute then Editor.SelAttributes.Assign(FontDialog1.Font); 195
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻴﺘﻤﻴﺯ ﺍﻟﻌﻨﺼﺭ RichEditﻋﻥ ﺍﻟﻌﻨﺼﺭ Memoﺒﺈﻨﻪ ﻴﻤﻜﻥ ﺘﺤﺩﻴﺩ ﻨﻤﻁ ﺨﻁ ﻟﻜل ﺴﻁﺭ ﺃﻱ ﺃﻨﻪ ﻴﻤﻜﻥ ﺘﻨﺴﻴﻕ ﺍﻟـﻨﺹ ﺍﻟﻤﻜﺘﻭﺏ ﺒﺩﺍﺨﻠﻪ ﻋﻠﻰ ﻋﻜﺱ ﺍﻟﻌﻨﺼﺭ Memoﺍﻟﺫﻱ ﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﺨﻁ ﻭﺘﻨﺴﻴﻕ ﻭﺍﺤﺩ ﻟﻜل ﺍﻷﺴﻁﺭ . ﻭﺍﻟﻤﻨﻬﺞ SelAttributesﻴﻌﻁﻴﻙ ﺃﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﺤﻜﻡ ﺒﺘﻨﺴﻴﻕ ﺍﻟﺴﻁﺭ ﺍﻟﻤﺤﺩﺩ ﻓﻲ ﺍﻟﻌﻨﺼﺭ .TRichEdit
ﺒﺭﻤﺠﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ : MainForm ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺘﻼﺤﻅ ﺃﻥ ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ ﻟﻥ ﺘﻅﻬﺭ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺫﺍ ﻜﺎﻥ ﺃﺤﺩ ﺍﻷﺒﻨﺎﺀ ﻅﺎﻫﺭﹰﺍ ) ﺃﻏﻠﻕ ﺠﻤﻴﻊ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺒﻨﺎﺀ ﺍﻟﻤﻔﺘﻭﺤﺔ ﻭﻻﺤﻅ ﻅﻬﻭﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ﻤﻥ ﺠﺩﻴﺩ ( ﻫﺫﺍ ﻴﺤﺩﺙ ﻷﻥ ﻗﺎﺌﻤﺔ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﺒﻥ ﺘﺄﺨﺫ ﻤﻜﺎﻥ ﻗﺎﺌﻤﺔ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ ﻭﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺇﻅﻬﺎﺭ ﻗﻭﺍﺌﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ ﺒﺠﻭﺍﺭ ﻗﻭﺍﺌﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﺒﻥ ﻋﻠﻴﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﻤﺎ ﻴﺩﻋﻰ ﺒﺩﻤﺞ ﺍﻟﻘﻭﺍﺌﻡ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ
:
ﺍﻓﺘﺢ ﻤﺤﺭﺭ ﺍﻟﻘﻭﺍﺌﻡ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ ﻭﺤﺩﺩ ﺍﻟﺯﺭ ﺇﻁﺎﺭ ﺜﻡ ﺍﻜﺘﺏ ﺍﻟﻘﻴﻤﺔ 1ﻓﻲ ﺍﻟﺨﺎﺼﺔ . GroupIndex ﻻﺤﻅ ﺃﻥ ﺠﻤﻴﻊ ﻗﻭﺍﺌﻡ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻻﺒﻥ ﺘﺄﺨﺫ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ 0ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻭﺇﺫﺍ ﺃﻋﻁﻴﺕ ﺍﻟﻘﻴﻤﺔ 1ﻷﺤﺩ ﻫﺫﻩ ﺍﻟﻘﻭﺍﺌﻡ ﻓﺈﻨﻬﺎ ﺴﺘﺄﺨﺫ ﻤﻜﺎﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ،ﺃﻤﺎ ﺇﺫﺍ ﺃﻋﻁﻴﺕ ﺃﺤﺩ ﻗﻭﺍﺌﻡ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻻﻴﻥ ﺍﻟﻘﻴﻤﺔ 2ﻓﻲ ﺍﻟﺨﺎﺼﺔ GroupIndexﻓﺈﻨﻬـﺎ ﺴﺘﻅﻬﺭ ﺒﻌﺩ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ .
ﺇﺫﹰﺍ ﺍﻟﺨﺎﺼﺔ GroupIndexﺘﺴﺘﺨﺩﻡ ﻟﺩﻤﺞ ﻭﺘﺭﺘﻴﺏ ﺍﻟﻘﻭﺍﺌﻡ ﺒﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ ﻭﺍﻟﻨﻤﺎﺫﺝ ﺍﻷﺒﻨﺎﺀ . ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺘﺭﺘﻴﺏ ﺍﻟﻜل ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ : MainForm.Tile ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺘﺭﺘﻴﺏ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺒﻨﺎﺀ ﺒﺸﻜل ﺃﻓﻘﻲ ) ﻋﻠﻴﻙ ﺃﻥ ﺘﻔﺘﺢ ﺃﻜﺜﺭ ﻤﻥ ﻨﺎﻓﺫﺓ ﺍﺒﻥ ﻟﺘﻼﺤﻅ ﺍﻟﻨﺘﺎﺌﺞ . ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺘﺘﺎﻟﻲ ﺍﻟﻜل ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ: ;MainForm.Cascade ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺼﻑ ﺍﻟﻨﻭﺍﻓﺫ ﻓﻭﻕ ﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺽ . ﺇﻅﻬﺎﺭ ﺃﺴﻤﺎﺀ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻷﺒﻨﺎﺀ ﻀﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ : ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻭﻭﺭﺩ ﺘﻅﻬﺭ ﻓﻲ ﻨﻬﺎﻴﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺃﺴﻤﺎﺀ ﺠﻤﻴﻊ ﻤﻠﻔﺎﺕ ﺍﻟﻨـﺼﻭﺹ ﺍﻟﻤﻔﺘﻭﺤـﺔ ﻭﻟﺘﺤﻘﻴﻕ ﺫﻟﻙ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﺤﺩﺩ ﺍﻟﻨﻤﻭﺫﺝ MainFormﺜﻡ ﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺨﺎﺼﺔ WindowsMenuﻭﺃﻋﻁﺎﻫﺎ ﺍﻟﻘﻴﻤـﺔ
) Window1ﺍﺴﻡ ﺯﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ( ،ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺍﻓﺘﺢ ﺃﻜﺜﺭ ﻤﻥ ﻤﻠﻑ ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻁﺎﺭ ﺴﺘﻼﺤﻅ ﻅﻬﻭﺭ ﺃﺴﻤﺎﺀ ﺠﻤﻴﻊ ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻹﻁﺎﺭ ﻭﻴﻤﻜﻨﻙ ﺍﻟﺘﻨﻘل ﺒﻴﻥ ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ ﺍﺴـﻡ ﺍﻟﻤﻠﻑ ﻓﻲ ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ . ﺃﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻭﻫﻲ ﻋﻤل ﺒﺭﻨﺎﻤﺞ ﺘﻨﺼﻴﺏ ) ( Setupﻟﺘﻭﺯﻴﻊ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ .
196
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺒﺭﻨﺎﻤﺞ : Install Shelled Express ﺒﻌﺩ ﺃﻥ ﻴﺼﺒﺤﻙ ﺒﺭﻨﺎﻤﺠﻙ ﺠﺎﻫﺯﹰﺍ ﻭﺨﺎﻟﻴﹰﺎ ﻤﻥ ﺍﻷﺨﻁﺎﺀ ﻋﻠﻴﻙ ﺃﻥ ﺘﺤﻀﺭﻩ ﻟﻴﻌﻤل ﻋﻠﻰ ﺃﻱ ﺤﺎﺴـﺏ ﻭﺒﺄﺴـﻬل ﻁﺭﻴﻘـﺔ ﻤﻤﻜﻨﺔ ،ﻓﻠﻴﺱ ﻤﻥ ﺍﻟﻤﻌﻘﻭل ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﺒﺭﻤﺞ ﻤﻭﺠﻭﺩﹰﺍ ﻟﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﻋﻨﺩ ﻜل ﻤﺴﺘﺨﺩﻡ ﻟﻠﺒﺭﻨﺎﻤﺞ ﻟﺫﻟﻙ ﺠـﺭﺕ
ﺍﻟﻌﺎﺩﺓ ﻋﻠﻰ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺠﺎﺕ ﺘﻨﺼﻴﺏ ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺼﻨﺎﺩﻴﻕ ﺍﻟﺤﻭﺍﺭ ﺘﺴﺄل ﺍﻟﻤـﺴﺘﺨﺩﻡ ﻋـﻥ ﻤـﺴﺎﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻭﻤﻜﺎﻥ ﻭﻀﻊ ﺍﻻﺨﺘﺼﺎﺭﺍﺕ .....
ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ﺒﻨﻔﺴﻙ ﻓﻬﻭ ﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﻋﺒﺎﺭﺓ ﻋﻥ ﻨﺴﺦ ﻤﻠﻔﺎﺕ ﻤﻥ ﻗﺭﺹ ﻤﺭﻥ ﺃﻭ ﻗﺭﺹ ﻟﻴـﺯﺭﻱ ﺇﻟﻰ ﺍﻟﺤﺎﺴﺏ ﻭﻟﻜﻥ ﻫﻨﺎﻙ ﺒﺭﺍﻤﺞ ﻤﺨﺘﺼﺔ ﺒﻬﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ،ﻭﻴﺄﺘﻲ ﻤﻊ ﻗﺭﺹ ﺩﻟﻔﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Install Shelled Express ﻭﻫﻭ ﻨﺴﺨﺔ ﻤﺠﺎﻨﻴﺔ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ Install Shelled Professionalﻭﻟﻜﻨﻪ ﻴﻔﻲ ﺒﺎﻟﻐﺭﺽ . ﺴﻨﺸﺭﺡ ﺍﻵﻥ ﺒﺸﻜل ﺴﺭﻴﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ Install Shelled Express
ﻋﻤل ﺒﺭﻨﺎﻤﺞ ﺘﻨﺼﻴﺏ ﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ : ﻻ ﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ Install Shelled Expressﻤﻥ ﻗﺭﺹ ﺩﻟﻔﻲ ﻭﻤﻥ ﺘﺸﻐﻴﻠﻪ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ : ﻋﻠﻴﻙ ﺃﻭ ﹰ Start Æ Program Æ IntallShelled Æ Express – Borland Limited Edition . ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺍﺨﺘﺭ ﻤﻨﻬﺎ : Create new project ﻓﻲ ﺍﻟﺼﻨﺩﻭﻕ Project name and locationﺃﻜﺘﺏ C:\My Documents\MySetups\MyNotpad.ismﺜﻡ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ . Create
ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﻨﺎﻓﺫﺓ ﺘﺘﺄﻟﻑ ﻤﻥ ﻨﺎﻓﺫﺓ ﺘﺤﻭﻱ ﺸﺠﺭﺓ ﻋﻠﻰ ﺍﻟﻴﺴﺎﺭ ﻭﺘﻅﻬﺭ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻴﻤﻨﻰ ﺨﺼﺎﺌﺹ ﺍﻟﻔﺭﻉ ﺍﻟﻤﺨﺘﺎﺭ ﻤـﻥ
ﻫﺫﻩ ﺍﻟﺸﺠﺭﺓ . ﺍﺨﺘﺭ General Informationﻤﻥ ﺍﻟﺸﺠﺭﺓ ﻓﺴﺘﻅﻬﺭ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ : ﻫﻨﺎﻙ ﺒﻌﺽ ﺍﻟﺨﻭﺍﺹ ﺍﻟﻭﺍﻀﺤﺔ ﻭﺍﻟﺘﻲ ﻟﻴﺴﺕ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺸﺭﺡ
ﻟﺫﻟﻙ ﺴﺄﺸﺭﺡ ﺃﻜﺜﺭ ﺍﻟﺨﺼﺎﺌﺹ ﺃﻫﻤﻴﺔ : : INSTALLDIRﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﺠﻠـﺩ ﺍﻻﻓﺘﺭﺍﻀـﻲ ـﺼﻴﺏ ـﻪ ﺘﻨـ ـﻴﺘﻡ ﻓﻴـ ـﺫﻱ ﺴـ ﺍﻟـ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻟﻀﻐﻁ ﻋﻠـﻰ ﻫـﺫﻩ
ﺍﻟﺨﺎﺼﺔ ﺘﻅﻬﺭ ﺍﻟﻘﻴﻡ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫﻫﺎ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ،ﻜﻤـﺎ ﻴﻤﻜﻨﻙ ﻜﺘﺎﺒﺔ ﺍﻟﻤﺠﻠﺩ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﻟﺘﻨﺼﻴﺏ ﺒﺭﻨﺎﻤﺠﻙ ﺩﺍﺨﻠﻪ .
: Product Nameﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺴﻴﻅﻬﺭ ﺍﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻨﺩ ﺒﺩﺍﻴﺔ ﺍﻟﺘﻨﺼﻴﺏ . 197
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺨﺘﺭ Setup Typesﻤﻥ ﺍﻟﺸﺠﺭ ﺓ ﺍﻟﻴﺴﺎﺭﻴﺔ ﻓﺘﻅﻬﺭ ﻨﺎﻓﺫ ﻋﻠﻰ ﺍﻟﻴﺴﺎﺭ ﺘﺴﺘﺨﺩﻡ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺘﻨﺼﻴﺏ ﻭﻫﻨـﺎﻙ ﺜـﻼﺙ ﺃﻨﻭﺍﻉ ﻋﺎﺩﺓ ﻟﺘﻨﺼﻴﺏ ﺍﻟﻤﻠﻑ ﻭﻫﻲ ﺇﻤﺎ ﺘﻨﺼﻴﺏ ﻨﻤﻭﺫﺠﻲ ) ( Typicalﺃﻭ ﺘﻨﺼﻴﺏ ﺍﺼﻐﺭﻱ ) ( Minimalﺃﻭ ﺘﻨﺼﻴﺏ ﻤﺨﺼﺹ ) ( Customﺘﺘﺤﻜﻡ ﻁﺭﻕ ﺍﻟﺘﻨﺼﻴﺏ ﺒﺎﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﻨﺴﺨﻬﺎ ﺇﻟﻰ ﺍﻟﺤﺎﺴﺏ ﻭﺒﻤﺎ ﺃﻥ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻤﺅﻟﻑ ﻤﻥ
ﻤﻠﻑ ﻭﺍﺤﺩ ﻓﻼ ﺤﺎﺠﻪ ﻷﻥ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﺜﻼﺙ ﺃﻨﻭﺍ ﻤﻥ ﺍﻟﺘﻨﺼﻴﺏ ﻟﺫﻟﻙ ﺍﺨﺘﺭ ﻓﻘﻁ Typicalﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ . ﺍﺨﺘﺭ Filesﻤﻥ ﺍﻟﺸﺠﺭﺓ ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺃﺭﺒﻊ ﻨﻭﺍﻓﺫ ﻤﺘﺠﺎﻭﺭ ﺇﻟﻰ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻴﺴﺭﻯ ،ﺴﻨﺤﺩﺩ ﻫﻨﺎ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘـﻲ ﺴـﻴﺘﻡ ﻨﺴﺨﻬﺎ ﺇﻟﻰ ﺍﻟﻘﺭﺹ ﺍﻟﺼﻠﺏ ﻭﻫﻲ ﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﻴﺤﺘﺎﺠﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻤﻌﻅﻡ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﺎﻟﻐﺔ ﺩﻟﻔﻲ ﻻ ﺘﺤﺘﺎﺝ ﺇﻻ ﺇﻟﻰ
ﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻻﻤﺘﺩﺍﺩ .Exeﺇﻻ ﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻴﺘﻌﺎﻤل ﻤﻊ ﻤﻠﻔﺎﺕ ﺨﺎﺭﺠﻴﺔ ،ﻜﻤﻠﻔﺎﺕ ﺼﻭﺭ ﺃﻭ ﻨﺼﻭﺹ ﺃﻭ ﺼـﻭﺕ ﺃﻭ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ... ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ Destination Computerﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻴﺴﺭﻯ ﻓﻲ ﺍﻷﺴﻔل ﺴﺘﻅﻬﺭ ﻟﻙ ﻗﺎﺌﻤﺔ ﺤـﺩﺩ ﻤﻨﻬﺎ ، INSTALLDIRﺤﺩﺩ ﺒﻌﺩﻫﺎ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺫﻱ ﺤﻔﻅﺕ ﻓﻴﻪ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ Source Computer's . Folder
ﺜﻡ ﺃﻨﻘل ﺍﻟﻤﻠﻑ ﻤﻥ TextEditor.Exeﻤﻥ ﺍﻟﻨﺎﻓـﺫﺓ Source Computer's Filesﺇﻟـﻰ ﺍﻟﻨﺎﻓـﺫﺓ Destination Computer Filesﻋﻥ ﻁﺭﻴﻕ ﺴﺤﺏ ﺍﻟﻤﻠﻑ ﺇﻓﻼﺘﻪ . ﺍﺨﺘﺭ : Object/ Merge Modulesﻭﺤﺩﺩ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﺍﻟﻤﻜﺘﺒﺎﺕ ﺍﻟﺘﻲ ﻴﺘﻌﺎﻤل ﻤﻌﻬﺎ ﺒﺭﻨﺎﻤﺞ ﻭﺃﻫﻤﻬﺎ : : BDE_entﺤﺩﺩ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻴﺴﺘﺨﺩﻡ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﺼﻔﺤﺔ BDEﻓﻲ ﺩﻟﻔﻲ ﻭﺒﻤﺠﺭﺩ ﺘﺤﺩﻴﺩ ﻫـﺫﺍ ﺍﻟﺨﻴﺎﺭ ﻴﻅﻬﺭ ﻨﻤﻭﺫﺝ ﺤﻭﺍﺭ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻭﻹﻨﺸﺎﺀ Aliasﺇﺫﺍ ﻜﻨﺕ ﺒﺤﺎﺠﺔ ﻟﺫﻟﻙ . : QuickReportﺤﺩﺩ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺇﺫﺍ ﺍﺴﺘﺨﺩﻤﺕ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻙ ﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ... . QuickRep
ﺍﺨﺘﺭ ﺒﻌﺩﻫﺎ : Shortcuts /folder'sﻓﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻨﻲ ﻋﻠﻰ ﺍﻟﻘﺎﺌﻤﺔ Program Menuﻭﺍﺨﺘﺭ New Folderﻭﺴﻡ ﺍﻟﻤﺠﻠﺩ ﺍﻟﺠﺩﻴﺩ ﺒﺎﺴﻡ ﺸﺭﻜﺘﻙ ﺜﻡ
ﺍﻀﻐﻁ ﻋﻠﻰ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻤﺠﻠﺩ ﺍﻟﺠﺩﻴﺩ ﻭﺍﺨﺘﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ، New Shortcutﺃﻋﻁ ﻫﺫﺍ ﺍﻻﺨﺘﺼﺎﺭ ﺍﻻﺴﻡ Notepadﺜﻡ ﺤﺩﺩ ﺍﻟﺨﺼﺎﺌﺹ ﻟﻬﺫﺍ ﺍﻻﺨﺘﺼﺎﺭ ﻜﻤﺎ ﻫﻭ ﻤﻭﻀﺢ ﻓﻲ ﺍﻷﻋﻠﻰ ﻭﻫﺫﺍ ﺸﺭﺡ ﻟﻬﺫﻩ ﺍﻟﺨﺼﺎﺌﺹ . :Descriptionﺘﻅﻬﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺘﻠﻤﻴﺢ ﻋﻨﺩﻤﺎ ﻴﻘﻑ ﻤﺅﺸﺭ ﻓﻭﻕ ﺃﻴﻘﻭﻨﺔ ﺍﻻﺨﺘﺼﺎﺭ ﻓﻲ Win2000
: Targetﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺘﺸﻐﻴﻠﻪ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻻﺨﺘﺼﺎﺭ ) ﻻ ﺤﻅ ﺃﻥ ﻫـﺫﺍ ﺍﻻﺨﺘـﺼﺎﺭ ﻴﺠﺏ ﺃﻥ ﻴﺤﺩﺩ ﻋﻠﻰ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﺍﻟﻬﺩﻑ ﻭﻟﻴﺱ ﻋﻠﻰ ﺤﺎﺴﺒﻙ ﻟﺫﻟﻙ ﻭﻀﻊ ﺩﺍﺨل . INSTALLDIR\TextEditor.exe
: IconFileﻴﺘﻡ ﺘﺤﺩﻴﺩ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻷﻴﻘﻭﻨﺔ ﺍﻟﺘﻲ ﺴﻴﺤﻤﻠﻬﺎ ﺍﻻﺨﺘﺼﺎﺭ . 198
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
: Working Directoryﺘﺤﺩﺩ ﻤﺠﻠﺩ ﻋﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻀﺭﻭﺭﻴﺔ ﺠﺩﹰﺍ ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺴﺘﺩﻋﻲ ﻤﻠﻔﺎﺕ ﻤﻥ ﻤﺠﻠﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ (.
ﻴﻤﻜﻨﻙ ﻋﻤل ﺃﻜﺜﺭ ﻤﻥ ﺍﺨﺘﺼﺎﺭ ﻟﻨﻔﺱ ﺍﻟﻤﻠﻑ ،ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻅﻬﺭ ﺍﺨﺘﺼﺎﺭ ﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﻭ ﺇﺫﺍ ﺃﺭﺩﺕ ﻟﺒﺭﻨﺎﻤﺠﻙ ﺃﻥ ﻴﻌﻤل ﻓﻲ ﺒﺩﺍﻴﺔ ﺘﺸﻐﻴل ﻭﻴﻨﺩﻭﺯ ﻀﻊ ﺍﺨﺘﺼﺎﺭﹰﺍ ﻟﻪ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ . Startup ﺍﺨﺘﺭ Registryﻤﻥ ﺍﻟﺸﺠﺭﺓ ﺍﻟﻴﺴﺎﺭﻴﺔ ﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻴﺘﻌﺎﻤل ﻤﻊ ﻤﻠﻑ ﺘﺴﺠﻴل ﻭﻴﻨﺩﻭﺯ ) ﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻴﺤﺘـﺎﺝ ﺇﻟﻰ ﺇﻀﺎﻓﺔ ﻗﻴﻡ ﺇﻟﻰ ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ ﻟﻴﻌﻤل ﺒﺸﻜل ﺠﻴﺩ ( . ﺍﺨﺘﺭ Dialogﻤﻥ ﺍﻟﺸﺠﺭﺓ ﺍﻟﻴﺴﺎﺭﻴﺔ ﻟﺘﺤﺩﺩ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﺃﺜﻨﺎﺀ ﺘﺸﻐﻴل ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ،ﺤﺩﺩ ﻤﻨﻬﺎ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﺘﻲ
ﺘﺭﻴﺩ ﺃﻥ ﺘﻅﻬﺭ ﻭﻻﺘﻨﺱ ﺃﻥ ﺘﺘﺤﻜﻡ ﺒﺨﺼﺎﺌﺹ ﻫﺫﻩ ﺍﻟﻨﻭﺍﻓﺫ ) ﻻ ﺤﻅ ﺃﻥ ﻜﺜﺭﺓ ﺍﻟﻨﻭﺍﻓﺫ ﺴﺘﺅﺩﻱ ﺇﻟﻰ ﺯﻴﺎﺩﺓ ﺤﺠـﻡ ﻤﻠﻔـﺎﺕ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ( .
ﺍﺨﺘﺭ
ﻼ ( ﺃﻭ Requirementﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ﻤﺨﺼﺹ ﻟﻴﻌﻤل ﻋﻠﻰ ﻨﻅﺎﻡ ﺘﺸﻐﻴل ﻤﺤﺩﺩ ) ﻭﻴﻨﺩﻭﺯ 2000ﻓﻘﻁ ﻤﺜ ﹰ
ﺍﻨﻪ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﻤﻌﺎﻟﺞ ﻤﻥ ﻁﺭﺍﺯ ﻤﻌﻴﻥ ،ﺃﻭ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺤﺩ ﻤﻌﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻴﻌﻤل ﻭ... ﺍﺨﺘﺭ Build your releaseﻭﺍﺨﺘﺭ Customﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺤﺩﺩ ﺍﻟﺨﺼﺎﺌﺹ ﻤﻥ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﻓﻴﻤـﺎ ﻴﻠﻲ ﺸﺭﺡ ﻤﺨﺘﺼﺭ ﻟﻬﺫﻩ ﺍﻟﺨﻭﺍﺹ :
: Media Sizeﺤﺩﺩ ﻫﻨﺎ ﺤﺠﻡ ﻭﺴﻴﻠﺔ ﺍﻟﺘﺨﺯﻴﻥ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺃﻥ ﺘﺨﺯﻥ ﻋﻠﻴﻬﺎ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ) ﺇﺫﺍ ﻜﺎﻥ ﻗﺭﺹ ﻤـﺭﻥ ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ . ( 1.38 : Media Size Uniteﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺨﺘﺎﺭ ﺒﻴﻥ Mbﺃﻭ Gbﺃﻱ ﺃﻥ ﺍﻟﺤﺠﻡ ﺍﻟﺫ1ﻱ ﺤﺩﺩﺘﻪ ﻓﻲ ﺍﻟﺨﻴـﺎﺭ ﺍﻷﻭل ﺴـﻴﻘﺎﺱ ﺒﺎﻟﻤﻴﻐﺎ ﺒﺎﻴﺕ ﺃﻭ ﻓﻲ ﺠﻴﻐﺎ ﺒﺎﻴﺕ .
: Cluster Sizeﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺨﺘﺎﺭ 512ﺃﻭ 1024ﺘﺒﻌﹰﺎ ﻟﻭﺴﻴﻁ ﺍﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ . : Compress Mediaﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﻴﺘﻡ ﻀﻐﻁ ﻤﻠﻔﺎﺕ ﺒﺭﻨﺎﻤﺠﻙ ﻭ) ﻴﻔﻀل ﺃﻥ ﺘﻔﻌل ﺫﻟﻙ ﺇﺫﺍ ﻜﻨﺕ ﺘﺭﻴﺩ ﺤﺠﻡ ﺍﻟﺘﺨﺯﻴﻥ ﺃﺼﻐﺭ ﻤﺎ ﻴﻤﻜﻥ ( . : Setup.exeﻓﻲ ﺒﺭﺍﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ﺍﻟﺤﺩﻴﺜﺔ ﻟﻡ ﻴﻌﺩ ﺍﻟﻤﻠﻑ Setup.exeﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻟﻤﺴﺅﻭل ﻋﻥ ﺘﻨـﺼﻴﺏ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻭﻴﻘﻭﻡ ﺒﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻠﻔﺎﺕ ﺫﺍﺕ ﺍﻻﻤﺘﺩﺍﺩ Msiﻭﻤﻬﻤﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ Setup.exeﻫﻲ ﺘﺤﺩﻴﺩ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻭﺘـﺴﻠﻴﻡ
ﺍﻟﻌﻤل ﺇﻟﻰ ﺒﺭﺍﻤﺞ ﺘﻨﺼﻴﺏ ﻤﻠﻔﺎﺕ Msiﺍﻟﻤﻨﺎﺴﺒﺔ ،ﻴﻔﻀل ﺃﻥ ﺘﻌﻁﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ Trueﻷﻥ ﺃﻏﻠﺏ ﺍﻟﻤﺴﺘﺨﺩﻤﻴﻥ ﺘﻌﻭﺩ ﻋﻠﻰ ﺘﺸﻐﻴل ﻤﻠﻔﺎﺕ . Setup.exe : Include Msi Win9x engineﺴﻴﻀﻴﻑ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺍﻟﻤﻠﻑ instmsia.exeﻭﻫﻭ ﻴﻘﻭﻡ ﺒﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻴﺴﺘﻁﻴﻊ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﻠﻔﺎﺕ ) Msiﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻻﻤﺘﺩﺍﺩ Msiﻟﻴﺱ ﻤﻠﻑ ﺘﻨﻔﻴﺫﻱ ﻭﻟﺫﻟﻙ ﻫﻭ ﺒﺤﺎﺠﺔ ﻟﺒﺭﻨﺎﻤﺞ ﺁﺨﺭ ﻟﺘﺸﻐﻴﻠﻪ ﻓﺈﺫﺍ ﻗﻤﺕ ﺒﺘﻨﺼﻴﺏ ﺒﺭﻨﺎﻤﺠﻙ ﻋﻠﻰ ﺤﺎﺴﻭﺏ ﻻ ﻴﺤﻭﻱ ﺒﺭﻨﺎﻤﺞ ﺘﺸﻐﻴل ﻤﻠﻔﺎﺕ Msiﻓﻠﻥ ﻴﺘﻡ ﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨـﺎﻤﺞ ،ﻟـﺫﻟﻙ ﻋﻠﻴﻙ ﺃﻥ ﺘﻀﻴﻑ ﺍﻟﻤﻠﻑ instmsia.exeﺍﻟﺫﻱ ﻴﺤﻭﻱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺴﺅﻭل ﻋﻥ ﻓﺘﺢ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻥ ﻨﻭﻉ ، ( Msiﺇﺫﺍ ﻜﻨﺕ ﺴﺘﺴﺘﺨﺩﻡ ﺍﻟﻘﺭﺹ ﺍﻟﻤﺭﻥ ﻜﻭﺴﻴﻠﺔ ﺘﺨﺯﻴﻥ ﻓﺄﻋﻁ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺍﻟﻘﻴﻤﺔ . True : Include Msi Windows Nt engineﺴﻴﻀﻴﻑ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺍﻟﻤﻠﻑ .... instmsiw.exeﻨﻔﺱ ﺍﻟﺸﺭﺡ ﺍﻟﺴﺎﺒﻕ . : Generate AutoRun.infﺃﻋﻁ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻜﻨﺕ ﺴﺘﻨﺴﺦ ﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﻗﺭﺹ ﻟﻴﺯﺭﻱ ﺃﻭ ﻗـﺭﺹ . DVD 199
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺨﺘﺭ ﺍﻵﻥ Build Customﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ Buildﺴﻴﺘﻡ ﻋﻨﺩﻫﺎ ﺇﻨﺸﺎﺀ ﻤﻠﻔﺎﺕ ﺍﻟﺘﻨﺼﻴﺏ ﻭﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻷﺨﻴﺭﺓ build completed with 0 errors, 0 warnings ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﻟﻡ ﻴﺤﺩﺙ ﺃﻱ ﺃﺨﻁﺎﺀ ﺃﺜﻨﺎﺀ ﻋﻤﻠﻴﺔ ﺒﻨﺎﺀ ﻤﻠﻔﺎﺕ ﺍﻟﺘﻨﺼﻴﺏ . ﺍﺨﺘﺭ ﺒﻌﺩ ﺫﻟﻙ Test Your Releaseﻤﻥ ﺍﻟﺸﺠﺭﺓ ﻭﺍﻀﻐﻁ ﻋﻠﻰ Customﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺠﺩﻴﺩﺓ ﻭﻤﻥ ﺜﻡ Run Your ، Setupﺴﻴﺘﻡ ﺍﻵﻥ ﺘﻨﺼﻴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل ﻜﺎﻤل ﻻ ﺤﻅ ﺍﻟﺨﻁﻭﺍﺕ ﻭﺘﺄﻜﺩ ﻤﻥ ﺃﻨﻬﺎ ﺘﻌﻤل ﺒﺸﻜل ﺼﺤﻴﺢ ﻭﺇﺫﺍ ﺘﻡ ﺍﻟﻌﻤل
ﺒﺩﻭﻥ ﺭﺴﺎﺌل ﺃﺨﻁﺎﺀ ،ﺴﺘﺠﺩ ﺍﻻﺨﺘﺼﺎﺭﺍﺕ ﺍﻟﺘﻲ ﻭﻀﻌﺘﻬﺎ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺃﺒﺩﺍ ،ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﺇﺯﺍﻟﺔ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻤـﻥ ﺍﻟﻨﺎﻓـﺫﺓ ﺇﻀﺎﻓﺔ ﺇﺯﺍﻟﺔ ﺍﻟﺒﺭﺍﻤﺞ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ .
ﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﺃﺨﻁﺎﺀ ﻴﺠﺏ ﻋﻠﻴﻙ ﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺍﻟﻘﻴﻡ ﺍﻟﺘﻲ ﺍﺨﺘﺭﺘﻬﺎ ﻓﻲ ﺍﻟﻨﻭﺍﻓﺫ ﺍﻟﺴﺎﺒﻘﺔ ﻭﺇﻋﺎﺩﺓ ﺒﻨﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻤﻥ ﺘﺠﺭﺒﺘﻪ . ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﺴﺘﺠﺩ ﻨﺴﺨﺔ ﻤﻥ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ﻓﻲ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺫﻱ ﺤﺩﺩﺘﻪ ﻟﺤﻔﻅ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ﻭﻫﻭ ﻏﺎﻟﻴﹰﺎ ﻤﻥ ﺍﻟﺸﻜل
:
C:\My Documents\MySetups\MyNotpad\Express\Custom\DiskImages\DISK1 ﺤﺩﺩ ﺍﻟﺨﻴﺎﺭ Distributed your releaseﻭﺍﺨﺘﺭ Customﻤﻥ ﺍﻟﺸﺠﺭﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﻤﻥ ﺜﻡ ﺤﺩﺩ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﻼ ... ﺃﻥ ﺘﻀﻊ ﻓﻴﻪ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ،ﻟﻴﻜﻥ ﺍﻟﻘﺭﺹ \ A:ﻤﺜ ﹰ ﻤﻼﺤﻅﺔ :ﻫﺫﻩ ﺍﻟﻨﺴﺨﺔ ﻤﻥ Install Shelledﻻ ﺘﺩﻋﻡ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻭﻓﻲ ﺤﺎل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓـﻲ ﻋﻤﻠﻴـﺎﺕ ﺇﻋﺩﺍﺩ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﺼﻴﺏ ﻤﻥ ﺍﻟﻤﺤﺘﻤل ﺃﻥ ﺘﺸﺎﻫﺩ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺭﺴﺎﺌل ﺍﻷﺨﻁﺎﺀ . ﻭﺁﺨﺭ ﺩﻋﻭﺍﻫﻡ ﺃﻥ ﺍﻟﺤﻤﺩ ﷲ ﺭﺏ ﺍﻟﻌﺎﻟﻤﻴﻥ ﺍﻟﻠﻬﻡ ﻋﻠﻤﻨﺎ ﻤﺎ ﻴﻨﻔﻌﻨﺎ ﻭﺍﻨﻔﻌﻨﺎ ﺒﻤﺎ ﻋﻠﻤﺘﻨﺎ ﻭﺍﻨﻔﻊ ﺍﻟﻨﺎﺱ ﺒﻨﺎ ﻭﺍﻏﻔﺭ ﻟﻨﺎ ﻭﺍﺭﺤﻤﻨﺎ ﺇﻨﻙ ﺃﻨﺕ ﺍﻟﻐﻔﻭﺭ ﺍﻟﺭﺤﻴﻡ ﻤﺤﻤﺩ ﺨﺎﻟﺩ ﻨﺎﺼﺭ ﺁﻏﺎ
200
http://www.alshater.net
ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﻤﺭﺍﺠﻊ ﺍﻟﻤﻬﻨﺩﺱ ﻴﺎﺴﺭ ﻋﻘﺎﺩ
ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺩﻟﻔﻲ ﻤﺠﻤﻭﻋﺔ ﻤﺤﺎﻀﺭﺍﺕ ﻓﻲ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺘﻴﺔ ﺠﺎﻤﻌﺔ
ﺩﺍﺭ ﺸﻌﺎﻉ
ﺃﺴﺎﻤﺔ ﻤﻌﺭﺍﻭﻱ
ﺤﻠﺏ ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ
ﺍﺤﺘﺭﺍﻑ Visual Basic .Net
ﻤﻭﺍﻗﻊ ﻋﻠﻰ ﺍﻻﻨﺘﺭﻨﺕ http://www.arabdevelopers.com ﻤﻥ ﺃﻭل ﻭﺃﻗﻭﻯ ﻤﻭﺍﻗﻊ ﺍﻟﺩﻟﻔﻲ ﻭﻟﻜﻨﻪ ﻟﻸﺴﻑ ﻻ ﻴﻌﻤل ﻓﻲ ﺍﻟﻭﻗﺕ ﺍﻟﺤﺎﻟﻲ http://www.arabteam2000.com
ﺍﻟﻔﺭﻴﻕ ﺍﻟﻌﺭﺒﻲ ﻟﻠﺒﺭﻤﺠﺔ
http://www.delphiforfun.com
ﻤﻭﻗﻊ ﺇﻨﻜﻠﻴﺯﻱ ﻭﻟﻜﻨﻙ ﺒﺎﻟﺘﺄﻜﻴﺩ ﺴﺘﺤﺏ ﺍﻟﺩﻟﻔﻲ ﺇﺫﺍ ﻓﻬﻤﺕ ﺒﺭﺍﻤﺞ ﻫﺫﺍ ﺍﻟﻤﻭﻗﻊ
201