Académique Documents
Professionnel Documents
Culture Documents
ﺇﻋﺪﺍﺩ
ﳏﻤﺪ ﺧﺎﻟﺪ ﻧﺎﺻﺮ ﺁﻏﺎ
Support@alshater.net
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 ﺭﺒﻁ ﺍﻟﺠﺩﺍﻭل .........................................................................
131 ﺇﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺒﺒﺭﻨﺎﻤﺞ ...................................................... Access
3
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
137 ................................................................................ ADO
140 ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ ...................................................................
146 ﺍﻟﻁﺒﺎﻋﺔ ...............................................................................
ﻟﻤﺴﺎﺕ ﺒﺭﻤﺠﻴﺔ 147 ........................................................................
ﻤﺴﺠل ﺍﻟﻨﻅﺎﻡ 150 ................................................ Windows Registry
154 ﺘﻭﺍﺒﻊ ﻭﺜﻭﺍﺒﺕ ﺍﻟﻭﻴﻨﺩﻭﺯ ............................................. Windows API
ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺠﺩﻴﺩﺓ 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 ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﺃﺭﺠﻭﺍ ﻤﻥ ﻜل ﻤﻥ ﻴﺴﺘﻔﻴﺩ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺃﻥ ﻴﺩﻋﻭ ﻟﻲ ﺒﺎﻟﻬﺩﺍﻴﺔ ﻭﺍﻟﺘﻭﻓﻴﻕ ﻭﺍﻟﻨﺠﺎﺡ ﻭﻟﻸﻤﺔ ﺍﻹﺴﻼﻤﻴﺔ
ﺒﺎﻟﻨﺼﺭ ﻭﺍﻟﻌﺯﺓ ﻭﺍﻟﺨﺭﻭﺝ ﻤﻤﺎ ﻫﻲ ﻓﻴﻪ ﻤﻥ ﻤﺤﻥ..
ﺍﻟﻠﻬﻡ ﻋﻠﻤﻨﺎ ﻤﺎ ﻴﻨﻔﻌﻨﺎ ﻭﺍﻨﻔﻌﻨﺎ ﺒﻤﺎ ﻋﻠﻤﺘﻨﺎ ﻭﺍﻨﻔﻊ ﺍﻟﻨﺎﺱ ﺒﻨﺎ ﻭﺍﻏﻔﺭ ﻟﻨﺎ ﻭﺍﺭﺤﻤﻨﺎ ﺇﻨﻙ ﺃﻨﺕ ﺍﻟﻐﻔﻭﺭ ﺍﻟﺭﺤﻴﻡ
6
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻷﻭﻟﻰ
ﻨﺒﺫﻩ ﻋﻥ ﺩﻟﻔﻲ :
ﻤﻥ ﺍﻟﻤﻌﺭﻭﻑ ﺃﻥ ﺩﻟﻔﻲ ﻫﻲ ﻤﻨﺘﺞ ﺒﻭﺭﻻﻨﺩ ﺍﻷﻜﺜﺭ ﻤﺒﻴﻌﹰﺎ ﻟﻠﺘﻁﻭﻴﺭ ﺍﻟﺴﺭﻴﻊ ﻟﻠﺘﻁﺒﻴﻘﺎﺕ RAD (Rapid Application
)Developmentﻭﺍﻟﻤﺴﺘﺨﺩﻡ ﻟﻜﺘﺎﺒﺔ ﺘﻁﺒﻴﻘﺎﺕ ﻭﻴﻨﺩﻭﺯ ،ﻭﻴﻤﻜﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺩﻟﻔﻲ ﺇﻨﺸﺎﺀ ﺘﻁﺒﻴﻘﺎﺕ ﻭﻴﻨـﺩﻭﺯ ﺒـﺴﺭﻋﺔ
ﺃﻜﺒﺭ ﻭﺒﺴﻬﻭﻟﺔ ﺃﻜﺜﺭ ﻤﻥ ﺃﻱ ﻭﻗﺕ ﻤﻀﻰ.
ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻨﻪ ﻨﺴﺘﻁﻴﻊ ﺇﻨﺸﺎﺀ ﻭﺍﺠﻬﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ ) ﻴﻘﺼﺩ ﺒﻭﺍﺠﻬﺔ ﺍﻟﻤـﺴﺘﺨﺩﻡ ﺍﻟﻘـﻭﺍﺌﻡ ﻭﻤﺭﺒﻌـﺎﺕ ﺍﻟﺤـﻭﺍﺭ ﻭﺍﻹﻁـﺎﺭ
ﺍﻟﺭﺌﻴﺴﻲ (..ﻟﻠﺒﺭﻨﺎﻤﺞ ﻤﺴﺘﺨﺩﻤﻴﻥ ﺘﻘﻨﻴﺎﺕ ﺍﻟﺴﺤﺏ ﻭﺍﻹﻓﻼﺕ ﻟﻤﻁﻭﺭ ﺘﻁﺒﻴﻘﺎﺕ ﺴﺭﻴﻊ ،ﻭﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﻭﻀـﻊ ﺘﺤﻜﻤـﺎﺕ
ﺃﻜﺘﻴﻑ ﺇﻜﺱ ) Active Xﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﻓﻴﺠﻭل ﺒﻴﺴﻙ ( ﻋﻠﻰ ﺍﻟﻨﻤﺎﺫﺝ ﻹﻨﺸﺎﺀ ﺒﺭﺍﻤﺞ ﻤﺘﺨﺼﺼﺔ ﻤﺜل ﺒﺭﺍﻤﺞ
ﺍﺴﺘﻌﺭﺍﺽ ﺍﻟﻭﻴﺏ ﻓﻲ ﺩﻗﺎﺌﻕ ،ﺘﻘﻭﻡ ﺩﻟﻔﻲ ﺒﻌﻤل ﺠﻴﺩ ﻭﺫﻟﻙ ﺒﺈﺨﻔﺎﺀ ﺒﻌﺽ ﺍﻟﺘﻔﺼﻴﻼﺕ ﺍﻟﺘﻲ ﺘﺸﻜل ﺃﺤﺸﺎﺀ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻭﻴﻨﺩﻭﺯ
ﻭﻟﻜﻥ ﻟﻴﺱ ﺒﺈﻤﻜﺎﻨﻬﺎ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺒﺸﻜل ﻜﺎﻤل ،ﻟﺫﻟﻙ ﻴﺠﺏ ﻓﻲ ﺍﻟﻨﻬﺎﻴﺔ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﺒﺭﻤﺞ ﺠﻴﺩﹰﺍ ،ﻭﻴﻤﻜﻥ ﻟﻬﺫﻩ ﺍﻟﻌﻤﻠﻴـﺔ
ﺃﻥ ﺘﻜﻭﻥ ﻁﻭﻴﻠـﺔ ،ﻭﺍﻟﺨﺒـﺭ ﺍﻟﺠﻴـﺩ ﺃﻥ ﺩﻟﻔـﻲ ﺘﺠﻌـل ﺍﻟﺭﺤﻠـﺔ ﻏﻴـﺭ ﻤﺘﻌﺒـﺔ ﻭﺤﺘـﻰ ﺃﻨﻬـﺎ ﺘﺠﻌﻠﻬـﺎ ﻤﻤﺘﻌـﺔ.
ﻴﻤﻜﻥ ﺍﻋﺘﺒﺎﺭﻩ ﺍﻹﻁﺎﺭ ﺍﻟﺭﺌﻴﺴﻲ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺃﺸﺭﻁﺔ ﺍﻷﺩﻭﺍﺕ ﻭﻟﻭﺤﺔ ﺍﻟﻤﻜﻭﻨﺎﺕ ﺘﻭﺼل ﺃﺸـﺭﻁﺔ ﺃﺩﻭﺍﺕ ﺩﻟﻔـﻲ ﺇﻟـﻰ
ﻭﻅﺎﺌﻑ ﻜﺎﻟﻔﺘﺢ ﻭﺍﻟﺘﺨﺯﻴﻥ ﻭﺍﻟﺒﻨﺎﺀ ﻭﺘﺤﺘﻭﻱ ﻟﻭﺤﺔ ﺍﻟﻤﻜﻭﻨﺎﺕ ﻋﻠﻰ ﻜﺜﻴﺭ ﻤﻥ ﻤﻜﻭﻨﺎﺕ ﺩﻟﻔﻲ ﺍﻟﺘﻲ ﻴﻤﻜـﻥ ﻭﻀـﻌﻬﺎ ﻓـﻲ
ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻻﻓﺘﺔ ﻨﺼﻴﺔ ،ﻋﻠﺏ ﺘﺤﺭﻴﺭ ،ﻤﺭﺒﻌﺎﺕ ﺴﺭﺩ ﻭﺃﺯﺭﺍﺭ ﻭﻤﺎ ﺸﺎﺒﻪ ﺫﻟﻙ ( ،ﻟﺘﻜﻭﻥ ﺃﻜﺜﺭ ﻤﻼﺌﻤﺔ ﻓﺈﻥ ﺍﻟﻤﻜﻭﻨـﺎﺕ
ﻤﻘﺴﻤﺔ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺎﺕ ،ﺤﺘﻰ ﺘﻀﻊ ﻤﻜﻭﻥ ﻋﻠﻰ ﺒﺭﻨﺎﻤﺠﻙ ﺍﻨﻘﺭ ﻋﻠﻰ ﺍﻟﻤﻜﻭﻥ ﻭﻤﻥ ﺜﻡ ﺍﻨﻘﺭ ﻋﻠﻰ ﺍﻟﻤﻜﺎﻥ ﺤﻴـﺙ ﺘﺭﻴـﺩ
ﻭﻀﻊ ﺍﻟﻤﻜﻭﻥ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ.
7
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ) :ﺴﻨﺘﻌﺭﻑ ﻋﻠﻴﻪ ﺒﺎﻟﺘﻔﺼﻴل ﻓﻲ ﺩﺭﻭﺱ ﻗﺎﺩﻤﺔ (
ﻭﺍﻟﺫﻱ ﻴﺘﻡ ﺒﻭﺍﺴﻁﺘﻪ ﺘﻌﺩﻴل ﺍﻟﺨﺼﺎﺌﺹ ﻭﺍﻷﺤﺩﺍﺙ ﻟﻠﻌﻨﺼﺭ ﻭﺴﻭﻑ ﻨﺴﺘﺨﺩﻤﻪ ﺒﺸﻜل ﺩﺍﺌﻡ
ﺨﻼل ﻋﻤﻠﻨﺎ ﻤﻊ ﺩﻟﻔﻲ ﻭﻫﻨﺎﻙ ﺼﻔﺤﺘﻴﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻫﻤﺎ ﺍﻟﺨﺼﺎﺌﺹ Properties
ﻭﺍﻷﺤﺩﺍﺙEvents.
ﻤﺼﻁﻠﺢ ﺍﻟﺨﺎﺼﺔ Propertyﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺨﺼﺎﺌﺹ ﻟﻬﺎ ﻗﻴﻡ ﺘﺤﺩﺩ ﻋﻤل ﺍﻟﻌﻨﺼﺭ
ﻴﺘﻀﻤﻥ ﺒﺎﺏ ﺍﻷﺤﺩﺍﺙ Eventsﻗﺎﺌﻤﺔ ﺃﺤﺩﺍﺙ ﺍﻟﻌﻨﺼﺭ ،ﺘﺘﺸﻜل ﺍﻷﺤﺩﺍﺙ ﻨﺘﻴﺠﺔ ﻟﺘﻔﺎﻋل
ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻊ ﺍﻟﻤﻜﻭﻥ ﻤﺜﻼ ﻋﻨﺩ ﻨﻘﺭ ﺍﻟﻤﻜﻭﻥ ﻴﺘﻭﻟﺩ ﺤﺩﺙ ﻴﺨﺒﺭﻙ ﺒﺄﻥ ﺍﻟﻤﻜﻭﻥ ﻗﺩ ﻨﻘﺭ
ﺒﺈﻤﻜﺎﻨﻙ ﻜﺘﺎﺒﺔ ﺃﻭﺍﻤﺭ ﺘﺴﺘﺠﻴﺏ ﻟﻬﺫﻩ ﺍﻷﺤﺩﺍﺙ.
ﻤﺼﻁﻠﺢ ﺍﻟﺤﺩﺙ Eventﻫﻭ ﺸﻲﺀ ﻤﺎ ﻴﺤﺼل ﻜﻨﺘﻴﺠﺔ ﻟﺘﻔﺎﻋل ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻭ
ﻼ(
) ﺤﺩﺙ ﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﻤﺜ ﹰ ﻤﻊ ﻭﻴﻨﺩﻭﺯ
ﻤﺼﻁﻠﺢ ﻤﻌﺎﻤل ﺍﻟﺤﺩﺙ Event Handlerﻫﻭ ﻤﻘﻁﻊ ﻤﻥ ﺍﻟﺒﺭﻤﺠﺔ ﻴﻨﻔﺫ ﺍﺴﺘﺠﺎﺒﺔ ﻟﻠﺤﺩﺙ.
3ـ ﻤﻨﻁﻘﺔ ﻋﻤل ﺩﻟﻔﻲ :
ﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻟﺙ ﻫﻭ ﻤﻨﻁﻘﺔ ﻋﻤل ﺩﻟﻔﻲ ﻭﻋﺎﺩﺓ ﻤﺎ ﻴﻅﻬﺭ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ،ﻓﻲ ﺍﻟﻤﻘﺩﻤﺔ ﻤﺼﻤﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺨﻠﻔﻪ ﻤﺤﺭﺭ
ﺍﻟﺸﻴﻔﺭﺓ ﺍﻟﺫﻱ ﺘﺩﺨل ﻋﺒﺭﻩ ﺍﻟﺒﺭﻤﺠﺔ ﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺠﻙ.
ﻼ ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﻤﺼﻤﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﺘﺘﻔﺎﻋل ﻓﻴﻤﺎ
ﻭﻜ ﹰ
ﺒﻴﻨﻬﺎ ﻋﻨﺩ ﺒﻨﺎﺀ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﻟﺘﻭﻟﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ.
9
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻨﻴﺔ
ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﺒﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﻨﺎﻓﺫﺓ:
ﺃ ـ ﻤﺭﺤﻠﺔ ﺍﻟﺘﺼﻤﻴﻡ :
1ـ ﺇﺒﺩﺃ ﻤﺸﺭﻭﻋﺎ ﺠﺩﻴﺩﺍ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ . File Æ New Æ Application
2ـ ﻟﻨﻌﻁﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺠﺩﻴﺩ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
10
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
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ﺤﻭل
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( 0 Top
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل ( 0 Left
ﺘﺤﺩﻴﺩ ﻋﺭﺽ ﺍﻟﺯﺭ 40 Width
ﺜﻡ ﻨﻀﻴﻑ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻟﻠﻤﺸﺭﻭﻉ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ : File Æ New ÆForm
ﻭﺒﺫﻟﻙ ﻴﻅﻬﺭ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻟﻨﻌﻁﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺇﻋﻁﺎﺀ ﺃﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻨﻤﻭﺫﺝ About Name
ﺘﻘﻭﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺒﺘﺤﻭﻴل ﺍﺘﺠﺎﻩ ﺍﻟﻨﺹ ﻭﺍﻟﻌﻨﺎﺼﺭ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ bdRightToLeft BiDiMode
ﺍﻟﻴﻤﻴﻥ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ ) ﻟﻤﻭﺍﻓﻘﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺭﺒﻴﺔ (
ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﺍﻟﻨﻤﻭﺫﺝ 250 Height
ﺘﺤﺩﻴﺩ ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ 300 Width
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﻨﻤﻭﺫﺝ ﻴﻅﻬﺭ ﻓﻲ ﺸﺭﻴﻁ ﺍﻟﻌﻨﻭﺍﻥ ﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل ﺍﻟﺒﺭﻨﺎﻤﺞ Caption
ﺘﺤﺩﻴﺩ ﻤﻜﺎﻥ ﻅﻬﻭﺭ ﺍﻟﻨﻤﻭﺫﺝ poDesigned 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
ﺘﺤﺩﻴﺩ ﺍﺭﺘﻔﺎﻉ ﺍﻟﻠﻭﺡ 185 Height
ﺘﺤﺩﻴﺩ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺤﺩ ﺍﻟﺨﺎﺭﺠﻲ ﻟﻠﻭﺡ bvLowered BevelOuter
ﺤﺎﻭل ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻤﺎ ﻟﺨﺎﺼﺔ Widthﺴﺘﻼﺤﻅ ﺃﻨﻬﺎ ﻻ ﺘﺘﻐﻴﺭ ﻭﺫﻟﻙ ﻷﻥ ﺍﻟﺨﺎﺼﺔ Alignﻤﻔﻌﻠﺔ
2ـ ﻨﻀﻴﻑ ﺯﺭ Buttonﻭﻨﻌﻁﻪ ﺍﻟﺨﻭﺍﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺇﻋﻁﺎﺀ ﺍﺴﻡ ﺠﺩﻴﺩ ﻟﻠﻌﻨﺼﺭ ﻏﻴﺭ ﺍﻻﺴﻡ ﺍﻻﻓﺘﺭﺍﻀﻲ BtnClose Name
ﺘﺤﺩﻴﺩ ﻋﻨﻭﺍﻥ ﻟﻠﺯﺭ Captionﺇﻏﻼﻕ
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( 192 Top
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل ( 112 Left
3ـ ﻨﻀﻴﻑ ﻋﻨﺼﺭ ﺍﻟﺼﻭﺭﺓ Imageﻤﻥ ﺍﻟﺼﻔﺤﺔ Additionalﻓﻭﻕ ﺍﻟﻌﻨﺼﺭ Panel
ﺇﻋﻁﺎﺀ ﺼﻭﺭﺓ ﻟﻠﻌﻨﺼﺭ ﻴﻤﻜﻥ ﺃﺨﺘﻴﺎﺭ ﺃﻱ ﺼﻭﺭﺓ ﻤﺭﻏﻭﺒﺔ ) ﻴﻤﻜﻥ ﺃﺨﺫ ﺃﻱ ﺼﻭﺭﺓ picture
ﺼﻭﺭﺓ ﻤﻥ ﺍﻟﻤﺠﻠﺩ :
C:\Program Files\Common Files\Borland Shared\Images
\Splash\256Color
ﺇﻅﻬﺎﺭ ﻜﺎﻤل ﺍﻟﺼﻭﺭﺓ ﺩﺍﺨل ﺍﻟﻌﻨﺼﺭ Image True Stretch
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﺃﻋﻠﻰ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل( 0 Top
ﺘﺤﺩﻴﺩ ﺒﻌﺩ ﺍﻟﺯﺭ ﻋﻥ ﻴﺴﺎﺭ ﺍﻟﻨﺎﻓﺫﺓ ) ﺒﻜﺴل ( 0 Left
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 ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺨﺎﺼﺔ 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
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ﻴﻌﻤل ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ :
;Close ﺤﺩﺩ ﺍﻟﻌﻨﺼﺭ Label3ﺜﻡ ﺃﺨﺘﺭ ﺍﻟﺤﺩﺙ On DblClickﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ :
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ Label3ﻟﻠﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .
19
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 ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺘﺭﺼﻑ ﺍﻟﻌﻨﺎﺼﺭ ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻤﻨﺘﺼﻑ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﺍﻟﺫﻱ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ ﺒﺸﻜل ﺃﻓﻘﻲ ) ﺘﺠﻌل
ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﻋﻠﻰ ﻋﻤﻭﺩ ﻭﺍﺤﺩ (
ﻨﻔﺱ ﻋﻤل ﺍﻟﺯﺭ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺍﻟﺭﺼﻑ ﻴﺘﻡ ﺒﺸﻜل ﻋﻤﻭﺩﻱ)،ﺘﺠﻌل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﻋﻠﻰ ﺼﻑ ﻭﺍﺤﺩ(.
ﺘﻨﻘل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻭﺴﻁ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﺒﺸﻜل ﺃﻓﻘﻲ .
ﺘﻨﻘل ﺠﻤﻴﻊ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﺨﺘﺎﺭﺓ ﺇﻟﻰ ﻭﺴﻁ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻷﺏ ﺒﺸﻜل ﻋﺎﻤﻭﺩﻱ .
ﺘﺠﻌل ﺍﻟﻤﺴﺎﻓﺔ ﺒﻴﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻷﻓﻘﻴﺔ ﻤﺘﺴﺎﻭﻴﺔ ) ﺘﺜﺒﺕ ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ﻭﺍﻷﺨﻴﺭ ﻭﺘﺤﺭﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺒﻴﻨﻬﻤﺎ
ﻟﺘﺄﺨﺫ ﻤﺴﺎﻓﺎﺕ ﻤﺘﺴﺎﻭﻴﺔ .
ﻨﻔﺱ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻟﻠﻌﻨﺎﺼﺭ ﺍﻟﻌﺎﻤﻭﺩﻴﺔ .
ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺇﻟﻰ ﻨﻔﺱ ﺍﻟﻨﺎﺤﻴﺔ ﺍﻟﺴﻔﻠﻴﺔ ﻷﻭل ﻋﻨﺼﺭ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ .
ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺎﺼﺭ ﺇﻟﻰ ﻨﻔﺱ ﺍﻟﻨﺎﺤﻴﺔ ﺍﻟﻌﻠﻭﻴﺔ ﻷﻭل ﻋﻨﺼﺭ ﺘﻡ ﺍﺨﺘﻴﺎﺭﻩ .
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ﻻﺤﻘﹰﺎ (.
ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﻗﻴﻤﺔ ﺘﺘﺒﻊ ﻟﻠﺯﺭ ﺍﻟﺫﻱ ﻀﻐﻁ ﻋﻠﻴﻪ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺴﺏ ﺍﻟﺠـﺩﻭل
mbOK mrOk
mbCancel mrCancel ﺍﻟﺘﺎﻟﻲ :ﺃﻱ ﺃﻨﻪ ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ OKﺴﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ mrok
mbYes mrYes .
mbNo mrNo
ﻭﻫﻜﺫﺍ .
mbAbort mrAbort
mbRetry mrRetry ﻤﺜﺎل ) : ( 1
mbIgnore mrIgnore ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﻀﻊ ﻋﻠﻴﻪ ﺍﻟﺯﺭ Buttonﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴـﺔ
mbAll mrAll
mrNoToAll ﻋﻨﺩ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻴﻪ :
23
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺨﺎﻤﺴﺔ
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
ﻼ ﻭﺤﻴﺩﹰﺍ ﻤﻥ ﺍﻟﻨﻭﻉ SDI
ﺘﻨﺸﺊ ﺸﻜ ﹰ fsNormal
ﻴﻤﻜﻥ ﻟﻬﺫﺍ ﺍﻟﺸﻜل ﺃﻥ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻼ ﺃﺒﹰﺎ )ﺸﻜل ﺭﺌﻴﺴﻲ ﻟﻠﺘﻁﺒﻴﻕ(
ﺘﻨﺸﺊ ﺸﻜ ﹰ 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
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺤﻘﻴﻘﻴﺔ
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 7ﺃﻭ ) ( 8ﺃﺭﻗﺎﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل Single
ﻤﻥ 1.5* 10-45ﻭﺤﺘﻰ 3.4*1038ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 11ﺃﻭ ) ( 12ﻭﺘﻘﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل Real
2.9*10-39ﺇﻟﻰ 1.7*1038ﻭﻫﻲ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺴﺕ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺘﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻨﺴﺦ
ﺒﺎﺴﻜﺎل ﺍﻟﻘﺩﻴﻤﺔ ﻭﺇﻻ ﻓﺈﻥ ﺍﺴﺘﺨﺩﺍﻡ Extendedﺃﻭ Doubleﺃﻭﻟﻰ
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) ( 15ﺃﻭ ) ( 16ﻭﺘﻘﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل Double
5.0*10-324ﺇﻟﻰ 1.7*10308ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺜﻤﺎﻨﻲ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) (19ﺃﻭ ) ( 20ﺭﻗﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل Extended
3.4*10-4932ﻭﺤﺘﻰ 1.1*104932ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﻋﺸﺭﺓ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ
ﻭﻫﻲ ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ ﺫﺍﺕ ﻓﺎﺼﻠﺔ ﺜﺎﺒﺘﺔ ﺒﺨﻼﻑ ﺒﺎﻗﻲ ﺍﻷﻨﻭﺍﻉ ﺫﺍﺕ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ ،ﻭﻫﻲ ﻤﻼﺌﻤـﺔ Currency
ﻟﻠﺤﺴﺎﺒﺎﺕ ﺍﻟﻤﺎﻟﻴﺔ ﻭﺘﻤﻠﻙ ﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻤـﻥ ) ( 19ﺃﻭ ) 20ﺭﻗـﻡ ( ﻭﺘﻘـﻊ ﻀـﻤﻥ ﺍﻟﻤﺠـﺎل
-922337203685477.5808ﻭﺤﺘﻰ 922337203685477ﻭﻴﺘﻁﻠﺏ ﺘﺨﺯﻴﻨﻬﺎ ﺜﻤﺎﻥ ﺒﺎﻴﺘﺎﺕ
.
ﻫﻲ ﺃﻋﺩﺍﺩ ﺘﺤﺘﻭﻱ ﻓﺎﺼﻠﺔ ﻋﺸﺭﻴﺔ ﻭﺠﺯﺀﹰﺍ ﻋﺸﺭﻴﹰﺎ ﻓﻴﻪ ) (19ﺃﻭ ) ( 20ﺭﻗﻡ ﻭﺘﻘﻊ ﻓـﻲ ﺍﻟﻤﺠـﺎل Comp
-9.2*1018ﻭﺤﺘﻰ 9.2*1018ﻭﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺜﻤﺎﻥ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
30
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺒﻭﻟﻴﺎﻨﻴﺔ :
ﻫﻭ ﻨﻭﻉ ﻤﻨﻁﻘﻲ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻨﺘﻤﻴﺔ ﺇﻟﻴﻪ ﺇﺤﺩﻯ ﻗﻴﻤﺘﻴﻥ Trueﺃﻭ Falseﻭﻴﺤﺘﺎﺝ Boolean
ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ ByteBool
ﺍﻟﺫﺍﻜﺭﺓ
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ Wordbool
ﻤﺜل ﻨﻭﻉ Booleanﻴﺴﺘﺨﺩﻡ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﻟﻐﺎﺕ ﺃﺨﺭﻯ ﻤﺜل Cﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ Longbool
ﺍﻟﺫﺍﻜﺭﺓ
ﺍﻷﻨﻭﺍﻉ ﺍﻟﺭﻤﺯﻴﺔ :
AnsiCharﻫﻭ ﻨﻭﻉ ﺭﻤﺯﻱ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻥ ﺸﻴﻔﺭﺓ ﺃﺴﻜﻲ ﺍﻟﻤﻘﺎﺒﻠﺔ ﻟﺭﻤﺯ ﻤﻌﻴﻥ
. Character
ﻫﻭ ﻨﻭﻉ ﺭﻤﺯﻱ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻟﺘﺨﺯﻴﻥ ﺭﻤﺯ ﺒﺎﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ ) Unicode WideChar
ﺍﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ ﺘﻡ ﺍﻋﺘﻤﺎﺩﻫﺎ ﻤﻨﺫ ﻓﺘﺭﺓ ﻓﻲ ﺃﻨﻅﻤﺔ ﺍﻟﺘﺸﻐﻴل Windows 2000,Xpﻭﻫﻲ ﻋﺒﺎﺭﺓ
ﺘﻤﺜﻴل ﻴﻀﻡ ﺠﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻟﻌﺎﻟﻡ ) ﻋﺩﻯ ﻟﻐﺎﺕ ﺸﺭﻕ ﺁﺴﻴﺎ ( ﻭﻴﺤﺘﺎﺝ ﻜل ﺭﻤﺯ ﻓﻴﻬﺎ ﺇﻟﻰ 16ﺒﺕ .
ﻫﻭ ﻨﻔﺱ ﺍﻟﻨﻭﻉ AnsiCharﺘﺤﺕ ﺒﻴﺌﺔ Windows 98,Meﻭﻟﻜﻨﻪ ﻗﺩ ﻴﺸﻴﺭ ﺇﻟﻰ WideChar Char
ﻓﻲ ﺒﻴﺌﺔ . Windows 2000,Xp
ﺃﻨﻭﺍﻉ ﺍﻟﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ :
AnsiStringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﻏﻴﺭ ﻤﺤﺩﻭﺩﺓ ﺍﻟﻁﻭل ﻴﺒﺩﺃ ﺤﺠﻤﻬﺎ 4ﺒﺎﻴﺕ ﻭﻴﻨﺘﻬﻲ ﺒـ 2ﺠﻴﻐﺎ
ﺒﺎﻴﺕ
ﻭﺘﺒﺩﺃ ﺭﻤﻭﺯﻫﺎ ﻤﻥ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ) 1ﻻ ﻭﺠﻭﺩ ﻟﻠﺤﺠﺭﺓ . ( 0
Sortstringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﺤﺩﻫﺎ ﺍﻷﻗﺼﻰ 256ﺭﻤﺯ ﻭﻴﺄﺨﺫ ﺤﺠﻤﻬﺎ ﺒﻴﻥ 2ﺒﺎﻴﺕ ﻭ
256ﺒﺎﻴﺕ ﻭﻴﺨﺯﻥ ﻓﻲ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ﻤﻨﻬﺎ ) ﺍﻟﺤﺠﺭﺓ ﺭﻗﻡ ( 0ﻁﻭل ﺍﻟﻤﺼﻔﻭﻓﺔ
WideStringﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺭﻤﻭﺯ ﺒﺎﻟﺸﻴﻔﺭﺓ ﺍﻟﻤﻭﺤﺩﺓ Unicodeﻴﺒﺩﺃ ﺤﺠﻤﻬﺎ 4ﺒﺎﻴﺕ ﻭﻴﻨﺘﻬﻲ
ﺒـ 2ﺠﻴﻐﺎ ﺒﺎﻴﺕ ﻭﺘﺒﺩﺃ ﺭﻤﻭﺯﻫﺎ ﻤﻥ ﺍﻟﺤﺠﺭﺓ ﺍﻷﻭﻟﻰ ) 1ﻻ ﻭﺠﻭﺩ ﻟﻠﺤﺠﺭﺓ . ( 0
ﺒﺸﻜل ﺍﻓﺘﺭﺍﻀﻲ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل ﻤﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻴﻜﺎﻓﺊ ﺘﻌﺭﻴﻑ ﻤﺘﺤﻭل AnsiStringﺃﻭ String
WideStringﺤﺴﺏ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ،ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺸﻴﺭ ﺇﻟﻰ Shortstringﻓﻲ ﺤﺎل ﺃﻀﻔﻨﺎ
}{$H- ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﻘﺴﻡ implementation
31
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ ﺍﻟﻤﻨﺘﻬﻴﺔ ﺒﻼ ﺸﻲﺀ ) . ( Null
PAnsiCharﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻨﻭﻉ ﻤﻌﻁﻴﺎﺕ ﻤﺅﺸﺭ ﻴﺅﺸﺭ ﺇﻟﻰ ﻋﻠﻰ ﺴﻼﺴل ﺭﻤﺯﻴـﺔ ﻤﻨﺘﻬﻴـﺔ ﺒﺭﻤـﺯ Null
ﻭﺭﻤﻭﺯ ﻫﺫﻩ ﺍﻟﺴﻠﺴﺔ ﻤﻥ ﺍﻟﻨﻭﻉ AnsiChar
PWideCharﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻨﻭﻉ ﻤﻌﻁﻴﺎﺕ ﻤﺅﺸﺭ ﻴﺅﺸﺭ ﺇﻟﻰ ﻋﻠﻰ ﺴﻼﺴل ﺭﻤﺯﻴـﺔ ﻤﻨﺘﻬﻴـﺔ ﺒﺭﻤـﺯ Null
ﻭﺭﻤﻭﺯ ﻫﺫﻩ ﺍﻟﺴﻠﺴﺔ ﻤﻥ ﺍﻟﻨﻭﻉ WideChar
ﻨﻔﺱ ﺍﻟﻨﻭﻋﻴﻥ ﺍﻟﺴﺎﺒﻘﻴﻥ ﻭﻴﺅﺸﺭ ﻋﻠﻰ ﺍﻟﻨﻭﻉ Char Pchar
ﺍﻟﻤﺅﺸﺭ
ﻭﻫﻭ ﻤﺅﺸﺭ ﻏﻴﺭ ﻤﺤﺩﺩ ﺍﻟﻨﻭﻉ ﺃﻱ ﻴﺅﺸﺭ ﺇﻟﻰ ﺃﻱ ﻨﻭﻉ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﻭﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﺤﺠﺭﺍﺕ Pointer
ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ .
ﺍﻟﻨﻭﻉ ﺍﻟﻤﺘﻨﻭﻉ ) ﺍﻟﻤﺘﻐﻴﺭ (
ﻨﻭﻉ ﻤﺘﻐﻴﺭ ﻤﺘﻭﺍﻓﻕ ﻤﻊ ﺠﻤﻴﻊ ﺍﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺨﺯﻥ ﻗﻴﻤﹰﺎ ﻭﻓﻕ ﺃﻱ ﻨﻭﻉ . 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
;Var P:pchar ﻟﻨﻔﺭﺽ ﺃﻨﻪ ﻋﺭﻓﻨﺎ ﻤﺘﺤﻭل Pﻤﻥ ﺍﻟﻨﻭﻉ : Pchar
'Hello ;Form1.Caption := p ﺜﻡ ﻜﺘﺒﻨﺎ ﻓﻲ ﺍﻟﻘﺴﻡ Beginﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴـﺔ :
'p:= All…….
ﻫﺫﺍ ﻴﻜﺎﻓﺊ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
;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 ;
ﻭﻟﻜﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻻ ﺘﻌﻁﻲ ﻫﺫﺍ ﺍﻟﺨﻁﺄ :
;v1:= 5
;'v2:= '123
v3 := v1+v2 ;
33
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻟﻤﺎﺫﺍ ﻻ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻨﻭﻉ Variantﺩﺍﺌﻤﹰﺎ :ﻻﺤﻅ ﺃﻥ ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻀﺩ ﺍﻟﺘﻭﺠﻪ ﺍﻟﻌﺎﻡ ﻟﻠﻐﺔ ﺒﺎﺴﻜﺎل ﻭ ﻀـ ﺩ ﺃﻋـﺭﺍﻑ
ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﺠﻴﺩﺓ ،ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻴﺘﻡ ﻓﺤﺹ ﻨﻭﻋﻪ ﻭ ﻴﺘﻡ ﺤﺴﺎﺒﻪ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل ،ﻭﺍﻟﻤﺠﻤﻊ compilerﻟﻥ ﻴﺤﺫﺭﻙ ﻤﻥ
ل ﻋﻠﻴﻬﺎ ﺇﻻ ﺒﻌﺩ ﺍﺠﺭﺍﺀ ﺍﺨﺘﺒﺎﺭﺍﺕ ﻤﻜﺜﻔﺔ ،ﺒﺼﻭﺭﺓ ﻋﺎﻤﺔ ،ﻴﻤﻜﻨﻙ ﺍﻋﺘﺒـﺎﺭ ﺃﺠـﺯﺍﺀ
ﺍﺤﺘﻤﺎﻻﺕ ﺍﻷﺨﻁﺎﺀ ،ﻭ ﺍﻟﺘﻲ ﻟﻥ ﻴﺴﺘﺩ ّ
ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻫﻲ ﺘﺭﺠﻤﺔ ﻓﻭﺭﻴﺔ ،interpretedﻷﻨﻪ ،ﻤﺜل ﺃﻱ ﻟﻐﺔ ﺘﻔﺴﻴﺭﻴﺔ ،ﺍﻟﻌﺩﻴـﺩ ﻤـﻥ
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻻ ﻴﻤﻜﻥ ﺍﻟﺘﻘﺭﻴﺭ ﺒﺸﺄﻨﻬﺎ ﻭﺤﻠﹼﻬﺎ ﺇﻻ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل ،ﻫﺫﺍ ﻴﺅﺜﺭ ﺒﺼﻔﺔ ﺨﺎﺼﺔ ﻓﻲ ﺴﺭﻋﺔ ﺍﻟﺘﻨﻔﻴﺫ.
ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻌﺎﻤﺔ ﻭﺍﻟﺨﺎﺼﺔ :
ﻴﻭﺠﺩ ﻓﻲ ﺍﻟﻘﺴﻡ Interfaceﻟﻜل ﻭﺤﺩﺓ ﻗﺴﻡ ﺨﺎﺹ ﺒﺎﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤـﺴﺘﺨﺩﻤﺔ ﺩﺍﺨـل ﺍﻟﻭﺤـﺩﺓ ﻨﻔـﺴﻬﺎ ﻭﻴـﺩﻋﻰ
privateﻭﺍﻟﻤﺘﺤﻭل ﺍﻟﻤﻌﺭﻑ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻓﻲ ﺠﻤﻴﻊ ﺇﺠﺭﺍﺀﺍﺕ ﻭﺘﻭﺍﺒﻊ ﻫﺫﻩ ﺍﻟﻭﺤـﺩﺓ ﻟﻜـﻥ ﻻ
ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﻤﻥ ﺨﺎﺭﺠﻬﺎ .
ﻭﻫﻨﺎﻙ ﻗﺴﻡ ﺁﺨﺭ ﻴﺸﺒﻪ ﺍﻟﻘﺴﻡ ﺍﻟﺴﺎﺒﻕ ﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﻤﻥ ﻭﺤﺩﺍﺕ ﺨﺎﺭﺠﻴﺔ ﻤﺭﺘﺒﻁﺔ ﻤـﻊ ﺍﻟﻭﺤـﺩﺓ
ﺍﻟﻤﻌﺭﻑ ﻓﻴﻬﺎ ﻫﺫﺍ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻴﺩﻋﻰ . Public
ﻤﺜﺎل :
ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﹰﺍ ﻭﻋﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Privateﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ :
private
;I :integer
ﻭﻋﺭﻑ ﻓﻲ ﺍﻟﻘﺴﻡ Publicﺍﻟﻤﺘﺤﻭل ﺍﻟﺘﺎﻟﻲ :
public
;x:integer
ﺃﺫﻫﺏ ﺇﻟﻰ ﺍﻟﺤﺩﺙ OnCreateﺍﻟﺨﺎﺹ ﺒﺎﻟﻨﻤﻭﺫﺝ ﻭﺍﻜﺘﺏ ﻓﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
;I := 4 ; X := 24
OnCreateﻴﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻋﻨﺩ ﻴﻘﻭﻡ ﻭﻴﻨﺩﻭﺯ ﺒﺈﻨﺸﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻌﻁﻲ ﻗﻴﻡ ﺍﺒﺘﺩﺍﺌﻴﺔ ﻟﻠﻤﺘﺤـﻭﻟﻴﻥ ﺍﻟﺤﺩﺙ
procedureﺃﻱ ) X,Iﻻﺤﻅ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻴﻥ ﺍﻟﻤﺘﺤﻭﻟﻴﻥ ﻀـﻤﻥ ﺍﻹﺠـﺭﺍﺀ TForm1.FormCreate
ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻀﻤﻥ ﺃﻱ ﺠﺯﺀ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ( .
ﺃﻀﻑ ﻨﻤﻭﺫﺠﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺯﺭﹰﺍ ﺍﻵﻥ ﺍﺫﻫﺏ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠـﻰ
ﺍﻟﺯﺭ :
; 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ﻤﻥ ﺃﻨﻭﺍﻉ ﺒﻴﺎﻨﺎﺕ ﺘﻌﻁﻰ ﻟﻬﺎ .
ﻋﻤﻠﻴﹰﺎ ،ﺍﻟﻔﺭﻕ ﻋﻤﻭﻤﺎ ﺒﻴﻥ ﺍﻟﺘﻭﺍﺒﻊ ﻭ ﺍﻹﺠﺭﺍﺀﺍﺕ ﻤﺤﺩﻭﺩ ﺠﺩﺍ :ﻴﻤﻜﻨﻙ ﺍﺴﺘﺩﻋﺎﺀ ﺘﺎﺒﻊ ﻹﻨﺠﺎﺯ ﻋﻤل ﻤﺎ ﺜﻡ ﺘﺘﺨﻁﹼﻰ ﺍﻟﻨﺘﻴﺠﺔ
)ﺍﻟﺘﻲ ﻗﺩ ﺘﻜﻭﻥ ﺭﻤﺯ ﺨﻁﺄ ﺍﺨﺘﻴﺎﺭﻱ ﺃﻭ ﻤﺎ ﺸﺎﺒﻪ( ﻜﻤﺎ ﺒﺎﻤﻜﺎﻨﻙ ﺍﺴﺘﺩﻋﺎﺀ ﺇﺠﺭﺍﺀ ﻴﻤﺭﺭ ﻨﺘﻴﺠﺘﻪ ﻀﻤﻥ ﻤﺘﺤﻭﻻﺘﻪ.
36
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻤﻼﺤﻅﺎﺕ :
( Add ﺃ ـ ﻴﻤﻜﻥ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻹﺠﺭﺍﺀ Addﺍﻟﻤﻌﺩل ﺒﺎﻟﺸﻜل ) Add( 1,jﻭﻟﻜﻥ ﻻ ﻴﻤﻜﻥ ﺍﺴﺘﺩﻋﺎﺌﻪ ﺒﺎﻟـﺸﻜل
( Addﻭﺫﻟﻙ ﻷﻥ ﺍﻟﻭﺴﻴﻁ ﺍﻟﺜﺎﻨﻲ ﻟﻬﺫﺍ ﺍﻹﺠﺭﺍﺀ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﻤﺘﺤﻭل ﺤﺘﻰ ﺘﺘﻡ ﺇﻋـﺎﺩﺓ ) I,2ﺃﻭ ﺒﺎﻟﺸﻜل )1,2
ﺍﻟﻨﺘﻴﺠﺔ ﻓﻴﻪ .
ﺏ ـ ﻗﺩ ﻴﺘﺒﺎﺩﺭ ﺇﻟﻰ ﺍﻟﺫﻫﻥ ﻫﻨﺎ ﺍﻟﺴﺅﺍل ﺍﻟﺘﺎﻟﻲ ﺒﻤﺎ ﺃﻨﻨﻲ ﺃﺭﻴﺩ ﻤﻥ ﺍﻹﺠﺭﺍﺀ ﺃﻥ ﻴﻌﻴﺩ ﻗﻴﻤﺔ ﻤﺎ ﻓﻠﻤـﺎﺫﺍ ﻻ ﺃﺴـﺘﺨﺩﻡ ﺘـﺎﺒﻊ؟
ﻭﺍﻟﺠﻭﺍﺏ ﻫﻨﺎ ﺃﻨﻪ ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻴﺩ ﺍﻹﺠﺭﺍﺀ ﺃﻜﺜﺭ ﻤﻥ ﻗﻴﻤﺔ ﺒﻴﻨﻤﺎ ﻴﻌﻴﺩ ﺍﻟﺘﺎﺒﻊ ﻗﻴﻤﺔ ﻭﺤﻴﺩﺓ ،ﻋﻠﻰ ﻜل ﺤﺎل ﻫﺫﻩ
ﺍﻟﻁﺭﻴﻘﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﻤﻊ ﺍﻹﺠﺭﺍﺀﺍﺕ ﻭﺍﻟﺘﻭﺍﺒﻊ ﻋﻠﻰ ﺤﺩ ﺴﻭﺍﺀ ﺃﻱ ﺍﻨﻪ ﻴﻤﻜﻥ ﺃﻥ ﻨﻌﺭﻑ ﺘﺎﺒﻊ ﻴﻌﻴﺩ ﻗﻴﻤـﺔ ﻤـﺎ ﻋـﻥ
ﻁﺭﻴﻕ ﺇﺴﻤﻪ ﻭﻗﻴﻡ ﺃﺨﺭﻯ ﻋﻥ ﻁﺭﻴﻕ ﻤﺘﺤﻭﻻﺘﻪ ) ﻭﺴﻁﺎﺀﻩ ( .
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 ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻻﻭل ﺃﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :
; 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
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ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﻤﻬﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ : ﻟـ
ProgressBarﻭﺘﺄﺨﺫ ﻗﻴﻤﺔ ﺒﻴﻥ Minﻭ 1ـ : Positionﺘﻌﻁﻲ ﻤﻭﻗﻊ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﺩﺍﺨل
. Max
40
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
2ـ : Minﺘﺤﺩﺩ ﺃﺼﻐﺭ ﻗﻴﻤﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫﻫﺎ ﺍﻟﺨﺎﺼﺔ . Postion
3ـ : Maxﺘﺤﺩﺩ ﺃﻜﺒﺭ ﻗﻴﻤﺔ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫﻫﺎ ﺍﻟﺨﺎﺼﺔ . Postion
4ـ : Stepﻁﻭل ﺍﻟﺨﻁﻭﺓ ﻭﺘﺤﺩﺩ ﺍﻟﻤﺴﺎﻓﺔ ﺍﻟﺘﻲ ﻴﻘﻁﻌﻬﺎ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﻓﻲ ﻜل ﻤﺭﺓ ﺘﻨﻔﺫ ﻓﻴﻬﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ :
;progressbar1.Position := progressbar1.Position+1
5ـ : Smoothﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻴﻅﻬﺭ ﺍﻟﺸﺭﻴﻁ ﺍﻷﺯﺭﻕ ﺒﺩﻭﻥ ﺘﻘﻁﻴﻌﺎﺕ .
ProgressBarﻴﻌﻤل ﺒﺸﻜل 6ـ : orientationﻋﻨﺩ ﺇﻋﻁﺎﺀ ﺍﻟﻘﻴﻤﺔ ، pbVerticalﺍﻟـ
ﻼ(
ProgressBarﻗﻴﻤﺔ ﻜﺒﻴﺭﺓ 100ﻤﺜ ﹰ ﻋﻤﻭﺩﻱ ) ﻟﻤﻼﺤﻅﺔ ﺫﻟﻙ ﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ Heightﻟـ
ﺸﺭﻴﻁ ﺍﻟﻘﻴﻤﺔ : TrackBar:
ﻴﺸﺒﻪ ﻫﺫﺍ ﺍﻟﺸﺭﻴﻁ ﺍﻟﺸﺭﻴﻁ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻨﻪ ﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺈﻤﻜﺎﻨﻴﺔ ﺘﺤﺭﻴﻙ ﻤﺅﺸﺭﻩ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻔﺄﺭﺓ ﻭﻤﻜﺎﻥ ﺍﻟﻤﺅﺸﺭ ﺴﻴﻌﻴﺩ
ﻗﻴﻤﺔ ﻟﻴﺴﺘﺨﺩﻤﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻤﺜﺎل :ﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟﺴﺎﺒﻕ 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ﻻ ﻴﺅﺜﺭ ﺜﻠﻙ ﻋﻠﻰ ﺒﻘﻴﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻟﻜﻥ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ
ﺍﻟﺤﻠﻘﺎﺕ ﻻ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺤﺩﺙ ﺠﺩﻴﺩ ﺤﺘﻰ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺤﻠﻘﺔ ﻭﻟﺤل ﻫﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ ﺃﻀﺎﻓﺕ ﺩﻟﻔﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﻠﻘﺔ
ﺍﻟﺘﺄﺨﻴﺭ ﺍﻟﺯﻤﻨﻲ
42
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺜﺎﻤﻨﺔ
ﺒﻌﺽ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﻤﻌﺭﻓﺔ ﻓﻲ ﺩﻟﻔﻲ :
ًﺃ ـ ﺘﻭﺍﺒﻊ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﻋﺩﺍﺩ :
ﻤﻌﻅﻡ ﻫﺫﻩ ﺍﻟﺘﻭﺍﺒﻊ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻭﺤﺩﺓ Mathﻟﺫﻟﻙ ﻴﺠﺏ ﺇﻀﺎﻓﺘﻬﺎ ﺇﻟﻰ ﺍﻟﻘﺴﻡ Usesﻟﻠﻭﺤﺩﺓ ﺍﻟﺘﻲ ﺘﺴﺘﺩﻋﻲ ﻫﺫﻩ
ﺍﻟﺘﻭﺍﺒﻊ .
ﻋﻤﻠﻪ ﺃﺴﻡ ﺍﻟﺘﺎﺒﻊ
ﻴﻌﻴﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻁﻠﻘﺔ ﻟﻌﺩﺩ ﻤﻌﻁﻰ x )Abs(x
ﻴﻌﻴﺩ ﺃﻗﺭﺏ ﻋﺩﺩ ﻁﺒﻴﻌﻲ ﺃﻗل ﺃﻭ ﻴﺴﺎﻭﻱ Xﻤﺜﺎل Floor (2.8) = 2; : )Floor(x
Floor(-2.8) = -3
ﻴﻌﻴﺩ ﺍﻟﺠﺯﺀ ﺍﻟﻌﺸﺭﻱ ﻟﻠﻌﺩﺩ Xﻤﺜﺎل Frac(234.987)= 0.987: )Frac(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
ﻜﻤﺎ ﻴﻤﻜﻥ ﺍﻟﺘﺤﻭﻴل ﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ ﺍﻟﺤﺠﻡ ﺒﻭﺍﺴﻁﺔ ﺘﻭﺍﺒﻊ ﻤﻌﺭﻓﺔ ﻤﺴﺒﻘﹰﺎ :
ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻴﻭﻀﺢ ﺒﻌﺽ ﺘﻭﺍﺒﻊ ﺘﺤﻭﻴل ﺍﻷﻨﻭﺍﻉ :
ﻋﻤﻠﻪ ﺃﺴﻡ ﺍﻟﺘﺎﺒﻊ
ﻴﺸﺒﻪ ﺍﻟﺘﺎﺒﻊ Strtointﻭﻟﻜﻨﻪ ﻴﺤﻭل ﺍﻟﻨﺹ ﺍﻟﻤﻌﻁﻰ ﺇﻟﻰ ﺍﻟﻨﻭﻉ int64 Strtoint64
ﻴﺤﻭل ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ Xﺇﻟﻰ ﻋﺩﺩ ﺴﺕ ﻋﺸﺭﻱ ﻭﺘﻤﺜل yﻋﺩﺩ ﺃﺭﻗﺎﻡ ﺍﻟﻨﺘﻴﺠﺔ ﻻ )Inttohex(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
ﻼ ﺍﻟﻘﻴﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ ﻷﻨﻪ ﺍﻟﻭﺴﻴﻁ Precisionﻴﺴﺎﻭﻱ ، 5ﻏﻴﺭ ﺍﻵﻥ
ﺴﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ 55272ﻤﺘﺠﺎﻫ ﹰ
ﺍﻟﺭﻗﻡ 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ﻭﻴﻅﻬﺭ ﺃﺴﻔل ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ ﻗﺎﺌﻤﺔ ﺃﺨﺭﻯ
ﺒﺎﻟﻌﻨﻭﺍﻨﻴﻥ ﺍﻟﺘﻲ ﺘﺤﻭﻱ ﻫﺫﻩ ﺍﻟﻜﻠﻤﺔ ﺤﺎﻭل ﺃﻥ ﺘﺨﺘﺎﺭ ﻤﻨﻬﺎ ﻁﻠﺒﻙ ﻭﺍﻀﻐﻁ ﻋﻠﻴﻪ ﻤﺭﺘﻴﻥ ﻓﻴﻅﻬﺭ ﻨﺹ ﺍﻟﻤﺴﺎﻋﺩﺓ ﺍﻟﻤﺭﺘﺒﻁ
Help ﺒﻬﺫﺍ ﺍﻟﻌﻨﻭﺍﻥ ) ﻓﻲ ﻤﺜﺎﻟﻨﺎ Other Standard routineﻭﻟﻠﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﻘﺎﺌﻤﺔ ﺃﺨﺘﺭ ﺍﻟﺴﺎﺒﻘﺔ
. ( topic
ﻤﻼﺤﻅﺎﺕ :
ﻟﻤﻌﺭﻓﺔ ﻋﻤل ﺃﻱ ﻋﻨﺼﺭ ﻓﻲ ﺩﻟﻔﻲ ﺃﺨﺘﺭﻩ ﻭﺃﻀﻐﻁ ﻋﻠﻰ . F1
ﻟﻤﻌﺭﻓﺔ ﻋﻤل ﺃﻱ ﺨﺎﺼﺔ ﺘﺎﺒﻌﺔ ﻟﻌﻨﺼﺭ ﻤﺎ ﻓﻲ ﺩﻟﻔﻲ ﺃﺨﺘﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻭﺍﻀﻐﻁ ﻋﻠﻰ .... F1
47
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
ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻟﻤﻠﻑ ﺒﻔﺘﺢ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ﺤﻔﻅ ﻤﻠﻑ ﻭﻫﻭ ﻴﺸﺒﻪ ﺍﻟﺼﻨﺩﻭﻕ ﺍﻟﺴﺎﺒﻕ ﺒﻁﺭﻴﻘﺔ ﺍﻻﺴﺘﺩﻋﺎﺀ ﻭﺍﻟﺨﺼﺎﺌﺹ ﻟﺫﻟﻙ ﻻ
ﺩﺍﻋﻲ ﻹﻋﺎﺩﺓ ﺸﺭﺡ ﺍﻟﺨﺼﺎﺌﺹ .
ﻤﺜﺎل :
Captionﻟﻠﺯﺭ ﺍﻟﻘﻴﻤﺔ " ﺤﻔﻅ " ﺜﻡ ﺃﻋﻁ ﺃﻀﻑ ﺯﺭ ﻭ SaveDialogﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ
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
;DupeString ( S: String ,Count :Integer) :String
ﻴﻌﻴﺩ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺍﻟﻘﻴﻤﺔ Sﻤﻜﺭﺭﺓ Countﻤﺭﺓ
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]; //
ListBox a
ListBox1.Items.AddStrings(a); // ﺇﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ﺍﻟﻼﺌﺤﺔ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﻼﺌﺤﺔ
; a.Free
;end
ﺤﺎﻭل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺩﻭﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ TsrtingList.Create
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ﻤﻊ ﺭﺴﺎﻟﺔ "ﺍﻟﻨﺹ ﺍﻟﺫﻱ ﺃﺩﺨﻠﺘﻪ " ﻟﻴﺱ ﻋـﺩﺩ
ﺼﺤﻴﺢ ،ﺘﻡ ﺇﻴﻘﺎﻑ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻀﻐﻁ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﻤﺭﺓ ﺃﺨﺭﻯ ﻹﻜﻤﺎل ﻋﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺘﻅﻬﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ :
61
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
;) ’ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ‘ ( Showmessage
;end
Exceptﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﺍﻟﺨﻁﺄ ﻋﻨﺩ ﺇﺩﺨﺎل ﻨـﺹ ﻓـﻲ Edit1ﺃﻭ ﻓـﻲ ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻨﻔﺫﻩ ﻭﻻﺤﻅ ﺘﻨﻔﻴﺫ ﺍﻟﻘﺴﻡ
Edit2ﺃﻱ ﺃﻥ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻴﻥ Tryﻭ Exceptﺴﻭﻑ ﺘﺨﻀﻊ ﻟﻠﻔﺤﺹ ﻭ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻴﻥ Exceptﻭ End
ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﺨﻁﺄ .
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ ﻭﺃﺩﺨل ﻓﻲ Edit1ﺍﻟﻘﻴﻤﺔ /232/ﻭﺃﺩﺨل ﻓﻲ Edit2ﺍﻟﻘﻴﻤﺔ / 0 /ﻨﻔﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻭﺴـﺘﻅﻬﺭ ﺩﻟﻔـﻲ
ﺭﺴﺎﻟﺔ ﺨﻁﺄ ﻤﻥ ﺍﻟﻨﻭﻉ EzeorDivideﻭﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺴﺘﻅﻬﺭ ﻤﻥ ﻗﺒل ﺒﺭﻨﺎﻤﺞ ) " ﺃﺩﺨل ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻥ ﻓﻀﻠﻙ" (
ﺒﺎﻟﺭﻏﻡ ﻤﻥ ﻗﻴﺎﻤﻙ ﺒﺈﺩﺨﺎل ﻋﺩﺩ ﺼﺤﻴﺢ ﻟﺫﻟﻙ ﺃﻭﺠﺩﺕ ﺩﻟﻔﻲ ﺃﺴﻠﻭﺒﹰﺎ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻟﺨﻁﺄ ﻭﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻠﺘﻌﺎﻤل
ﻤﻌﻪ ،ﻋﺩل ﺍﻵﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻟﻴﺼﺒﺢ ﺒﺎﻟﺸﻜل :
; 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
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ﻴﻌﺘﺒﺭﻫﺎ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ ﻭﻴﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩﻫﺎ ﺒﺎﻟﻜﺎﻤل .
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ﻭﻴﺘﻡ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻋﻠﻰ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺤﻤﺭﺍﺀ ﻭﻤﻥ ﺜﻡ ﺍﺨﺘﻴـﺎﺭ
Breakpoint Propertiesﻭﻤﻥ ﺜﻡ ﻜﺘﺎﺒﺔ ﺍﻟﺸﺭﻁ ﻓﻲ ﺍﻟﻘﺴﻡ Conditionﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﻤﺜ ﹰ
ﻼ ﺃﻜﺘـﺏ ﺍﻟـﺸﺭﻁ ) = j
( 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 ﻤﺜﺎل :ﺍﻜﺘﺏ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :
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 ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ :ﻫﻭ ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﻴﻘﻑ ﻤﺅﺸﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻨﺩﻩ ﻭﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ﻫﻭ ﺘﻘﺎﻁﻊ ﺍﻟـﺴﺠل ﺍﻟﺤـﺎﻟﻲ ﻤـﻊ
ﺍﻟﻌﺎﻤﻭﺩ ﺍﻟﺤﺎﻟﻲ ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺩﺍﺌﻤﹰﺎ ﺘﺤﺭﻴﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻨﺩ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻭﻓﻲ ﺍﻟﺤﻘل ﺍﻟﺤﺎﻟﻲ ) ﺴﻨﺘﺂﻟﻑ ﻤـﻊ ﻫـﺫﻩ
ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻻﺤﻘﹰﺎ (.
ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻜﻭﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﻋﺩﺓ ﺠﺩﺍﻭل ﻭﻫﺫﻩ ﺍﻟﺠﺩﺍﻭل ﻗﺩ ﺘﻜﻭﻥ ﻤﺨﺯﻨﺔ ﻓﻲ ﻤﻠﻑ ﻭﺍﺤـﺩ ) ﻗﺎﻋـﺩﺓ ﺒﻴﺎﻨـﺎﺕ
ﻼ ( ﺃﻭ ﺃﻥ ﻴﻜﻭﻥ ﻜل ﺠﺩﻭل ﻓﻲ ﻤﻠﻑ ﻋﻠﻰ ﺤﺩﺓ ﻜﻤﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺒﺎﺭﺍﺩﻭﻜﺱ .
ﺃﻜﺴﻴﺱ ﻤﺜ ﹰ
ﻼ ﺍﻟﺤﻘل ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ ﻤـﻥ ﺍﻟﻨـﻭﻉ
ﻴﻌﺭﻑ ﻜل ﺤﻘل ) ﻋﻤﻭﺩ ( ﻓﻲ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺤﻭﻴﻬﺎ ﻓﻤﺜ ﹰ
Integerﺃﻭ LongIntﺤﺴﺏ ﺤﺠﻡ ﺍﻟﻤﻜﺘﺒﺔ ﺒﻴﻨﻤﺎ ﺃﺴﻡ ﺍﻟﻜﺘﺎﺏ ﻭ ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﻭﺩﺍﺭ ﺍﻟﻨﺸﺭ ﺘﻜﻭﻥ ﻤـﻥ ﺍﻟﻨـﻭﻉ ﻨـﺹ
ﻭﺘﺎﺭﻴﺦ ﺍﻹﺼﺩﺍﺭ ﻤﻥ ﺍﻟﻨﻭﻉ . Date
ﻼ ﺃﺴـﻡ
ﻭﺃﻜﺜﺭ ﻤﻥ ﺫﻟﻙ ﻋﻨﺩﻤﺎ ﻨﻌﺭﻑ ﺍﻟﺤﻘل ﻤﻥ ﻨﻭﻉ ﻨﺹ ﻋﻠﻴﻨﺎ ﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﺘﻲ ﺴﻴﺤﻭﻴﻬﺎ ﻫﺫﺍ ﺍﻟـﻨﺹ ﻤـﺜ ﹰ
ﺍﻟﻜﺘﺎﺏ ﻋﺸﺭﻴﻥ ﺤﺭﻑ ﻋﻠﻤﹰﺎ ﺃﻨﻪ ﻻ ﻴﺴﻤﺢ ﺒﻜﺘﺎﺒﺔ ﺃﻜﺜﺭ ﻤﻥ ﺍﻟﺤﺩ ﺍﻟﻤﻌﻁﻰ ،ﻜﻤﺎ ﺃﻥ ﺤﺠﻡ ﺍﻟﺤﻘل ﺴﻴﻜﻭﻥ ﺒﺤﺠﻡ ﺍﻟـﻨﺹ )
ﻋﺸﺭﻴﻥ ﺒﺎﻴﺕ ( ﺴﻭﺍﺀ ﺃﻜﺎﻥ ﺃﺴﻡ ﺍﻟﻜﺘﺎﺏ ﻤﻥ ﻋﺸﺭﻴﻥ ﺤﺭﻑ ﺃﻭ ﺃﻗل ) ،ﺴﻨﺘﻌﺭﻑ ﻻﺤﻘﹰﺎ ﻋﻠﻰ ﺃﻨﻭﺍﻉ ﺍﻟﺤﻘﻭل ﻓﻲ ﻗﻭﺍﻋـﺩ
ﺍﻟﺒﻴﺎﻨﺎﺕ ،ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﺘﺄﺨﺫ ﺤﻘﻭل ﻤﺘﻐﻴﺭﺓ ( .
ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻌﻼﺌﻘﻴﺔ :
ﺏ ﻟـﻨﻔﺱ
ﻥ ﺃﻥ ﻴﺤﺘﻭﻯ ﺍﻟﺠﺩﻭل ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻜﺘﺎ ٍ
ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﺴﺎﺒﻕ ﻭﻀﻌﻨﺎ ﺃﺴﻡ ﺍﻟﻤﺅﻟﻑ ﻀﻤﻥ ﺍﻟﺠﺩﻭل ،ﻭﻤﻥ ﺍﻟﻤﻤﻜ ِ
ﺍﻟﻤﺅﻟﹼﻑ ..ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺴﻴﺘ ﻡ ﺘﻜﺭﺍﺭ ﺍﺴﻡ ﺍﻟﻤﺅﻟﹼﻑ ﺃﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ،ﻤﻤﺎ ﺴﻴﻌﻤل ﻋﻠﻰ ﺯﻴﺎﺩﺓ ﺤﺠـﻡ ﻗﺎﻋـﺩﺓ ﺍﻟﻤﻌﻁﻴـﺎﺕ،
ﻭﺇﺒﻁﺎﺀ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺒﺤﺙ ..ﺇﺫﻥ ﻤﺎ ﺍﻟﺤلّ؟
ل ﻟﻠﻤﺅﻟﹼﻔﻴﻥ ،ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺭﻗﻡ ﻤﺴﻠﺴل IDﻟﻜ ّ
ل ﻤﺅﻟﹼﻑ ..ﻭﻓﻲ ﺠﺩﻭل ﺍﻟﻜﺘﺏ ﻨﻨﺸﺊ ل ﻫﻭ ﺘﺨﺼﻴﺹ ﺠﺩﻭ ٍ
ﺍﻟﺤ ّ
ﻥ ﺨﺎﻨﺔ ﺭﻗﻡ
ﻋﻤﻭﺩﺍ ﻨﻀﻊ ﻓﻴﻪ ﺭﻗﻡ ﻤﺅﻟﹼﻑ ﺍﻟﻜﺘﺎﺏ ..ﻓﻤﺜﻼ ﻟﻭ ﻜﺎﻥ ﺭﻗﻡ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ﻫﻭ ،100ﻓﺈ
70
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ل ﻤﻥ ﺍﻟﻜﺘﺏ ﺍﻟﺘﺎﻟﻴﺔ "ﺸﻬﺭﺯﺍﺩ" ﻭ"ﺍﻷﻴـﺩﻱ ﺍﻟﻨﺎﻋﻤـﺔ" ﻭ"ﺃﺭﻨـﻲ ﺍﷲ"
ﺍﻟﻤﺅﻟﹼﻑ ﻓﻲ ﺠﺩﻭل ﺍﻟﻌﻨﺎﻭﻴﻥ ﻻ ﺒ ﺩ ﺃﻥ ﺘﻜﻭﻥ 100ﻟﻜ ّ
ﻭ"ﺸﺠﺭﺓ ﺍﻟﺤﻜﻡ" ﻭﺴﻴﺼﺒﺢ ﻟﻴﻨﺎ ﺠﺩﻭﻟﻴﻥ ﺒﺎﻟﺸﻜل :
ﺩﺍﺭ ﺍﻟﻨﺸﺭ ﺘﺎﺭﻴﺦ ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﺍﺴﻡ ﺍﻟﻜﺘﺎﺏ ﺭﻗﻡ ﺍﻟﻜﺘﺎﺏ
ﺍﻹﺼﺩﺍﺭ
ﺩﺍﺭ ﺸﻌﺎﻉ 1997/1/2 ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠـﺔ 50 1255
ﺩﻟﻔﻲ
ﻜﺘـــــﺎﺏ 2002/2/9 56 VB.Net 1256
ﺇﻟﻜﺘﺭﻭﻨﻲ
ﻤﺼﺭ 1944/3/3 100 ﺸﺠﺭﺓ ﺍﻟﺤﻜﻡ 1257
ﻤﺼﺭ 2000/4/2 ﺍﻷﻴﺩﻱ ﺍﻟﻨﺎﻋﻤﺔ 100 1258
ﻤﺼﺭ 1990/3/12 100 ﺸﻬﺭﺯﺍﺩ
ﺠﺩﻭل ﺍﻟﻜﺘﺏ
ﺃﺴﻡ ﺍﻟﻤﺅﻟﻑ ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ
ﻴﺎﺴﺭ ﻋﻘﺎﺩ 50
ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ 56
ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ 100
ﺴﻌﻴﺩ ﺍﻟﺼﺎﻓﻲ 114
AuthorID BookID
23 1
106 1
8 2
8 3
ﺤﻴﺙ ﺍﺸﺘﺭﻙ ﺍﻟﻤﺅّﻟﻔﺎﻥ ﺭﻗﻤﺎ 23ﻭ 106ﻓﻲ ﺘﺄﻟﻴﻑ ﺍﻟﻜﺘﺎﺏ ﺭﻗﻡ ،2ﺒﻴﻨﻤﺎ ﻗﺎﻡ ﺍﻟﻤﺅﻟﹼﻑ ﺭﻗﻡ 8ﺒﺘﺄﻟﻴﻑ ﺍﻟﻜﺘـﺎﺒﻴﻥ
ﺭﻗﻤﻲ 2ﻭ ..3ﻫﺫﻩ ﻫﻲ ﻋﻼﻗﺔ ﻤﺘﻌﺩﺩ ﺒﻤﺘﻌﺩﺩ.
73
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻴﻘﻭﻡ ﺼﺎﺤﺏ ﺍﻟﻤﻜﺘﺒﺔ ﺒﺈﺭﺴﺎل ﺇﻋﻼﻨﺎﺕ ﺇﻟﻰ ﺴﻌﻴﺩ ﻜﻠﻤﺎ ﺼﺩﺭ ﻤﺅﻟﻑ ﺠﺩﻴﺩ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ،ﻟﻨﻔﺭﺽ ﺃﻴﻀﹰﺎ ﺃﻨﻪ ﻓﻲ
ﺃﺴﺒﻭﻉ ﻤﺎ ﻜﺜﺭ ﺍﻟﻁﻠﺏ ﻋﻠﻰ ﻜﺘﺎﺏ ﻤﺎ ) Harry potterﺍﻟﻜﺘﺎﺏ ﺍﻟﺫﻱ ﺤﺼﺩ ﺃﻜﺒﺭ ﻤﺒﻴﻌﺎﺕ ﻓﻲ ﺍﻟﻌﺎﻟﻡ ﻓﻲ ﺍﻟﺸﻬﺭ ﺍﻟﺴﺎﺩﺱ
، ( 2003ﻋﻨﺩﻫﺎ ﻴﻘﻭﻡ ﺼﺎﺤﺏ ﺍﻟﻤﻜﺘﺒﺔ ﺒﺘﻌﺩﻴل ﺘﺭﺘﻴﺏ ﺍﻟﻜﺘﺏ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﺭﻓﻭﻑ ﻟﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻋﻠﻰ
ﺍﻟﺭﻓﻭﻑ ﻓﻲ ﻭﺍﺠﻪ ﺍﻟﻤﻜﺘﺒﺔ ).ﻁﺒﻌﹰﺎ ﻻ ﻴﻤﻜﻥ ﺘﻁﺒﻴﻕ ﻫﺫﻩ ﺍﻷﻤﺜﻠﺔ ﻋﻨﺩﻨﺎ ﻫﻜﺫﺍ ،ﻷﻥ ﺃﻱ ﻤﻜﺘﺒﺔ ﻓﻲ ﺍﻟﻭﻻﻴﺎﺕ ﺍﻟﻤﺘﺤﺩﺓ ﻴﻜﻭﻥ
ﻟﻬﺎ ﻓﺭﻭﻉ ﻓﻲ ﺃﻜﺜﺭ ﻤﻥ ﻭﻻﻴﺔ ﻭﻤﺩﻴﻨﺔ ﻤﻤﺎ ﻴﻌﻨﻲ ﻋﺩﺩ ﺯﺒﺎﺌﻥ ﻴﻔﻭﻕ ﺍﻟﻤﻠﻴﻭﻥ ﺯﺒﻭﻥ ،ﻤﻤﺎ ﻴﻌﻁﻲ ﺇﺤﺼﺎﺌﻴﺎﺕ ﻭﺍﺴﻌﺔ ﻋﻥ
ﺤﺭﻜﺔ ﺍﻟﺒﻴﻊ ﻭﺍﻟﺸﺭﺍﺀ (
ﺨﻁﻭﺍﺕ ﺘﺼﻤﻴﻡ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :
1ـ ﺘﺤﺩﻴﺩ ﺍﻟﻐﺭﺽ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ .
2ـ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ .
3ـ ﺘﺤﺩﻴﺩ ﺤﻘﻭل ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ .
4ـ ﺘﻌﻴﻴﻥ ﺍﻟﺤﻘﻭل ﺍﻟﻤﻔﺘﺎﺤﻴﺔ .
5ـ ﺘﺤﺩﻴﺩ ﺍﻟﻌﻼﻗﺎﺕ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل
6ـ ﺇﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ .
1ـ ﺘﺤﺩﻴﺩ ﺍﻟﻐﺭﺽ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﻻ ﻤﺎﺫﺍ ﻴﺭﻴﺩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺜﻡ ﻤﻌﺭﻓﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﺠﺏ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﺍﻟﻘﺎﻋﺩﺓ ﻷﻥ
ﻴﺠﺏ ﺍﻟﻤﻌﺭﻓﺔ ﺃﻭ ﹰ
ﺃﻱ ﺯﻴﺎﺩﺓ ﻓﻲ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺴﻴﻨﺘﺞ ﻋﻨﻪ ﺯﻴﺎﺩﺓ ﻓﻲ ﺤﺠﻡ ﺍﻟﻘﺎﻋﺩﺓ ﺒﺩﻭﻥ ﺴﺒﺏ ،ﻭﺃﻱ ﻨﻘﺹ ﻓﻲ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺴﻴﺘﻁﻠﺏ ﻤﻨﺎ ﺘﻌﺩﻴل
ﺍﻟﺠﺩﻭل ﻓﻴﻤﺎ ﺒﻌﺩ ﻭﺍﻟﺫﻱ ﻗﺩ ﻴﺅﺩﻱ ﺒﺩﻭﺭﻩ ﺇﻟﻰ ﺘﻌﺩﻴل ﻓﻲ ﺍﻟﺠﺩﺍﻭل ﺍﻟﻤﺭﺘﺒﺔ ﻭﺒﺎﻟﺘﺎﻟﻲ ﺘﻌﺩﻴل ﺍﻟﻘﺎﻋﺩﺓ ﺒﺎﻟﻜﺎﻤل .
2ـ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﺒﻌﺩ ﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻁﻠﻭﺏ ﺘﺨﺯﻴﻨﻬﺎ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺍﻟﻌﻤل ﻋﻠﻰ ﺘﺨﻁﻴﻁ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﺴﺘﺨﺯﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ .
3ـ ﺘﺤﺩﻴﺩ ﺤﻘﻭل ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻨﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ :
ﻴﺠﺏ ﺃﻥ ﻻ ﻴﺘﻀﻤﻥ ﺍﻟﺠﺩﻭل ﻤﻌﻠﻭﻤﺎﺕ ﻤﺘﻜﺭﺭﺓ ،ﻜﻤﺎ ﺃﻨﻪ ﻻ ﻴﺠﺏ ﺘﻜﺭﺍﺭ ﺍﻟﻤﻌﻠﻭﻤﺔ ﺍﻟﻭﺍﺤﺩﺓ ﺒﻴﻥ ﺍﻟﺠﺩﺍﻭل ،ﻫﺫﺍ ﻴﻀﻤﻥ
ﺘﺤﺩﻴﺙ ﺍﻟﻤﻌﻠﻭﻤﺔ ﻓﻲ ﻤﻜﺎﻨﻬﺎ ﻭﻴﻘﻀﻲ ﻋﻠﻰ ﺍﺤﺘﻤﺎل ﺇﺩﺨﺎل ﻤﻌﻠﻭﻤﺎﺕ ﻤﺘﺒﺎﻴﻨﺔ ﻟﺘﻠﻙ ﺍﻟﻤﻌﻠﻭﻤﺔ ﻓﻴﻤﺎ ﻟﻭ ﻭﺠﺩﺕ ﻓﻲ ﻤﻜﺎﻨﻴﻥ
ﻤﺨﺘﻠﻔﻴﻥ .
........
ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺩﻟﻔﻲ ..... :
1ـ ﺒﺭﺍﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :ﻫﻲ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻀﻤﻥ ﻗﺎﻋﺩﺓ
ﺍﻟﻤﻌﻁﻴﺎﺕ ،ﻭﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻟﻘﺎﻋﺩ ﻤﻌﻁﻴﺎﺕ ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻋﻠﻰ ﻋﻠﻡ ﻜﺎﻑ ﺒﺒﻨﻴﺔ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻌﻬﺎ
) ﺍﻟﺠﺩﺍﻭل ﻭﺍﻟﺤﻘﻭل ( ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺫﻟﻙ ﻤﻥ ﺘﺼﻤﻴﻡ ﺍﻟﻭﺍﺠﻬﺎﺕ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺘﻌﺎﻤل ﻤﻊ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ )
ﺍﺴﺘﻌﺭﺍﺽ ،ﺇﻀﺎﻓﺔ ،ﺤﺫﻑ ،ﺒﺤﺙ . ( .......
76
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺭﺍﺒﻌﺔ ﻋﺸﺭ
ﺒﻨﺎﺀ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ :
ﻴﺄﺘﻲ ﻤﻊ ﺩﻟﻔﻲ ﻗﻭﺍﻋﺩ ﻤﻌﻁﻴﺎﺕ ﺠﺎﻫﺯﺓ ﺘﺴﺘﺨﺩﻡ ﻜﺄﻤﺜﻠﺔ ﻋﻠﻰ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻁﺭﻕ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ،ﻟﺫﻟﻙ ﺴﻨﺘﻌﺎﻤل ﻤﻊ
ﻫﺫﻩ ﺍﻟﻘﻭﺍﻋﺩ ﺤﺘﻰ ﻴﺼﺒﺢ ﺍﻟﻭﻗﺕ ﺠﺎﻫﺯﹰﺍ ﻹﻨﺸﺎﺀ ﻗﻭﺍﻋﺩﻨﺎ ﺍﻟﺨﺎﺼﺔ .
ﻤﺜﺎل : 1ﺒﻨﺎﺀ ﻨﻤﻭﺫﺝ ﻓﻴﻪ ﺠﺩﻭل ﻭﺤﻴﺩ :
ﺃﺴﻬل ﻁﺭﻴﻘﺔ ﻟﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻗﻭﺍﻋﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻫﻲ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ) ( Form Wizardﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ
. Database
ﻟﻠﺒﺩﺀ ﺒﺎﻟﻌﻤل ﺃﻨﺸﺊ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﺜﻡ ﺃﻏﻠﻕ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ) ﺍﻻﻓﺘﺭﺍﻀﻲ ( ﻋﻥ ﻁﺭﻴﻕ ﺍﻷﻤﺭ File Æ Closeﺃﻭ
ﺍﻟﺘﺤﻭﻴل ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻟﺸﻴﻔﺭﺓ ﻭﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﻤﻔﺘﺎﺤﻴﻥ Ctrl+F4ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﺘﺴﺄﻟﻙ ﺇﻥ ﻜﻨﺕ ﺘﺭﻴﺩ ﺤﻔﻅ ﺍﻟﻭﺤﺩﺓ
ﺃﺠﺏ ﺒﻼ .
ﺒﻬﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻨﻜﻭﻥ ﻗﺩ ﺤﺼﻠﻨﺎ ﻋﻠﻰ ﻤﺸﺭﻭﻉ ﺒﺩﻭﻥ ﻨﻤﻭﺫﺝ ﺃﻭﻟﻲ ﻷﻨﻨﺎ ﺴﻨﻨﺸﺊ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ﻤﻥ ﺨﻼل ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ
ﺍﺨﺘﺭ ﺍﻷﻤﺭ Database Æ Form Wizardﻤﻥ ﻗﻭﺍﺌﻡ ﺍﻟﺩﻟﻔﻲ :
ﺴﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﺘﺭﻙ ﺍﻟﺨﻴﺎﺭﺍﺕ
ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻭﺴﺘﺘﻌﺭﻑ ﻋﻠﻰ ﺨﻴﺎﺭﺘﻬﺎ ﻻﺤﻘﹰﺎ .
ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ Next
77
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻀﻐﻁ ﻋﻠﻰ . Next
ﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺍﻟﺘﻲ ﺘﻁﺎﻟﺒﻙ ﺒﺘﺤﺩﻴﺩ
ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺇﻅﻬﺎﺭﻫﺎ ﻓﻲ ﺍﻟﺠﺩﻭل .
ﻹﻅﻬﺎﺭ ﺤﻘل ﻤﺎ ﺃﺨﺘﺭ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ
>
ﻭﻹﻅﻬﺎﺭ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﺨﺘﺭ ﺍﻟﺯﺭ >>
ﻟﺘﺭﺍﺠﻊ ﻋﻥ ﺍﺨﻴﺎﺭ ﺤﻘل ﺍﺨﺘﺭ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﺃﻀﻐﻁ ﻋﻠﻰ
ﺍﻟﺯﺭ <
ﻟﻠﺘﺭﺍﺠﻊ ﻋﻥ ﺍﺨﺘﻴﺎﺭ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﺨﺘﺭ ﺍﻟﺯﺭ <<
ﺃﻀﻑ ﺍﻵﻥ ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ) >> ( .
ﻭﺍﻀﻐﻁ ﻋﻠﻰ Nextﻟﻠﻤﺘﺎﺒﻌﺔ
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ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ ﻤﻜﺎﻥ DBDEMOS DataBaseName
ﺘﻭﺍﺠﺩ
) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ
ﻻ ﻤﻨﻬﺎ
ﺒﺩ ﹰ
ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ country.db TableName
ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ) ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﺴﻡ ﻜﺄﻱ ﻋﻨﺼﺭ ﺁﺨﺭ ﻓﻲ ﺩﻟﻔﻲ Table1 Name
(
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ False Active
ﺍﻟﻌﻨﺼﺭ : DataSource
ﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻤﻊ ﺍﻟﻌﻨﺼﺭ Tableﻭﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻠﺭﺒﻁ ﺒﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻟﻭﺼﻭل DataSetﻭﻋﻨﺎﺼﺭ
ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﻌﻁﻴﺎﺕ ﻭﻟﻪ ﺍﻟﺨﺼﺎﺌﺽ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﺘﺠﻌل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ) ﺃﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﻌﺩﻴل ( ﺃﻤﺎ True AutoEdit
ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﺴﺘﻌﺭﺍﺽ ) ﻗﺭﺍﺀﺓ ﺩﻭﻥ ﺘﻐﻴﻴﺭ ( ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻘﻁ ﻓﻨﻌﻁﻲ ﻫﺫﻩ
ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ False
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻌﻪ ﺍﻟـ Datasource Table1 Dataset
ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ .
ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ) ﻴﻤﻜﻥ ﺇﻋﻁﺎﺀ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﺴﻡ ﻜﺄﻱ ﻋﻨﺼﺭ ﺁﺨﺭ ﻓﻲ ﺩﻟﻔﻲ Datasource1 Name
80
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
(
81
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻻ ﻤﻥ ﺍﻟﺠﺩﻭل ﻭﺘﻅﻬﺭ
ﻻﺤﻅ ﻅﻬﻭﺭ ﺤﻘﻭل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺩ ﹰ
ﻫﺫﺍ ﺍﻟﺤﻘﻭل ﻓﻲ ﺍﻟﻌﻨﺎﺼﺭ Dbeditﻭﺍﻟﺘﻲ ﺘﺭﺘﺒﻁ ﻤﻊ
ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﺒﺭ ﺍﻟﺨﺎﺼﺔ Datasource
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺴﺘﺨﺩﻡ DBNavegatorﻟﻠﺘﻨﻘل ﺒﻴﻥ
ﺍﻟﺤﻘﻭل ) ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻫﻭ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﺘﻅﻬﺭ ﻗﻴﻤﻪ
ﺩﺍﺨل ﺍﻟﺤﻘﻭل (
ﻤﺜﺎل :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
ﺍﻟﺸﺭﺡ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﻴﻌﺭﻑ ﻋﻨﺼﺭ DataSourceﺍﻟﻤﺭﺘﺒﻁ ﻤﻊ ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ Datasource1 MasterSource
ﻴﺤﺩﺩ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﺴﻴﻘﻭﻡ ﺒﺘﺭﺘﻴﺏ ﻭﻓﻬﺭﺴﺔ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺠﺩﻭل CustNo IndexName
ﺒﻌﺩ ﺃﻥ ﺘﻌﻠﻤﻨﺎ ﻜﻴﻔﻴﺔ ﺘﻨﻔﻴﺫ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺴﻨﻌﻴﺩ ﺍﻷﻤﺜﻠﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺎﺼﺭ ﻤﺒﺎﺸﺭﺓ :
ﻤﺜﺎل : 1
ﺴﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻌﺭﺽ ﺍﻟﺠﺩﻭل Country.dbﺍﻟﻤﻭﺠﻭﺩ ﻀﻤﻥ ﺍﻟﻘﺎﻋﺩﺓ DBDemos
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﺎﻟﻴﺔ :
1ـ ﺍﻟﻌﻨﺼﺭ Tableﻤﻥ ﺍﻟﺼﻔﺤﺔ BDE
_ 2ﺍﻟﻌﻨﺼﺭ DataSourceﻤﻥ ﺍﻟﺼﻔﺤﺔ . Data Access
83
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
3ـ ﺍﻟﻌﻨﺼﺭ DBGridﻭ DBNavigatorﻤﻥ ﺍﻟﺼﻔﺤﺔ . Data Control
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Tableﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ DBDEMOS DataBaseName
ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ
) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ
ﻻ ﻤﻨﻬﺎ
ﺒﺩ ﹰ
ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ country.db TableName
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ True Active
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSourceﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﺘﺠﻌل ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻭﻀﻊ ﺍﻟﺘﺤﺭﻴﺭ ) ﺃﻤﻜﺎﻨﻴﺔ ﺍﻟﺘﻌﺩﻴل ( ﺃﻤﺎ True AutoEdit
ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﺴﺘﻌﺭﺍﺽ ) ﻗﺭﺍﺀﺓ ﺩﻭﻥ ﺘﻐﻴﻴﺭ ( ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻘﻁ ﻓﻨﻌﻁﻲ ﻫﺫﻩ
ﺍﻟﺨﺎﺼﺔ ﺍﻟﻘﻴﻤﺔ False
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻌﻪ ﺍﻟـ Datasource Table1 Dataset
ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ .
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DBGridﻭﺍﻟﻌﻨﺼﺭ DBNavigatorﺍﻟﺨﺎﺼﺔ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺴﻴﺯﻭﺩ DBGridﺒﺎﻟﻤﻌﻁﻴﺎﺕ Datasource1 Datasource
ﻨﻔﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻤﺜﺎل : 2
ﺇﻨﺸﺎﺀ Master Detail Formﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺞ :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﻋﻨﺼﺭﻱ Tableﻭﻋﻨﺼﺭﻱ DataSourceﻭﻋﻨﺼﺭﻱ DBGridﻭﻋﻨﺼﺭ
. DBNavigator
1ـ ﺭﺒﻁ ﺍﻟﺠﺩﻭل ﺍﻟﺭﺌﻴﺴﻲ ) : ( Master
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Table1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
ﺍﻟﻘﻴﻤﺔ DBDEMOSﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﺴﻡ ﻤﻌﺭﻑ ﻤﺴﺒﻘﹰﺎ ﻴﺸﻴﺭ ﺇﻟﻰ DBDEMOS DataBaseName
ﻤﻜﺎﻥ ﺘﻭﺍﺠﺩ
) ﻤﺴﺎﺭ ( ﺍﻟﺠﺩﺍﻭل ) ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻜﺘﺏ ﻤﺴﺎﺭ ﻓﻬﺭﺱ ﻗﺎﻋﺩﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ
ﻻ ﻤﻨﻬﺎ
ﺒﺩ ﹰ
84
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
Customers.dbﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺭﺘﺒﻁ ﻤﻊ ﺍﻟﻌﻨﺼﺭ TableName
ﺃﻋﻁ ﺍﻟﻘﻴﻤﺔ Trueﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﺔ ﻟﺘﺴﺘﻁﻴﻊ ﻤﺸﺎﻫﺩﺓ ﺍﻟﺠﺩﻭل ﺃﺜﻨﺎﺀ ﺍﻟﺘﺼﻤﻴﻡ True Active
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ DataSource1ﺍﻟﺨﺎﺼﺔ DataSetﺍﻟﻘﻴﻤﺔ . Table1
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭﻴﻥ DBGrid1ﻭ DBNavigator1ﺍﻟﺨﺎﺼﺔ DataSourceﺍﻟﻘﻴﻤﺔ . DataSource1
85
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ ﺍﻟﺨﺎﻤﺴﺔ ﻋﺸﺭ
ﺒﻨﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ :
ﻴﻭﺠﺩ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺒﺭﺍﻤﺞ ﺒﻨﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻴﻌﺘﻤﺩ ﺍﻷﻤﺭ ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﻘﺎﻋﺩﺓ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻠﺒﻨﺎﺀ ﻗﺎﻋﺩﺓ ﻤﺤﻠﻴـﺔ
ﺘﺴﺘﺨﺩﻡ ﺠﺩﺍﻭل ﺒﺎﺭﺩﻭﻜﺱ ) ( Paradoxﻫﻨﺎﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ Borland Paradoxﻭﻟﺒﻨﺎﺀ ﺠـﺩﺍﻭل ﺘـﺴﺘﺨﺩﻡ Oracle
ﻫﻨﺎﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ Oracle 9iﻭﻫﻜﺫﺍ ﻭﻗﺩ ﺯﻭﺩﺘﻨﺎ ﺩﻟﻔﻲ ﺒﺄﺩﺍﺓ ﺴﻬﻠﺔ ﻹﻨﺸﺎﺀ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﻌﺩﻴل ﺍﻟﺠﺩﺍﻭل ﺒﺩﻭﻥ ﺍﻟﻌـﻭﺩﺓ
ﺇﻟﻰ ﺘﻠﻙ ﺍﻟﺒﺭﺍﻤﺞ ،ﺤﻴﺙ ﻴﻭﺠﺩ ﻀﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺃﺩﻭﺍﺕ ﺩﻟﻔﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ Database Desktopﺍﻟﺫﻱ ﻴﻤﻜﻥ ﻋﻥ ﻁﺭﻴﻘـﺔ
ﺘﺼﻤﻴﻡ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺃﻨﻭﺍﻉ ﺠﺩﺍﻭل ﺍﻟﺒﻴﺎﻨﺎﺕ .
: DataBase Desktop
ﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻟﺘﻌﻠﻡ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻫﻲ ﻨﺒﺩﺃ ﺒﻤﺜﺎل :
ﺍﻟﻤﻁﻠﻭﺏ ﺇﻨﺸﺎﺀ ﺠﺩﺍﻭل ﺘﺘﻌﻠﻕ ﺒﺤﺭﻜﺔ ﺍﻟﺭﻜﺎﺏ ﻓﻲ ﺍﻟﻤﻁﺎﺭ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺠﺩﺍﻭل ﺍﻟﺒﺎﺭﺩﻭﻜﺱ ﻭﻫﺫﻩ ﺍﻟﺠﺩﺍﻭل ﻫﻲ :
ﺒﻠﺩ ﺍﻟﻤﻐﺎﺩﺭﺓ ﻨﺹ GoFrom ﺠﺩﻭل ﺍﻟﻤﺴﺎﻓﺭﻭﻥ ) ( Passengers
ﺒﻠﺩ ﺍﻟﻭﺼﻭل ﻨﺹ ArriveTo ﺍﻟﺸﺭﺡ ﻨﻭﻉ ﺍﻟﺤﻘل ﺍﺴﻡ ﺍﻟﺤﻘل
ﻭﻗﺕ ﺍﻟﻤﻐﺎﺩﺭﺓ ﺘﺎﺭﻴﺦ ﻭﻭﻗﺕ GoTime ﺭﻗﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻋﺩﺩ * Pno
ﻭﻗﺕ ﺍﻟﻭﺼﻭل ﺘﺎﺭﻴﺦ ﻭﻭﻗﺕ ArriveTime ﺍﺴﻡ ﺍﻟﻤﺴﺎﻓﺭ ﻨﺹ Pname
ﻋﺩﺩ ﺍﻟﺒﻁﺎﻗﺎﺕ ﻋﺩﺩ CardCount ﺍﻟﺠﻨﺴﻴﺔ ﻨﺹ Nationality
ﺍﻟﻤﺘﻭﻓﺭﺓ ـﻭﺍﺯ
ـﻡ ﺠـ
ﺭﻗـ ﻋﺩﺩ PassNo
ﺍﻟﺴﻔﺭ
86
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺤﺩﺩ ﺒﻌﺩﻫﺎ ﻤﺴﺎﺭ ﺍﻟﻘﺎﻋﺩﺓ 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ﻭﺍﻀﻐﻁ ﻋﻠﻰ ﻤﻭﺍﻓﻕ.
88
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻴﻭﻀﻊ ﻓﻲ ﻫﺫﺍ ﺍﻟﻘﺴﻡ ﺍﺴﻡ ﺍﻟﺤﻘل ،ﻭﺃﺴﻤﺎﺀ ﺍﻟﺤﻘﻭل ﻓﻲ ﺠﺩﺍﻭل ﺍﻟﺒﺎﺭﺩﻭﻜﺱ ﻴﺠﺏ ﺃﻥ ﻻ ﺘﺘﺠﺎﻭﺯ 25ﺤﺭﻑ ،ﻜﻤﺎ ﻴﻤﻜـﻥ
ﺃﻥ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻓﺭﺍﻏﺎﺕ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﺴﻡ ﺍﻟﺤﻘل ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻭﻟﻜﻥ ﻴﻨﺼﺢ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﺴﻤﺎﺀ ﺤﻘﻭل ﺇﻨﻜﻠﻴﺯﻴﺔ ﺩﺍﺌﻤﹰﺎ
ﻭﻋﺩﻡ ﺍﺤﺘﻭﺍﺌﻬﺎ ﻋﻠﻰ ﻓﺭﺍﻏﺎﺕ ﻭﺨﺎﺼﺔ ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ، SQLﻜﻤﺎ ﻴﺠﺏ ﺍﻻﺒﺘﻌﺎﺩ ﻋﻥ ﺒﻌﺽ ﺍﻷﺴﻤﺎﺀ ﺍﻟﻤﺤﺠﻭﺯﺓ ﻓﻲ ﻟﻐﺔ
SQLﻤﺜل SELECTﺃﻭ Fromﺃﻭ ... Date
2ـ ﻨﻭﻉ ﺍﻟﺤﻘل : Type
ﻴﺼﻑ ﻫﺫﺍ ﺍﻟﺤﻘل ﻨﻭﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺫﻱ ﺴﻴﺨﺯﻥ ﻓﻲ ﻫﺫﺍ ﺍﻟﺤﻘل ﻭﻫﻨﺎﻙ ﻋﺩﺩ ﻤﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﻴﻤﻜـﻥ ﺃﻥ ﻴﻨﺘﻤـﻲ ﺇﻟﻴﻬـﺎ
ﺍﻟﺤﻘل ﻭﻟﻤﻌﺭﻓﺔ ﻫﺫﻩ ﺍﻷﻨﻭﺍﻉ ﺇﻀﻐﻁ ﺒﺯﺭ ﺍﻟﻔﺄﺭﺓ ﺍﻟﻴﻤﻴﻨﻲ ﻓﻲ ﺍﻟﻌﻤﻭﺩ Typeﺃﻭ ﺍﻀﻐﻁ ﻋﻠﻰ ﻤﻔﺘـﺎﺡ ﺍﻟﻤـﺴﺎﻓﺔ Space
ﻻ ،ﻭﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻴﺒﻴﻥ ﺍﻷﻨﻭﺍﻉ ﺍﻟﺘﻲ ﺘﻭﻓﺭﻫﺎ ﺠﺩﺍﻭل : Paradox
ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻟﻌﻤﻭﺩ Typeﻓﻌﺎ ﹰ
ﻤﻼﺤﻅﺎﺕ ﺍﻟﺭﻤﺯ ﺍﻟﺤﺠﻡ ﺍﻟﻨﻭﻉ
ﻨﺹ ﻋﺎﺩﻱ ﻴﻤﻜﻥ ﺃﻥ ﻴﺤﺘﻭﻱ ﺭﻤﻭﺯﹰﺍ ﺃﻭ ﺃﺭﻗﺎﻡ ﻭﻴﺤﺩﺩ ﺤﺠﻡ ﺍﻟﺤﻘل ﻁﻭل A 255 – 1 Alpha
ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﺘﻲ ﺴﻴﺄﺨﺫﻩ ﺍﻟﺤﻘل
ﻋﺩﺩ ﺤﻘﻴﻘﻲ N Number
ﻨﻔﺱ ﺍﻟﻨﻭﻉ ﺍﻟﺴﺎﺒﻕ ﻭﻟﻜﻥ ﺒﺼﻴﻐﺔ ﻤﺎﻟﻴﺔ $ Money
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﺒﻁﻭل ﺒﺎﻴﺘﻴﻥ ﻤﻥ ﺍﻟﻨﻭﻉ Integer S Short
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﻤﻥ ﺍﻟﻨﻭﻉ Longint I Long Integer
ﻋﺩﺩ ﺼﺤﻴﺢ ﻋﺸﺭﻱ ﻤﻀﻐﻭﻁ ) ﺍﻟﺘﻤﺜﻴل ﺍﻟﺜﻨـﺎﺌﻲ ﻹﻋـﺩﺍﺩ ﺍﻟﻔﺎﺼـﻠﺔ # 0 .. 32 BCD
)(1
ﺍﻟﻌﺸﺭﻴﺔ (
ﺘﺎﺭﻴﺦ D Date
ﻭﻗﺕ T Time
ﻴﺩﻤﺞ ﺍﻟﺘﺎﺭﻴﺦ ﻭﺍﻟﻭﻗﺕ ﻓﻲ ﺤﻘل ﻭﺍﺤﺩ @ TimeStamp
)(2
ﻨﺹ ﺒﺤﺠﻡ ﻜﺒﻴﺭ. M 1..240 Memo
ﻨﺹ ﺒﺤﺠﻡ ﻜﺒﻴﺭ ﻤﻊ ﺘﺨﺯﻴﻥ ﻁﺭﻴﻘﺔ ﺘﻨﺴﻴﻕ ﻫﺫﺍ ﺍﻟﻨﺹ ) ﻟﻭﻥ ﺍﻟﻨﺹ ﻭ F 0.. 240 Formatted
)(2 Memo
ﻨﻭﻉ ﺍﻟﺨﻁ (..
)(3
ﺼﻭﺭﺓ G 0..240 Graphic
)(3
ﻼ(
ﻴﻤﺜل ﺤﺎﻭﻴﺔ ﻟﺭﺒﻁ ﻭﺇﺩﺭﺍﺝ ﺍﻟﻜﺎﺌﻨﺎﺕ ) ﺇﺩﺭﺍﺝ ﻤﻠﻑ Excelﻤﺜ ﹰ O 0..240 OLE
ﻴﻤﺜل ﻗﻴﻤﺔ ﻤﻨﻁﻘﻴﺔ Trueﺃﻭ False L Logical
ﻋﺩﺩ ﺼﺤﻴﺢ ﻁﻭﻴل ﻴﺯﺩﺍﺩ ﺘﻠﻘﺎﺌﻴﹰﺎ + Auto increment
)(3
ﻴﺨﺯﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺜﻨﺎﺌﻴﹰﺎ ﺩﺍﺨل ﻤﻠﻔﺎﺕ .Mb B 0..240 Binary
ﻤﻌﻁﻴﺎﺕ ﺒﺎﻟﺼﻴﻐﺔ ﺍﻟﺜﻨﺎﺌﻴﺔ ﺘﺨﺯﻥ ﻀﻤﻥ ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Db Y 1..255 Byte
) : ( 1ﺍﻟﺭﻗﻡ ﻓﻲ ﺍﻟﻌﻤﻭﺩ ﺤﺠﻡ ﺘﺤﺩﺩ ﻋﺩﺩ ﺍﻷﺭﻗﺎﻡ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ
89
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
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 ﻭﻟﻪ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
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
103
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺇﻤﻜﺎﻨﻴﺔ ﺍﺨﺘﻴﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﺴﺠل ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ True or False dgMutiSelect
ﺒﻘﻲ ﺃﻥ ﻨﺸﺭﺡ ﺍﻟﺨﺎﺼﺔ Columnsﻟﻬﺫﺍ ﺍﻟﻌﻨﺼﺭ :
ﺒﺎﺨﺘﻴﺎﺭ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﻭ ﺒﺎﻟﻀﻐﻁ ﻤﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ DBGridﺘﻅﻬﺭ
ﻨﺎﻓﺫﺓ ﻤﺤﺭﺭ ﺍﻷﻋﻤﺩﺓ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ :
ﺤﻴﺙ ﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻓﺎﺭﻏﺔ ،ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻷﻴﻘﻭﻨـﺔ ﺍﻟﺜﺎﻟﺜـﺔ )
( Add All Field
ﻓﺘﻅﻬﺭ ﺠﻤﻴﻊ ﺃﺴﻤﺎﺀ ﺤﻘﻭل ﺍﻟﺠﺩﻭل ﺩﺍﺨل ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ :
ﻓﻲ ﺤﺎل ﺤﺫﻑ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﻓﻠﻥ ﻴﻅﻬﺭ ﻓـﻲ ﺍﻟﻌﻨـﺼﺭ
DBGridﻭﻟﻠﻘﻴﺎﻡ ﺒﺫﻟﻙ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻟﺜﺎﻨﻲ Deleteﺒﻌﺩ ﺍﺨﺘﻴـﺎﺭ
ﺍﻟﺤﻘل ﺍﻟﻤﺭﺍﺩ ﺤﺫﻓﻪ .
ﻤﻼﺤﻅﺔ :ﻴﺨﺘﻠﻑ ﺍﻷﻤﺭ ﻫﻨﺎ ﻋﻥ ﺤﺫﻑ ﺍﻟﺤﻘل ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻭﺫﻟﻙ ﻷﻨﻪ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺤﻘل ﺍﻟﻤﺤﺫﻭﻑ ﻤﻥ ﻤﺤﺭﺭ
ﺍﻷﻋﻤﺩﺓ ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻪ ﺒﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻌﻨﺼﺭ Tableﻤﺒﺎﺸﺭﺓ ﺃﻭ ﻋﻥ ﻁﺭﻴﻕ ﺭﺒﻁﻪ ﺒﺄﺤﺩ ﻋﻨﺎﺼـﺭ
، Data Controlﺃﻤﺎ ﻓﻲ ﺤﺎل ﺤﺫﻑ ﺍﻟﻌﻨﺼﺭ ﻤﻥ ﻤﺤﺭﺭ ﺍﻟﺤﻘﻭل ﻓﻠﻥ ﻨﺴﺘﻁﻴﻊ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻗﻴﻡ ﻫﺫﺍ ﺍﻟﺤﻘل ) ﻋﻤﻠﻴﹰﺎ
ﺍﻟﻌﻨﺼﺭ Tableﻟﻥ ﻴﺘﺼل ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻹﺤﻀﺎﺭ ﻗﻴﻡ ﻫﺫﺍ ﺍﻟﺤﻘل ( .
ﺒﺎﺨﺘﻴﺎﺭ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺤﻘﻭل ﺘﻅﻬﺭ ﺨﺼﺎﺌﺹ ﺍﻟﺤﻘل ﻓﻲ ﻤﺤﺭﺭ ﺍﻟﺨﻭﺍﺹ ﻭﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻨﻬﺎ ﻜﻤﺎﻴﻠﻲ :
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
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ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺴﺎﺒﻕ ﻭﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
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
ﻋﻨﻭﺍﻥ ﺍﻟﻤﺅﻟﻑ Wadress ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ * Wnoﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ WName
1
2
2ـ ﺠﺩﻭل ﺩﻭﺭ ﺍﻟﻨﺸﺭ : Publisher
ﺍﻟﻌﻨﻭﺍﻥ PubAdr ﺍﺴﻡ ﺍﻟﺩﺍﺭ PubName ﺭﻗﻡ ﺍﻟﺩﺍﺭ * PubNo
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
* Select
From Passengers
Where PNo = 3
ﻤﺜﺎل : 5ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﺃﺭﻗﺎﻤﻬﻡ ﺒﻴﻥ 2ﻭ : 5
* 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ﻨﺭﻴﺩ ﻋﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﻓﺭﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺒﺩﺃ ﺍﺴﻤﻬﻡ ﺒﺤﺭﻑ ﻡ ﻭﻁﻭل ﺍﺴﻤﻬﻡ ﺃﺭﺒﻊ ﺃﺤﺭﻑ :
* Select
From Passengers
'ﻡ____' Where Pname Like
ﺘﺴﺘﺨﺩﻡ %ﻓﻲ ﺘﻌﻠﻴﻤﺔ 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
ﻤﻼﺤﻅﺔ :ﺠﻤﻴﻊ ﺍﻟﺤﻘﻭل ﺍﻟﻭﺍﺭﺩﺓ ﻓﻲ ﺘﻌﻠﻴﻤﺔ 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ﻤـ
ﻭﺍﺨﺘـ
ﺍﻟﻘﺎﺌﻤﺔ ﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ
ﻤﺜﺎل : 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ﻭ
ـﺙ FindKeyﻭ
ـﻠﻭﺒﻲ ﺍﻟﺒﺤـ
ـﺴﺘﺨﺩﻡ ﺍﺴـ
ـﺼﺭ Queryﻻ ﻴـ
Lookupﻭ Bofﻭ Eofﻭ ( .... Firstﺇﻻ ﺃﻥ ﺍﻟﻌﻨـ
FindNearestﻭﺫﻟﻙ ﻷﻥ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﻴﻌﻴﺩﻫﺎ ﺍﻟﻌﻨﺼﺭ Queryﻻ ﺘﻌﺘﻤﺩ ﻋﻠﻰ ﻤﻔﺘﺎﺡ ﺃﺴﺎﺴﻲ ..
ﻤﺜﺎل ﻫﺎﻡ :
ﻟﻴﻜﻥ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻟﺸﺭﻜﺔ ﻤﺎ Companyﻭﻟﻴﻜﻥ ﻟﺩﻴﻨﺎ ﺠﺩﻭل ﺍﻟﻤﻭﻅﻔﻴﻥ Employeesﺍﻟﺘﺎﻟﻲ :
ﺍﻟﺭﺍﺘﺏ ﺘﺎﺭﻴﺦ ﺍﻟﻤﺒﺎﺸﺭﺓ ﺭﻗﻡ ﺍﻟﻔﺭﻉ ﺭﻗﻡ ﺍﻟﻤﺩﻴﺭ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ ﺭﻗﻡ
Salary Hiredate Department_id ManagerNo EmpName ﺍﻟﻤﻭﻅﻑ
EmpNo
9000 10/1/2002 3 200 Sara 10
12500 06/08/2000 2 300 kala 16
11000 09/01/2001 3 100 Dani 20
14000 05/07/2000 2 100 Wleed 30
ﺃﻨﺸﺊ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺒﺎﺴﺘﺨﺩﺍﻡ Database Desktopﻭﺃﺩﺨل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻴﻪ :
ﺍﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻼﺯﻤﺔ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
127
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
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;
: ( ﺍﻟﺯﺭ ) ﺍﺒﺤﺙ ﻋﻥ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ2
QryEmpName.Close ;
DataSource1.DataSat := QryEmpName ;
QryEmpName.ParamesByName ( 'Name').Value := Edit2.text ;
QryEmpName.Open ;
( ﺍﻟﺯﺭ ) ﺍﺴﺘﻌﻼﻡ ﺍﻟﺭﻭﺍﺘﺏ ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ3
QrySal.Close ;
DataSource1.DataSat := QrySal ;
QrySal.ParamByName( ' mn') .Value := strtoint ( edit3.text ) ;
QrySal.ParamByName( ' mx') .Value := strtoint ( edit4.text ) ;
QrySal.Open ;
: ( ﺍﻟﺯﺭ ) ﺍﺴﺘﻌﻼﻡ ﺍﻟﺘﺎﺭﻴﺦ ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ4
QryHireDate.Close ;
DataSource1.DataSat := QryHireDate;
QryHireDate.ParamByName ( 'b').asdate := datetimepicker1.date;
QryHireDate.ParamByName ( 'e').asdate := datetimepicker2.date;
QryHireDate.Open ;
: ( ) ﻤﺠﻤﻭﻉ ﺍﻟﺭﻭﺍﺘﺏ ﻓﻲ ﻜل ﻗﺴﻡ ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ5
QrysumsalaryByDepartment.Close ;
DataSource1.DataSat := QrysumsalaryByDepartment;
QrysumsalaryByDepartment.Open ;
: ( ﺍﻟﺯﺭ ) ﻤﻭﻅﻔﻲ ﺍﻟﻤﺩﻴﺭ ـ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ6
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
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺴﻴﻅﻬﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺍﺴﻡ ﺃﻭل ﻤﻭﻅﻑ ﻴﺄﺘﻲ ﺒﻪ ﺍﻻﺴﺘﻌﻼﻡ ﻭﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ Okﺴﻴﻅﻬﺭ ﺍﺴﻡ ﺍﻟﻤﻭﻅﻑ ﺍﻟﺘﺎﻟﻲ ﻭﻫﻜﺫﺍ .
130
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 21
ﻤﻼﺤﻅﺎﺕ :
ﺘﺨﺯﻥ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ﻓﻲ ﻤﻠﻑ ﻭﺍﺤﺩ ﻤﻥ ﺍﻤﺘﺩﺍﺩ .Mdbﻋﻠﻰ ﻋﻜﺱ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺒﺎﺭﺩﻭﻜﺱ ﺍﻟﺘﻲ ﺘﻌﺘﻤﺩ ﻤﻠﻑ
ﻤﺴﺘﻘل ﻟﻜل ﺠﺩﻭل ﺃﻭ ﻓﻬﺭﺱ ....
ﻟﻴﺴﺕ ﻫﻨﺎﻙ ﺍﺨﺘﻼﻓﺎﺕ ﻜﺒﻴﺭﺓ ﺒﻴﻥ Access XPﻭ Access 2000ﻭ Access 97ﻓﻴﻤﺎ ﻴﺘﻌﻠﹼﻕ ﺒﺈﻨﺸﺎﺀ ﺍﻟﺠﺩﺍﻭل ،ﻟﻬﺫﺍ
ﻱ ﻤﻥ ﻫﺫﻩ ﺍﻟﻨﺴﺦ.
ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺘﺒﻊ ﻤﻌﻨﺎ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺍﺕ ﻋﻠﻰ ﺃ
131
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻨﻘﺭ ﺍﻷﻤﺭ "ﺇﻨﺸﺎﺀ ﺠﺩﻭل ﻓﻲ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺘﺼﻤﻴﻡ" ﻤﺭﺘﻴﻥ ﺒﺎﻟﻔﺄﺭﺓ ..ﺴﺘﻅﻬﺭ ﻟﻙ ﻨﺎﻓﺫﺓ ﺘﺼﻤﻴﻡ ﺍﻟﺠـﺩﻭل ﻜﻤـﺎ ﻓـﻲ
ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
132
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻥ ﺍﻟﺠﺩﻭل Authorsﻗﺩ ﺃﻀﻴﻑ ﺇﻟﻰ ﻨﺎﻓﺫﺓ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨـﺎﺕ ..ﺍﻨﻘـﺭﻩ ﻤـﺭﺘﻴﻥ
ﺍﻵﻥ ﻟﻭ ﺃﻏﻠﻘﺕ ﻨﺎﻓﺫﺓ ﺍﻟﺘﺼﻤﻴﻡ ،ﻓﺴﺘﺠﺩ ﺃ
ﺒﺎﻟﻔﺄﺭﺓ ..ﺴﺘﺠﺩ ﺃﻥ ﻨﺎﻓﺫﺓ ﺠﺩﻴﺩﺓ ﻗﺩ ﻓﺘﺤﺕ ،ﺘﻌﺭﺽ ﻟﻙ ﺠﺩﻭل ﺍﻟﻤﺅﻟﹼﻔﻴﻥ ..ﺃﺩﺨل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ:
ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ 1
ﻋﺒﺎﺱ ﺍﻟﻌﻘﺎﺩ 2
ﻤﺤﻤﺩ ﻋﺒﺩ ﺍﻟﺤﻠﻴﻡ ﻋﺒﺩ ﺍﷲ 3
ﻨﺒﻴل ﻓﺎﺭﻭﻕ 4
ﺃﺤﻤﺩ ﺨﺎﻟﺩ ﺘﻭﻓﻴﻕ 5
ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ 6
ﻤﻨﺼﻭﺭ 7
ﺭﺍﺘﺏ 8
ﻋﻘل 9
ل ﺠﺩﻭل ﻭﺍﻀﻐﻁ ﺯ ﺭ "ﺇﻀﺎﻓﺔ" ..ﺒﻌﺩ ﺃﻥ ﺘﻀﻴﻑ ﺍﻟﺠﺩﻭﻟﻴﻥ ﺃﻏﻠﻕ ﻫﺫﻩ ﺍﻟﻨﺎﻓﺫﺓ ..ﺴـﺘﺒﺩﻭ ﻟـﻙ ﻨﺎﻓـﺫﺓ ﺍﻟﻌﻼﻗـﺎﺕ
ﺍﺨﺘﺭ ﻜ ّ
ﻜﺎﻟﺘﺎﻟﻲ:
134
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
135
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﻴﻤﻜﻨﻙ ﺇﺩﺨﺎل ﺍﻟﻤﺯﻴﺩ ﻤﻥ ﻜﺘﺏ )ﺘﻭﻓﻴﻕ ﺍﻟﺤﻜﻴﻡ( ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺩﻭل ﺍﻟﻔﺭﻋﻲ ،ﺩﻭﻥ ﺃﻥ ﺘﹸﺩﺨل ﺭﻗﻤﻪ ﻓﻲ ﺨﺎﻨﺔ AuthorID
ل ﻤﺭﺓ ،ﺇﺫ ﺴﺘﺘ ﻡ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﺭﻗﻡ ﺁﻟﻴﺎ ،ﻤﻤﺎ ﻴﻭﻓﹼﺭ ﻟﻙ ﺍﻟﻭﻗﺕ ﻭﻴﻌﻔﻴﻙ ﻤﻥ ﺍﺤﺘﻤﺎﻻﺕ ﺍﻟﺨﻁﺄ.
ﻓﻲ ﻜ ّ
ﺭﺒﻁ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ﻤﻊ ﻋﻨﺎﺼﺭ BDEﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺩﻟﻔﻲ :
ﻭﺠﺩﻨﺎ ﺃﻨﻪ ﺘﻤﻜﻨﺎ ﻤﻥ ﺭﺒﻁ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ Paradoxﻤﻊ ﺍﻟﻌﻨﺼﺭ
Tableﻓﻲ ﺍﻟﺨﺎﺼﺔ DataBaseNameﻟﻠﻌﻨﺼﺭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻻﺴﻡ
ﺍﻟﺒﺩﻴل Aliasﺍﻟﺫﻱ ﺘﻡ ﺇﻨﺸﺎﺌﻪ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ Database
Desktopﻭﺍﻟﺴﺅﺍل ﺍﻟﻤﻁﺭﻭﺡ ﻫﻨﺎ ﻜﻴﻑ ﻴﻤﻜﻥ ﺃﻥ ﻨﺭﺒﻁ ﺒﻴﻥ ﺍﻟﻌﻨﺼﺭ
Tableﻭﺠﺩﻭل ﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ :
1ـ ﺍﻓﺘﺢ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ﻭﺍﺨﺘﺭ
Adminstrative Tools →ODBC Data Sources
ﺴﺘﻅﻬﺭ ﻟﻙ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ
ﺍﺨﺘﺭ ﻤﻨﻬﺎ ﺍﻟﺼﻔﺤﺔ System DNS
136
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
Selectﻭﺍﺨﺘﺭ ﻗﺎﻋﺩﺓ ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺃﻜﺴﻴﺱ ) ( Books.mdbﺒﻌﺩ ﺘﺤﺩﻴﺩ ﺍﻟﻔﻬﺭﺱ ﺍﻟﺘﻲ ﻭﻀﻌﺘﻪ ﻓﻴﻪ ،ﺍﻀﻐﻁ
ﺒﻌﺩﻫﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Ok
ﻭﺍﺨﺭﺝ ﻤﻥ . ODBC Data Source
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
ﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
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ـ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ :
ﻗﺒل ﺍﻟﺸﺭﻭﻉ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻴﻨﺎ ﺘﺤﺩﻴﺩ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻭﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻟﺠﺩﺍﻭل ﻭﻁﺭﻕ ﺍﻟﺭﺒﻁ ﺒﻴﻥ ﺍﻟﺠـﺩﺍﻭل
ﻭﻨﻭﻋﻴﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﻔﻬﺎﺭﺱ ﺍﻟﻤﻁﻠﻭﺒﺔ ...
ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ ﺴﻨﺤﺘﺎﺝ ﺇﻟﻰ ﺠﺩﻭل ﻭﺍﺤﺩ ﻭﻫﻭ
ss City Country Web Email Fax Mobil WPhon HPhon LName FName Num
ﺍﻟﻤﺩﻴﻨﺔ ﺍ ﺍﻟﺩﻭﻟﺔ ﻤﻭﻗﻊ ﺍﻟﺒﺭﻴﺩ ﺍﻟﻬﺎﺘﻑ ﺍﻟﻔﺎﻜﺱ ﻫﺎﺘﻑ ﻫﺎﺘﻑ ﺍﻟﻜﻨﻴﺔ ﺍﻻﺴﻡ ﺭﻗﻡ
ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ﺍﻻﻨﺘﺭﻨﺕ ﺍﻟﺨﻠﻭﻱ ﺍﻟﻌﻤل ﺍﻟﻤﻨﺯل
) )A(15 )A(15 )A(40) A(40) A(15) A(15 )A(15 )A(15 )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ـ ﺃﻋﻁ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
bdRightToLeft BiDiMode
ﺒﺭﻨﺎﻤﺞ ﺩﻟﻴل ﺍﻟﻬﺎﺘﻑ Caption
470 Hieght
750 Width
poScreenCenter Position
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ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل :
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
ﻻ ﻤﻥ ﺇﻏﻼﻗﻬﺎ ﻭﻴﻤﻜﻥ ﺇﻋﺎﺩﺓ ﺇﻅﻬﺎﺭﻫﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻤﻨﻬﺞ Showﻭﻫﻭ ﺍﻟﺨﻴـﺎﺭ
ﺴﻴﺘﻡ ﺇﺨﻔﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺩ ﹰ CaHide
ﺍﻻﻓﺘﺭﺍﻀﻲ ﻟﻠﻨﻭﺍﻓﺫ ﻤﻥ ﺍﻟﻨﻭﻉ FormStyle := fsNormal
CaMinimizeﺴﻴﺘﻡ ﺘﺼﻐﻴﺭ ﺍﻟﻨﺎﻓﺫﺓ ﻭﻫﻭ ﺍﻟﺨﻴﺎﺭ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻤﻊ ﺍﻟﻨﻭﺍﻓﺫ ﻤﻥ ﺍﻟﻨﻭﻉ fsMDIChild
ﺍﻟﺘﻌﻠﻴﻤﺔ DataEnter = Nilﺘﻘﻭﻡ ﺒﺘﺤﻤﻴل ﻗﻴﻤﺔ ﺍﻟﻼﺸﻲﺀ ) ( Nullﻓﻲ ﺍﻟﻤﺘﺤﻭل DataEnterﺍﻷﻤﺭ ﺍﻟـﺫﻱ ﻴﺠﻌﻠﻨـﺎ
ﻓﻴﻤﺎ ﺒﻌﺩ ﺃﻥ ﺍﻟﺤﺩﺙ OnCloseﻗﺩ ﺘﻡ ﺘﻨﻔﻴﺫﻩ ﻭﻤﻥ ﺜﻡ ﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ .
ﻤﻼﺤﻅﺔ :ﻫﺫﻩ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻹﻨﺸﺎﺀ ﺍﻟﻨﺎﻓﺫﺓ ﺒﺸﻜل ﺩﻴﻨﺎﻤﻴﻜﻲ ﻭﻫﻨﺎﻙ ﻁﺭﻕ ﺃﺨﺭﻯ ﻤﺘﻌﺩﺩﺓ .
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
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
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
ﺴﺘﻼﺤﻅ ﺃﻥ ﺍﻟﻌﻨﺼﺭ ﻭﻀﻊ ﻨﻔﺴﻪ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻷﺨﻴﺭ ﻓﻲ ﻟﻭﺤﺔ
ﺍﻟﻌﻨﺎﺼﺭ .
159
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻭﺤﺩﺩ ﻤﺴﺎﺭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﻗﻤﺕ ﺒﺈﻀﺎﻓﺘﻪ ) ﺤﺩﺩ ﻤﺴﺎﺭ ﻤﻠﻔﺎﺕ bplﺃﻭ ﻤﻠﻔﺎﺕ Dcuﻭﻤﻠﻔﺎﺕ ( pasﺜﻡ ﺍﻀﻐﻁ ﻋﻠﻰ
Addﻭﻤﻥ Ok
ﺒﺈﻤﻜﺎﻨﻙ ﺍﻵﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻲ ﻜﻨﺎ ﻨﺴﺘﺨﺩﻤﻬﺎ ﻤﻊ ﺃﻱ ﻋﻨﺼﺭ ﺴﺎﺒﻕ ﻤﻥ ﻋﻨﺎﺼﺭ ﺩﻟﻔﻲ )،ﻴﻔﻀل
ﺍﺴﺘﻌﺭﺍﺽ ﺍﻷﻤﺜﻠﺔ ﺍﻟﺘﻲ ﺘﺄﺘﻲ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ﻋﺎﺩﺓ ﻓﻲ ﺍﻟﻔﻬﺭﺱ ( Demo
2ـ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻠﻔﺎﺕ : .Dpk
ﺇﺫﺍ ﻭﺠﺩ ﻤﻊ ﺍﻟﻌﻨﺼﺭ ﻤﻠﻑ ﻤﻥ ﺍﻟﻨﻭﻉ ) .Dpkﻤﻠﻑ ﺤﺯﻤﺔ ﺩﻟﻔﻲ ( Delphi Packageﻓﺎﺘﺒﻊ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ
ﻹﻀﺎﻓﺔ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﺼﻔﺤﺔ ﺍﻟﻌﻨﺎﺼﺭ :
ﺃ ـ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ File Æ Openﺤﺩﺩ ﺍﻟﻤﻠﻑ ﺫﻭ ﺍﻻﻤﺘﺩﺍﺩ .Dpkﻭﺍﻀﻐﻁ ﻋﻠﻰ okﻟﺘﻅﻬﺭ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
ﺍﻀﻐﻁ ﻤﻨﻬﺎ ﻋﻠﻰ ﺍﻟﺯﺭ Installﺴﺘﻅﻬﺭ ﻋﻨﺩﻫﺎ ﺭﺴﺎﻟﺔ ﺘﻌﻠﻤﻙ
ﺒﺄﻨﻪ ﻗﺩ ﺘﻡ ﺘﺤﻤﻴل ﺍﻟﻌﻨﺼﺭ .
ﺏ ـ ﺍﻋﺩ ﺍﻟﺨﻁﻭﺓ ﺏ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺴﺎﺒﻘﺔ .
ﻤﻼﺤﻅﺔ ﻗﺩ ﺘﻅﻬﺭ ﺒﻌﺽ ﺍﻟﻤﺸﺎﻜل ﻋﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ،
ﻟﺤل ﺍﻟﻤﺸﻜﻠﺔ ﺍﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ optionﻭﺍﺨﺘﺭ ﻤﻥ ﺍﻟﺼﻔﺤﺔ
Descriptionﻭﻏﻴﺭ ﻓﻲ ﺍﻟﻘﺴﻡ ﺍﻟﻤﻭﻀﺢ ﻓﻲ ﺍﻟﻨﺎﻓﺫﺓ ﺍﻟﺘﺎﻟﻴﺔ :
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 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
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
170
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ـ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ 1ﺘﻘﻭﻤﺎﻥ ﺒﺭﺴﻡ ﺨﻁ ﺒﻴﻥ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﺤﺩﺩﻫﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺒﻴﻥ ﺁﺨﺭ ﻨﻘﻁﺔ ﻤﺭﺕ ﻓﻭﻗﻬﺎ ﺍﻟﻔـﺄﺭﺓ ) ﺍﻟﻨﻘﻁـﺔ
ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﻤﺘﺤﻭل ( Moveptﻭﺴﻴﻜﻭﻥ ﻟﻭﻥ ﺍﻟﺨﻁ ﺒﻠﻭﻥ ﺍﻷﺭﻀﻴﺔ ) ﺒﻤﺎ ﺃﻨﻨﺎ ﻨﺭﺴﻡ ﺨﻁ ﺠﺩﻴﺩ ﻓﻭﻕ ﺨﻁ ﺴﺎﺒﻕ ﻟﻭﻨﻪ
ﺃﺴﻭﺩ ﻓﺈﻥ ﺍﻟﺨﺎﺼﺔ modeﺫﺍﺕ ﺍﻟﻘﻴﻤﺔ pmNotXorﺴﺘﻘﻭﻡ ﺒﻁﺭﺡ ﺍﻟﻠﻭﻨﻴﻥ ﻤﻥ ﺒﻌﻀﻬﻤﺎ ﻭﺇﻋﺎﺩﺓ ﻟﻭﻥ ﺍﻟﺨﻠﻔﻴﺔ (
ـ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ 2ﺘﻘﻭﻤﺎﻥ ﺒﺭﺴﻡ ﺨﻁ ﺠﺩﻴﺩ ﺒﻴﻥ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﻀﻐﻁ ﻋﻠﻴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﺘﺘﺤﺭﻙ ﺍﻟﻔـﺄﺭﺓ ﻓﻭﻗﻬـﺎ
ﻭﺴﻴﻅﻬﺭ ﺍﻟﺨﻁ ﺒﺎﻟﻠﻭﻥ ﺍﻷﺴﻭﺩ.
ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﺘﺄﻗﻠﻡ ﻤﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ) ﺃﻥ ﺘﻔﻬﻤﻬﺎ ﺒﺸﻜل ﺠﻴﺩ ( ﻋﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺤـﺩﺙ OnMouseMove
ﻟﺘﺼﺒﺢ ﺒﺎﻟﺸﻜل :
171
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﺴﺘﺨﺩﻡ ﺃﺩﺍﺓ ﺭﺴﻡ ﺨﻁ ﻟﺭﺴﻡ ﺨﻁ ﺒﻴﻥ ﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻴﺴﺭﻯ ﺍﻟﻌﻠﻭﻴﺔ ﻭﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻴﻤﻨﻰ ﺍﻟﺴﻔﻠﻴﺔ ﻭﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻗﺩ ﺭﺴﻤﻨﺎ ﺃﻴﻘﻭﻨـﺔ
ﻟﺯﺭ ﺭﺴﻡ ﺨﻁ ﺍﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺒﺎﺴﻡ Line.icoﻭﺃﻏﻠﻘﻪ ،ﺜﻡ ﺃﻨﺸﺄ ﺍﻷﻴﻘﻭﻨﺎﺕ ﺍﻷﺨﺭﻯ ﺠﺩﻴﺩﺓ ﺒﻨﻔﺱ ﺍﻟﻁﺭﻴﻘﺔ ﺒﺤﻴﺙ ﺘﻅﻬـﺭ
ﺍﻷﺸﻜﺎل ﺍﻟﺘﺎﻟﻴﺔ ﻓﻴﻬﺎ :
ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺴﺘﺔ ﻭﺃﻋﻁ ﺍﻟﺨﺎﺼﺔ 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
176
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 26
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
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
184
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
3ـ ﻤﻠﻔﺎﺕ ﺴﺘﺭﻴﻡ ) : File Streamsﻤﻌﻨﻰ ﻜﻠﻤﺔ Streamﻫﻭ ﻨﻬﺭ ﺃﻭ ﺠﺩﻭل ﺃﻭ ﺴﻴل ﻭﻻ ﺃﻋﺭﻑ ﻜﻴﻑ ﺃﺘﺭﺠﻤﻬـﺎ
ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻭﻗﺩ ﺠﺭﺕ ﺍﻟﻌﺎﺩﺓ ﺒﻴﻥ ﺍﻟﻤﺒﺭﻤﺠﻥ ﺍﻟﺤﺩﻴﺙ ﻋﻨﻬﺎ ﺒـ ﺴﺘﺭﻴﻡ ﻓﻴل ( ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻥ ﺍﻟﻨﻭﻉ TFileStream
ﻭﻫﻲ ﻤﻠﻔﺎﺕ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﺨﺯﻥ ﻓﻴﻬﺎ ﺃﻱ ﻨﻭﻉ ﻤﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﻔﻅ ﻓﻴﻬﺎ ﺒﻴﺎﻨﺎﺘﻙ ﺒﻁﺭﻴﻘﺔ ﻤـﺸﻔﺭﺓ ﺒﺤﻴـﺙ ﻻ
ﻴﺴﺘﻁﻴﻊ ﺃﺤﺩ ﻏﻴﺭﻙ ﺍﻹﻁﻼﻉ ﻋﻠﻴﻬﺎ ﺘﺘﻌﺎﻤل ﻫﺫﻩ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻊ ﺍﻟﻨﻭﻋﻴﻥ TStreamﻭ TMemoryStreamﻭﻫﺫﺍ ﻴﻤﻜﻨﻙ
ﻤﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺸﻜل ﻤﺒﺎﺸﺭ ﻭﻴﻤﻜﻨﻙ ﺘﺤﻤﻴل ﺒﻴﺎﻨﺎﺘﻙ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻤﻥ ﺜﻡ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﻤﻠﻑ ﺃﻭ ﻴﻤﻜﻨﻙ ﺘﺤﻤﻴﻠﻬﺎ
ﺒﻴﺎﻨﺎﺘﻙ ﺇﻟىﺎﻟﺫﺍﻜﺭﺓ ﻟﻴﺘﺸﺎﺭﻙ ﻋﻠﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﺠﺯﺀ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ .
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ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :
ﻤﻼﺤﻅﺎﺕ :
1ـ ﺍﻟﺘﻌﻠﻴﻤﺔ : FieStream.Seekﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ Seekﻟﻨﻘل ﻤﺅﺸﺭ ﺍﻟﻤﻠﻑ ﻟﻤﺴﺎﻓﺔ ﻤﺤﺩﺩﺓ ﺘﺒﻌﹰﺎ ﻟﻠﻭﺴـﻴﻁ ( Origin
ﺭﺍﺠﻊ ﺍﻟﻭﺴﻴﻁ Originﻟﻠﺘﻌﻠﻴﻤﺔ SeekFileﻟﻺﻁﻼﻉ ﺃﻜﺜﺭ ﻋﻠﻰ ﻭﺴﻁﺎﺀ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ (.
188
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﺍﻟﺠﻠﺴﺔ 27
ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ :
ﺴﻨﻘﻭﻡ ﺍﻵﻥ ﺒﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﺸﺎﺒﻪ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ ﻓﻲ ﻭﻴﻨﺩﻭﺯ ) ( Notepadﻭﻴﺨﺘﻠﻑ ﻋﻨﻪ ﺒﺄﻨﻪ ﺴﻴﺘﻌﺎﻤل ﻤﻊ ﻤﻠﻔﺎﺕ
ﻤﻥ ﺍﻟﻨﻭﻉ Rtfﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻤﻠﻔﺎﺕ ، Txtﻜﻤﺎ ﺃﻨﻪ ﺴﻴﻜﻭﻥ ﻤﻥ ﺍﻟﻨﻭﻉ MDIﺒﺤﻴﺙ ﻴﻤﻜﻨﻨﺎ ﺃﻥ ﻨﻔﺘﺢ ﺃﻜﺜﺭ ﻤﻥ ﻤﻠﻑ
ﺒﻨﻔﺱ ﺍﻟﻭﻗﺕ .
ﺃﺒﺩﺃ ﻤﺸﺭﻭﻋﹰﺎ ﺠﺩﻴﺩﹰﺍ ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻟﻌﻨﺼﺭ MainMenuﻭﺍﻟﻌﻨﺼﺭ OpenDialogﻭﺃﻋﻁ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﻌﻨﺎﺼﺭ
:
ﻋﻨﺼﺭ ﺍﻟﻨﻤﻭﺫﺝ : Form1
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ
bdRightToLeft BiDiMode
ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻔﻜﺭﺓ Caption
fsMDIForm FormStyle
MainForm Name
poDesktopCenter Position
ﻋﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ : MainMenuﺃﻨﺸﺊ ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ) ﻤﻠﻑ ( ﻭﺍﻟﻘﺎﺌﻤﺔ ) ﺇﻁﺎﺭ (:
ﺃﻋﻁ ﺍﻟﺯﺭ )ﻤﻠﻑ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ FileMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ :
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
New &ﺠﺩﻴﺩ
OpenFile &ﻓﺘﺢ
CloseApp &ﺨﺭﻭﺝ
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺇﻁﺎﺭ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ Window1ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ :
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
ﺘﺭﺘﻴﺏ
ﺘﺘﺎﻟﻲ
-
ﺍﻟﻌﻨﺼﺭ : 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ﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ :
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
New &ﺠﺩﻴﺩ
OpenFile &ﻓﺘﺢ
Ctrl+S Save ﺤﻔﻅ
SaveAs ﺤﻔﻅ ﺒﺎﺴﻡ
PrintFile ﻁﺒﺎﻋﺔ
CloseFile ﺇﻏﻼﻕ
CloseAll &ﺨﺭﻭﺝ
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺘﺤﺭﻴﺭ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ EditMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ :
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
Ctrl+C CopyText ﻨﺴﺦ
Ctrl+X Cuttext ﻗﺹ
Ctrl+V PasteText ﻟﺼﻕ
Ctrl+A SelectAll ﺘﺤﺩﻴﺩ ﺍﻟﻜل
ﺃﻋﻁ ﺍﻟﺯﺭ )ﺘﻨﺴﻴﻕ ( ﻓﻲ ﺍﻟﺨﺎﺼﺔ Nameﺍﻟﻘﻴﻤﺔ EditMenuﻭﺃﻀﻑ ﺇﻟﻴﻪ ﺍﻷﻭﺍﻤﺭ ) ﺍﻷﺯﺭﺍﺭ ( ﺍﻟﺘﺎﻟﻴﺔ :
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Shortcut ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Name ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﺔ Caption
Left1 ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ
Right1 ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻴﻤﻴﻥ
Center1 ﻤﺤﺎﺫﺍﺓ ﺇﻟﻰ ﺍﻟﻭﺴﻁ
-
WordWrap1 ﺍﻟﺘﻔﺎﻑ ﺘﻠﻘﺎﺌﻲ
Font1 ﺨﻁ
ﺤﺩﺩ ﺍﻷﺯﺭﺍﺭ ﺍﻟﺜﻼﺜﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺘﻨﺴﻴﻕ ﻭﺃﻋﻁﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﺔ RadioItemﺍﻟﻘﻴﻤﺔ Trueﻫﺫﺍ ﺴـﻴﺠﻌﻠﻬﺎ ﺘﺒـﺩﻭ
190
http://www.alshater.net ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ دﻟﻔﻲ
ﻜﺄﺯﺭﺍﺭ ﺍﻟﺭﺍﺩﻴﻭ ﻭﻻ ﻴﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺇﻻ ﻭﺍﺤﺩ ﻤﻨﻬﺎ ﻓﻲ ﺫﺍﺕ ﺍﻟﻭﻗﺕ .
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Richedit1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
alClient Align
Editor Name
ﺃﻋﻁ ﺍﻟﻌﻨﺼﺭ Savedialog1ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ :
.rtf DefaultExt
ﻀﻊ ﻓﻲ ﺍﻟﺨﺎﺼﺔ Filterﺍﻷﺴﻁﺭ ﺍﻟﺘﺎﻟﻴﺔ : Filter
Filter Name Filter
Rich Text *.rtf
Text File *.Txt
_ ﺍﺤﻔﻅ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺴﻤﻲ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺠﺩﻴﺩﺓ ﺒﺎﺴﻡ EditText.pas
ـ ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺠﺩﻴﺩ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ : MainForm
;)TEditForm.Create(Self
ﺍﻟﻭﺴﻴﻁ Selfﻭﺴﻴﻁ ﻤﻌﺭﻑ ﻴﻌﻭﺩ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺫﻱ ﻴﻁﻠﺏ ﻓﻴﻪ ﻫﺫﺍ ﺍﻟﻭﺴﻴﻁ .
-ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺩﺙ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ ﺠﺩﻴﺩ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﻤﻠﻑ ﻟﻠﻨﻤﻭﺫﺝ :EditForm
;)TEditForm.Create(Self
ـ ﻀﻊ ﻤﺅﺸﺭ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻋﻨﺩ ﺍﻟﺴﻁﺭ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻀﻐﻁ ﺍﻷﺯﺭﺍﺭ 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 ﺍﻟﺼﻔﺤﺔ
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
201