You are on page 1of 14

‫ﺩﺭﻭﺱ ﰲ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ﺩﻟﻔﻲ‬

(10 ) ‫ﺍﻟﺪﺭﺱ‬

:‫إﻋﺪاد‬

O. M. Fares

Tripoli-Libya

September 2009
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫‪10‬‬
‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‬

‫اﻟﺴﻼم ﻋﻠﯿﻜﻢ ورﺣﻤﺔ اﷲ وﺑﺮﻛﺎﺗﮫ‬


‫أھﻼ ﺑﻜﻢ ﻣﺮة أﺧﺮى ﻓﻲ درس ﺟﺪﯾﺪ ﻣﻦ )دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ(‪ ،‬ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ ﺗﻌﺮﻓﻨﺎ ﻋﻠﻰ أدوات‬
‫ﺷﺮﯾﻂ )‪ .(Standard‬وﺳﻮف ﻧﺘﻌﺮف ﻓﻲ ھﺬا اﻟﺪرس إن ﺷﺎء اﷲ وﻓﻲ ﻋﺠﺎﻟﺔ ﻋﻠﻰ ﺷﺮﯾﻂ أﺧﺮ وھﻮ‪:‬‬
‫‪ o‬ﺷﺮﯾﻂ أدوات )‪.(Additional‬‬

‫ﺷﺮﯾﻂ أدوات )‪.(Additional‬‬

‫ﯾﺤﺘﻮي ﺷﺮﯾﻂ أدوات )‪ (Additional‬ﻋﻠﻰ أدوات ﺗﺤﻜﻢ إﺿﺎﻓﯿﺔ )‪ .(Additional Windows control‬وھﻲ‬
‫ﻛﺎﻵﺗﻲ‪:‬‬
‫‪BitBtn (1‬‬
‫‪SpeedButton (2‬‬
‫‪MaskEdit (3‬‬
‫‪StringGrid (4‬‬
‫‪DrawGrid (5‬‬
‫‪Image (6‬‬
‫‪Shape (7‬‬
‫‪Bevel (8‬‬
‫‪ScrollBox (9‬‬
‫‪CheckListBox (10‬‬
‫‪Splitter (11‬‬
‫‪StaticText (12‬‬
‫‪ControlBar (13‬‬
‫‪ApplicationEvents (14‬‬
‫‪Chart (15‬‬
‫وﻓﻲ ھﺬا اﻟﺪرس إن ﺷﺎء اﷲ ﺗﻌﺎﻟﻰ ﺳﻮف ﻧﺘﻌﺮف ﻓﻲ ﻋﺠﺎﻟﺔ ﻋﻠﻰ ﺑﻌﺾ ھﺬه اﻟﻜﺎﺋﻨﺎت‪.‬‬

‫‪2‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﯾﺸﺒﮫ اﻟﻜﺎﺋﻦ )‪ (Button‬ﻓﻲ ﺷﺮﯾﻂ أدوات )‪ ،(Standard‬ﯾﻤﻜﻦ إﺿﺎﻓﺔ‬


‫‪BitBtn‬‬
‫ﺻﻮرة )‪ (Bitmap‬إﻟﻰ اﻟﻜﺎﺋﻦ ﻋﻦ ﻃﺮﯾﻖ اﻟﺨﺎﺻﯿﺔ )‪.(Glyph‬‬

‫وھﻮ أول ﻛﺎﺋﻦ ﻓﻲ ﺷﺮﯾﻂ أدوات )‪ (Additional‬وﯾﺤﺘﻮى ﻋﻠﻰ ﻧﻔﺲ ﺧﺼﺎﺋﺺ اﻟﻜﺎﺋﻦ )‪ (Button‬إﺿﺎﻓﺔ إﻟﻰ‬
‫ﺧﺼﺎﺋﺺ أﺧﺮى ﻣﻦ أھﻤﮭﺎ‪:‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Glyph‬وھﻲ ﻣﻦ ﻧﻮع ) ‪ (TBitmap‬وھﻲ ﺗﺤﺪد ﺻﻮرة ﻣﻦ ﻧﻮع )‪ (bmp‬واﻟﺘﻲ ﺳﺘﻈﮭﺮ‬
‫ﻋﻠﻰ اﻟﺰر‪ .‬ﻹدراج ﺻﻮرة اﺿﻐﻂ ﻋﻠﻰ )‪ (...‬ﻓﻲ اﻟﺨﺎﺻﯿﺔ )‪ (Glyph‬ﻓﯿﻈﮭﺮ ﻣﺮﺑﻊ ﺗﺤﺮﯾﺮ اﻟﺼﻮرة‬
‫)‪.(Picture Editor‬‬

‫اﺿﻐﻂ ﻋﻠﻰ اﻟﺰر )‪ (Load‬ﻓﯿﻈﮭﺮ ﻣﺮﺑﻊ ﺗﺤﻤﯿﻞ اﻟﺼﻮرة )‪ ،(Load Picture‬اﺧﺘﺮ ﻣﻠﻒ اﻟﺼﻮرة )‪ (bmp‬وﻣﻦ‬
‫ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ )‪.(Open‬‬

‫‪3‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﺗﻈﮭﺮ اﻟﺼﻮرة اﻟﺘﻲ ﺗﻢ اﺧﺘﯿﺎرھﺎ ﻋﻠﻰ ﻣﺮﺑﻊ )‪ ،(Picture Editor‬اﺿﻐﻂ )‪ (Ok‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻤﻮاﻓﻘﺔ ﻓﺘﻈﮭﺮ اﻟﺼﻮرة‬
‫ﻋﻠﻰ اﻟﺰر ﻛﺎﻵﺗﻲ‪:‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻋﻨﺪ ﺗﻨﺼﯿﺐ ﺑﺮﻧﺎﻣﺞ دﻟﻔﻲ ﺳﻮف ﺗﺠﺪ ﻣﻠﻒ ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺼﻮرة ﻣﻮﺟﻮد ﻓﻲ‬
‫اﻟﻤﺴﺎر اﻟﺘﺎﻟﻲ‪C:\Program Files\Common Files\Borland Shared\Images :‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ :(Kind‬ﯾﻤﻜﻦ اﺧﺘﯿﺎر ﻧﻮع اﻟﺰر ﻣﻦ ﺧﻼل ﻗﺎﺋﻤﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷزرار‬
‫اﻻﻓﺘﺮاﺿﯿﺔ‪ ،‬ﺑﺤﯿﺚ ﺗﺘﻐﯿﺮ اﻟﺨﺎﺻﯿﺔ )‪ (Caption‬و)‪ (Glyph‬ﺣﺴﺐ اﻻﺧﺘﯿﺎر‪ ،‬ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‪ :‬اﺿﻐﻂ‬
‫ﻋﻠﻰ اﻟﺰر )▼( ﻓﻲ اﻟﺨﺎﺻﯿﺔ )‪ (Kind‬ﻓﺘﻈﮭﺮ اﻟﻘﺎﺋﻤﺔ اﻵﺗﯿﺔ‪:‬‬

‫اﺧﺘﺮ )‪ (bkCancel‬ﺗﻈﮭﺮ ﻛﻠﻤﺔ )‪ (Cancel‬ﻓﻲ اﻟﺨﺎﺻﯿﺔ )‪ (Caption‬وﺗﻈﮭﺮ اﻟﺼﻮرة اﻵﺗﯿﺔ ﻋﻠﻰ اﻟﺰر‪:‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Layout‬ﺗﺤﺪد ﻣﻜﺎن ﻇﮭﻮر اﻟﺼﻮرة ﻋﻠﻰ اﻟﺰر‪ ،‬وﯾﻤﻜﻦ أن ﺗﻜﻮن اﺣﺪ اﻻﺣﺘﻤﺎﻻت اﻵﺗﯿﺔ‪:‬‬
‫§ ‪ blGlyphLeft‬ﯾﺴﺎر اﻟﻨﺺ‪.‬‬
‫§ ‪ blGlyphRight‬ﯾﻤﯿﻦ اﻟﻨﺺ‪.‬‬
‫§ ‪ blGlyphTop‬اﻋﻠﻲ اﻟﻨﺺ‪.‬‬
‫§ ‪ blGlyphBottom‬أﺳﻔﻞ اﻟﻨﺺ‪.‬‬
‫ﻻﺣﻆ أن اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ھﻲ‪.(blGlyphLeft) :‬‬

‫ﻧﻮع آﺧﺮ ﻣﻦ اﻷزرار اﻟﺘﻲ ﯾﻤﻜﻦ إﺿﺎﻓﺔ ﺻﻮرة ﻟﮭﺎ‪ ،‬وﯾﻤﻜﻦ‬


‫‪SpeedButton‬‬
‫وﺿﻌﮫ ﻋﻠﻰ ﺷﺮﯾﻂ أواﻣﺮ اﻟﺘﺤﻜﻢ )‪.(ControlBar‬‬

‫ﻣﻦ أھﻢ ﺧﺼﺎﺋﺺ ھﺬا اﻟﻜﺎﺋﻦ‪:‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Flat‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Boolean‬ﻓﻲ ﺣﺎﻟﺔ )‪ (True‬ﯾﻈﮭﺮ اﻟﺰر ﻣﺴﻄﺢ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﻔﻮرم‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Glyph‬وھﻲ ﻧﻔﺲ اﻟﺨﺎﺻﯿﺔ )‪ (Glyph‬ﻓﻲ )‪.(BitBtn‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Layout‬وھﻲ ﻧﻔﺲ اﻟﺨﺎﺻﯿﺔ )‪ (Layout‬ﻓﻲ )‪.(BitBtn‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Transparent‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Boolean‬ﻓﻲ ﺣﺎﻟﺔ )‪ (True‬ﯾﻈﮭﺮ اﻟﻜﺎﺋﻦ ﺷﻔﺎف ﻋﻠﻰ‬
‫اﻟﻔﻮرم‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (GroupIndex‬وھﻲ ﻣﻦ ﻧﻮع ) ‪ (Integer‬وﺗﺴﺘﺨﺪم ﻹﻧﺸﺎء ﻣﺠﻤﻮﻋﺔ )‪ .(Group‬ﻓﻌﻨﺪﻣﺎ‬
‫ﺗﻜﻮن ﻗﯿﻤﺔ )‪ (GroupIndex‬ﺗﺴﺎوي ‪ 0‬ﯾﻌﻤﻞ اﻟﺰر ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﻋﻦ اﻷزرار اﻷﺧﺮى اﻟﺘﻲ ﻋﻠﻰ‬
‫اﻟﻔﻮرم‪ .‬أﻣﺎ ﻓﻲ ﺣﺎﻟﺔ )‪ (GroupIndex‬اﻛﺒﺮ ﻣﻦ ‪ 0‬ﻓﺈن اﻟﺰر ﯾﻌﻤﻞ ﻣﻊ اﻷزرار اﻷﺧﺮى اﻟﺘﻲ ﺗﺤﻤﻞ ﻧﻔﺲ‬
‫اﻟـ)‪.(GroupIndex‬‬

‫‪4‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫وھﻨﺎك ﺑﻌﺾ اﻟﺨﺼﺎﺋﺺ اﻟﺘﻲ ﺗﻌﻤﻞ ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻗﯿﻤﺔ اﻟـ)‪ (GroupIndex‬أﻛﺒﺮ ﻣﻦ ‪ .0‬اﻟﺨﺎﺻﯿﺘﯿﻦ اﻟﺘﺎﻟﯿﺘﯿﻦ ﯾﻜﻮن‬
‫ﻟﮭﻤﺎ ﺗﺄﺛﯿﺮ ﻓﻘﻂ ﻓﻲ ﺣﺎﻟﺔ )‪ (GroupIndex‬اﻛﺒﺮ ﻣﻦ ‪.0‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Down‬ﻣﻦ ﻧﻮع )‪ (Boolean‬وھﻲ ﺗﺤﺪد ﻣﺎ إذا ﻛﺎن اﻟﺰر ﻓﻲ وﺿﻌﯿﺔ )‪ (up‬أو )‪.(Down‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (AllowAllUp‬ﻣﻦ ﻧﻮع )‪.(Boolean‬‬

‫وﺻﻒ اﻟﺨﺎﺻﯿﺔ )‪(AllowAllUp‬‬ ‫اﻟﺤﺎﻟﺔ‬


‫‪ False‬ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر ﯾﺒﻘﻰ ﻓﻲ وﺿﻌﯿﺔ )‪ (Down‬وﻻ ﯾﺮﺟﻊ إﻟﻰ وﺿﻌﯿﺔ )‪ (Up‬اﻻ ﻓﻲ ﺣﺎﻟﺔ واﺣﺪة‬
‫ﻓﻘﻂ‪ :‬وھﻲ ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ زر آﺧﺮ ﻓﻲ ﻧﻔﺲ اﻟـ)‪.(Group‬‬
‫‪ True‬ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر ﯾﺒﻘﻰ ﻓﻲ وﺿﻌﯿﺔ )‪ (Down‬وﯾﺮﺟﻊ إﻟﻰ وﺿﻌﯿﺔ )‪ (Up‬ﻓﻲ ﺣﺎﻟﺘﯿﻦ‪:‬‬
‫‪ .1‬ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﯿﮫ ﻣﺮة أﺧﺮى‪.‬‬
‫‪ .2‬ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ زر آﺧﺮ ﻓﻲ ﻧﻔﺲ اﻟـ)‪.(Group‬‬

‫اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﻤﺜﻞ ﺛﻼﺛﺔ أزرار )‪ (SpeedButton‬وﺗﺤﻤﻞ )‪ (GroupIndex‬ﯾﺴﺎوي ‪ ،1‬اﻟﺰر رﻗﻢ )‪ (1‬ﻓﻲ ﺣﺎﻟﺔ‬
‫)‪ .(Down = True‬اﻷزرار اﻷﺧﺮى )‪ (3 ،2‬ﻓﻲ وﺿﻌﯿﺔ )‪ .(Down = False‬ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ أي زر ﺧﻼف‬
‫اﻟﺰر رﻗﻢ ‪ 1‬ﯾﺼﺒﺢ اﻟﺰر اﻟﺘﻲ ﺗﻢ ﺿﻐﻄﮫ ﻓﻲ وﺿﻌﯿﺔ )‪ (Down‬أﻣﺎ اﻟﺰر رﻗﻢ ‪ 2‬ﻓﯿﺼﺒﺢ ﻓﻲ وﺿﻌﯿﺔ )‪.(Up‬‬

‫ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻔﺎﺻﯿﻞ راﺟﻊ ﻣﻠﻒ اﻟﺼﻮت واﻟﺼﻮرة اﻟﻤﺮﻓﻖ‪.‬‬

‫ﻛﺎﺋﻦ ﯾﺸﺒﮫ اﻟﻜﺎﺋﻦ )‪ (Edit‬ﯾﺴﻤﺢ ﺑﺈدﺧﺎل ﻧﺺ ﺑﺼﯿﻐﺔ ﺧﺎﺻﺔ‪ ،‬ﻣﺜﻞ رﻣﺰ‬


‫‪MaskEdit‬‬
‫ﺑﺮﯾﺪي أو رﻗﻢ ھﺎﺗﻒ‪.‬‬

‫ھﺬا اﻟﻜﺎﺋﻦ )‪ (MaskEdit‬ﯾﺘﺸﺎرك ﻣﻊ ﺟﻤﯿﻊ ﻛﺎﺋﻨﺎت ﺗﺤﺮﯾﺮ اﻟﻨﺼﻮص ﻓﻲ اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﺨﺼﺎﺋﺺ واﻷﺣﺪاث‪،‬‬
‫إﺿﺎﻓﺔ إﻟﻰ ﺧﺼﺎﺋﺺ أﺧﺮى ﻣﻦ أھﻤﮭﺎ‪:‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (EditMask‬وھﻲ ﺧﺎﺻﯿﺔ ﻣﻦ ﻧﻮع )‪ (String‬وھﻲ ﺗﺤﺪد اﻟﺼﯿﻐﺔ اﻟﺘﻲ ﺳﯿﻈﮭﺮ ﺑﮭﺎ اﻟﻨﺺ‪.‬‬
‫ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر )‪ (...‬ﯾﻈﮭﺮ ﻣﺮﺑﻊ )‪ ،(Input Mask Editor‬وﯾﻈﮭﺮ إﻟﻰ اﻟﯿﻤﯿﻦ ﺑﻌﺾ اﻟﻌﯿﻨﺎت‬
‫ﻣﺜﻞ‪ :‬اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ واﻟﺮﻣﺰ اﻟﺒﺮﯾﺪي ورﻗﻢ ھﺎﺗﻒ‪.‬‬

‫إﻟﻰ اﻟﯿﺴﺎر ﯾﻈﮭﺮ ﻣﺮﺑﻊ )‪ (Input Mask‬وﻣﺮﺑﻊ )‪ (Character for Blank‬وھﻮ اﻟﺮﻣﺰ اﻟﺬي ﺳﯿﻈﮭﺮ ﺑﺪل‬
‫اﻟﻔﺮاغ ﻓﻲ ) ‪ (MaskEdit‬وﻣﺮﺑﻊ )‪ (Test Input‬ﯾﻤﻜﻦ اﺧﺘﺒﺎر اﻹدﺧﺎل وﻣﺸﺎھﺪة اﻟﻨﺺ ﻋﻦ ﻃﺮﯾﻖ ھﺬا اﻟﻤﺮﺑﻊ‪.‬‬
‫ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻔﺎﺻﯿﻞ راﺟﻊ ﻣﻠﻒ اﻟﺼﻮت واﻟﺼﻮرة اﻟﻤﺮﻓﻖ‪.‬‬

‫‪5‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﯾﺴﺘﺨﺪم ﻹﻧﺸﺎء ﺟﺪول ﯾﺤﺘﻮي ﻋﻠﻰ ﺧﻼﯾﺎ ﻣﻮزﻋﺔ ﻓﻲ ﺻﻔﻮف وأﻋﻤﺪة‪،‬‬


‫‪StringGrid‬‬
‫وﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬا اﻟﻜﺎﺋﻦ ﻟﻌﺮض ﻧﺺ ﻓﻲ ﻛﻞ ﺧﻠﯿﺔ‪.‬‬

‫ﻣﻦ أھﻢ ﺧﺼﺎﺋﺺ ھﺬا اﻟﻜﺎﺋﻦ‪:‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Cells‬وﺗﺤﺪد اﻟﻨﺺ اﻟﺬي ﺳﯿﻜﺘﺐ ﻓﻲ اﻟﺨﻠﯿﺔ وھﻲ ﻣﻦ ﻧﻮع )‪ .(String‬وھﻲ ﻋﻠﻰ اﻟﺼﻮرة‬
‫اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫)]‪ (Cells[ACol, ARow‬ﺣﯿﺚ )‪ (ACol‬ھﻮ رﻗﻢ اﻟﻌﻤﻮد و)‪ (ARow‬ھﻮ رﻗﻢ اﻟﺼﻒ‪ ،‬ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‪:‬‬

‫;)‪procedure TForm1.Button1Click(Sender: TObject‬‬


‫‪begin‬‬
‫;'‪StringGrid1.Cells[2,3] := 'Delphi Language‬‬
‫;‪end‬‬

‫ھﺬا اﻟﻤﺜﺎل ﯾﺨﺼﺺ اﻟﻨﺺ )'‪ ('Delphi Language‬ﻓﻲ اﻟﺨﻠﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻌﻤﻮد اﻟﺜﺎﻧﻲ واﻟﺼﻒ اﻟﺜﺎﻟﺚ‪.‬‬
‫ﻣﺜﺎل آﺧﺮ‪:‬‬

‫;)‪procedure TForm1.BitBtn1Click(Sender: TObject‬‬


‫‪var‬‬
‫;‪i, j, k: Integer‬‬
‫‪begin‬‬
‫;‪k:=1‬‬
‫‪for i := 1 to 4 do‬‬
‫‪for j := 1 to 4 do‬‬
‫‪begin‬‬
‫;)‪StringGrid1.Cells[i,j]:=IntToStr(k‬‬
‫;‪k:=k+1‬‬
‫;‪end‬‬
‫;‪end‬‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﯾﺘﻢ ﺗﺨﺼﯿﺺ اﻟﻘﯿﻤﺔ ) ‪ (1‬ﻟﻠﻤﺘﻐﯿﺮ )‪ (k‬واﻟﺬي ﺳﻨﺴﺘﺨﺪﻣﮫ ﻛﻌﺪاد ﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﺬا‪ ،‬ﺑﻌﺪ ذﻟﻚ ﯾﺘﻢ اﺳﺘﺨﺪام‬
‫ﺣﻠﻘﺘﻲ )‪ ،(For‬داﺧﻞ اﻟﺤﻠﻘﺘﯿﻦ ﯾﺘﻢ ﺗﺨﺼﯿﺺ ﻗﯿﻤﺔ )‪ (k‬ﻟﻠﺨﻠﯿﺔ ]‪ [i,j‬ﺑﻌﺪ ﺗﺤﻮﯾﻠﮭﺎ إﻟﻰ )‪ (String‬وﻣﻦ ﺛﻢ إﺿﺎﻓﺔ ‪1‬‬
‫إﻟﻰ )‪ ،(k‬ﻓﺘﻈﮭﺮ اﻟﻨﺘﯿﺠﺔ ﻛﺎﻵﺗﻲ‪:‬‬

‫ﻻﺣﻆ أن اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﻋﺪدھﺎ )‪ (4 ×4‬إﺿﺎﻓﺔ إﻟﻰ اﻟﺼﻒ واﻟﻌﻤﻮد اﻟﺬﯾﻦ ﯾﻈﮭﺮان ﺑﺎﻟﻠﻮن اﻟﻤﺨﺎﻟﻒ وﺗﺮﺗﯿﺒﮭﻤﺎ‬
‫ﺻﻔﺮ‪ .‬ﻟﺘﻐﯿﯿﺮ ﻋﺪد اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﯾﻤﻜﻦ ذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ ﺗﻐﯿﯿﺮ اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺨﺎﺻﯿﺘﯿﻦ‪:‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (ColCount‬وھﻲ ﻣﻦ ﻧﻮع ) ‪ (Integer‬وﺗﺤﺪد ﻋﺪد اﻷﻋﻤﺪة‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (RowCount‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Integer‬وﺗﺤﺪد ﻋﺪد اﻟﺼﻔﻮف‪.‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Col‬ھﺬه اﻟﺨﺎﺻﯿﺔ ﻣﻦ ﻧﻮع )‪ (LongInt‬وﺗﺤﺪد رﻗﻢ )‪ (Index‬اﻟﺨﺎص ﺑﺎﻟﻌﻤﻮد‪.‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Row‬ھﺬه اﻟﺨﺎﺻﯿﺔ ﻣﻦ ﻧﻮع )‪ (LongInt‬وﺗﺤﺪد رﻗﻢ )‪ (Index‬اﻟﺨﺎص ﺑﺎﻟﺼﻒ‪.‬‬
‫ﻣﻼﺣﻈﺔ‪ :‬اﻟﺨﺎﺻﯿﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ﻏﯿﺮ ﻣﻮﺟﻮدﺗﺎن ﻓﻲ ﻧﺎﻓﺬة اﻟﺨﺼﺎﺋﺺ )‪.(Object Inspector‬‬

‫‪6‬‬
O. M. Fares (10) ‫ اﻟﺪرس‬/‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‬

:‫( دﻋﻮﻧﺎ ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬On Click) ‫ ﻓﻲ اﻟﺤﺪث‬:‫ﻣﺜﺎل‬

procedure TForm1.StringGrid1Click(Sender: TObject);


begin
ShowMessage('Col no: '+ IntToStr(StringGrid1.Col)+
';'+'Row no: '+ IntToStr(StringGrid1.Row));
end;

‫ھﺬا اﻟﻤﺜﺎل ﯾﻈﮭﺮ رﺳﺎﻟﺔ ﺗﺤﺘﻮي ﻋﻠﻰ رﻗﻢ اﻟﻌﻤﻮد ورﻗﻢ اﻟﺼﻒ ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ أي ﺧﻠﯿﺔ ﻣﻦ ﺧﻼﯾﺎ اﻟﻜﺎﺋﻦ‬
.(StringGrid )

‫( وﺗﺤﺪد ﻋﺮض اﻟﻌﻤﻮد وﺗﻜﻮن ﻋﻠﻰ اﻟﺼﻮرة‬LongInt) ‫( وھﻲ ﻣﻦ ﻧﻮع‬ColWidths) ‫ اﻟﺨﺎﺻﯿﺔ‬o


.‫( ھﻮ رﻗﻢ اﻟﻌﻤﻮد‬Index) ‫ ﺣﯿﺚ‬ColWidths[Index] :‫اﻵﺗﯿﺔ‬
‫( وﺗﺤﺪد ارﺗﻔﺎع اﻟﺼﻒ وﺗﻜﻮن ﻋﻠﻰ اﻟﺼﻮرة‬LongInt) ‫( وھﻲ ﻣﻦ ﻧﻮع‬RowHeights) ‫ اﻟﺨﺎﺻﯿﺔ‬o
.‫( ھﻮ رﻗﻢ اﻟﺼﻒ‬Index) ‫ ﺣﯿﺚ‬RowWidths[Index] :‫اﻵﺗﯿﺔ‬

.‫إﺿﺎﻓﺔ إﻟﻰ اﻟﺨﺎﺻﯿﺘﯿﻦ اﻟﺘﺎﻟﯿﺘﯿﻦ واﻟﺘﻲ ﺗﺤﺪدان اﻟﻌﺮض اﻻﻓﺘﺮاﺿﻲ ﻟﻸﻋﻤﺪة واﻻرﺗﻔﺎع اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺼﻔﻮف‬
.(DefaultColWidth) ‫ اﻟﺨﺎﺻﯿﺔ‬o
(DefaultRowHeight) ‫ اﻟﺨﺎﺻﯿﺔ‬o
:‫ﻣﺜﺎل‬

‫( ﻟﻠﺨﺎﺻﯿﺔ‬Edit2) ‫( واﻟﻘﯿﻤﺔ ﻓﻲ‬ColWidths) ‫( ﻟﻠﺨﺎﺻﯿﺔ‬Edit1) ‫اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﯾﻘﻮم ﺑﺘﺨﺼﯿﺺ اﻟﻘﯿﻤﺔ ﻓﻲ‬
.(RowHeights)

procedure TForm1.Button1Click(Sender: TObject);


var
i: Integer;
begin
for i := 1 to 4 do
begin
StringGrid1.ColWidths[i]:=StrToInt(Edit1.Text);
end;

for i := 1 to 4 do
begin
StringGrid1.RowHeights[i]:=StrToInt(Edit2.Text);
end;
end;

7
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﻣﺜﺎل آﺧﺮ‪:‬‬
‫ھﺬا اﻟﻤﺜﺎل ﯾﻌﻄﻰ ﻧﻔﺲ ﻧﺘﯿﺠﺔ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ وﻟﻜﻦ ﺑﺎﺳﺘﺨﺪام اﻟﺨﺎﺻﯿﺔ ) ‪ (DefaultColWidth‬واﻟﺨﺎﺻﯿﺔ‬
‫)‪.(DefaultRowHeight‬‬

‫;)‪procedure TForm1.Button1Click(Sender: TObject‬‬


‫‪begin‬‬
‫;)‪StringGrid1.DefaultColWidth:=StrToInt(Edit1.Text‬‬
‫;)‪StringGrid1.DefaultRowHeight:=StrToInt(Edit2.Text‬‬
‫;‪end‬‬

‫اﻟﺼﻒ اﻟﺬي ﯾﻜﻮن ﻓﻲ أﻋﻠﻰ ) ‪ (StringGrid‬وﯾﻈﮭﺮ ﺑﻠﻮن ﻣﺨﺎﻟﻒ ﯾﺴﻤﻰ )‪ ،(FixedRow‬واﻟﻌﻤﻮد اﻟﺬي ﯾﻈﮭﺮ‬
‫ﻋﻠﻰ اﻟﯿﺴﺎر ﺑﻠﻮن ﻣﺨﺎﻟﻒ ﯾﺴﻤﻰ )‪ .(FixedCol‬اﻟﺨﺼﺎﺋﺺ اﻟﺜﻼث اﻟﺘﺎﻟﯿﺔ ﺗﺘﺤﻜﻢ ﻓﻲ ﺳﻠﻮك ﺗﻠﻚ اﻟﺼﻔﻮف‬
‫واﻷﻋﻤﺪة‪:‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (FixedColor‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Tcolor‬وﺗﺤﺪد ﻟﻮن اﻟﺼﻔﻮف واﻷﻋﻤﺪة‪.‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (FixedCols‬ﯾﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﻌﺪد اﻷﻋﻤﺪة )‪ (FixedCol‬وذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ ھﺬه اﻟﺨﺎﺻﯿﺔ‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (FixedRows‬ﯾﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﻌﺪد اﻟﺼﻔﻮف )‪ (FixedRow‬وذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ ھﺬه اﻟﺨﺎﺻﯿﺔ‪.‬‬
‫ﻻﺣﻆ ﻣﺎ ﯾﺤﺪث ﻋﻨﺪ ﺗﻐﯿﯿﺮ ﺗﻠﻚ اﻟﺨﺼﺎﺋﺺ )اﻟﻠﻮن‪ ،‬وﻋﺪد اﻷﻋﻤﺪة وﻋﺪد اﻟﺼﻔﻮف( ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫ﻣﺎذا ﯾﺤﺪث ﻟﻮ ﺧﺼﺼﻨﺎ اﻟﻘﯿﻤﺔ ) ‪ (0‬ﻟﻠﺨﺎﺻﯿﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ؟‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (GridLineWidth‬وھﻲ ﻣﻦ ﻧﻮع ) ‪ (Integer‬وﺗﺤﺪد ﻋﺮض ﺧﻄﻮط اﻟﺠﺪول‪ .‬ﻻﺣﻆ ﻣﺎ‬


‫ﯾﺤﺪث ﻟﺨﻄﻮط اﻟﺠﺪول ﻓﻲ ﺣﺎﻟﺔ ﺟﻌﻠﻨﺎ ھﺬه اﻟﺨﺎﺻﯿﺔ ﺗﺴﺎوي ‪.2‬‬

‫‪8‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﻛﺎﺋﻦ ﯾﺴﺘﺨﺪم ﻹﻇﮭﺎر ﺻﻮرة ﻋﻠﻰ اﻟﻔﻮرم‪.‬‬ ‫‪Image‬‬

‫ﻣﻦ أھﻢ ﺧﺼﺎﺋﺺ ھﺬا اﻟﻜﺎﺋﻦ‪:‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Picture‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Tpicture‬وﺗﺤﺪد اﻟﺼﻮرة اﻟﺘﻲ ﺳﺘﻈﮭﺮ ﻋﻠﻰ اﻟﻜﺎﺋﻦ )‪.(Image‬‬
‫وھﻲ ﺗﺸﺒﮫ اﻟﺨﺎﺻﯿﺔ )‪ .(Glyph‬ﻹﺿﺎﻓﺔ ﺻﻮرة اﺿﻐﻂ ﻋﻠﻰ اﻟﺰر )‪ (...‬ﻓﻲ اﻟﺨﺎﺻﯿﺔ )‪،(Picture‬‬
‫ﯾﻈﮭﺮ ﻣﺮﺑﻊ ﺗﺤﺮﯾﺮ اﻟﺼﻮرة )‪ ،(Picture Editor‬اﺿﻐﻂ ﻋﻠﻰ اﻟﺰر )‪ (Load‬ﻓﯿﻈﮭﺮ ﻣﺮﺑﻊ ﺗﺤﻤﯿﻞ‬
‫اﻟﺼﻮرة )‪ ،(Load Picture‬اﺧﺘﺮ ﻣﻠﻒ اﻟﺼﻮرة )‪ (bmp‬وﻣﻦ ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ )‪.(Open‬‬

‫ﺗﻈﮭﺮ اﻟﺼﻮرة اﻟﺘﻲ ﺗﻢ اﺧﺘﯿﺎرھﺎ ﻋﻠﻰ ﻣﺮﺑﻊ )‪ ،(Picture Editor‬اﺿﻐﻂ )‪ (Ok‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻤﻮاﻓﻘﺔ ﻓﺘﻈﮭﺮ اﻟﺼﻮرة‬
‫ﻋﻠﻰ اﻟﻜﺎﺋﻦ‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Center‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Boolean‬إذا ﻛﺎﻧﺖ )‪ (True‬ﻓﺎن اﻟﺼﻮرة ﺳﺘﻜﻮن ﻓﻲ ﻣﻨﺘﺼﻒ‬
‫اﻟﻜﺎﺋﻦ‪ .‬ﻻﺣﻆ اﻟﻔﺮق ﺑﯿﻦ اﻟﺼﻮرة اﻟﺘﻲ ﻓﻲ اﻟﯿﻤﯿﻦ واﻟﺼﻮرة اﻟﺘﻲ ﻓﻲ اﻟﯿﺴﺎر‪.‬‬

‫‪Center := False‬‬ ‫‪Center := True‬‬

‫‪9‬‬
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Stretch‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Boolean‬إذا ﻛﺎﻧﺖ )‪ (True‬ﻓﺈن اﻟﺼﻮرة ﺳﻮف ﯾﺘﻢ ﻣﻄﮭﺎ ﻟﺘﺄﺧﺬ‬
‫ﺣﺠﻢ اﻟﻜﺎﺋﻦ ﺑﺤﯿﺚ إذا ﺗﻐﯿﺮت ﺣﺠﻢ اﻟﻜﺎﺋﻦ ﯾﺘﻐﯿﺮ ﺣﺠﻢ اﻟﺼﻮرة أﯾﻀﺎ‪.‬‬

‫‪Stretch := False‬‬ ‫‪Stretch := True‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (AutoSize‬ﻣﻦ ﻧﻮع )‪ (Boolean‬ﻓﻲ ﺣﺎﻟﺔ )‪ (True‬ﯾﺄﺧﺬ اﻟﻜﺎﺋﻦ ﺣﺠﻢ اﻟﺼﻮرة ﺗﻠﻘﺎﺋﯿﺎ‪.‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ :(Canvas‬وھﻲ ﻣﻦ ﻧﻮع )‪ (TCanvas‬وﺳﻮف ﻧﺘﻮﻗﻒ ﻗﻠﯿﻼ ﻣﻊ ھﺬه اﻟﺨﺎﺻﯿﺔ وأرﯾﺪ ﻣﻨﻜﻢ‬
‫ﺑﻌﺾ اﻟﺘﺮﻛﯿﺰ‪ ،‬ﻓﻲ اﻟﺒﺪاﯾﺔ دﻋﻮﻧﺎ ﻧﺸﺮح ﻣﻌﻨﻰ ﻛﻠﻤﺔ )‪ ،(Canvas‬ھﺬه اﻟﻜﻠﻤﺔ ﺗﻌﻨﻲ‪ :‬ﻧﻮع ﻣﻦ اﻟﻘﻤﺎش اﻟﺬي‬
‫ﯾﺴﺘﺨﺪم ﻓﻲ ﺻﻨﻊ أﺷﺮﻋﺔ اﻟﺴﻔﻦ واﻟﺨﯿﺎم وﯾﺴﺘﺨﺪﻣﮫ اﻟﺮﺳﺎﻣﻮن ﻟﻠﺮﺳﻢ ﻋﻠﯿﮫ‪ .‬ھﺬه اﻟﺨﺎﺻﯿﺔ ﯾﻤﻜﻦ‬
‫اﺳﺘﺨﺪاﻣﮭﺎ ﻟﻠﺮﺳﻢ ﻋﻠﻰ اﻟﻜﺎﺋﻦ‪ ،‬ﻓﻤﺜﻼ ﯾﻤﻜﻦ رﺳﻢ ﺧﻄﻮط ﻣﺴﺘﻘﯿﻤﺔ أو أﺷﻜﺎل ھﻨﺪﺳﯿﺔ أو ﻧﺺ ﻋﻠﻰ اﻟﻜﺎﺋﻦ‬
‫وﺗﻠﻮﯾﻨﮭﺎ أو ﺣﺘﻰ إﺿﺎﻓﺔ ﺻﻮرة‪ .‬أي ﻛﺎﺋﻦ ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﺨﺎﺻﯿﺔ )‪ (Canvas‬ﯾﻤﻜﻦ اﻟﺮﺳﻢ ﻋﻠﯿﮫ‪ .‬ﻣﺜﻼ‬
‫اﻟﻜﺎﺋﻦ )‪ (Form‬ﯾﺤﺘﻮي ﻋﻠﻰ ھﺬه اﻟﺨﺎﺻﯿﺔ أﯾﻀﺎ‪ ،‬إذا ﯾﻤﻜﻦ اﻟﺮﺳﻢ ﻋﻠﻰ اﻟﻔﻮرم اﻧﻈﺮ إﻟﻰ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‪:‬‬
‫ﺳﻮف ﻧﻘﻮم ﺑﺮﺳﻢ ﺧﻂ ﻣﺴﺘﻘﯿﻢ ﻣﻦ اﻟﻨﻘﻄﺔ )‪ (100,100‬إﻟﻰ اﻟﻨﻘﻄﺔ )‪ .(200,200‬وﺳﻮف ﻧﻘﻮم ﺑﺘﻐﯿﯿﺮ ﻟﻮن وﺳﻤﻚ‬
‫اﻟﺨﻂ‪.‬‬

‫;)‪procedure TForm1.Button1Click(Sender: TObject‬‬


‫‪begin‬‬
‫;‪Canvas.Pen.Color:=clRed‬‬
‫;‪Canvas.Pen.Width:=3‬‬
‫;)‪Canvas.MoveTo(100,100‬‬
‫;)‪Canvas.LineTo(200,200‬‬
‫;‪end‬‬

‫اﻟﺴﻄﺮ اﻷول ﻓﻲ اﻟﻜﻮد ﻟﺘﻐﯿﯿﺮ ﻟﻮن اﻟﺨﻂ إﻟﻰ اﻷﺣﻤﺮ‪ .‬اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻓﻲ اﻟﻜﻮد ﻟﺘﻐﯿﯿﺮ ﺳﻤﻚ اﻟﺨﻂ إﻟﻰ ‪ .3‬اﻟﺴﻄﺮ‬
‫اﻟﺜﺎﻟﺚ ﻓﻲ اﻟﻜﻮد ﻟﺘﺤﺪﯾﺪ ﻧﻘﻄﺔ ﺑﺪاﯾﺔ اﻟﺨﻂ‪ .‬اﻟﺴﻄﺮ اﻟﺮاﺑﻊ ﻓﻲ اﻟﻜﻮد ﻟﺘﺤﺪﯾﺪ ﻧﻘﻄﺔ ﻧﮭﺎﯾﺔ اﻟﺨﻂ‪.‬‬
‫ﯾﻤﻜﻦ أﯾﻀﺎ رﺳﻢ ﺻﻮرة ﻋﻠﻰ اﻟﻔﻮرم‪ ،‬دﻋﻮﻧﺎ ﻧﻀﻊ ﻛﺎﺋﻦ )‪ (Image‬ﻋﻠﻰ اﻟﻔﻮرم‪ ،‬وﻧﺨﺼﺺ ﻟﮫ ﺻﻮرة‪ ،‬وﻧﻀﻊ‬
‫ﻛﺎﺋﻦ )‪ (Button‬وﻓﻲ اﻟﺤﺪث )‪ (OnClick‬ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‪:‬‬

‫;)‪procedure TForm1.Button1Click(Sender: TObject‬‬


‫‪var‬‬
‫;‪x, y: Integer‬‬
‫‪begin‬‬
‫‪for x := 0 to Image1.Width-1 do‬‬
‫‪for y := 0 to Image1.Height-1 do‬‬
‫‪begin‬‬
‫;]‪Canvas.Pixels[x,y]:=Image1.Canvas.Pixels[x,y‬‬
‫;‪end‬‬
‫;‪end‬‬

‫ﻛﻤﺎ ﻧﻌﻠﻢ أن اﻟﺼﻮرة ھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﻨﻘﺎط )‪ (Pixels‬وﻛﻞ ﻧﻘﻄﺔ )‪ (pixel‬ھﻲ ﻋﺒﺎرة ﻋﻦ ﻗﯿﻤﺔ رﻗﻤﯿﺔ‬
‫ﻣﻦ ﻧﻮع )‪ (TColor‬وﻋﻨﺪ ﺗﺠﻤﯿﻊ ھﺬه اﻟﻨﻘﺎط ﻣﻌﺎ ﺗﺘﻜﻮن اﻟﺼﻮرة‪ .‬إذا ﺳﻮف ﻧﺴﺘﺨﺪم ھﺬا اﻟﻤﺒﺪأ ﻣﻊ )‪.(Canvas‬‬
‫ﯾﺤﺘﻮي )‪ (Canvas‬ﻋﻠﻰ ﺧﺎﺻﯿﺔ ﺗﺴﻤﻰ )‪ (Pixels‬وھﻲ ﺗﻜﻮن ﻋﻠﻰ ﺻﻮرة )]‪ (canvas.pixels[x,y‬ﺣﯿﺚ أن‬
‫)‪ (x,y‬ﻋﺒﺎرة ﻋﻦ ﻗﯿﻢ ﻣﻦ ﻧﻮع )‪ (Integer‬ﺗﻤﺜﻞ إﺣﺪاﺛﯿﺎت اﻟﻨﻘﻄﺔ‪ .‬ﺳﻮف ﻧﺴﺘﺨﺪم ﺣﻠﻘﺘﻲ )‪ (For‬اﻷوﻟﻰ ﺗﺒﺪأ ﻣﻦ‬
‫ﺻﻔﺮ إﻟﻰ أﻗﺼﻰ ﻋﺮض ﻟﻠﻜﺎﺋﻦ )‪ (Image‬واﻟﺜﺎﻧﯿﺔ ﻣﻦ ﺻﻔﺮ إﻟﻰ أﻗﺼﻰ ارﺗﻔﺎع ﻟﻠﻜﺎﺋﻦ‪ ،‬وﺳﻨﻘﻮم ﺑﺘﺨﺼﯿﺺ ﻛﻞ‬
‫ﻧﻘﻄﺔ ﻋﻠﻰ اﻟﺼﻮرة ﻟـ)‪ .(Form.Canvas‬وھﻜﺬا ﯾﺘﻢ رﺳﻦ اﻟﺼﻮرة ﻋﻠﻰ اﻟﻔﻮرم‪.‬‬

‫‪10‬‬
O. M. Fares (10) ‫ اﻟﺪرس‬/‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‬

:‫ اﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬.‫ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر ﯾﺘﻢ رﺳﻢ اﻟﺼﻮرة اﻟﺘﻲ ﻓﻲ أﻋﻠﻰ اﻟﯿﺴﺎر ﻋﻠﻰ اﻟﻔﻮرم‬

:‫ﻹﺿﺎﻓﺔ ﻧﺺ ﻋﻠﻰ اﻟﻔﻮرم اﻛﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬

procedure TForm1.Button2Click(Sender: TObject);


begin
Canvas.TextOut(10,10,'Write text on the Form');
End;

.(10,10) ‫( ﺑﺪأ ﻣﻦ اﻟﻤﻮﻗﻊ‬Write text on the Form) ‫ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ‬

.‫اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﯾﻌﻜﺲ اﻟﺼﻮرة ﻓﻲ اﻻﺗﺠﺎھﯿﻦ اﻟﺮأﺳﻲ واﻷﻓﻘﻲ‬

procedure TForm1.Button1Click(Sender: TObject);


var
x, y: Integer;
begin
for x := 0 to Image1.Width-1 do
for y := 0 to Image1.Height-1 do
Canvas.Pixels[Image1.Width-1-x,Image1.Height-1-y]:=
Image1.Canvas.Pixels[x,y];
End;

.‫أﻣﺎ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻓﯿﻜﺒﺮ اﻟﺼﻮر إﻟﻰ اﻟﻀﻌﻒ‬

procedure TForm1.Button1Click(Sender: TObject);


var
x, y: Integer;
begin
for x := 0 to Image1.Width-1 do
for y := 0 to Image1.Height-1 do
Canvas.Pixels[x*2,y*2]:=Image1.Canvas.Pixels[x,y];
End;

11
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﻋﺒﺎرة ﻋﻦ ﻛﺎﺋﻨﺎت ﻋﻠﻰ ھﯿﺌﺔ أﺷﻜﺎل ھﻨﺪﺳﯿﺔ‪.‬‬ ‫‪Shape‬‬

‫وﯾﺤﺘﻮي ھﺬا اﻟﻜﺎﺋﻦ ﻋﻠﻰ اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﺨﺼﺎﺋﺺ أھﻤﮭﺎ‪:‬‬


‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Shape‬وھﺬه اﻟﺨﺎﺻﯿﺔ ﺗﺤﺪد ﺷﻜﻞ اﻟﻜﺎﺋﻦ وﺗﺤﺘﻮي ﻋﻠﻰ اﻻﺣﺘﻤﺎﻻت اﻵﺗﯿﺔ‪:‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Brush‬وﺗﺤﺘﻮي ﻋﻠﻰ ﺧﺎﺻﯿﺘﯿﻦ )‪ (color‬و) ‪ ،(style‬اﻟﺨﺎﺻﯿﺔ )‪ (style‬ﺗﺤﺪد ﻧﻤﻂ ﺗﻌﺒﺌﺔ‬


‫اﻟﺸﻜﻞ اﻟﮭﻨﺪﺳﻲ‪.‬‬

‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Pen‬وھﻲ ﺗﺤﺪد ﻧﻤﻂ اﻟﺨﻂ وﺗﺤﺘﻮي ﻋﻠﻰ اﻟﺨﺼﺎﺋﺺ اﻟﺘﺎﻟﯿﺔ‪ (color) :‬و)‪(mode‬‬
‫و)‪ (style‬و)‪ .(width‬ﺣﯿﺚ ﺗﺤﺪد ﻟﻮن وﺳﻤﻚ وﻧﻤﻂ اﻟﺨﻂ‪.‬‬

‫ﻋﺒﺎرة ﻋﻦ ﻛﺎﺋﻦ ﻏﯿﺮ ﻣﺮﺋﻲ ﯾﺴﺘﺨﺪم ﻛﻤﺆﻗﺖ ﻟﺘﻨﻔﯿﺬ ﻋﻤﻠﯿﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ﻓﺘﺮات‬
‫‪Timer‬‬
‫زﻣﻨﯿﺔ ﻣﺤﺪدة‪.‬‬

‫وھﻮ اﺣﺪ ﻛﺎﺋﻨﺎت ﺷﺮﯾﻂ أدوات ) ‪ (System‬وﻣﻦ أھﻢ ﺧﺼﺎﺋﺺ ھﺬا اﻟﻜﺎﺋﻦ‪:‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Interval‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Boolean‬وﺗﺘﺤﻜﻢ ﻓﻲ ﻣﺎ إذا ﻛﺎن اﻟﻜﺎﺋﻦ ﯾﺴﺘﺠﯿﺐ ﻟﺤﺪث‬
‫) ‪.(OnTime‬‬
‫‪ o‬اﻟﺨﺎﺻﯿﺔ )‪ (Enabled‬وھﻲ ﻣﻦ ﻧﻮع )‪ (Cardinal‬وھﻮ اﺣﺪ أﻧﻮاع )‪ ،(Integer‬ھﺬه اﻟﺨﺎﺻﯿﺔ ﺗﺤﺪد‬
‫اﻟﻔﺘﺮة اﻟﺰﻣﻨﯿﺔ ﻟﻠﻤﺆﻗﺖ )ﻣﻠﻠﻲ ﺛﺎﻧﯿﺔ(‪.‬‬
‫ﻣﺜﻼ إذا ﻛﺎﻧﺖ اﻟﺨﺎﺻﯿﺔ )‪ (Interval‬ﺗﺴﺎوي ‪ 1000‬ﻓﮭﺬا ﯾﻌﻨﻲ )‪ 1‬ﺛﺎﻧﯿﺔ(‪ .‬وﺑﺎﻟﺘﺎﻟﻲ ﺳﯿﺘﻢ ﺗﻨﻔﯿﺬ اﻟﻜﻮد ﻓﻲ‬
‫) ‪ (OnTime‬ﻛﻞ واﺣﺪ ﺛﺎﻧﯿﺔ‪.‬‬

‫‪12‬‬
O. M. Fares (10) ‫ اﻟﺪرس‬/‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‬

‫( ﻧﺠﻌﻞ‬OnCreate) ‫ وﻓﻲ اﻟﺤﺪث‬.(Integer) ‫( ﻣﻦ ﻧﻮع‬k) ‫( وﻟﯿﻜﻦ‬Global) ‫ دﻋﻮﻧﺎ ﻧﻌﺮف ﻣﺘﻐﯿﺮ ﻓﻲ‬:‫ﻣﺜﺎل‬


.(k:=1)

procedure TForm1.Timer1Timer(Sender: TObject);


begin
k:=0;
End;

:‫( ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬OnTime ) ‫( ﻋﻠﻰ اﻟﻔﻮرم وﻓﻲ اﻟﺤﺪث‬Timer) ‫ﻟﻨﻀﻊ اﻟﻜﺎﺋﻦ‬

procedure TForm1.Timer1Timer(Sender: TObject);


begin
Caption:=IntToStr(k);
End;

‫؟‬100 ‫( ﺗﺴﺎوي‬Interval) ‫ ﻣﺎ رأﯾﻜﻢ ﻟﻮ ﺟﻌﻠﻨﺎ اﻟﺨﺎﺻﯿﺔ‬.‫ﺷﻐﻞ اﻟﺒﺮﻧﺎﻣﺞ وﻻ ﺣﻆ ﻣﺎ ﯾﺤﺪث ﻟﻌﻨﻮان اﻟﻔﻮرم‬


‫اﻟﻜﻮد ﻛﺎﻣﻞ‬

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
k: Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);


begin
k:=0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);


begin
Caption:=IntToStr(k);
k:=k+1;
end;

end.

13
‫‪O. M. Fares‬‬ ‫دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ /‬اﻟﺪرس )‪(10‬‬

‫ﺗﻤﺮﯾﻦ‪ :‬اﺳﻤﺤﻮا ﻟﻲ أن أﻗﺪم ﻟﻜﻢ ھﺬا اﻟﺘﻤﺮﯾﻦ‪ .‬ﺻﻤﻢ ﺑﺮﻧﺎﻣﺞ دﻟﻔﻲ ﻋﻠﻰ ھﯿﺌﺔ ﺳﺎﻋﺔ رﻗﻤﯿﺔ ﺑﺤﯿﺚ ﺗﻈﮭﺮ‬
‫اﻟﺴﺎﻋﺎت واﻟﺪﻗﺎﺋﻖ واﻟﺜﻮاﻧﻲ واﻷﺟﺰاء ﻣﻦ اﻟﺜﺎﻧﯿﺔ ﻓﻲ اﻟﻜﺎﺋﻦ )‪.(Lable‬‬

‫ﻣﺜﺎل آﺧﺮ‪ :‬ﺳﻮف ﻧﺴﺘﺨﺪم اﻟﻜﺎﺋﻦ )‪:(Timer‬‬

‫‪Var‬‬
‫;‪Form1: TForm1‬‬
‫;‪x, y: Integer‬‬

‫‪implementation‬‬

‫}‪{$R *.DFM‬‬

‫;)‪procedure TForm1.FormCreate(Sender: TObject‬‬


‫‪begin‬‬
‫;‪x:=0‬‬
‫;‪y:=0‬‬
‫;)‪Canvas.MoveTo(x,y‬‬
‫;‪end‬‬

‫;)‪procedure TForm1.Timer1Timer(Sender: TObject‬‬


‫‪begin‬‬
‫;‪x:=x+1‬‬
‫;‪y:=y+1‬‬
‫;)‪Canvas.LineTo(x,y‬‬
‫;‪end‬‬

‫‪end.‬‬

‫ﻣﺜﺎل آﺧﺮ‪ :‬دﻋﻮﻧﺎ ﻧﺠﺮب ھﺬا اﻟﻤﺜﺎل‪ :‬ﺳﻮف ﻧﺴﺘﺨﺪم اﻟﻜﺎﺋﻦ )‪ (Shape‬واﻟﻜﺎﺋﻦ )‪ ،(Timer‬وﻓﻲ اﻟﺤﺪث‬
‫) ‪ (OnTime‬ﻧﻜﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‪:‬‬

‫;)‪procedure TForm1.Timer1Timer(Sender: TObject‬‬


‫‪begin‬‬
‫;‪if x<=0 then c:=1‬‬
‫;‪if x>=ClientWidth-Shape1.Width then c:=2‬‬
‫;‪if y<=0 then d:=1‬‬
‫;‪if y>=ClientHeight-Shape1.Height then d:=2‬‬

‫‪case c of‬‬
‫‪:1‬‬ ‫;‪x:=x+1‬‬
‫‪:2‬‬ ‫;‪x:=x-1‬‬
‫;‪end‬‬

‫‪case d of‬‬
‫‪:1‬‬ ‫;‪y:=y+1‬‬
‫‪:2‬‬ ‫;‪y:=y-1‬‬
‫;‪end‬‬
‫;‪Shape1.Top:=y‬‬
‫;‪Shape1.Left:=x‬‬
‫;‪End‬‬

‫إﻟﻰ ھﻨﺎ ﯾﻨﺘﮭﻲ اﻟﺪرس اﻟﻌﺎﺷﺮ ﻣﻦ دروس ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ دﻟﻔﻲ‪ ،‬أرﺟﻮا ﻣﻦ اﷲ اﻟﻌﻠﻲ اﻟﻘﺪﯾﺮ أن ﯾﻜﻮن ھﺬا اﻟﺪرس‬
‫واﺿﺤﺎ ﻟﻠﺠﻤﯿﻊ‪ ،‬وإذا ﻛﺎن ﻟﺪﯾﻜﻢ أي اﺳﺘﻔﺴﺎرات أو اﻗﺘﺮاﺣﺎت ﻓﺎرﺟﻮا أن ﻻ ﺗﺘﺮددوا ﻓﻲ ﻃﺮﺣﮭﺎ‪.‬‬
‫ﻧﻠﺘﻘﻲ ﻓﻲ دروس أﺧﺮى إن ﺷﺎء اﷲ‪ .‬ﺷﻜﺮا‪!...‬‬

‫‪14‬‬

You might also like