Issuu on Google+

óýãêñéóçò åßíáé óýìöùíï ìå ôï óýìâïëï, ç ëïãéêÞ ôéìÞ ôçò ðáñÜóôáóçò åßíáé áëçèÞò, äéáöïñåôéêÜ åßíáé øåõäÞò. Ôá óýìâïëá óýãêñéóçò êáèþò êáé ç óçìáóßá ôïõò ðåñéÝ÷ïíôáé óôïí ðßíáêá 4-1.1 ÔåëåóôÞò = <> Þ >< < > <= Þ =< >= Þ >=

Ó÷Ýóç Éóüôçôá Áíéóüôçôá Ìéêñüôåñï áðü Ìåãáëýôåñï áðü Ìéêñüôåñï Þ ßóï áðü Ìåãáëýôåñï Þ ßóï áðü

Ðßíáêáò 8-1. ÔåëåóôÝò óýãêñéóçò

Ïé óõãêñßóåéò ðñÝðåé íá ãßíïíôáé ìåôáîý ðáñáóôÜóåùí ôïõ ßäéïõ ôýðïõ. ÄçëáäÞ, Þ ìåôáîý ËÜèç óýíôáîçò óôéò áñéèìçôéêþí ðáñáóôÜóåùí, Þ ìåôáîý áëöáñéèìçôéêþí ðáñáóôÜóåùí. Ç óýãêñéóç ìåôáîý ëïãéêÝò ðáñáóôÜóåéò áñéèìçôéêÞò êáé áëöáñéèìçôéêÞò ðáñÜóôáóçò äåí åßíáé áðïäåêôÞ. Åðßóçò, óå ìéá áðëÞ ëïãéêÞ ðáñÜóôáóç áðáãïñåýåôáé íá ôïðïèåôÞóïõìå äýï óýìâïëá óýãêñéóçò.

Ðáñáäåßãìáôá 8-4. Ïé ðáñáóôÜóåéò:

New.Value + 5 = "4212 + 5" Maximum >> Minimum LimitDown < X < LimitDown

óýãêñéóç áñéèìçôéêÞò ìå áëöáñéèìçôéêÞ ðïóüôçôá äåí õðÜñ÷åé ôåëåóôÞò >> äýï ôåëåóôÝò óýãêñéóçò óôç óåéñÜ

äåí áðïôåëïýí áðïäåêôÝò ëïãéêÝò ðáñáóôÜóåéò. Ïé óýíèåôåò ëïãéêÝò ðáñáóôÜóåéò äçìéïõñãïýíôáé áðü ëïãéêÝò ðáñáóôÜóåéò ðïõ óõíäÝïíôáé Óýíèåôåò ëïãéêÝò ðáñáóôÜóåéò ìåôáîý ôïõò ìå ôç âïÞèåéá ëïãéêþí óõíäÝóìùí. Ïé ðéï êïéíïß ëïãéêïß óýíäåóìïé åßíáé:

Ðáñáäåßãìáôá 8-2.

á) ¸óôù ç ëïãéêÞ ðáñÜóôáóç:

SinusMaxValue > TriangleMaxValue Áí SinusMaxValue=2 êáé TriangleMaxValue=1, ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóç

Ëïãéêü ÊÁÉ (And) Þ óýæåõîç

åßíáé áëçèÞò.

Ç óýíèåôç ëïãéêÞ ðáñÜóôáóç ðïõ ðñïêýðôåé áðü ôï ëïãéêü ÊÁÉ (óýæåõîç) äýï áðëþí ëïãéêþí ðáñáóôÜóåùí åßíáé áëçèÞò, ìüíïí áí êáé ïé äýï ëïãéêÝò ðáñáóôÜóåéò åßíáé áëçèåßò. Ç êùäéêÞ ëÝîç ðïõ ÷ñçóéìïðïéåßôáé óôçí VB ãéá ôç óýæåõîç äýï ëïãéêþí ðáñáóôÜóåùí åßíáé ç And.

¼ìùò, áí SinusMaxValue=1.5 êáé TriangleMaxValue=2.75, ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóç åßíáé øåõäÞò. â) Ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóçò:

ÐáñÜäåéãìá 8-5.

B^2 > 4*A*C

B=10.5 A=3 åßíáé øåõäÞò ãéá B=1.6 A=8 åßíáé áëçèÞò ãéá

êáé êáé

C=2.93 åíþ C=2

¸óôù, üôé ôá èåñìïêñáóéáêÜ üñéá ãéá ôç óùóôÞ ëåéôïõñãßá åíüò ïëïêëçñùìÝíïõ ï

ï

êõêëþìáôïò åßíáé -55 C, ôï êáôþôåñï, êáé 125 C, ôï áíþôåñï. Ç ëïãéêÞ ðáñÜóôáóç ðïõ êùäéêïðïéåß óôçí VB áõôÞí ôçí ðñüôáóç åßíáé:

(-55 < Temperature) And (Temperature < 125)

ã) Ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóçò:

Voltage.Enabled = True

Áí Temperature=23, äçëáäÞ Ý÷åé ôéìÞ ìåãáëýôåñç áðü -55 êáé ôáõôü÷ñïíá ìéêñüôåñç

åßíáé áëçèÞò, áí ôï áíôéêåßìåíï åëÝã÷ïõ Voltage åßíáé åíåñãïðïéçìÝíï êáé øåõäÞò, áí

áðü 125, ç ëïãéêÞ ðáñÜóôáóç åßíáé áëçèÞò (ÊÁÉ ïé äýï áðëÝò ëïãéêÝò ðáñáóôÜóåéò

ôï áíôéêåßìåíï åëÝã÷ïõ Voltage åßíáé áðåíåñãïðïéçìÝíï.

áëçèåßò). Áí Temperature=-70, äçëáäÞ ìéêñüôåñç áðü -55, ç ëïãéêÞ ðáñÜóôáóç åßíáé

Ç óýãêñéóç áëöáñéèìçôéêþí ðïóïôÞôùí ãßíåôáé ÷áñáêôÞñá - ÷áñáêôÞñá êáé åëÝã÷åôáé áí Ýíáò Óýãêñéóç ìåôáîý ÷áñáêôÞñáò ðñïçãåßôáé Þ Ýðåôáé ôïõ Üëëïõ óôïí ðßíáêá ðïõ ÷ñçóéìïðïéåßôáé ãéá ôçí áëöáñéèìçôéêþí ðïóïôÞôùí. ðáñÜóôáóç ôùí ÷áñáêôÞñùí áðü ôï õðïëïãéóôéêü óýóôçìá. Áò óçìåéùèåß, üôé óå áõôüí ôïí ðßíáêá ôá øçößá ðñïçãïýíôáé ôùí ëáôéíéêþí ãñáììÜôùí êáé ôá ëáôéíéêÜ ãñÜììáôá ðñïçãïýíôáé ôùí åëëçíéêþí. Åðßóçò, ôá êåöáëáßá ãñÜììáôá êÜèå áëöáâÞôïõ åßíáé äéáöïñåôéêÜ áðü ôá ìéêñÜ êáé ðñïçãïýíôáé.

Ðáñáäåßãìáôá 8-3. Ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóçò:

øåõäÞò, áöïý ìéá áðü ôéò áðëÝò ëïãéêÝò ðñïôÜóåéò (ç ðñþôç) åßíáé øåõäÞò. Áí Temperature=150, äçëáäÞ ìåãáëýôåñç áðü 125, ç ëïãéêÞ ðáñÜóôáóç åßíáé øåõäÞò, áöïý ìéá áðü ôéò áðëÝò ëïãéêÝò ðñïôÜóåéò (ç äåýôåñç) åßíáé øåõäÞò.

Ëïãéêü ¹ (Or) Þ äéÜæåõîç Ç óýíèåôç ëïãéêÞ ðáñÜóôáóç ðïõ ðñïêýðôåé áðü ôï ëïãéêü ¹ (äéÜæåõîç) äýï áðëþí ëïãéêþí ðáñáóôÜóåùí åßíáé áëçèÞò, áí ìéá ôïõëÜ÷éóôïí ôùí ëïãéêþí ðáñáóôÜóåùí åßíáé áëçèÞò. Ç êùäéêÞ ëÝîç ðïõ ÷ñçóéìïðïéåßôáé óôçí VB ãéá íá ôç äéÜæåõîç äýï ëïãéêþí ðáñáóôÜóåùí åßíáé ç Or.

Word1 > Word2

ÐáñÜäåéãìá 8-6.

åßíáé áëçèÞò ãéá:

Word1= "ÌÅÃÉÓÔÏÓ" êáé Word2="ÌÅÃÁËÏÓ" ïé áñéèìïß ðñïçãïýíôáé ôùí ãñáììÜôùí "ÄÙÄÅÊÁ" "12" "maximum" "MINIMUM" ôá êåöáëáßá ðñïçãïýíôáé ôùí ìéêñþí "ÌÅÃÉÓÔÏ" "MAXIMUM" ôá åëëçíéêÜ Ýðïíôáé ôùí ëáôéíéêþí ðåñéóóüôåñïé ÷áñáêôÞñåò óôïí â' üñï "ÊÅÍÏ" "ÊÅÍÏ " ôï äéÜóôçìá ðñïçãåßôáé ôùí ãñáììÜôùí "ÊÅÍÏ" " ÊÅÍÏ" êáé øåõäÞò ãéá:

Word1="Kbit" êáé Word2= "KBYTE" "19/12/1970" "19/08/1970" "Kgr!" "Kgr#" "GYM" "GYMNASIUM" 112

Ç ëïãéêÞ ðáñÜóôáóç:

(Voltage.Enabled=False) Or (Current.Enabled=False) åßíáé áëçèÞò áí Ýíá áðü ôá áíôéêåßìåíá åëÝã÷ïõ Voltage Þ Current åßíáé áðåíåñãïðïéçìÝíï.

Ëïãéêü Ï×É (Not) Þ Üñíçóç Ôï ëïãéêü Ï×É äå óõíäÝåé äýï áðëÝò ëïãéêÝò ðáñáóôÜóåéò áëëÜ ôßèåôáé ìðñïóôÜ áðü ìéá ëïãéêÞ ðáñÜóôáóç äçìéïõñãþíôáò êáô' áõôüí ôïí ôñüðï ëïãéêÞ ðáñÜóôáóç áíôßèåôçò ôéìÞò áëÞèåéáò. Ç êùäéêÞ ëÝîç ðïõ ÷ñçóéìïðïéåßôáé óôçí VB ãéá íá ôçí Üñíçóç åßíáé ç ëÝîç Not. 113


ÐáñÜäåéãìá 8-7.

Ç äïìÞ ëåéôïõñãåß ùò åîÞò: 1. ÅëÝã÷åôáé ç óõíèÞêç (õðïëïãßæåôáé ç áëÞèåéá ôçò ëïãéêÞò ðáñÜóôáóçò). 2. Áí ç óõíèÞêç åßíáé áëçèÞò åêôåëåßôáé ç ðñþôç ïìÜäá åíôïëþí (åíôïëÝò á) ìåôáîý ãñáììÞò

Ç ëïãéêÞ ðáñÜóôáóç:

Not (Voltage.Locked = False)

If …Then êáé ãñáììÞò Else. Ç ïìÜäá åíôïëþí (åíôïëÝò ø) ìåôáîý ôçò ãñáììÞò Else êáé ôçò ãñáììÞò End If áãíïåßôáé. ÄéáöïñåôéêÜ, áí ç óõíèÞêç åßíáé øåõäÞò, áãíïåßôáé ç

éóïäõíáìåß ìå ôç ëïãéêÞ ðáñÜóôáóç:

Voltage.Locked = True Ïé óýíèåôåò ëïãéêÝò ðáñáóôÜóåéò ìðïñåß íá ðåñéÝ÷ïõí êáé ðåñéóóüôåñåò áðü äýï áðëÝò Óõíäõáóìüò óýíèåôùí ëïãéêÝò ðáñáóôÜóåéò ðïõ íá ôéò óõíäÝïõí ìå ðåñéóóüôåñïõò ôïõ åíüò ëïãéêïýò óõíäÝóìïõò. ëïãéêþí ðáñáóôÜóåùí. Ï Ýëåãïò áëÞèåéáò ôçò óýíèåôçò ëïãéêÞò ðáñÜóôáóçò ãßíåôáé ìå âÜóç ôéò áêüëïõèåò áñ÷Ýò:

ðñþôç ïìÜäá åíôïëþí (åíôïëÝò á) êáé åêôåëåßôáé ç äåýôåñç ïìÜäá åíôïëþí (åíôïëÝò ø). 3. Ç åêôÝëåóç óõíå÷ßæåôáé ìå ôçí åíôïëÞ ðïõ áêïëïõèåß ôçí End If

1. Áí óôç ëïãéêÞ ðáñÜóôáóç äåí õðÜñ÷ïõí ðáñåíèÝóåéò, áêïëïõèåßôáé ç åîÞò óåéñÜ ðñïôåñáéüôçôáò: á) ÁñéèìçôéêÝò ðñÜîåéò â) Óõãêñßóåéò

ÁëçèÞò

ã) ËïãéêÝò ðñÜîåéò ìå ôçí åîÞò óåéñÜ: Not, And, Or. 2. Áí õðÜñ÷ïõí ðáñåíèÝóåéò ç óåéñÜ ôùí ðñÜîåùí êáèïñßæåôáé áðü ôéò ðáñåíèÝóåéò.

ÓõíèÞêç ?

åíôïëÞ á1

åíôïëÞ ø1 åíôïëÞ ø2

åíôïëÞ á2

:

Óõíçèßæåôáé íá ÷ñçóéìïðïéïýìå ðÜíôá ðáñåíèÝóåéò ìåôáîý ôùí áðëþí ëïãéêþí ðáñáóôÜóåùí ðïõ óõíäÝïíôáé ìå ëïãéêïýò óõíäÝóìïõò, áêüìá êáé áí äå ÷ñåéÜæåôáé, ãéá íá åßíáé åõêïëüôåñá áíáãíþóéìåò ìéáò êáé Ýôóé äéáêñßíïíôáé êáëýôåñá êáé ï ôñüðïò äñÜóçò ôùí ëïãéêþí óõíäÝóìùí åßíáé ðéï ðñïöáíÞò.

ØåõäÞò

:

Ó÷Þìá 8-1. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò If…Then…Else

Ðáñáäåßãìáôá 8-8. Ïé ðáñáóôÜóåéò:

ÐáñÜäåéãìá 8-10.

((K<L) And (L<M)) Or (M<K) (B<C) And ((A<B) Or (A<C)) Not ((A>B) Or (Not B>C)) åßíáé óýíèåôåò ëïãéêÝò ðáñáóôÜóåéò. Ìéá ëïãéêÞ ðáñÜóôáóç ìðïñåß íá ãñáöåß óôï äåîß ìÝëïò ìéáò åíôïëÞò åê÷þñçóçò, áñêåß óôï Ïé ëïãéêÝò ðáñáóôÜóåéò áñéóôåñü ôçò íá õðÜñ÷åé ìåôáâëçôÞ Þ éäéüôçôá ôïõ ôýðïõ Boolean. Ó' áõôÞí ôçí ðåñßðôùóç, ìðïñïýí íá ãñáöïýí óôï äåîß ìÝëïò åíôïëþí óõíçèßæåôáé íá ãñÜöïõìå ôç ëïãéêÞ ðáñÜóôáóç ðÜíôá ìåôáîý ðáñåíèÝóåùí. åê÷þñçóçò.

Ðáñáäåßãìáôá 8-9. Óôéò ðéï êÜôù åíôïëÝò, åê÷ùñåßôáé óôç ìåôáâëçôÞ ôïõ áñéóôåñïý ìÝëïõò ç ôéìÞ ôçò ëïãéêÞò ðáñÜóôáóçò ôïõ äåîéïý ìÝëïõò:

A_higherthan_B = (A>B) Number.Visible = (IsNumeric(TextBoxA) And IsNumeric(TextBoxB)) UserPress = Check1 Or Check2 Or Check3

Ç äïìÞ åðéëïãÞò If...Then …Else Ç ðñïãñáììáôéóôéêÞ äïìÞ åðéëïãÞò If…Then…Else ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ìéáò ïìÜäáò åíôïëþí, áí ç ôéìÞ ìéáò ëïãéêÞò ðáñÜóôáóçò åßíáé áëçèÞò (éêáíïðïéåßôáé êÜðïéá óõíèÞêç) êáé ãéá ôçí åêôÝëåóç ìéáò Üëëçò ïìÜäáò åíôïëþí, áí ç ôéìÞ ìéáò ëïãéêÞò ðáñÜóôáóçò åßíáé øåõäÞò (äåí éêáíïðïéåßôáé ç óõíèÞêç). Ç ãåíéêÞ ìïñöÞ ôçò äïìÞò åßíáé:

If óõíèÞêç Then åíôïëÞ á1 åíôïëÞ á2 :

Else

åíôïëÞ ø1 åíôïëÞ ø2 :

ïìÜäá åíôïëþí ãéá óõíèÞêç áëçèÞ

Óå ìéá åöáñìïãÞ èÝëïõìå, üôáí ôï áðüèåìá åíüò õëéêïý óå ìéá áðïèÞêç ãßíåé ìéêñüôåñï Þ ßóï ôùí 10 ôåìá÷ßùí, íá ôïíßæåôáé ìå êüêêéíï ÷ñþìá ìéá åôéêÝôá óôï ðáñÜèõñï áíáöïñÜò ôùí áðïèåìÜôùí êáé íá áëëÜæåé ôï ìÞíõìÜ ôçò óå "ÊÜôù áðü ôï üñéï áóöáëåßáò". ¼ôáí ðÜëé ôï áðüèåìá îåðåñÜóåé ôá 10 ôåìÜ÷éá, èÝëïõìå ç åôéêÝôá íá åðáíÝñ÷åôáé óå êáíïíéêü ôñüðï åìöÜíéóçò êáé íá ðáñïõóéÜæåé ôï ìÞíõìá "ÅðÜñêåéá".

If Stock <= 10 Then StockIndicator.Caption = StockIndicator.BackColor StockIndicator.ForeColor Else StockIndicator.Caption = StockIndicator.BackColor StockIndicator.ForeColor End If

"ÊÜôù áðü ôï üñéï áóöáëåßáò" = vbRed = vbWhite "ÅðÜñêåéá" = vbWhite = vbBlack

Áí ç êáôÜóôáóç ðïõ åíôéìåôùðßæïõìå åßíáé ðéï áðëÞ êáé ìáò áñêåß ç åêôÝëåóç ìéáò ïìÜäáò If…Then åíôïëþí, óôçí ðåñßðôùóç ðïõ éêáíïðïéåßôáé ç óõíèÞêç êáé äå èÝëïõìå íá ãßíåé êÜðïéá Ìéá ðéï áðëÞ ìïñöÞ ôçò äïìÞò åðéëïãÞò ëåéôïõñãßá óôçí ðåñßðôùóç ðïõ äåí éêáíïðïéåßôáé, ÷ñçóéìïðïéïýìå ìéá ðéï áðëÞ ìïñöÞ ôçí:

If óõíèÞêç Then åíôïëÞ 1 åíôïëÞ 2 :

ïìÜäá åíôïëþí ãéá óõíèÞêç áëçèÞ

End If

Ç ëåéôïõñãßá ôçò äïìÞò ãßíåôáé ùò åîÞò: ïìÜäá åíôïëþí ãéá óõíèÞêç øåõäÞ

1. ÅëÝã÷åôáé ç óõíèÞêç. 2. Áí ç óõíèÞêç åßíáé áëçèÞò åêôåëåßôáé ç ïìÜäá åíôïëþí ìåôáîý If…Then êáé End If.

End If

üðïõ óõíèÞêç, ìéá ëïãéêÞ Þ áñéèìçôéêÞ ðáñÜóôáóç. 114

ÄéáöïñåôéêÜ, áí ç óõíèÞêç åßíáé øåõäÞò, áãíïåßôáé ç ïìÜäá åíôïëþí. 3. Ç åêôÝëåóç óõíå÷ßæåôáé ìå ôçí ìåôÜ ôçí End If åíôïëÞ. 115


ÐáñÜäåéãìá 8-14. ÓõíèÞêç ?

Ïé åíôïëÝò:

ØåõäÞò

ï

If Temperature Then Message = "Èåñìïêñáóßá äéÜöïñç ôùí Ï " If Á- Then Message="Ïé áñéèìïß åßíáé Üíéóïé" If CMonth Or CMonth>12 Then Message = "ÌÞíáò åêôüò ïñßùí"

ÁëçèÞò åíôïëÞ 1 åíôïëÞ 2

åßíáé éóïäýíáìåò ìå ôéò: ï

If Temperature <> 0 Then Message = "Èåñìïêñáóßá äéÜöïñç ôùí Ï " If Á <>  Then Message = "Ïé áñéèìïß åßíáé Üíéóïé" If (CMonth<=0) Or (CMonth>12) Then Message = "ÌÞíáò åêôüò ïñßùí"

:

ÐïëëáðëÝò åðéëïãÝò. Ç äïìÞ If...Then...ElseIf

Ó÷Þìá 8-2. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò If…Then

ÕðÜñ÷ïõí ðåñéðôþóåéò óôéò ïðïßåò ðñÝðåé íá åëåã÷èïýí ðåñéóóüôåñåò áðü ìéá óõíèÞêåò óôç óåéñÜ êáé ï Ýëåã÷ïò íá óôáìáôÞóåé óôçí ðñþôç ðïõ éêáíïðïéåßôáé ãéá íá åêôåëåóôïýí ïé åíôïëÝò ôçò áíôßóôïé÷çò ïìÜäáò. Ãéá íá ãßíåé áõôü ìðïñïýí íá ÷ñçóéìïðïéçèïýí äéáäï÷éêÝò äïìÝò ôçò ìïñöÞò If…Then…Else, Þ íá ÷ñçóéìïðïéçèåß ìéá ðéï óýíèåôç ìïñöÞ ôçò, ç äïìÞ

ÐáñÜäåéãìá 8-11. ¸óôù, üôé óôç ìåôáâëçôÞ Max èÝëïõìå íá âñßóêåôáé ï ìåãáëýôåñ��ò äýï áñéèìþí êáé óôç ìåôáâëçôÞ Min, ï ìéêñüôåñïò ôïõò. ÌåôÜ ôçí åêôÝëåóç ôùí åíôïëþí:

If…Then…ElseIf ìå ãåíéêÞ ìïñöÞ:

If Min > Max Then Temporary = Max Max = Min Min = Temporaty

If óõíèÞêç1 Then åíôïëÞ 1_1 ïìÜäá åíôïëþí ãéá åíôïëÞ 1_2 óõíèÞêç1 áëçèÞ : ElseIf óõíèÞêç2 Then

End If èá éêáíïðïéåßôáé ïðùóäÞðïôå ç áñ÷éêÞ áðáßôçóç. ÐñÜãìáôé, áí óôç ìåôáâëçôÞ Min êáôá÷ùñéóôåß áñéèìüò ìåãáëýôåñïò áðü áõôüí ôçò ìåôáâëçôÞò Max, èá åêôåëåóôïýí ïé åíôïëÝò óôï åóùôåñéêü ôçò äïìÞò, ïé ïðïßåò èá áíôéìåôáèÝóïõí ôï ðåñéå÷üìåíï ôùí ìåôáâëçôþí. Áí óôç ìåôáâëçôÞ Min êáôá÷ùñéóôåß áñéèìüò ìéêñüôåñïò Þ ßóïò áðü áõôüí ôçò ìåôáâëçôÞ Max äå èá åêôåëåóôåß êáìéÜ åíôïëÞ áðü ôï åóùôåñéêü ôçò äïìÞò êáé ïé ìåôáâëçôÝò ìåôÜ áðü ôçí End If èá äéáôçñÞóïõí ôéò åðéèõìçôÝò ôéìÝò. Áí ìåôÜ ôéò êùäéêÝò ëÝîåéò Then êáé Else Ý÷ïõìå íá ãñÜøïõìå áðü ìéá ìüíï åíôïëÞ ìðïñïýìå íá óõìðôýîïõìå ôïí ôñüðï ãñáöÞò ôçò åíôïëÞò óå ìéá ãñáììÞ.

Else

Äõíáôüôçôåò ãñáöÞò óå ìéá ìüíï ãñáììÞ

åíôïëÞ 2_1 åíôïëÞ 2_2 :

ïìÜäá åíôïëþí ãéá óõíèÞêç2 áëçèÞ

åíôïëÞ í_1 åíôïëÞ í_2 :

ïìÜäá åíôïëþí ãéá üëåò ôéò óõíèÞêåò øåõäåßò

End If Óôçí áñ÷Þ åëÝã÷åôáé ç óõíèÞêç1. Áí åßíáé áëçèÞò åêôåëåßôáé ç ðñþôç ïìÜäá åíôïëþí, üðùò áêñéâþò ãßíåôáé êáé ìå ôçí áðëÞ If…Then…Else. Áí ç óõíèÞêç1 åßíáé øåõäÞò åëÝã÷åôáé ç

ÐáñÜäåéãìá 8-12.

åðüìåíç óõíèÞêç, äçëáäÞ ç óõíèÞêç2. Áí ç óõíèÞêç2 åßíáé áëçèÞò, åêôåëåßôáé ç äåýôåñç ïìÜäá åíôïëþí, åíþ áí åßíáé øåõäÞò åëÝã÷åôáé ç åðüìåíç óõíèÞêç ê.ï.ê. Ýùò üôïõ åîáíôëçèïýí üëåò ïé óõíèÞêåò, ïðüôå åêôåëïýíôáé ïé åíôïëÝò ôçò ïìÜäáò Else (áí õðÜñ÷ïõí).

¸óôù, üôé óôéò ìåôáâëçôÝò A êáé B Ý÷ïõí êáôá÷ùñéóôåß äýï áñéèìïß. Ç åíôïëÞ:

If A > B Then Max = A Else Max = B êáôá÷ùñßæåé ôïí ìåãáëýôåñï áðü ôïõò äýï áñéèìïýò óôç ìåôáâëçôÞ MAX. ÐñÜãìáôé, áí A >

ÌåôÜ ôçí åêôÝëåóç ìéáò ïìÜäáò åíôïëþí, üëåò ïé Üëëåò ïìÜäåò ðïõ áêïëïõèïýí áãíïýíôáé.

B åêôåëåßôáé ç åíôïëÞ ìåôáîý ôùí Then êáé Else, åíþ áí A £ B, åêôåëåßôáé ç åíôïëÞ ðïõ õðÜñ÷åé ìåôÜ ôçí êùäéêÞ ëÝîç Else.

ÁëçèÞò

ÐáñÜäåéãìá 8-13. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß õðïëïãßæåé ôçí áðüëõôç ôéìÞ åíüò áñéèìïý.

åíôïëÞ 1_1 åíôïëÞ 1_2 :

AbsoluteValue = Number If < 0 Then AbsoluteValue = -Number Óôçí ðñþôç åíôïëÞ ôï ðñüãñáììá "èåùñåß" üôé ç áðüëõôç ôéìÞ ôïõ áñéèìïý Number åßíáé ï ßäéïò ï áñéèìüò. Áõôü âÝâáéá, êáëýðôåé ìüíïí ôéò ðåñéðôþóåéò ðïõ ï áñéèìüò åßíáé èåôéêüò Þ ìçäÝí, ãé' áõôü êáé óôç óõíÝ÷åéá åëÝã÷åôáé êáôÜ ðüóïí ç áñ÷éêÞ "õðüèåóç" åßíáé óùóôÞ. Áí ï áñéèìüò Number âñåèåß áñíçôéêüò, ôï ðñüãñáììá êÜíåé äéüñèùóç, êáôá÷ùñßæïíôáò óôçí áðüëõôç ôéìÞ AbsoluteValue ôïí áíôßèåôï ôïõ áñéèìïý. Ôåëåéþíïíôáò, õðåíèõìßæïõìå üôé óáí óõíèÞêç ìðïñåß íá ÷ñçóéìïðïéçèåß êáé áñéèìçôéêÞ ðáñÜóôáóç. ÁñéèìçôéêÞ ðáñÜóôáóç ìå ôéìÞ ìçäÝí éóïäõíáìåß ìå øåõäÞ ëïãéêÞ ðáñÜóôáóç êáé áñéèìçôéêÞ ðáñÜóôáóç ìå ôéìÞ äéÜöïñç ôïõ ìçäåíüò éóïäõíáìåß ìå áëçèÞ ëïãéêÞ ðáñÜóôáóç. 116

ÓõíèÞêç1 ?

Ôï áíôßóôñïöï éó÷ýåé êÜðùò äéáöïñåôéêÜ. ËïãéêÞ ðáñÜóôáóç øåõäÞò éóïäõíáìåß ìå áñéèìçôéêÞ ðáñÜóôáóç ìå ôéìÞ 0 êáé ëïãéêÞ ðáñÜóôáóç áëçèÞò éóïäõíáìåß ìå áñéèìçôéêÞ ðáñÜóôáóç ìå ôéìÞ -1.

ØåõäÞò

ÓõíèÞêç2? åíôïëÞ 2_1 åíôïëÞ 2_2 :

ÁëçèÞò

åíôïëÞ 3_1 åíôïëÞ 3_2 :

ØåõäÞò

ÓõíèÞêç N ?

ØåõäÞò

åíôïëÞ í_1 åíôïëÞ í_2 :

Ó÷Þìá 8-3. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò If…Then…ElseIf 117


ÐáñÜäåéãìá 8-15. ¸óôù üôé óôéò ìåôáâëçôÝò a, b, c Ý÷ïõí êáôá÷ùñéóôåß ôá ìÞêç ôùí ðëåõñþí åíüò ôñéãþíïõ. Ç äïìÞ:

ÔéìÞ1_1, ÔéìÞ1_2 ÐáñÜóôáóç

If (a=b) And (b=c) Then TriangleType = "Éóüðëåõñï" ElseIf (a=b) Or (b=c) Or (c=a) Then TriangleType = "ÉóïóêåëÝò" Else TriangleType = "Óêáëéíü" End If

ÔéìÞ2_1 åíôïëÞ 1_1 åíôïëÞ 1_2

:

Áëëéþò

ÔéìÞ 2_2

åíôïëÞ 2_1 åíôïëÞ 2_2

:

...

åíôïëÞ í_1 åíôïëÞ í_2

:

êáôá÷ùñßæåé óôç ìåôáâëçôÞ TriangleType ôï åßäïò ôïõ ôñéãþíïõ. ÐáñÜäåéãìá 8-16.

Ó÷Þìá 8-4. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò Select Case

Ï êþäéêáò:

If Voltage < 110 Then Message = "Ðïëý ×áìçëÞ ÔÜóç" ElseIf Voltage < 3000 Then Message = "×áìçëÞ ÔÜóç" ElseIf Voltage < 60000 Then Message = "ÌÝóç ÔÜóç" Else Message = "ÕøçëÞ ÔÜóç" End If êáôá÷ùñßæåé óôç ìåôáâëçôÞ Message ôï ëåêôéêü ðïõ áíôéóôïé÷åß óôçí ôéìÞ ôçò ôÜóçò.

Ç äïìÞ ðïëëáðëÞò åðéëïãÞò Select Case ÐïëëÝò öïñÝò èÝëïõìå íá óõãêñßíïõìå ôçí ôéìÞ ìéáò áñéèìçôéêÞò Þ áëöáñéèìçôéêÞò ðáñÜóôáóçò ìå ðïëëÝò äéáöïñåôéêÝò ôéìÝò êáé áíÜëïãá ìå ôçí ôéìÞ ìå ôçí ïðïßá åßíáé ßóç íá åêôåëÝóïõìå êáé ìéá áíôßóôïé÷ç ïìÜäá åíôïëþí. Ç ëåéôïõñãßá áõôÞ ìðïñåß íá êùäéêïðïéçèåß üðùò åßäáìå ìå äïìÞ If … Then … ElseIf. ¼ìùò ç VB äéáèÝôåé Üëëç ìéá äïìÞ ðïëëáðëÞò åðéëïãÞò, ôç äïìÞ Select Case, ìå ôç âïÞèåéá ôçò ïðïßáò ïé êùäéêïðïéÞóåéò, óôçí åéäéêÞ áõôÞ ðåñßðôùóç, ãßíïíôáé ðéï åõáíÜãíùóôåò. Ç ãåíéêÞ ìïñöÞ ôçò äïìÞò åßíáé:

Select Case ðáñÜóôáóç Case ôéìÞ1_1, ôéìÞ1_2, ... åíôïëÞ 1_1 1ç ïìÜäá åíôïëþí åíôïëÞ 1_2 : Case ôéìÞ2_1, ôéìÞ2_2,... åíôïëÞ 2_1 åíôïëÞ 2_2 :

2ç ïìÜäá åíôïëþí

á) Ï êþäéêáò:

Select Case Operator Case "+" Result = A + B Case "-" Result = A - B Case "*" Result = A * B Case "/" Result = A / B End Select äñá üðùò áêñéâþò êáé ìéá áñéèìïìç÷áíÞ. ÁíÜëïãá ìå ôï óýìâïëï ðïõ Ý÷åé ãéá ôéìÞ ç ìåôáâëçôÞ Operator åêôåëåß êáé ôçí áíôßóôïé÷ç ðñÜîç ìåôáîý ôùí Á êáé Â.

â) Áí CurrentDay ðëáßóéï êåéìÝíïõ óôï ïðïßï ãñÜöïõìå çìåñïìçíßåò êáé DayType åôéêÝôá óôçí ïðïßá èÝëïõìå íá åìöáíßæåôáé êáôÜëëçëï ëåêôéêü áíÜëïãá ìå ôçí çìÝñá ôçò åâäïìÜäáò ðïõ ðÝöôåé ç çìåñïìçíßá, ï êþäéêáò:

Select Case Weekday(DateValue(CurrentDay)) Case 1, 7 DayType.Caption = "Ìç åñãÜóéìç çìÝñá" Case 2, 3, 4, 5, 6 DayType.Caption = "ÅñãÜóéìç çìÝñá" End Select Åìöáíßæåé ôï ëåêôéêü "Ìç åñãÜóéìç çìÝñá" ãéá ôçí ÊõñéáêÞ êáé ôç ÄåõôÝñá êáé ôï ëåêôéêü "ÅñãÜóéìç çìÝñá" ãéá ôéò õðüëïéðåò ìÝñåò ôçò åâäïìÜäáò.

Case Else

åíôïëÞ í_1 åíôïëÞ í_2 :

Ðáñáäåßãìáôá 8-17.

Í-éïóôÞ ïìÜäá åíôïëþí

Óôç äïìÞ Select Case ÷ñçóéìïðïéåßôáé ìüíï ìéá ðáñÜóôáóç ôçò ïðïßáò ç ôéìÞ õðïëïãßæåôáé óôçí êïñõöÞ ôçò äïìÞò. Áíôßèåôá, óôç äïìÞ If...Then...ElseIf õðÜñ÷åé ç äõíáôüôçôá ÷ñÞóçò ðåñéóóïôÝñùí áðü ìéá äéáöïñåôéêþí ðáñáóôÜóåùí, ìéáò óôï If êáé ìéáò óå êÜèå

End Select

Óôçí áñ÷Þ õðïëïãßæåôáé ç ôéìÞ ôçò ðáñÜóôáóçò êáé óôç óõíÝ÷åéá óõãêñßíåôáé ìå êÜèå ôéìÞ ôçò ëßóôáò ôéìþí ðïõ áêïëïõèåß ôçí ðñþôç Case. Áí ç ôéìÞ ôçò ðáñÜóôáóçò âñåèåß ßóç ìå ìéá áðü áõôÝò ôéò ôéìÝò åêôåëåßôáé ç ðñþôç ïìÜäá åíôïëþí êáé ïé õðüëïéðåò ïìÜäåò áãíïïýíôáé. Áí ç ôéìÞ ôçò ðáñÜóôáóçò äå âñåèåß ßóç ìå êÜðïéá áðü áõôÝò ôéò ôéìÝò áãíïåßôáé ç ðñþôç ïìÜäá åíôïëþí êáé ãßíåôáé Ýëåã÷ïò ìå ôéò ôéìÝò ôçò äåýôåñçò Case ê.ï.ê. Áí êáìéÜ áðü ôéò ôéìÝò ôùí

Case äåí åßíáé ßóç ìå ôçí ôéìÞ ôçò ðáñÜóôáóçò åêôåëïýíôáé ïé åíôïëÝò ôçò ïìÜäáò Case Else. Ç ýðáñîç ôçò Case Else ìÝóá óôç äïìÞ äåí åßíáé õðï÷ñåùôéêÞ. 118

ElseIf. ÁíôéêáôÜóôáóç ôçò äïìÞò If...Then...ElseIf ìå äïìÞ Select Case ìðïñåß íá ãßíåé ìüíïí áí ÷ñçóéìïðïéåßôáé ç ßäéá ðáñÜóôáóç ìåôÜ ôï If êáé ìåôÜ áðü êÜèå ElseIf. Äßðëá áðü ôçí êùäéêÞ ëÝîç Case, åêôüò áðü ôéìÝò ðïõ ÷ùñßæïíôáé ìå êüììáôá, åßíáé äõíáôüí íá áíáãñÜöïíôáé êáé ðåñéï÷Ýò ôéìþí. Áí ç ðåñéï÷Þ Ý÷åé Üíù êáé êÜôù üñéï, ìåôáîý ôùí ïñßùí ãñÜöåôáé ç êùäéêÞ ëÝîç To. Áí üìùò ç ðåñéï÷Þ Ý÷åé ìüíï êÜôù Þ ìüíï Üíù üñéï ãñÜöåôáé ç êùäéêÞ ëÝîç Is, ôï óýìâïëï óýãêñéóçò >, <, >=, <= êáé ôï üñéï. Äßðëá áðü ôçí êùäéêÞ ëÝîç Case ìðïñåß íá ãñáöåß êáé óýíèåôç ëïãéêÞ ðáñÜóôáóç, óôçí ïðïßá õðÜñ÷åé Ýíáò áðü ôïõò ëïãéêïýò óõíäÝóìïõò Or, And. 119


ÐáñÜäåéãìá 8-18.

Select Case InValue Case Is < 0 Message = "ÁñíçôéêÞ ôéìÞ" Case 1 To 10 Message = "Ìåôáîý 1 êáé 10" Case 11, 12, 17 Ôï 25 Message = "11, 12 Þ ìåôáîý 17 êáé 25" Case Is >= 50 And InValue <= 100 Message = "Ìåôáîý 50 êáé 100" Case 101, 102, Is > 110 Message = "101, 102 Þ ìåãáëýôåñï ôïõ 110" End Select Ðáñáôçñïýìå üôé ç êùäéêÞ ëÝîç Is ÷ñçóéìïðïéåßôáé ùò õðïêáôÜóôáôï ôçò ìåôáâëçôÞò ìüíï ôçí ðñþôç öïñÜ. Áò óçìåéùèåß üôé óôçí ôÝôáñôç ðåñßðôùóç ðïõ ÷ñçóéìïðïéÞèçêå ï ëïãéêüò óýíäåóìïò And ðñÝðåé íá åðáíáëçöèåß ôï üíïìá ôçò ìåôáâëçôÞò. Áõôü éó÷ýåé êáé óôçí ðåñßðôùóç ðïõ ÷ñçóéìïðïéåßôáé ëïãéêüò óýíäåóìïò Or.

¸íèåóç ðñïãñáììáôéóôéêþí äïìþí Óôï åóùôåñéêü ìéáò ðñïãñáììáôéóôéêÞò äïìÞò ìðïñïýìå íá ãñÜøïõìå ïðïéåóäÞðïôå åíôïëÝò Þ ðñïãñáììáôéóôéêÝò äïìÝò ôçò VB. ¸ôóé äçìéïõñãïýíôáé Ýíèåôåò äïìÝò (nested structures).

Áíáêåöáëáßùóç Ïé ëïãéêÝò ðáñáóôÜóåéò óõíôßèåíôáé áðü óôáèåñÝò, ìåôáâëçôÝò, ðáñáóôÜóåéò, óýìâïëá óýãêñéóçò (=, >, <, <>, >= ê.Ü.) êáé ëïãéêïýò óõíäÝóìïõò ÊÁÉ (And), ¹ (Or), Ï×É (Not). Ç äïìÞ If…Then…Else ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ìéáò ïìÜäáò åíôïëþí áí éêáíïðïéåßôáé êÜðïéá óõíèÞêç êáé ôçí åêôÝëåóç ìéáò Üëëçò ïìÜäáò åíôïëþí áí äåí éêáíïðïéåßôáé ç óõíèÞêç. ¼ôáí ðñÝðåé íá åëåã÷èïýí ðåñéóóüôåñåò áðü ìéá óõíèÞêåò óôç óåéñÜ êáé ï Ýëåã÷ïò íá óôáìáôÞóåé óôçí ðñþôç ðïõ éêáíïðïéåßôáé ãéá íá åêôåëåóôïýí ïé åíôïëÝò ôçò áíôßóôïé÷çò ïìÜäáò, ÷ñçóéìïðïéåßôáé ç äïìÞ If…Then…ElseIf. ¼ôáí èÝëïõìå íá óõãêñßíïõìå ôçí ôéìÞ ìéáò áñéèìçôéêÞò Þ áëöáñéèìçôéêÞò ðáñÜóôáóçò ìå ðïëëÝò äéáöïñåôéêÝò ôéìÝò êáé áíÜëïãá ìå ôçí ôéìÞ ìå ôçí ïðïßá åßíáé ßóç íá åêôåëÝóïõìå êáé ìéá áíôßóôïé÷ç ïìÜäá åíôïëþí, ÷ñçóéìïðïéïýìå ôç äïìÞ Select Case.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. Óå Ýíá ðáé÷íßäé, ï Ýíáò ðáßêôçò óêÝöôåôáé Ýíáí áñéèìü. Ï Üëëïò ðáßêôçò ðñïóðáèåß íá ôïí ìáíôÝøåé ìå ìüíç âïÞèåéá áðáíôÞóåéò ôçò ìïñöÞò "Ìåãáëýôåñïò" Þ "Ìéêñüôåñïò" ôïõ ðñþôïõ ðáßêôç. ÃñÜøôå ðñüãñáììá, ôï ïðïßï íá äÝ÷åôáé áðü ôïí ðñþôï ðáßêôç ôïí áñéèìü, íá ôïí åîáöáíßæåé áðü ôçí ïèüíç êáé íá äßíåé ôéò áðáíôÞóåéò óôï äåýôåñï ðáßêôç. Ôï ðñüãñáììá íá ìåôñÜ ôéò ðñïóðÜèåéåò ðïõ Ýãéíáí ìÝ÷ñé ï äåýôåñïò ðáßêôçò íá ðåôý÷åé ôïí áñéèìü. 2. ÄçìéïõñãÞóôå öüñìá ðïõ íá ðåñéÝ÷åé ðåäßï êåéìÝíïõ óôï ïðïßï ï ÷ñÞóôçò íá ðëçêôñïëïãåß Ýíá óõíèçìáôéêü (password). Ìå êþäéêá íá åëÝã÷åôáé êáôÜ ðüóï ôï óõíèçìáôéêü åßíáé áðïäåêôü Þ ü÷é êáé íá ðáñïõóéÜæåôáé êáôÜëëçëï ìÞíõìá. ÌåôÜ áðü 3 áðïôõ÷çìÝíåò ðëçêôñïëïãÞóåéò ôï ðåäßï íá êëåéäþíåôáé êáé ï ÷ñÞóôçò íá ìçí Ý÷åé ôç äõíáôüôçôá Üëëçò ðñïóðÜèåéáò. Õðüäåéîç: Ãéá íá ìç öáßíåôáé ôï óõíèçìáôéêü íá ãñÜöïíôáé Üóðñá ãñÜììáôá óå Üóðñï öüíôï.

ÐáñÜäåéãìá 8-19. Ôï ôìÞìá êþäéêá:

If Á >  Then ToPrint = "A>B" Else If Á <  Then ToPrint = "A<B" Else ToPrint = "A=B" End if End If áðïèçêåýåé óôç ìåôáâëçôÞ ToPrint ôï ëåêôéêü áðïô��ëåóìá ôçò óýãêñéóçò ìåôáîý Á êáé Â. ÐáñÜäåéãìá 8-20. Ôï ôìÞìá êþäéêá:

Select Case CMonth Case 1, 3, 5, 7, 8, 10, 12 LastDay = 31 Case 4, 6, 9, 11 LastDay = 30 Case 2 If CYear mod 4 <> 0 Then LastDay = 28 Else LastDay = 29 End If End Select õðïëïãßæåé ôçí ôåëåõôáßá ìÝñá ôïõ ìÞíá CMonth, ôç ÷ñïíéÜ Cyear, áí CYear åßíáé ìåôáîý 1901 êáé 2099. 120

3. ÃñÜøôå ðñüãñáììá ðïõ íá ôïðïèåôåß ôñåéò áñéèìïýò, äéÜöïñïõò áíÜ äýï, óå áýîïõóá óåéñÜ. Õðüäåéîç: Óå öüñìá íá ôïðïèåôÞóåôå ôñßá ðåäßá êåéìÝíïõ. Ôï ðñþôï ðåäßï íá åßíáé ðåäßï ãéá ôïí áñéèìü X, ôï äåýôåñï ãéá ôïí áñéèìü Y êáé ôï ôñßôï ãéá ôïí áñéèìü Z. Ï ÷ñÞóôçò áöïý ðëçêôñïëïãÞóåé ôéìÝò ìÝóá óôá ðåäßá íá ðáôÜ êáôÜëëçëï ðëÞêôñï êáé óå ôÝôáñôï ðåäßï íá ðáñïõóéÜæoíôáé ïé áñéèìïß ôáîéíïìçìÝíïé. Ìåôáîý ôùí áñéèìþí íá ôïðïèåôïýíôáé êüììáôá. 4. ÄçìéïõñãÞóôå öüñìá óôçí ïðïßá üôáí ãñÜöåôáé Ýíáò áñéèìüò, áðü 1 Ýùò 7 óå Ýíá ðåäßï êåéìÝíïõ, íá åìöáíßæåé óå Ýíá Üëëï ðåäßï êåéìÝíïõ ôï üíïìá ôçò çìÝñáò ôçò åâäïìÜäïò, ðïõ áíôéóôïé÷åß óå áõôüí ôï áñéèìü. Íá èåùñçèåß üôé ç ðñþôç ìÝñá ôçò åâäïìÜäáò åßíáé ç ÊõñéáêÞ. 5. ÃñÜøôå ðñüãñáììá ðïõ üôáí ôïõ äßíïõìå ìéá çìåñïìçíßá ìåôáîý 1/3/1900 êáé 27/02/2100, íá õðïëïãßæåé ôçí åðüìåíç ôçò ìÝñá, ÷ùñßò íá êÜíåé ÷ñÞóç ôùí óõíáñôÞóåùí çìåñïìçíßáò. Õðüäåéîç: Óå öüñìá íá ôïðïèåôÞóåôå ôñßá ðåäßá êåéìÝíïõ. Ôï ðñþôï ðåäßï íá åßíáé ðåäßï ãéá ôï Ýôïò óå ìïñöÞ åååå, ôï äåýôåñï ãéá ôï ìÞíá êáé ôï ôñßôï ãéá ôç ìÝñá. Ï ÷ñÞóôçò, áöïý ðëçêôñïëïãÞóåé ôéìÝò ìÝóá óôá ðåäßá, íá ðáôÜ êáôÜëëçëï ðëÞêôñï êáé óå ôÝôáñôï ðåäßï íá ðáñïõóéÜæåôáé ç åðüìåíç çìåñïìçíßá óå ìïñöÞ çç/ìì/åååå. Áí ïé ôéìÝò ðïõ Ý÷åé ðëçêôñïëïãÞóåé ï ÷ñÞóôçò äåí åßíáé áðïäåêôÝò óôï ôÝôáñôï ðåäßï, íá åìöáíßæåôáé êáôÜëëçëï ìÞíõìá (ð.÷. ìç áðïäåêôÞ çìÝñá, ìç áðïäåêôüò ìÞíáò ê.Ü. ). 6. ÃñÜøôå ðñüãñáììá ðïõ üôáí ôïõ äßíåôå ìéá çìåñïìçíßá íá åìöáíßæåé óå ðïéá çìÝñá ôçò åâäïìÜäïò "ðÝöôåé", ð.÷. ÄåõôÝñá, Ôñßôç êëð. 7. 7. Âåëôéþóôå ôï ðñüãñáììá ôçò åöáñìïãÞò ìå ôï çìåñïëüãéï-÷ñïíüìåôñï ôïõ ìáèÞìáôïò 7, þóôå åêôüò áðü ôçí çìåñïìçíßá íá åìöáíßæåé üëïãñÜöùò êáé ôçí çìÝñá ôçò åâäïìÜäáò êáé ôï ìÞíá. 121


8. Ç êëßìáêá Beaufort ÷ñçóéìïðïéåßôáé ãéá ôçí åêôßìçóç ôçò Ýíôáóçò ôïõ áíÝìïõ. Ç êëßìáêá áõôÞ Ý÷åé 18 âáèìßäåò áðü ôéò ïðïßåò ÷ñçóéìïðïéïýíôáé ìüíï ïé 13 ðñþôåò ðïõ åßíáé: Âáèìïß 0 1 2 3 4 5 6 7 8 9 10 11 12

Ïíïìáóßá Íçíåìßá ÕðïðíÝùí ÁóèåíÞò Ëåðôüò ÌÝôñéïò Ëáìðñüò Éó÷õñüò Óöïäñüò Ïñìçôéêüò Èýåëëá Éó÷õñÜ èýåëëá ÓöïäñÜ èýåëëá Ôõöþí

Ìßëéá/þñá 1 1-3 4-7 8-12 13-18 19-24 25-31 32-38 39-46 47-54 55-63 64-73 74-82

ÃñÜøôå ðñüãñáììá ðïõ íá äÝ÷åôáé ôçí ôá÷ýôçôá ôïõ áíÝìïõ óå ìßëéá/þñá êáé íá ôõðþíåé ôçí ïíïìáóßá êáé ôçí ÝíôáóÞ ôïõ óå êëßìáêá Beaufort.

Óçìåéþóåéò:

ÌÜèçìá 9

ÄïìÝò ÅðáíÜëçøçò Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí:

Íá åðåîçãïýí ôç ÷ñçóéìüôçôá ôùí äïìþí åðáíÜëçøçò. Íá ðåñéãñÜöïõí ôéò äéáöïñÝò ìåôáîý ôçò äïìÞò Do…Loop êáé ôçò äïìÞò For… Next. Íá ÷ñçóéìïðïéïýí êáôÜ ðåñßðôùóç ôçí êáôÜëëçëç äïìÞ åðáíÜëçøçò. Íá äçìéïõñãïýí ðñïãñÜììáôá ìå Ýíèåôåò ðñïãñáììáôéóôéêÝò äïìÝò. ¸íá áðü ôá ÷áñáêôçñéóôéêÜ ôùí õðïëïãéóôéêþí óõóôçìÜôùí åßíáé üôé ìðïñïýí íá åêôåëïýí ðïëëÝò öïñÝò Ýíá óýíïëï áðü ðñÜîåéò êáé ëåéôïõñãßåò, ïé ïðïßåò ôïõò ðåñéãñÜöïíôáé ìüíï ìéá öïñÜ. Ç ðåñéãñáöÞ ìéáò åðáíáëçðôéêÞò åêôÝëåóçò ãßíåôáé ìå ôçí Ýíèåóç ïìÜäùí åíôïëþí ìÝóá óôéò êáôÜëëçëåò ðñïãñáììáôéóôéêÝò äïìÝò åðáíÜëçøçò. Ïé ðñïãñáììáôéóôéêÝò äïìÝò åðáíÜëçøçò åßíáé äïìÝò ïé ïðïßåò ìáò âïçèïýí íá äçìéïõñãÞóïõìå âñü÷ïõò (loops), äçëáäÞ ôìÞìáôá ðñïãñÜììáôïò ôùí ïðïßùí ïé åíôïëÝò åêôåëïýíôáé îáíÜ êáé îáíÜ ãéá Ýíáí ðñïêáèïñéóìÝíï áñéèìü åðáíáëÞøåùí, Þ åíüóù éêáíïðïéåßôáé êÜðïéá óõíèÞêç. Ç VB äéáèÝôåé äýï âáóéêÝò äïìÝò åðáíÜëçøçò, ôç äïìÞ Do…Loop êáé ôç äïìÞ For…Next. Ôüóï ç ìéá äïìÞ

Âñü÷ïò=ÈçëéÜ

üóï êáé ç Üëëç åßíáé áñêåôÜ åõÝëéêôåò óôç óýíôáîç ôïõò êáé ìðïñïýí íá êáëýøïõí êÜèå áíÜãêç êùäéêïðïßçóçò ðïõ åßíáé äõíáôüí íá ðñïêýøåé.

Ç äïìÞ Do...Loop Óôçí ðñïãñáììáôéóôéêÞ äïìÞ åðáíÜëçøçò Do…Loop ÷ñçóéìïðïéåßôáé ìéá ëïãéêÞ Þ áñéèìçôéêÞ Öáíåñüí üôé êýêëù ôå ðáñÜóôáóç ãéá íá êáèïñéóôåß, áí èá åêôåëåóôïýí îáíÜ ïé åíôïëÝò ðïõ Ý÷ïõí ãñáöåß ìåôáîý ôçò Ýóôáé ç ãÝíåóéò ôïéò ãñáììÞò ðïõ ðåñéÝ÷åé ôçí êùäéêÞ ëÝîç Do êáé ôçò ãñáììÞò ðïõ ðåñéÝ÷åé ôçí êùäéêÞ ëÝîç Loop. áðëïßò óþìáóé. ÕðÜñ÷ïõí ôÝóóåñåéò ðáñáëëáãÝò áõôÞò ôçò äïìÞò. Ç ãåíéêÞ ìïñöÞ ôçò ðñþôçò ðáñáëëáãÞò åßíáé: Do While óõíèÞêç åíôïëÞ 1 ïìÜäá åíôïëþí âñü÷ïõ åíôïëÞ 2 :

Loop

üðïõ óõíèÞêç, ç ëïãéêÞ Þ áñéèìçôéêÞ ðáñÜóôáóç. Óå áõôÞ ôçí ðáñáëëáãÞ ãßíïíôáé áíáêõêëþóåéò ìÝóá óôï âñü÷ï üóï äéÜóôçìá ç óõíèÞêç åßíáé áëçèÞò. ÓõãêåêñéìÝíá, ç äïìÞ ëåéôïõñãåß ùò åîÞò: 1. ÅëÝã÷åôáé ç óõíèÞêç. 2. Áí ç óõíèÞêç åßíáé áëçèÞò, åêôåëåßôáé ç ïìÜäá ôùí åíôïëþí ôïõ âñü÷ïõ. ¼ôáí ôåëåéþóåé ç åêôÝëåóç êáé ôçò ôåëåõôáßáò åíôïëÞò, ãßíåôáé åðéóôñïöÞ óôçí åíôïëÞ Do While, üðïõ åëÝã÷åôáé åê íÝïõ ç óõíèÞêç ê.ï.ê. 3. Áí ç óõíèÞêç åßíáé øåõäÞò ðáñáêÜìðôïíôáé ïé åíôïëÝò ôïõ âñü÷ïõ, êáé ç åêôÝëåóç ôïõ ðñïãñÜììáôïò óõíå÷ßæåôáé ìå ôçí åíôïëÞ ðïõ áêïëïõèåß ôçí Loop. Do While ÓõíèÞêç ?

ØåõäÞò

ÁëçèÞò

åíôïëÞ 1 åíôïëÞ 2 : Loop

Ó÷Þìá 9-1. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò Do While…Loop

122

123

ÁñéóôïôÝëçò


Ðáñáäåßãìáôá 9-1.

Do

Ïé ôüêïé T, ðïõ äßíåé Ýíá êåöÜëáéï Ê ôïêéæüìåíï ãéá Ýíá Ýôïò, ìå åôÞóéï åðéôüêéï Å% åßíáé: Ê x Å% Ô= 100 Óôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß, õðïëïãßæïíôáé ôá ÷ñüíéá Years ðïõ ðñÝðåé íá ðåñÜóïõí ãéá íá ãßíåé ôï êåöÜëáéï NewAmount äéðëÜóéï ôïõ áñ÷éêïý Amount, ãéá óôáèåñü åðéôüêéï NperCent ôï Ýôïò:

åíôïëÞ 1 åíôïëÞ 2

:

Loop ÁëçèÞò

Years = 0 NewAmount = Amount 'Áñ÷éêü íÝï êåöÜëáéï Do While (NewAmount < 2*Amount) Years = Years + 1 'ÁëëáãÞ Ýôïõò Interest = NewAmount * NperCent / 100 'Ôüêïò NewAmount = NewAmount + Interest 'ÍÝï êåöÜëáéï Loop

Ó÷Þìá 9-2. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò Do…Loop While.

Ðáñáäåßãìáôá 9-3.

êáíÝíá Ýôïò (Years=0) êáé ôï íÝï êåöÜëáéï åßíáé ßóï ìå ôï áñ÷éêü (NewAmount=Amount), ïðüôå èá åêôåëåóôïýí ïé åíôïëÝò óôï åóùôåñéêü ôïõ âñü÷ïõ. Ïé åíôïëÝò áõôÝò áõîÜíïõí êáôÜ 1 ôï Ýôïò, õðïëïãßæïõí ôïí ôüêï Interest ãéá ôï ôñÝ÷ïí Ýôïò êáé áõîÜíïõí ôï êåöÜëáéï. Óôçí åðüìåíç áíáêýêëùóç ôï áõîçìÝíï êåöÜëáéï óõãêñßíåôáé ìå ôï áñ÷éêü êáé áõôü åðáíáëáìâÜíåôáé ìÝ÷ñé íá ðáñáâéáóôåß ç óõíèÞêç ôïõ While êáé íá âñåèåß øåõäÞò. Ôüôå ç åêôÝëåóôç ôïõ ðñïãñÜììáôïò óõíå÷ßæåôáé ìå ôéò ìåôÜ ôï Loop åíôïëÝò.

Ðáñáäåßãìáôá 9-2.

Ïé áôÝñìïíåò âñü÷ïé áðïôåëïýí ðáãßäåò. Áí ôï ðñüãñáììá ðÝóåé óå áôÝñìïíá âñü÷ï, ìðïñåß íá äéáêïðåß ìüíï ìå åîùôåñéêÞ åðÝìâáóç.

Ç ðñÜîç ôçò äéáßñåóçò ìå áêåñáßïõò áñéèìïýò ìðïñåß íá ðñïóïìïéùèåß ìå äéáäï÷éêÝò áöáéñÝóåéò. Áí Number åßíáé ï áñéèìüò, ôïí ïðïßï äéáéñïýìå ìå ôïí áñéèìü Divisor,

Quotient ôï ðçëßêï êáé Remainder ôï õðüëïéðï ôçò äéáßñåóçò, ïé åíôïëÝò ðïõ ðñïóïìïéþíïõí ôç äéáßñåóç åßíáé:

Quotient = 0 Do While (Number >= Divisor) Quotient = Quotient + 1 'Ï äéáéñÝôçò ÷ùñÜ áêüìá ìéá öïñÜ óôï äéáéñåôÝï Number = Number - Divisor 'ÅëÜôôùóç ôïõ äéáéñåôÝïõ Loop Remainder = Number 'Ôåëéêü õðüëïéðï ÐñÜãìáôé, áí õðïèÝóïõìå üôé ï äéáéñåôÝïò Number åßíáé ìåãáëýôåñïò Þ ßóïò ôïõ äéáéñÝôç Óôïõò ðñþôïõò

õðïëïãéóôÝò ç ðñÜîç ôçò äéáßñåóçò ãéíüôáí èá åêôåëåóôïýí ïé åíôïëÝò ôïõ âñü÷ïõ. Ïé åíôïëÝò áõôÝò êáôáìåôñïýí ðüóåò öïñÝò ÷ùñÜ ï ìå äéáäï÷éêÝò äéáéñÝôçò óôï äéáéñåôÝï êáé õðïëïãßæïõí ôï íÝï äéáéñåôÝï. ¼ôáí ìåôÜ áðü êÜðïéåò áöáéñÝóåéò.

Divisor, ôçí ðñþôç öïñÜ ðïõ èá åëåã÷èåß ç óõíèÞêç ôçò åíôïëÞò Do èá âñåèåß áëçèÞò êáé

åðáíáëÞøåéò ï íÝïò äéáéñåôÝïò âñåèåß ìéêñüôåñïò ôïõ äéáéñÝôç, ç óõíèÞêç ôïõ While èá

âñåèåß øåõäÞò êáé ç åêôÝëåóôç ôïõ ðñïãñÜììáôïò èá óõíå÷éóôåß ìå ôéò ìåôÜ ôï Loop åíôïëÝò. Áí õðïèÝóïõìå üôé ï äéáéñåôÝïò Number åßíáé ìéêñüôåñïò ôïõ äéáéñÝôç, Divisor, ôçí ðñþôç öïñÜ ðïõ èá åëåã÷èåß ç óõíèÞêç ôçò åíôïëÞò Do èá âñåèåß øåõäÞò êáé äå èá åêôåëåóôåß êáìéÜ áðü ôéò åíôïëÝò ôïõ âñü÷ïõ. Ôï õðüëïéðï èá åßíáé ï äéáéñåôÝïò. Ìéá Üëëç ðáñáëëáãÞ ôçò äïìÞò Do…Loop åêôåëåß ðñþôá ôéò åíôïëÝò ôïõ âñü÷ïõ êáé ìåôÜ ðñáãìáôïðïéåß ôïí Ýëåã÷ï ôçò óõíèÞêçò. Áõôü óõíåðÜãåôáé üôé ïé åíôïëÝò ôïõ âñü÷ïõ èá åêôåëåóôïýí ôïõëÜ÷éóôïí ìéá öïñÜ. Ç ãåíéêÞ ìïñöÞ ôçò äïìÞò åßíáé:

Do

åíôïëÞ 1 åíôïëÞ 2 :

ÓõíèÞêç ? ØåõäÞò

ÐñÜãìáôé, ôçí ðñþôç öïñÜ ðïõ èá åëåã÷èåß ç óõíèÞêç ôçò åíôïëÞò Do, äåí Ý÷åé ðåñÜóåé

Åßíáé ðñïöáíÝò üôé ç ïìÜäá ôùí åíôïëþí ôïõ âñü÷ïõ äåí åêôåëåßôáé êáìßá öïñÜ óôçí ðåñßðôùóç ðïõ ç óõíèÞêç åßíáé åîáñ÷Þò øåõäÞò. Åðßóçò, óôï åóùôåñéêü ôïõ âñü÷ïõ ðñÝðåé íá áëëÜæåé ç ôéìÞ ìéáò ìåôáâëçôÞò ðïõ óõììåôÝ÷åé óôç óõíèÞêç. Óôçí áíôßèåôç ðåñßðôùóç åêôåëïýíôáé óõíå÷þò áíáêõêëþóåéò êáé Ý÷ïõìå áôÝñìïíá âñü÷ï (endless loop).

While

Óå ìéá óêáêéÝñá óôï ðñþôï ôåôñáãùíÜêé âÜæïõìå Ýíáí êüêêï óôÜñé, óôï äåýôåñï äéðëÜóéïõò êüêêïõò áðü üôé óôï ðñþôï, äçëáäÞ 2, óôï ôñßôï äéðëÜóéïõò êüêêïõò áðü üôé óôï äåýôåñï, äçëáäÞ 2x2=4, óôï ôÝôáñôï äéðëÜóéïõò êüêêïõò áðü üôé óôï ôñßôï, äçëáäÞ 2x4=8 êáé óõíå÷ßæïõìå ãéá íá êáëýøïõìå ìå áõôÞ ôçí áíôéóôïß÷éóç êáé ôá 64 ôåôñáãùíÜêéá ôçò óêáêéÝñáò, äéðëáóéÜæïíôáò óå êÜèå íÝï ôåôñáãùíÜêé ôïõò êüêêïõò ôïõ ðñïçãïýìåíïõ. Ôï åñþôçìá åßíáé óå ðéï ôåôñáãùíÜêé "÷ùñÜ" ç åôÞóéá ðáñáãùãÞ óôáñéïý ôçò ÅëëÜäáò!!! ¸íá ôüíïò óôÜñé Ý÷åé ðåñßðïõ 20.000.000 êüêêïõò êáé ç ÅëëÜäá ðáñÜãåé ôï ÷ñüíï ðåñßðïõ 2.100.000 ôüíïõò óôÜñé;

SeedCroop = Tons * SeedsPerTon Square = 1 SeedsOnSquare = 1 Do Square = Square + 1 SeedsOnSquare = 2 * SeedsOnSquare Loop While (SeedsOnSquare >= SeedCroop)

'ÐáñáãùãÞ óå êüêêïõò 'Áñ÷Þ áðü ôï 1ï ôåôñÜãùíï 'Êüêêïé óôï ôåôñÜãùíï 'Áëëáîå ôåôñÜãùíï 'Äéðëáóßáóå êüêêïõò

Áò óçìåéùèåß üôé óå áõôü ôï ðáñÜäåéãìá ðñïôéìÞèçêå ï ôñüðïò êùäéêïðïßçóçò Do…Loop

While Ýíáíôé ôïõ Do While …Loop, áöïý èÝëïõìå íá åêôåëåóôåß ïðùóäÞðïôå ìéá öïñÜ ï âñü÷ïò (ç åôÞóéá ðáñáãùãÞ äåí õðÜñ÷åé ðåñßðôùóç íá åßíáé 1 êüêêïò!). ÐáñÜäåéãìá 9-4. Ôï ôìÞìá ðñïãñÜììáôïò ôï ïðïßï õðïëïãßæåé ôï ðëÞèïò ôùí åìöáíßóåùí ôçò óõìâïëïóåéñÜò Word ìÝóá óôç óõìâïëïóåéñÜ Sentence åßíáé:

Count = 0 'Áñ÷éêÞ ôéìÞ óôïí ìåôñçôÞ Start = 1 'Áñ÷éêÞ èÝóç áíáæÞôçóçò Do Pos = Instr(Start, Sentence, Word) If Pos<>0 Ôhen Count = Count + 1 'Áðáñßèìçóç åìöáíßóåùí Start = Pos + 1 'Áñ÷Þ áíáæÞôçóçò End If Loop While Pos<>0 Áñ÷éêÜ óôï ìåôñçôÞ Count äßíåôáé ç ôéìÞ 0 êáé ç áíáæÞôçóç áñ÷ßæåé áðü ôç èÝóç Start=1. Ëüãù ôçò ìïñöÞò ôïõ âñü÷ïõ ç áíáæÞôçóç ðñáãìáôïðïéåßôáé ôïõëÜ÷éóôïí ìéá öïñÜ. Áí ìåôÜ ôç èÝóç Start, ìÝóá óôç Sentence, âñåèåß ç Word, êáôá÷ùñßæåôáé ç èÝóç ôçò óôçí ôéìÞ ìåôáâëçôÞ Pos, áõîÜíåôáé ï áðáñéèìçôÞò êáôÜ 1 êáé ç íÝá áíáæÞôçóç áñ÷ßæåé ìéá èÝóç

ïìÜäá åíôïëþí âñü÷ïõ

ìåôÜ. Áí üìùò ç áíáæÞôçóç áðïâåß Üêáñðç, ç óõíÜñôçóç Instr áðïäßäåé ôçí ôéìÞ 0 óôç ìåôáâëçôÞ Pos êáé äéáêüðôïíôáé ïé áíáêõêëþóåéò.

Loop While óõíèÞêç 124

125

Ï ìýèïò ëÝåé üôé ôüóï óôÜñé æÞôçóå ï åöåõñÝôçò ôïõ óêáêéïý Sessa áðü ôï âáóéëéÜ ôùí Ðåñóþí, ùò áíôáìïéâÞ ôïõ ãéá ôçí åöåýñåóç ôïõ óêáêéïý.


Ç äïìÞ ëåéôïõñãåß ùò åîÞò:

Ïé Üëëåò äýï ðáñáëëáãÝò ôçò äïìÞò ÷ñçóéìïðïéïýíôáé üôáí èÝëïõìå íá åêôåëïýíôáé ïé åíôïëÝò ôïõ âñü÷ïõ ãéá üóï äéÜóôçìá ç óõíèÞêç åßíáé øåõäÞò. ÅìöáíéóéáêÜ äå äéáöÝñïõí áðü ôéò ðñïçãïýìåíåò ðáñáëëáãÝò ðáñÜ ìüíï óôï üôé áíôß ôçò êùäéêÞò ëÝîçò While

1. Õðïëïãßæïíôáé ïé ôéìÝò ôùí áñ÷Þ, ôÝëïò êáé âÞìá. 2. Ç ôéìÞ ôçò áñ÷Þò äßíåôáé ãéá áñ÷éêÞ ôéìÞ óôïí ìåôñçôÞ. 3. Áí ìåôñçôÞò ôÝëïò åêôåëïýíôáé ïé åíôïëÝò ôïõ âñü÷ïõ, äéáöïñåôéêÜ ôï ðñüãñáììá ðáñáêÜìðôåé ôéò åíôïëÝò ôïõ âñü÷ïõ êáé óõíå÷ßæåé ìå ôç ìåôÜ ôï Next åíôïëÞ. 4. Óôçí åíôïëÞ Next ï ìåôñçôÞò áõîÜíåôáé êáôÜ ôçí ôéìÞ ôïõ âÞìáôïò. 5. ÅðáíáëáìâÜíïíôáé ôá âÞìáôá 3 êáé 4, Ýùò üôïõ íá éêáíïðïéçèåß ç óõíèÞêç ìåôñçôÞò >

÷ñçóéìïðïéåßôáé ç êùäéêÞ ëÝîç Until ðïõ åßíáé "áíôßèåôÞ" ôçò. Ç ãåíéêÞ ôïõò ìïñöÞ åßíáé:

Do Until óõíèÞêç åíôïëÞ 1 åíôïëÞ 2 : Loop

Do åíôïëÞ 1 åíôïëÞ 2 : Loop Until óõíèÞêç

ÐáñÜäåéãìá 9-5. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß ðñïêáëåß ìéá ÷ñïíéêÞ êáèõóôÝñçóç äéÜñêåéáò Delay äåõôåñïëÝðôùí ôïõëÜ÷éóôïí. Óå áõôü ôï ÷ñïíéêü äéÜóôçìá ðáñïõóéÜæåé ôï ðëÞèïò ôùí äåõôåñïëÝðôùí, ðïõ Ý÷ïõí ðåñÜóåé áðü ôá ìåóÜíõ÷ôá, óôï ðëáßóéï êåéìÝíïõ Display.

Start = Timer Do Until Timer - Start > Delay Display = Timer DoEvents Loop

'Áñ÷Þ ìÝôñçóçò ÷ñüíïõ 'ÓôéãìÞ-Áñ÷Þ > ÊáèõóôÝñçóç ?

ÐñÜãìáôé, ç ôéìÞ ôçò óõíÜñôçóçò Timer åíçìåñþíåôáé áðü ôï õðïëïãéóôéêü óýóôçìá êáé éóïýôáé ìå ôï ðëÞèïò ôùí äåõôåñïëÝðôùí ðïõ Ý÷ïõí ðåñÜóåé áðü ôá ìåóÜíõ÷ôá. Óôçí ðñþôç åíôïëÞ ëáìâÜíåôáé ç Ýíáñîç ôïõ ÷ñüíïõ ìÝôñçóçò. Ç ôéìÞ áõôÞ áðïèçêåýåôáé óôç ìåôáâëçôÞ Start. Óôç óõíèÞêç ôïõ âñü÷ïõ, õðïëïãßæåôáé óå êÜèå êýêëï ç äéáöïñÜ ôùí äåõôåñïëÝðôùí ðïõ Ý÷ïõí ðåñÜóåé áðü ôçí åßóïäï óôï âñü÷ï êáé åëÝã÷åôáé, áí áõôÞ ç äéáöïñÜ åßíáé ìåãáëýôåñç áðü ôçí ôéìÞ ôçò ìåôáâëçôÞò Delay. ÐáñÜäåéãìá 9-6. Ôï ôìÞìá ðñïãñÜììáôïò, ôï ïðïßï áöáéñåß ôá äéðëÜ êåíÜ äéáóôÞìáôá ðïõ õðÜñ÷ïõí ìåôáîý ôùí ëÝîåùí ôçò ðñüôáóçò Sentence åßíáé:

Do

Pos = InStr(Sentence, " ") 'Âñåò äéðëü êåíü äéÜóôçìá If Pos <> 0 Then Sentence = Left(Sentence, Pos) & Mid(Sentence, Pos + 2) End If Loop Until Pos = 0 'ÄéÜêïøå áí äåí õðÜñ÷åé Üëëï ÐñÜãìáôé, ç óõíÜñôçóç InsStr äßíåé óôç ìåôáâëçôÞ Pos ôç èÝóç ðïõ Ý÷ïõí áíé÷íåõôåß äýï óõíå÷üìåíá êåíÜ äéáóôÞìáôá. Ç óõíÜñôçóç Left(Sentence, Pos) äßíåé ôï áñéóôåñü ôìÞìá ôçò ðñüôáóçò ìÝ÷ñé êáé ôï ðñþôï êåíü äéÜóôçìá êáé ç óõíÜñôçóç Mid(Sentence,

Pos+2) ôï äåîß ôìÞìá ðïõ áñ÷ßæåé äýï èÝóåéò ìåôÜ ôï ôï ðñþôï êåíü äéÜóôçìá, åðïìÝíùò ç ðñüôáóç áíáóõãêïëÜôáé ìå Ýíá êåíü ëéãüôåñï. Áõôü åðáíáëáìâÜíåôáé ìÝ÷ñé íá

Ç äïìÞ åðáíÜëçøçò For...Next

Óå ðïëëÝò ðåñéðôþóåéò åßíáé åê ôùí ðñïôÝñùí ãíùóôü ðüóåò öïñÝò èá åêôåëåóôåß ìéá ïìÜäá åíôïëþí. Óå áõôÝò ôéò ðåñéðôþóåéò ç äçìéïõñãßá ôùí âñü÷ùí ìðïñåß íá ãßíåé ìå ôçí ðñïãñáììáôéóôéêÞ äïìÞ For…Next. Ç ãåíéêÞ ìïñöÞ ôçò äïìÞò åßíáé:

ôÝëïò.

ìåôñçôÞò=áñ÷Þ For Ôç óôéãìÞ ðïõ åêôåëåßôáé Ýíáò âñü÷ïò äåí åêôåëïýíôáé ïé äéáäéêáóßåò ôùí óõìâÜíôùí ðïõ ðñïêýðôïõí êáé êáôÜ óõíÝðåéá êáé åíçìÝñùóç ôçò ïèüíçò. Ôï ðñüãñáììá ìÝíåé åãêëùâéóìÝíï óôï âñü÷ï ìÝ÷ñé ôç óôéãìÞ ôïõ ôåñìáôéóìïý ôïõ. Ç õðïñïõôßíá DoEvents åßíáé ìéá õðïñïõôßíá ôçò VB. Ç DoEvents åðéôñÝðåé ôçí åêôÝëåóç, ðáñÜëëçëá ìå ôï âñü÷ï, êáé Üëëùí õðïñïõôéíþí äéá÷åßñéóçò óõìâÜíôùí.

ØåõäÞò ìåôñçôÞò>ôÝëïò ?

ÁëçèÞò åíôïëÞ 1 åíôïëÞ 2

:

Nex

t

ìåôñçôÞò= ìåôñçôÞò+âÞìá

Ó÷Þìá 9-3. Ó÷çìáôéêÞ ðáñÜóôáóç ôçò äïìÞò For…Next ÐáñÜäåéãìá 9-7. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß áíôéêáèéóôÜ ôï ÷ñþìá ôïõ õðïâÜèñïõ (éäéüôçôá BackColor) ôïõ ðáñáèýñïõ, óáñþíïíôáò üëïõò ôïõò öùôåéíïýò ôüíïõò ôïõ ðñÜóéíïõ, åßíáé:

For Colour = 0 To vbGreen Step 256 Me.BackColor = Colour Next Colour ÐñÜãìáôé ç ìåôáâëçôÞ Colour ðáßñíåé ôéìÝò áðü 0 (ìáýñï) ìÝ÷ñé vbGeen (öùôåéíü ðñÜóéíï) ìå âÞìá 256. Ôï âÞìá 256 äåí åðéëÝ÷èçêå ôõ÷áßá. Ôá ÷ñþìáôá óôçí ïèüíç äçìéïõñãïýíôáé áðü Ýíáí áñéèìü ï ïðïßïò ðñïêýðôåé ùò ôñéÜäá äåêáåîáäéêþí áñéèìþí (áðü 0 Ýùò FF=255) ðïõ áíôéóôïé÷ïýí óôï êüêêéíï, ôï ðñÜóéíï êáé ôï ìðëå. Ç áëëáãÞ áíÜ 256 åðçñåÜæåé ìüíï ôï äåýôåñï ÷ñþìá, äçëáäÞ ôï ðñÜóéíï. ¼ôáí ç ôéìÞ ôïõ âÞìáôïò åßíáé 1, ìðïñïýìå íá ðáñáëåßøïõìå ôï ôìÞìá ôçò åíôïëÞò ðïõ êáèïñßæåé ôï âÞìá. ÐáñÜäåéãìá 9-8. Óôç ìåôáâëçôÞ Number õðÜñ÷åé Ýíáò áêÝñáéïò ãñáììÝíïò êáôÜ ôïí áìåñéêáíéêü ôñüðï,

For ìåôñçôÞò = áñ÷Þ To ôÝëïò Step âÞìá

óýìöùíá ìå ôïí üðïßï ÷ñçóéìïðïéïýíôáé êüììáôá ãéá ôçí ïìáäïðïßçóç ôùí øçößùí óå ôñéÜäåò, áíôß ãéá ôåëåßåò. Ôï ôìÞìá ôïõ ðñïãñÜììáôïò ðïõ áêïëïõèåß, áíôéêáèéóôÜ ôá êüììáôá ìå ôåëåßåò.

åíôïëÞ 1 åíôïëÞ 2 : Next ìåôñçôÞò

Ìå ôï âñü÷ï óáñþíïíôáé ôá øçößá ôïõ Number. Óå êáèå êýêëï ç óõíÜñôçóç Mid

ïìÜäá åíôïëþí âñü÷ïõ

üðïõ ìåôñçôÞò áñéèìçôéêÞ ìåôáâëçôÞ êáé áñ÷Þ, ôÝëïò êáé âÞìá áñéèìçôéêÝò óôáèåñÝò, ìåôáâëçôÝò Þ ðáñáóôÜóåéò. 126

For i = 1 To Len(Number) If Mid(Number,i,1) = "," Then Mid(Number,i,1) = "." Next i áðïìïíþíåé Ýíá øçößï, ðïõ óõãêñßíåôáé ìå ôï êüììá. Áí ôï áðïôÝëåóìá åßíáé áëçèÝò, ãßíåôáé ç áíôéêáôÜóôáóÞ ôïõ óôçí åíôïëÞ Mid. 127


Ôï âÞìá ìåôáâïëÞò ôïõ ìåôñçôÞ ìðïñåß íá åßíáé êáé áñíçôéêü. Åßíáé åõíüçôï üôé óå áõôÞ ôçí ðåñßðôùóç ç ôéìÞ ôïõ ìåôñçôÞ äå èá áõîÜíåôáé áëëÜ èá åëáôôþíåôáé. Ïé áíáêõêëþóåéò óôï âñü÷ï èá óôáìáôÞóïõí üôáí ï ìåôñçôÞò ãßíåé ìéêñüôåñïò áðü ôçí ôéìÞ ôïõ ôÝëïõò. ÐáñÜäåéãìá 9-9. Ãéá íá ìåôáôñÝøïõìå Ýíáí áñéèìü áðü ôï äõáäéêü óýóôçìá óôï äõáäéêü, áñ÷ßæïõìå áðü ôï ôåëåõôáßï ôïõ øçößï êáé óáñþíïíôáò ôïí áñéèìü ðñïò óôçí áñ÷Þ ðïëëáðëáóéÜæïõìå êÜèå øçößï ìå 20, 21, 22 êëð. Óôï ôÝëïò ðñïóèÝôïõìå ôïõò åðéìÝñïõò ðáñÜãïíôåò. ð.÷. ãéá ôïí áñéèìü 11001 Ý÷ïõìå: 1 1 0 0 1 0

1x2 =1x 1 = 1 0 x 21 = 0 x 2 = 0 0 x 22 = 0 x 4 = 0 1 x 23 = 1 x 8 = 8 1 x 24 = 1 x 16 =16 25

Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß äßíåé óôç ìåôáâëçôÞ DecNum ôç äåêáäéêÞ ðáñÜóôáóç ôïõ äõáäéêïý áñéèìïý, ðïõ âñßóêåôáé óôç ìåôáâëçôÞ BinNum.

DecNum = 0 Power = 0 For i = Len(BinNum) To 1 Step -1 Digit = CLng(Mid(BinNum, i, 1)) DecNum = Digit * 2 ^ Power + DecNum Power = Power + 1 Next i

Ôåñìáôéóìüò áíáêýêëùóçò êáé Ýîïäïò áðü ôï âñü÷ï ÁñêåôÝò öïñÝò áðáéôåßôáé íá ãßíåé Üìåóïò ôåñìáôéóìüò ôçò áíáêýêëùóçò êáé Ýîïäïò áðü ôï âñü÷ï áðü êÜðïéï óçìåßï ôïõ ÷ùñßò íá åêôåëåóôïýí ïé õðüëïéðåò åíôïëÝò ôïõ Þ íá ðñáãìáôïðïéçèïýí üëåò ïé ðñïó÷åäéáóìÝíåò åðáíáëÞøåéò ôïõ. Ç Ýîïäïò áðü ïðïéïäÞðïôå óçìåßï ôïõ âñü÷ïõ, ðëçí ôïõ óçìåßïõ åëÝã÷ïõ ôçò óõíèÞêçò åîüäïõ, ìðïñåß íá ãßíåé ìå ôçí åíôïëÞ Exit For, ãéá ôéò äïìÝò ôýðïõ For…Next, êáé ìå ôçí åíôïëÞ Exit Do ãéá ôéò äïìÝò ôýðïõ Do…Loop. Do Until óõíèÞêç åíôïëÞ 1 åíôïëÞ 2 ::: Exit Do ::: Loop :

For . . . åíôïëÞ 1 åíôïëÞ 2 ::: Exit For ::: Next ìåôáâëçôÞ :

ÐáñÜäåéãìá 9-11. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß, óáñþíåé ôá øçößá Digit ôïõ áñéèìïý ðïõ Ý÷åé ãñáöåß óå Ýíá ðëáßóéï êåéìÝíïõ ìå üíïìá Number êáé áðïöáßíåôáé, áí ï áñéèìüò åßíáé äõáäéêüò áêÝñáéïò Þ ü÷é.

'Áñ÷Þ áðü ôï ôÝëïò 'Áðïìüíùóç øçößï 'Õðïëüãéóå ìåñéêü Üèñïéóìá 'Åðüìåíïò åêèÝôçò

Óôç ìåôáâëçôÞ DecNum äßíåôáé áñ÷éêÞ ôéìÞ 0. Åðßóçò, óôç ìåôáâëçôÞ Power, ðïõ ðáñéóÜíåé ôïí åêèÝôç ôïõ 2, äßíåôáé áñ÷éêÞ ôéìÞ 0. Ï âñü÷ïò óáñþíåé ôá øçößá áðü ôï ôÝëïò ðñïò ôçí áñ÷Þ. Óôï âñü÷ï áðïìïíþíåôáé Ýíá äõáäéêü øçößï (Digit) êáé ðïëëáðëáóéÜæåôáé ìå ôçí êáôÜëëçëç äýíáìç ôïõ 2. Åðßóçò, óôï âñü÷ï ðñïåôïéìÜæåôáé êáé ï åðüìåíïò åêèÝôçò. ÕðÜñ÷ïõí ïñéóìÝíá èÝìáôá ðïõ ðñÝðåé íá Ý÷ïõìå õð' üøéí ìáò ãéá ôéò ôéìÝò ôùí óôáèåñþí, ìåôáâëçôþí Þ ðáñáóôÜóåùí áñ÷Þ, ôÝëïò êáé âÞìá. ÓõãêåêñéìÝíá: Ïé åíôïëÝò ôïõ âñü÷ïõ ìðïñåß íá ìçí åêôåëåóôïýí êáìéÜ öïñÜ áí: - áñ÷Þ > ôÝëïò êáé âÞìá > 0. - áñ÷Þ < ôÝëïò êáé âÞìá < 0. Áí áñ÷Þ = ôÝëïò êáé âÞìá ¹ 0, ïé åíôïëÝò óôï åóùôåñéêü ôïõ âñü÷ïõ èá åêôåëåóôïýí ìüíï ìéá öïñÜ. Áí âÞìá = 0, ï âñü÷ïò åßíáé áôÝñìïíáò. Óôçí VB, áíôßèåôá ìå üôé éó÷ýåé óå Üëëåò ãëþóóåò ðñïãñáììáôéóìïý, ï ìåôñçôÞò, ç áñ÷Þ, ôï ôÝëïò êáé ôï âÞìá åðéôñÝðåôáé íá ðáßñíïõí êáé ìç áêÝñáéåò ôéìÝò. ÐáñÜäåéãìá 9-10. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß, åìöáíßæåé óôï åóùôåñéêü ôïõ ðáñáèýñïõ Ýíáí ðßíáêá çìéôüíùí êáé óõíçìéôüíùí, ìå âÞìá ôéìþí áíÜ 0,2 áêôßíéá.

Dim w As Double Dim pi As Double Me.Cls pi = 4 * Atn(1) For w = 0 To 2 * pi Step 0.2 Me.Print w, Sin(w), Cos(w) Next w

IsBinary = True For i = 1 To Len(Number) Digit = Mid(Number,i,1) If (Digit <> "0") And (Digit <> "1") Then IsBinary = False Exit For End If Next Colour ÐñÜãìáôé, áñ÷éêÜ Ýîù áðü ôï âñü÷ï ãßíåôáé õðüèåóç üôé ï áñéèìüò åßíáé äõáäéêüò. Óôï åóùôåñéêü ôïõ âñü÷ïõ óáñþíïíôáé ôá øçößá ôïõ áñéèìoý êáé áí âñåèåß øçößï äéÜöïñï ôïõ 0 Þ ôïõ 1 ç õðüèåóç êáôáññßðôåôáé êáé æçôåßôáé äõíáìéêÞ Ýîïäïò áðü ôï âñü÷ï, áöïý äåí Ý÷åé íüçìá ç óÜñùóç êáé ôùí õðïëïßðùí øçößùí. Ôüóï ç Exit For üóï êáé ç Exit Do óõíäõÜæïíôáé ó÷åäüí ðÜíôá ìå ìéá äïìÞ äéáêëÜäùóçò

If…Ôhen Þ Select Case êáé ìðïñïý íá åìöáíéóôïý óôï åóùôåñéêü åíüò âñü÷ïõ üóåò öïñÝò êñßíåôáé áíáãêáßï.

¢ëìá óôçí åðüìåíç áíáêýêëùóç ÌåñéêÝò öïñÝò ÷ñåéÜæåôáé íá äéáêïðåß ìéá áíáêýêëùóç ÷ùñßò íá åêôåëåóôïýí üëåò ïé åíôïëÝò ôïõ âñü÷ïõ êáé ç åêôÝëåóç ôïõ ðñïãñÜììáôïò íá óõíå÷ßóåé ìå íÝá áíáêýêëùóç áðü ôçí ðñþôç åíôïëÞ ôïõ âñü÷ïõ. Áí êáé êÜðïéåò ãëþóóåò õøçëïý åðéðÝäïõ äéáèÝôïõí êáôÜëëçëç åíôïëÞ, ç VB äåí ðáñÝ÷åé áõôÞ ôç äõíáôüôçôá Üìåóá. Ìðïñïýìå üìùò íá ðåôý÷ïõìå Ýììåóá ôçí áëëÜãÞ ôçò ñïÞò åêôÝëåóçò ôïõ ðñïãñÜììáôïò ìå ìéá åíôïëÞ GoTo, ðïõ ðáñáðÝìðåé óå ìéá åôéêÝôá (label) ðÜíù áðü ôçí åíôïëÞ Next Þ Loop. For . . . Do Until óõíèÞêç ::: ::: GoTo åôéêÝôá GoTo åôéêÝôá ::: ::: åôéêÝôá: åôéêÝôá: Loop Next ìåôáâëçôÞ Ç åíôïëÞ GoTo ãéá ÷ñüíéá áðïôåëïýóå (êáé ãéá ðïëëïýò áðïôåëåß áêüìá) ôï ìáýñï ðñüâáôï

Ôåëåéþíïíôáò, Ý÷ïõìå íá ðñïóèÝóïõìå üôé äåí ðñÝðåé íá áëëÜæïõìå ôçí ôéìÞ ôïõ ìåôñçôÞ ìÝóá óôï âñü÷ï êáé üôé ç ôéìÞ ôïõ ìåôñçôÞ ìåôÜ ôï âñü÷ï åßíáé ç ôåëåõôáßá ðïõ ðñïêÜëåóå ôç äéáêïðÞ ôïõ. 128

ôïõ ðñïãñáììáôéóìïý. Áí ÷ñçóéìïðïéçèåß ÷ùñßò ìÝôñï êáé ãéá óêïðïýò äéáöïñåôéêïýò áðü áõôüí ðïõ áíáöÝñáìå äçìéïõñãåß ðñïãñÜììáôá ìðëåãìÝíá, ôá ïðïßá åßíáé äýóêïëï íá ôá ðáñáêïëïõèÞóåé êáíåßò. Ç åíôïëÞ GoTo ðñÝðåé íá óõíäõÜæåôáé ðÜíôá ìå ìéá äïìÞ äéáêëÜäùóçò If…Ôhen Þ Select Case. 129

Äåí õðÜñ÷åé êáìéÜ ó÷Ýóç ìåôáîý ôçò åôéêÝôáò ôïõ ðñïãñÜììáôïò êáé ôïõ áíôéêåéìÝíïõ åôéêÝôá ðïõ ôïðïèåôåßôáé ðÜíù óôéò öüñìåò.


Ï êþäéêáò ôïõ ðñïãñÜììáôïò åßíáé:

ÐáñÜäåéãìá 9-12. Óôï ðáé÷íßäé êñåìÜëá (äåßôå êáé ðáñÜäåéãìá 7-12), üôáí ï äåýôåñïò ðáßêôçò äþóåé Ýíá ãñÜììá, ðñÝðåé ôï ðñüãñáììá íá óáñþóåé ôç ëÝîç êáé üðïõ âñåé ôï ãñÜììá íá ôï åìöáíßóåé óôï óêáñßöçìá. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ áêïëïõèåß, óáñþíåé ôç ëÝîç Word êáé üðïõ âñåé ôï ãñÜììá Letter ôï áíôéêáèéóôÜ.

For i = 1 To Len(Word) If Mid(Word,i,1)<>Letter Then GoTo Next_Letter Mid(Crypto,i,1) = Letter : : Next_Letter: Next i Åßíáé ðñïöáíÝò, üôé Ýíáò Üëëïò ðñïãñáììáôéóôÞò èá ìðïñïýóå íá êÜíåé äéáöïñåôéêÞ êùäéêïðïßçóç. ÁëëÜæïíôáò ôç óõíèÞêç óôçí åíôïëÞ If…Then ìðïñåß íá äçìéïõñãçèåß Ýíèåóç óôéò åíôïëÝò ðïõ áêïëïõèïýí êáé íá áðïöåõ÷èåß ç ÷ñÞóç ôçò åíôïëÞò GoTo. Áí üìùò ìåóïëáâïýí ðïëëÝò åíôïëÝò ìÝ÷ñé ôïí ôåñìáôéóìü ôïõ âñü÷ïõ êáé åíäéÜìåóá õðÜñ÷ïõí ðïëýðëïêåò ðñïãñáììáôéóôéêÝò äïìÝò, ìéá åðéðëÝïí Ýíèåóç (êáé ðéèáíüí ðåñéóóüôåñåò ôçò ìéáò) ìðïñåß íá äçìéïõñãÞóïõí äõóêïëßá áíÜãíùóçò, ïðüôå ç ÷ñÞóç ôçò åíôïëÞò GoTo âïëåýåé. Ãéá ôçí ïíïìáóßá ôùí åôéêåôþí áêïëïõèïýìå ëßãï ðïëý ôïõò êáíüíåò ïíïìáóßáò ôùí ìåôáâëçôþí. ×ñçóéìïðïéïýìå ìüíï ãñÜììáôá êáé øçößá, äåí áñ÷ßæïõìå ðïôÝ ìå øçößï, äå ÷ñçóéìïðïéïýìå äåóìåõìÝíåò ëÝîåéò êáé öñïíôßæïõìå íá äßíïõìå ïíüìáôá ìå ìéêñü ìÞêïò. Ôï üíïìá ìðïñåß íá ðåñéÝ÷åé êáé åëëçíéêïýò ÷áñáêôÞñåò áëëÜ êáëü åßíáé ãéá ëüãïõò ãåíéêüôçôáò íá áðïöåýãåôáé ç ÷ñÞóç ôïõò. Ãéá íá îå÷ùñßæïõí ïé åôéêÝôåò áðü ôá Üëëá äïìéêÜ óôïé÷åßá ôïõ ðñïãñÜììáôïò, äßðëá áðü ôï üíïìÜ ôïõò ãñÜöåôáé õðï÷ñåùôéêÜ ôï óýìâïëï (:). Áò óçìåéùèåß üôé áõôü ôï óýìâïëï äå ãñÜöåôáé óôçí áíáöïñÜ ôçò åôéêÝôáò äßðëá áðü ôçí åíôïëÞ GoTo.

¸íèåóç ðñïãñáììáôéóôéêþí äïìþí Ìéá äïìÞ åëÝã÷ïõ ìðïñåß íá ôïðïèåôçèåß óôï åóùôåñéêü Üëëçò äïìÞò åëÝã÷ïõ ôïõ ßäéïõ Þ äéáöïñåôéêïý ôýðïõ. Ãéá ðáñÜäåéãìá ìéá äïìÞ Do...Loop ìðïñåß íá ôïðïèåôçèåß óôï åóùôåñéêü ìéáò äïìÞò For...Next Þ óå Ýíá áðü ôá óêÝëç ìéáò äïìÞò åðéëïãÞò If...Then. Óå êÜðïéá áðü ôá ðáñáäåßãìáôá ðïõ Ý÷ïõìå äþóåé õðÜñ÷ïõí ôÝôïéåò ðåñéðôþóåéò (ðáñáäåßãìáôá 9.4 êáé 9.6). ÐáñáôçñÞóôå üôé ãéá íá ôïíéóôåß ç Ýííïéá ôçò Ýíèåóçò êáé ãéá íá ãßíåé ðéï áíáãíþóéìï ôï ðñüãñáììá, ïé åíôïëÝò ôùí Ýíèåôùí âñü÷ùí ôïðïèåôïýíôáé äåîéüôåñá. Áõôü ðáñ' üëï ðïõ äåí ìáò ôï õðáãïñåýåé êáíÝíáò êáíüíáò, áðïôåëåß ìéá êáëÞ ðñïãñáììáôéóôéêÞ óõíÞèåéá, áöïý ôïíßæåé ôçí åìâÝëåéá êÜèå ðñïãñáììáôéóôéêÞò äïìÞò. ¢óêçóç 9-1. Óå ìéá öüñìá ôïðïèåôïýìå óôá áñéóôåñÜ Ýíá áíôéêåßìåíï åëÝã÷ïõ åéêüíáò ìå üíïìá Aeroplane êáé ìå ôç âïÞèåéá ôçò éäéüôçôáò Picture åðéëÝãïõìå íá áðåéêïíßæåé Ýíá

Private Sub Fly_Click() 'Áñ÷éêÞ èÝóç áåñïðëÜíïõ Dim xStart As Long 'ÔåëéêÞ èÝóç áåñïðëÜíïõ Dim xEnd As Long 'ÂÞìá ìåôáêßíçóçò Dim xStep As Long 'ÌåôáâëçôÞ âñü÷ïõ Dim x As Long Dim tStartFly As Double 'Áñ÷Þ ðôÞóçò Dim tStartDelay As Double 'Áñ÷Þ ìÝôñçóçò ÷ñüíïõ 'Áñ÷éêïðïßçóç ìåôáâëçôþí xStart = Aeroplane.Left xEnd = Me.Width - Aeroplane.Width 'ÐôÞóç óå 100 âÞìáôá xStep = (xEnd - xStart) / 100 tStartFly = Timer For x = xStart To xEnd Step xStep Aeroplane.Left = x '×ñïíéêÞ êáèõóôÝñéóç 0.05 sec tStartDelay = Timer Do While Timer - tStartDelay < 0.05 Display = Timer - tStartFly DoEvents Loop Next x End Sub Áñ÷éêÜ õðïëïãßæïíôáé ïé ðáñÜìåôñïé ôïõ âñü÷ïõ (xStart, xEnd, xStep) êáé ëáìâÜíåôáé ï ÷ñüíïò Ýíáñîçò ôçò ðôÞóçò (tStartFly). Óôï åóùôåñéêü ôïõ âñü÷ïõ ãßíåôáé ç ìåôáôüðéóç ôïõ áåñïðëÜíïõ óôç íÝá ôïõ èÝóç (Aeroplane.Left = x) êáé ÷ñïíéêÞ êáèõóôÝñçóç, þóôå íá öáíåß öõóéêÞ ç êßíçóç ôïõ áåñïðëÜíïõ.

ÅöáñìïãÝò Ôï bit éóïôéìßáò Ïé ôå÷íéêÝò áíß÷íåõóçò óöáëìÜôùí óôç ìåôÜäïóç äåäïìÝíùí âáóßæïíôáé óôçí åéóáãùãÞ ðëåïíáóìïý (redundancy) óôá ðñïò ìåôÜäïóç äåäïìÝíá. Ï ðëåïíáóìüò äçìéïõñãåßôáé ìå ôçí åéóáãùãÞ åðéðëÝïí äõáäéêþí øçößùí. Óôçí ðéï áðëÞ ðåñßðôùóç åéóÜãåôáé Ýíá ìüíï bit óôï ôÝëïò åíüò byte. Ôï ðñüóèåôï øçößï ïíïìÜæåôáé øçößï éóïôéìßáò. Ôï øçößï éóïôéìßáò õðïëïãßæåôáé ìå ôçí åîÞò ëïãéêÞ: Áí ÷ñçóéìïðïéåßôáé Üñôéá éóïôéìßá (even parity), ôï øçößï éóïôéìßáò ðáßñíåé ôçí ôéìÞ 0 Þ 1, þóôå ï óõíïëéêüò áñéèìüò äõáäéêþí øçößùí (bits ÷áñáêôÞñá + øçößï éóïôéìßáò) ðïõ Ý÷ïõí ôéìÞ 1 íá åßíáé Üñôéïò. Óôçí ðåñßðôùóç ôçò ðåñéôôÞò éóïôéìßáò (odd parity) ï óõíïëéêüò áñéèìüò ôùí äõáäéêþí øçößùí ðñÝðåé íá åßíáé ðåñéôôüò. Èá äçìéïõñãÞóïõìå ðñüãñáììá ðïõ èá åìöáíßæåé äýï ðëáßóéá êåéìÝíïõ êáé Ýíá ðëÞêôñï äéáôáãÞò. Óôï Ýíá ðëáßóéï êåéìÝíïõ èá ðëçêôñïëïãåßôáé Ýíáò 7-øÞöéïò äõáäéêüò áñéèìüò êáé óôï ðÜôçìá ôïõ ðëÞêôñïõ èá åìöáíßæåôáé óôï äåýôåñï ðëáßóéï êåéìÝíïõ ï áñéèìüò ìå Üñôéá éóïôéìßá. Binary

áåñïðëáíÜêé (áñ÷åßï …\Common\Graphics\Icons\Industry\Plane.ico). Íá

WithParity

äçìéïõñãçèåß ðñüãñáììá óôï ïðïßï ôï ðÜôçìá åíüò ðëÞêôñïõ äéáôáãÞò íá êéíåß ôï áåñïðëáíÜêé áðü ôï Ýíá Üêñï ôçò åéêüíáò óôï Üëëï.

SetParity

Åéêüíá 9-2. ¢ñôéï ðëÞèïò bits 1 ìáæß ìå ôï øçößï éóïôéìßáò Aeroplane Display Åéêüíá 9-1. Êéíïýìåíï ó÷Ýäéï ìå äéáäï÷éêÝò ìåôáôïðßóåéò 130

Áñ÷éêÜ ðñÝðåé íá óáñþóïõìå ôá øçößá ôïõ áñéèìïý êáé íá áðáñéèìÞóïõìå ôá øçößá ôá ïðïßá éóïýíôáé ìå 1, óôç óõíÝ÷åéá ðñÝðåé íá õðïëïãßóïõìå ôï øçößï éóïôéìßáò êáé íá ôï ôïðïèåôÞóïõìå óôï ôÝëïò ôïõ áñéèìïý. Ãéá Üñôéá éóïôéìßá, áí ôï ðëÞèïò ôùí øçößùí ôïõ áñéèìïý åßíáé ðåñéôôü, èÝôïõìå 1 ôï øçößï éóïôéìßáò êáé áí ôï ðëÞèïò ôùí øçößùí ôïõ áñéèìïý åßíáé Üñôéï ôï èÝôïõìå 0, þóôå ôï óõíïëéêü ðëÞèïò øçößùí íá åßíáé Üñôéï. 131


Ï êþäéêáò ôïõ ðñïãñÜììáôïò åßíáé:

Private Sub SetParity_Click() Dim Digit As String * 1 Dim ParityBit As String * 1 Dim CountOnes As Integer Dim i As Integer 'Áðáñßèìçóç øçößùí ßóùí ìå 1 CountOnes = 0 For i = 1 To Len(Binary) Digit = Mid(Binary, i, 1) If Digit = "1" Then CountOnes = CountOnes + 1 Next i 'Õðïëïãéóìüò éóïôéìßáò ParityBit = CStr(CountOnes Mod 2) 'Óýíèåóç ôïõ íÝïõ áñéèìïý WithParity = Binary & ParityBit End Sub ÐáñáôçñÞóôå üôé ãéá ôïí õðïëïãéóìü ôïõ øçößïõ éóïôéìßáò ëáìâÜíïõìå ôï õðüëïéðï ôçò äéáßñåóçò ìå ôï 2. ÐñÜãìáôé ôï äõíáôü õðüëïéðï óå áõôÞ ôçí ðåñßðôùóç åßíáé 0 Þ 1 êáé ìÜëéóôá ôï õðüëïéðï åßíáé 1, áí ï áñéèìüò åßíáé ðåñéôôüò êáé 0 áí ï áñéèìüò åßíáé Üñôéïò. Åðßóçò, ç óõíÜñôçóç CStr ìåôáôñÝðåé ôïí áñéèìü óå óõìâïëïóåéñÜ ãéá íá åßíáé äõíáôÞ ç óõíÝíùóÞ ôïõ ìå ôïí áñ÷éêü áñéèìü.

ÌåôáôñïðÞ áêÝñáéïõ äåêáäéêïý áñéèìïý óå äõáäéêïý Ãéá íá ìåôáôñÝøïõìå Ýíáí áêÝñáéï äåêáäéêü áñéèìü Í óå äõáäéêü: 1. Äéáéñïýìå ôïí áñéèìü Í ìå ôï 2 êáé ðáßñíïõìå ðçëßêï Ð êáé õðüëïéðï Õ. Ôï õðüëïéðï Õ Ý÷åé ôéìÞ 0 Þ 1 êáé áðïôåëåß ôï øçößï ôïõ äõáäéêïý áñéèìïý. 2. ÈÝôïõìå ôï ðçëßêï Ð óôç èÝóç ôïõ Í êáé åðáíáëáìâÜíïõìå ôï âÞìá 1 ìÝ÷ñé íá âñåèåß ðçëßêï ßóï ìå 0. ÊÜèå íÝï õðüëïéðï ôï ôïðïèåôïýìå óôá áñéóôåñÜ ôïõ õðü óýíèåóç äõáäéêïý áñéèìïý. Èá äçìéïõñãÞóïõìå ðñüãñáììá ðïõ èá åìöáíßæåé äýï ðëáßóéá êåéìÝíïõ êáé Ýíá ðëÞêôñï. Óôï Ýíá ðëáßóéï êåéìÝíïõ, ôï Decimal, èá ðëçêôñïëïãåßôáé Ýíáò äåêáäéêüò áñéèìüò êáé óôï ðÜôçìá ôïõ ðëÞêôñïõ DecToBin èá åìöáíßæåôáé óôï äåýôåñï ðëáßóéï êåéìÝíïõ, ôï Binary, ï áñéèìüò óôï äõáäéêü óýóôçìá áñßèìçóçò. Ï êþäéêáò ôïõ ðñïãñÜììáôïò åßíáé: Private Sub DecToBin_Click() Dim N As Long Dim Y As Long N = CLng(Decimal) Binary = "" Do Y = N Mod 2 'Ôï ðçëßêï óôç èÝóç ôïõ Í N=N\2 Binary = Y & Binary 'Ôá äéáäï÷éêÜ õðüëïéðá óôá áñéóôåñÜ 'Áí ôï ðçëßêï åßíáé 0 ôåñìÜôéóå Loop Until N = 0 End Sub

Áíáêåöáëáßùóç Ïé äïìÝò åðáíÜëçøçò åßíáé äïìÝò ðïõ ìáò âïçèïýí íá äçìéïõñãÞóïõìå âñü÷ïõò óôï åóùôåñéêü ôùí ïðïßùí ïé åíôïëÝò åêôåëïýíôáé ãéá Ýíáí ðñïêáèïñéóìÝíï áñéèìü åðáíáëÞøåùí, Þ åíüóù éêáíïðïéåßôáé êÜðïéá óõíèÞêç. Óôçí ðñïãñáììáôéóôéêÞ äïìÞ åðáíÜëçøçò Do…Loop ÷ñçóéìïðïéåßôáé ìéá ëïãéêÞ ðáñÜóôáóç ãéá íá êáèïñéóôåß, áí èá åêôåëåóôïýí îáíÜ ïé åíôïëÝò ðïõ âñßóêïíôáé ìåôáîý ôçò ãñáììÞò Do êáé ôçò ãñáììÞò Loop. ÕðÜñ÷ïõí ôÝóóåñéò ðáñáëëáãÝò áõôÞò ôçò äïìÞò. Ç ðñïãñáììáôéóôéêÞ äïìÞ For…Next ÷ñçóéìïðïéåßôáé óôéò ðåñéðôþóåéò ðïõ åßíáé åê ôùí ðñïôÝñùí ãíùóôü ðüóåò öïñÝò èá åêôåëåóôåß ìéá ïìÜäá åíôïëþí. Ç Ýîïäïò áðü ïðïéïäÞðïôå óçìåßï ôïõ âñü÷ïõ, ðëçí ôïõ óçìåßïõ åëÝã÷ïõ ôçò óõíèÞêçò åîüäïõ, ìðïñåß íá ãßíåé ìå ôçí åíôïëÞ Exit For, ãéá ôéò äïìÝò ôýðïõ For…Next, êáé ìå ôçí åíôïëÞ Exit Do ãéá ôéò äïìÝò ôýðïõ Do…Loop. 132

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. ÃñÜøôå ðñüãñáììá ôï ïðïßï íá õðïëïãßæåé ôï ÷ñüíï äéðëáóéáóìïý ôïõ áñ÷éêïý êåöáëáßïõ ôïõ ðáñáäåßãìáôïò 9-1. 2. ÃñÜøôå ðñüãñáììá ðïõ íá ðñïóïìïéþíåé ôçí ðñÜîç ôïõ ðïëëáðëáóéáóìïý ìå äéáäï÷éêÝò ðñïóèÝóåéò. 3. ÃñÜøôå ðñüãñáììá ôï ïðïßï íá ðñïóïìïéþíåé ôï ðñüâëçìá ôïõ óôáñéïý ðïõ ðåñéãñÜöåôáé óôï ðáñÜäåéãìá 9-3. 4. Óå ìéá öüñìá íá ôïðïèåôÞóåôå Ýíá ðëÞêñï ìå üíïìá Fire, Ýíá ðëáßóéï êåéìÝíïõ ìå üíïìá Display êáé Ýíá ðëáßóéï êåéìÝíïõ ìå üíïìá Delay. Óôï óõìâÜí Click ôïõ ðëÞêôñïõ

Fire åíóùìáôþóôå ôïí êþäéêá ôïõ ðáñáäåßãìáôïò 9.5. á) ÆçôÞóôå ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò êáé áöïý äþóåôå ìéá ôéìÞ óôï Delay êÜíôå êëéê óôï ðëÞêôñï. ¼óï ôñÝ÷ïõí ïé ôéìÝò óôï Display, ìåôáêéíÞóôå ôï ðáñÜèõñï ôçò åöáñìïãÞò. â) Áðïìáêñýíåôå ôçí õðïñïõôßíá DoEvents êáé åêôåëÝóôå îáíÜ ôï ðñüãñáììá. Ôé ðáñáôçñåßôå; ÐñïóðáèÞóôå íá ìåôáêéíÞóåôå ôï ðáñÜèõñï ôçò åöáñìïãÞò. Ôé ðáñáôçñåßôå; 5. ÊÜèå ìåóÜíõ÷ôá ç ôéìÞ ôçò Timer ìçäåíßæåôáé êáé ç äéáöïñÜ Timer-Start ãßíåôáé áñíçôéêÞ. ÕðÜñ÷åé ëïéðüí ðåñßðôùóç íá ìçí éêáíïðïéçèåß ðïôÝ ç óõíèÞêç êáé íá ðñïêýøåé áôÝñìïíáò âñü÷ïò. ÁéôéïëïãÞóôå. ×ñçóéìïðïéÞóôå ôç óõíÜñôçóç Abs (áðüëõôç ôéìÞ) ãéá íá â��ëôéþóåôå ôç óõíèÞêç ôïõ âñü÷ïõ, þóôå íá ðáñáêáìöèåß ôï ðéï ðÜíù ðñüâëçìá. ÁéôéïëïãÞóôå. 6. ÃñÜøôå ðñüãñáììá ãéá ôçí Üóêçóç 9-7. Ðñïóáñìüóôå ôï ðñüãñáììá, þóôå íá êÜíåé óÜñùóç óôï êüêêéíï êáé óôï ìðëå. 7. ÃñÜøôå ðñüãñáììá ãéá ôï ðáñÜäåéãìá 9-9, ãéá ôç ìåôáôñïðÞ äõáäéêïý áñéèìïý óå äåêáäéêü áñéèìü. 8. Âåëôéþóôå ôçí Üóêçóç 9-1, ìå ðñïóèÞêç êáôáêüñõöçò êßíçóçò (áëëáãÞ ôçò éäéüôçôáò Top) þóôå ôï áåñïðëáíÜêé: á) Íá ðñïóãåéþíåôáé. â) Íá êéíåßôáé ìå óêáìðáíåâÜóìáôá. Õðüäåéîç: Ìå ôç ãåííÞôñéá øåõäïôõ÷áßùí áñéèìþí äçìéïõñãÞóôå êáôáêüñõöç ìåôáôüðéóç åýñïõò 10% ôïõ ýøïõò ôçò öüñìáò. 9. ÕëïðïéÞóôå ôï ðñüãñáììá åìöÜíéóçò åíüò áñéèìïý ìå Üñôéá éóïôéìßá. Óôç óõíÝ÷åéá: á) Âåëôéþóôå ôï ðñüãñáììá, Ýôóé þóôå íá åëÝã÷åôáé ðñþôá áí ï áñéèìüò ðïõ äßíåôáé åßíáé äõáäéêüò. Áí ï áñéèìüò äåí åßíáé äõáäéêüò íá ìçí ðñïêýðôåé áðïôÝëåóìá. â) ÐñïóèÝóôå óôç öüñìá ôïõ ðñïãñÜììáôïò Ýíá ðëÞêôñï óçìåßùóçò (check box), ôï ïðïßï íá êáèïñßæåé, áí ç õðïëïãéæüìåíç éóïôéìßá èá åßíáé Üñôéá Þ ðåñéôôÞ. 10.¼ëïé ïé öïñïëïãïýìåíïé óôçí ÅëëÜäá Ý÷ïõí Ýíá ìïíáäéêü áñéèìü öïñïëïãéêïý ìçôñþïõ. Ï áñéèìüò áõôüò åßíáé 9-øÞöéïò. Ôï ôåëåõôáßï øçößï ôïõ öïñïëïãéêïý ìçôñþïõ åßíáé øçößï åëÝã÷ïõ, ìå ôçí Ýííïéá, üôé ÷ñçóéìïðïéåßôáé ãéá íá äéáðéóôùèåß êáôÜ ðüóï Ý÷ïõí äïèåß óùóôÜ ôá õðüëïéðá øçößá êáé ðñïêýðôåé ùò åîÞò: á) Áñ÷ßæïõìå áðü ôï ðñïôåëåõôáßï ôïõ øçößï êáé óáñþíïõìå ôïí áñéèìü ðñïò óôçí áñ÷Þ. ÐïëëáðëáóéÜæïõìå êÜèå øçößï ìå 20, 21, 22 êëð. Ôá áðïôåëÝóìáôá ôùí ãéíïìÝíùí ôá ðñïóèÝôïõìå. ÊÜíïõìå äçëáäÞ üôé áêñéâþò êÜíáìå êáé óôï ðáñÜäåéãìá 9.9. â) ËáìâÜíïõìå ôï õðüëïéðï (ðñÜîç mod) ôïõ áèñïßóìáôïò ìå ôï 11. Ôá äõíáôÜ õðüëïéðá åßíáé ïé áñéèìïß 0, 1, 2, … 9, 10. Áí ôï õðüëïéðï åßíáé ìïíïøÞöéïò áõôüò åßíáé ôï øçößï åëÝã÷ïõ. Áí ï áñéèìüò åßíáé ï äéøÞöéïò 10, áðïêüðôïõìå ôï 1 êáé øçößï åëÝã÷ïõ åßíáé ôï 0. ÃñÜøôå ðñüãñáììá ðïõ óå Ýíá ðëáßóéï êåéìÝíïõ íá äÝ÷åôáé Ýíáí 9-øÞöéï áñéèìü êáé íá äéáðéóôþíåé êáôÜ ðüóï áõôüò ï áñéèìüò åßíáé áñéèìüò öïñïëïãéêïý ìçôñþïõ. 11.ÕëïðïéÞóôå ôï ðñüãñáììá ìåôáôñïðÞò åíüò äåêáäéêïý áñéèìïý óå äõáäéêü. 133


Óçìåéþóåéò:

ÌÜèçìá 10 ÄïìçìÝíïò ðñïãñáììáôéóìüò ÅöáñìïãÝò Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí:

Íá åêìåôáëëåýïíôáé ôá ðñïôåñÞìáôá ôïõ äïìçìÝíïõ ðñïãñáììáôéóìïý. Íá ðñïãñáììáôßæïõí ÷ñçóéìïðïéþíôáò ôéò áñ÷Ýò ôïõ äïìçìÝíïõ ðñïãñáììáôéóìïý.

Óôï äïìçìÝíï ðñïãñáììáôéóìü (stuctured programmining) ÷ñçóéìïðïéïýìå ôéò ôñåéò âáóéêÝò ðñïãñáììáôéóôéêÝò äïìÝò, ôç äïìÞ ôçò áêïëïõèßáò, ôç äïìÞ ôçò åðéëïãÞò êáé ôç äïìÞ ôçò åðáíÜëçøçò ãéá íá óõíèÝóïõìå ôá ðñïãñÜììáôÜ ìáò. Ïé áñ÷Ýò ôïõ äïìçìÝíïõ ðñïãñáììáôéóìïý ôÝèçêáí áðü ôïõò Bohm êáé Jacopini óôéò áñ÷Ýò ôçò äåêáåôßáò ôïõ 60. Ôï 1968 ï Edsger Dijkstra äçìïóßåõóå ìéá ìåëÝôç ìå ôßôëï "GoTo statement considered harmful" - ç åíôïëÞ GoTo èåùñåßôáé åðéâëáâÞò) óôçí ïðïßá Ýêáíå åðßèåóç óôç óõíÞèåéá ÷ñÞóçò ôçò åíôïëÞò GoTo êáé èåìåëßùíå ôï äïìçìÝíï ðñïãñáììáôéóìü. Ïé éäÝåò üìùò áõôÝò Üñ÷éóáí íá åîáðëþíïíôáé ìåôÜ ôï 1973, üôáí ôï ðåñéïäéêü Datamation Ýêáíå åéäéêÞ áöéÝñùóç ðÜíù óå áõôü ôï èÝìá. Áí êáé ï äïìçìÝíïò ðñïãñáììáôéóìüò åìöáíßóôçêå ùò ðñïóðÜèåéá ðåñéïñéóìïý ÷ñÞóçò ôùí åíôïëþí GoTo ìÝóá óôï ðñüãñáììá, åîåëß÷èçêå üìùò óå ìåèïäïëïãßá êáé áðïôåëåß óÞìåñá ôï âáóéêü ôñüðï äüìçóçò ðñïãñáììÜôùí. Óå áõôü ôï ìÜèçìá èá áíáðôýîïõìå ìéá óåéñÜ áðü ïëïêëçñùìÝíåò åöáñìïãÝò, þóôå íá äåèåß ðåñéóóüôåñï ç èåùñßá ìå ôçí ðñÜîç êáé íá áðïêôçèåß ìéá åîïéêåßùóç óôçí ïëéêÞ áíôéìåôþðéóç ôùí ðñïâëçìÜôùí áðü ôç óôéãìÞ ðïõ ôßèåíôáé ìÝ÷ñé ôç óôéãìÞ ôçò ïëïêëÞñùóçò ôçò ëýóçò ôïõò ìå ðñüãñáììá.

¸íáò ðåñßåñãïò õðïëïãéóìüò ôïõ áñéèìïý ð Ãéá ôïí õðïëïãéóìü ôïõ ëüãïõ ôçò ðåñéöÝñåéáò åíüò êýêëïõ ðñïò ôç äéÜìåôñü ôïõ Ý÷ïõí âñåèåß ðÜñá ðïëëïß ôñüðïé. ¸íáò áðü ôïõò ðéï ðåñßåñãïõò êáé ßóùò ï ðéï ðñùôüôõðïò åßíáé êáé áõôüò ðïõ âáóßæåôáé óôçí ôý÷ç! Áò õðïèÝóïõìå üôé Ý÷ïõìå Ýíáí ôåôñÜãùíï óôü÷ï ðëåõñÜò a = 1. Ìå êÝíôñï ôç ìéá êïñõöÞ ôïõ ôåôñáãþíïõ êáé áêôßíá ßóç ìå ôçí ðëåõñÜ a ÷áñÜóïõìå, Ýíá ôåôáñôïêýêëéï óôï åóùôåñéêü ôïõ. Ôï åìâáäüí ôïõ ôåôáñôïêõêëßïõ åßíáé: 1 ðá2 ð Å1= = 4 4 åíþ, ôï åìâáäüí ôïõ ôåôñáãþíïõ: Å2= á2 =1 a 'Áñá: r y Å1 Å1 ð = = ð=4 Ó÷Þìá 10-1. Å1 Å1 4 1 0 x ¸óôù ôþñá üôé ñß÷íïõìå âÝëç óôï óôü÷ï, þóôå êÜèå óçìåßï ôïõ íá Ý÷åé ßóç ðéèáíüôçôá íá ðëçãåß áðü Ýíá âÝëïò. ÈåùñçôéêÜ, áí ïé ñßøåéò åßíáé ðÜñá ðïëëÝò, ï ëüãïò ôùí âåëþí ðïõ èá ðëÞîïõí óçìåßá ìÝóá óôï ôåôáñôïêýêëéï ðñïò ôï óýíïëï üëùí ôùí âåëþí ðïõ Ý÷ïõí ðëÞîåé ïðïéïäÞðïôå óçìåßï ôïõ óôü÷ïõ, åßíáé ßóïò ìå ôï ëüãï ôùí äýï åìâáäþí, äçëáäÞ ßóïò ìå ð/4. Áíôß íá êÜíïõìå áõôü ôï ðåßñáìá åê ôïõ öõóéêïý, ÷Üíïíôáò ÷ñüíï êáé êéíäõíåýïíôáò áðü ôá âÝëç, ìðïñïýìå íá ôï ðñïóïìïéþóïõìå óôïí õðïëïãéóôÞ ùò åîÞò: ðáñÜãïõìå äýï ôõ÷áßïõò áñéèìïýò ìåôáîý 0 êáé 1, ðïõ ôïõò èåùñïýìå óáí ôéò óõíôåôáãìÝíåò x, y åíüò óçìåßïõ ðïõ âñßóêåôáé êÜðïõ ìÝóá óôï ôåôñÜãùíï. Áí 2

2

2

x +y <r

Þ

2

2

x +y <1

ôï óçìåßï âñßóêåôáé ìÝóá óôï ôåôáñôïêýêëéï. ÅðáíáëáìâÜíïíôáò óõíÝ÷åéá ôçí ðéï ðÜíù äéáäéêáóßá, äçëáäÞ ðáñÜãïíôáò óõíå÷þò ôõ÷áßá óçìåßá ôïõ ôåôñáãþíïõ êáé ìåôñþíôáò ôï 134

135


ðïóïóôü åêåßíùí ðïõ éêáíïðïéïýí ôçí ðéï ðÜíù ó÷Ýóç, ìðïñïýìå íá âñïýìå êáôÜ ðñïóÝããéóç ôçí ôéìÞ ôïõ ð/4.

Darts

ÐëÞèïò âåëþí

Pi

ÐñïóÝããéóç ôïõ ð

Calculate

Åéêüíá 10-1. ÄéåðáöÞ ãéá ôïí õðïëïãéóìü ôïõ ð

1,5m ê.ï.ê., ï Á÷éëëÝáò íáé ìåí èá ðëçóéÜæåé ôç ÷åëþíá áëëÜ äå èá ôçí ðåñÜóåé ðïôÝ. Áðü ôçí åìðåéñßá ìáò âÝâáéá îÝñïõìå üôé ðÜíôá ðñïóðåñíÜìå êÜôé ðïõ âñßóêåôáé ìðñïóôÜ ìáò êáé êéíåßôáé ìå ìéêñüôåñç ôá÷ýôçô,á ãé' áõôü êáé ï óõëëïãéóìüò üôé ôï Üèñïéóìá áðåßñùí ÷ñïíéêþí äéáóôçìÜôùí äßíåé Üðåéñï ÷ñüíï êáôáññßðôåôáé. Óôï ðñüãñáììá ðïõ èá äþóïõìå, èåùñïýìå üôé õðÜñ÷ïõí äýï áíôéêåßìåíá åëÝã÷ïõ ôýðïõ åéêüíáò, ðïõ ôï Ýíá ðáñéóôÜíåé ôïí Á÷éëëÝá êáé ôï Üëëï ðáñéóôÜíåé ôç ÷åëþíá. Åðßóçò, èåùñïýìå üôé õðÜñ÷åé Ýíá ðëáßóéï êåéìÝíïõ óôï ïðïßï ï ÷ñÞóôçò ðëçêôñïëïãåß ðüóåò öïñÝò åßíáé ôá÷ýôåñïò ï Á÷éëëÝáò áðü ôç ÷åëþíá êáé Ýíá ðëÞêôñï äéáôáãÞò ãéá íá áñ÷ßóåé ç ðñïóïìïßùóç ôçò êßíçóçò ôïõ Á÷éëëÝá êáé ôçò ÷åëþíáò.

Ôï ðñüãñáììá ãéá ôïí õðïëïãéóìü ôïõ ð ìå ôïí ôñüðï ðïõ áíáðôýîáìå åßíáé ôï åîÞò:

Private Sub Calculate_Click() 'ÌåôñçôÞò Dim Count As Long Dim x As Single Dim y As Single Dim r2 As Single 'ÔåôñÜãùíï áðüóôáóçò Dim DartsIn As Single 'ÂÝëç óôï ôåôáñôïêýêëéï Randomize DartsIn = 0 'Ãéá üëá ôá âÝëç For Count = 1 To CLng(Darts) 'Ôõ÷áßï x x = Rnd 'Tõ÷áßï y y = Rnd r2 = x ^ 2 + y ^ 2 If r2 <= 1 Then DartsIn = DartsIn + 1 Next Count pi = 4 * DartsIn / CLng(Darts) End Sub ÔñÝ÷ïíôáò ôï ðñüãñáììá ãéá äéáöïñåôéêÜ ðëÞèç ñßøåùí êáé ìå ôçí ßäéá ðÜíôá øåõäïãåííÞôñéá, ðÞñáìå ôéò åîÞò ôéìÝò:

ÐëÞèïò ñßøåùí 1.000.000 10.000.000 100.000.000

ÐñïóÝããéóç ôïõ ð 3.14322 3.141281 3.141608

ÁõôÞ ç ìÝèïäïò Ý÷åé åõñýôåñç åöáñìïãÞ óôïí ðñïóåããéóôéêü õðïëïãéóìü ðïóïôÞôùí ïé ïðïßåò ìðïñïýí íá åêöñáóôïýí óå ìïñöÞ åìâáäïý. Ôï üíïìá ôçò åßíáé Ìïnte Carlo, áðü ôç óõíïéêßá ôïõ ðñéãêéðÜôïõ ôïõ Ìïíáêü, üðïõ õðÜñ÷åé Ýíá ïíïìáóôü êáæßíï, ôï ïðïßï èåùñåßôáé ï "åîåõãåíéóìÝíïò" íáüò ôçò ôý÷çò.

Ôï ðáñÜäïîï ôïõ ôá÷ýðïäá Á÷éëëÝá êáé ôçò ÷åëþíáò Ãýñù óôï 450 ð.×. ï Ýëëçíáò öéëüóïöïò ÆÞíùí áìöéóâÞôçóå ôçí áíôßëçøç ðïõ åðéêñáôïýóå ìÝ÷ñé ôüôå üôé "ôï Üèñïéóìá áðåéñáñßèìùí ðïóïôÞôùí, áêüìá êé áí áõôÝò åßíáé ðïëý ìéêñÝò, ìðïñåß íá ãßíåé üóï ìåãÜëï èÝëïõìå", äéáôõðþíïíôáò ôï åîÞò ðáñÜäïîï: Ï ãïñãïðüäáñïò Á÷éëëÝáò âáäßæåé 10 öïñÝò ãñçãïñüôåñá áðü ìéá ÷åëþíá, ç ïðïßá ðñïçãåßôáé óôï äñüìï êáôÜ Ýíá óôÜäéï (ðåñßðïõ 150m). Ðüôå èá öôÜóåé ï Á÷éëëÝáò ôç ÷åëþíá; ÐïôÝ! Äéüôé ãéá íá öôÜóåé ï Á÷éëëÝáò ôç ÷åëþíá ðñÝðåé íá äéáíýóåé ôá 150m êáé íá

Á

Á Ó÷Þìá 10-2.

ðåñÜóåé áðü ôï óçìåßï Á óôï ïðïßï âñéóêüôáí ç ÷åëþíá áñ÷éêÜ. ¼ôáí üìùò âñåèåß óå áõôü ôï óçìåßï, ç ÷åëþíá èá Ý÷åé ðñï÷ùñÞóåé êáôÜ 15m êáé ï Á÷éëëÝáò èá Ý÷åé íá êáëýøåé ôç íÝá áðüóôáóç. Äéáíýïíôáò ôþñá ï Á÷éëëÝáò ôá 15m ç ÷åëþíá âñßóêåôáé ðÜëé ìðñïóôÜ êáôÜ 136

Achilles Turtle Faster Start

Åéêüíá 10-2. Ôï ðñüãñáììá ðïõ áíáðôýîáìå åßíáé ôï åîÞò:

Option Explicit Dim AchillesIni As Integer Dim TurtleIni As Integer Private Sub Form_Load() 'Áðïìíçìüíåõóå áñ÷éêÞ èÝóç Á÷éëëÝá êáé ÷åëþíáò óôçí ïèüíç AchillesIni = Achilles.Left TurtleIni = Turtle.Left End Sub Private Sub Start_Click() 'ÔñÝ÷ïõóá èÝóç Á÷éëëÝá Dim AchillesPos As Double 'Ðñïçãïýìåíç èÝóç Á÷éëëÝá Dim AchillesOldPos As Double 'ÔñÝ÷ïõóá èÝóç ÷åëþíáò Dim TurtlePos As Double 'Áñ÷Þ ìÝôñçóçò ÷ñüíïõ Dim tStartDelay As Double 'Á÷éëëÝáò êáé ÷åëþíá óôçí áñ÷éêÞ ôïõò èÝóç Achilles.Left = AchillesIni: AchillesPos = AchillesIni Turtle.Left = TurtleIni: TurtlePos = TurtleIni Do '×ñïíéêÞ êáèõóôÝñéóç tStartDelay = Timer Do While Timer - tStartDelay < 0.5 DoEvents Loop 'ÍÝá èÝóç Á÷éëëÝá êáé ÷åëþíáò AchillesOldPos = AchillesPos AchillesPos = TurtlePos TurtlePos = TurtlePos+(TurtlePos- AchillesOldPos)/Faster 'ÌåôáöïñÜ ôùí åéêüíùí óôçí áíôßóôïé÷ç èÝóç Achilles.Left = Cint(AchillesPos) Turtle.Left = Cint(TurtlePos) Loop While AchillesPos < TurtlePos End Sub ÁìÝóùò ìüëéò öïñôþíåôáé ç öüñìá ëáìâÜíïíôáé ïé áñ÷éêÝò èÝóåéò ôùí åéêïíéäßùí ðïõ áðåéêïíßæïõí ôïí Á÷éëëÝá êáé ôç ÷åëþíá. ¸ôóé, ôï ðÜôçìá ôïõ ðëÞêôñïõ Start ôïðïèåôåß ôá åéêïíßäéá óôçí áñ÷éêÞ ôïõò èÝóç. Óôç óõíÝ÷åéá, óôï âñü÷ï ðñïêáëåßôáé ÷ñïíéêÞ êáèõóôÝñçóç ãéá íá ðñïöôÜóåé íá äåé ôï ìÜôé ôçí êßíçóç êáé ãßíåôáé ðñïóïìïßùóç ôçò êßíçóçò ôïðïèåôþíôáò ôïí Á÷éëëÝá óôç èÝóç ôçò ÷åëþíáò êáé ôç ÷åëþíá óå íÝá èÝóç ðïõ õðïëïãßæåôáé áðü ôï ðüóåò öïñÝò åßíáé ôá÷ýôåñïò ôçò ï Á÷éëëÝáò. Áò óçìåéùèåß üôé ïé ìåôáâëçôÝò åßíáé ôýðïõ Double ãéá ìåãáëýôåñç áêñßâåéá. 137


ÊáñêéíéêÝò ëÝîåéò êáé ðñïôÜóåéò Ôá ðáé÷íßäéá ðïõ ìðïñïýí íá ãßíïõí ìå ôï ëüãï åßíáé áìÝôñçôá êáé äåß÷íïõí ôçí åõóôñïößá ôïõ áíèñþðéíïõ ðíåýìáôïò. ¸íá áðü áõôÜ åßíáé êáé ç áíß÷íåõóç êáé ç óýíèåóç êáñêéíéêþí ëÝîåùí êáé ðñïôÜóåùí. Ìå ôïí üñï êáñêéíéêÞ ëÝîç Þ ðñüôáóç åííïïýìå áõôÞ ðïõ ìðïñåß íá äéáâáóôåß êáé áíÜðïäá, äçëáäÞ áðü äåîéÜ ðñïò ôá áñéóôåñÜ, ÷ùñßò íá áëëÜîåé ç Ýííïéá Þ ôï íüçìÜ ôçò. ÖõóéêÜ, ðïëëÝò öïñÝò, ÷ñåéÜæïíôáé íá ãßíïõí êáé ìåñéêÝò áâáñßåò óôïí ôïíéóìü Þ ôï ÷ùñéóìü ôùí ëÝîåùí óôéò ðñïôÜóåéò. Áõôü üìùò äåí áöáéñåß ôßðïôå áðü ôç ìáãåßá ðïõ ðñïêáëåß ôï ôåëéêü áðïôÝëåóìá. ÊëáóéêÜ ðáñáäåßãìáôá ôÝôïéùí ðñïôÜóåùí áðïôåëïýí ç ðñüôáóç ôçò ãíùóôÞò åðéãñáöÞò: "ÍÉØÏÍ ÁÍÏÌÇÌÁÔÁ ÌÇ ÌÏÍÁÍ ÏØÉÍ" ðïõ õðÞñ÷å óå êñÞíç ôçò Áãßáò Óïößáò, ç ïðïßá äå óþæåôáé, ôï ãíùóôü åõèõìïëüãçìá: "Madam in Edem I'm Adam"

'Åëåã÷ïò êáñêéíéóìïý If Reverse = WithoutSpaces Then Sentence = WithoutSpaces Led.FillColor = vbRed Else Led.FillColor = vbGreen End If End Sub Ôï ðñüãñáììá óôïí ðñþôï âñü÷ï áöáéñåß ôá êåíÜ ðïõ õðÜñ÷ïõí ìåôáîý ôùí ëÝîåùí êáé ìåôáôñÝðåé üëá ôá ãñÜììáôá óå ðåæÜ. Óôï äåýôåñï âñü÷ï áíôéóôñÝöåé ôç ëÝîç êáé óôï ôÝëïò ðñáãìáôïðïéåß ôïí ôåëéêü Ýëåã÷ï ãéá ôïí êáñêéíéóìü ôçò ëÝîçò.

Ôï ðáé÷íßäé êñåìÜëá

êáé ç ñÞóç ðïõ áðïäßäåôáé óôï ÍáðïëÝïíôá: "Able was É ere É saw Elba" Åðßóçò ïé ëÝîåéò: Üëëá, Ý÷å, üóï, 'Áííá, ÓÜââáò, level, deed, civic åßíáé êáñêéíéêÝò ëÝîåéò. Áðü Ýíáí õðïëïãéóôÞ äåí Ý÷ïõìå ôçí áðáßôçóç íá äçìéïõñãåß êáñêéíéêÝò ëÝîåéò Þ ðñïôÜóåéò. Ìðïñïýìå üìùò íá ôïõ áíáèÝóïõìå íá åëÝãîåé áí ìéá ðñüôáóç Þ ëÝîç åßíáé êáñêéíéêÞ. Óôï ðñüãñáììá ðïõ èá äþóïõìå ç ðñüôáóç ðïõ ðñüêåéôáé íá åëåã÷èåß ãéá êáñêéíéóìü, ðëçêôñïëïãåßôáé óå Ýíá ðëáßóéï êåéìÝíïõ ìå üíïìá Sentence. Óôï ðÜôçìá åíüò ðëÞêôñïõ äéáôáãÞò (ìå üíïìá Cancer), áí ç ðñüôáóç åßíáé êáñêéíéêÞ, áëëÜæåé óå êüêêéíï ôï ÷ñþìá åíüò ãåùìåôñéêïý ó÷Þìáôïò (ìå üíïìá Led), ðïõ Ý÷åé ôç ìïñöÞ êýêëïõ. Áí ç ðñüôáóç äåí åßíáé êáñêéíéêÞ, ôï ÷ñþìá ôïõ ãåùìåôñéêïý ó÷Þìáôïò ãßíåôáé ðñÜóéíï. Åðßóçò, üôáí åéóÜãåôáé íÝá ðñüôáóç ôï ÷ñþìá ôïõ ãåùìåôñéêïý ó÷Þìáôïò ãßíåôáé Üóðñï.

Åéêüíá 10-3. Ôï ðáñÜèõñï ìåôÜ ôïí Ýëåã÷ï êáñêéíéêÞò öñÜóçò

Ôï ðáé÷íßäé "êñåìÜëá" åßíáé áðü ôá ðéï äçìïöéëÞ ðáé÷íßäéá ôùí ìáèçôéêþí èñáíßùí. Ãéá íá ìç ÷áëÜóåé ç ðáñÜäïóç, ôþñá ðïõ ôï èñáíßï èá áíôéêáôáóôáèåß ìå ôïí ðÜãêï ðïõ âñßóêåôáé ôïðïèåôçìÝíïò ï õðïëïãéóôÞò, èá áíáðôýîïõìå Ýíá ðñüãñáììÜ ìå ôï ïðïßï èá ìðïñïýìå íá ðáßæïõìå áõôü ôï ðáé÷íßäé ìå óýíôñïöï ôïí õðïëïãéóôÞ. Áò äïýìå üìùò ðñþôá ôïõò êáíüíåò ôïõ ðáé÷íéäéïý. Ôï ðáé÷íßäé ðáßæåôáé ìå äýï ðáßêôåò ðïõ áêïëïõèïýí ôá åîÞò âÞìáôá: 1. Ï Ýíáò ðáßêôçò óêÝöôåôáé ìéá ëÝîç êáé ôç ãñÜöåé êñõöÜ óå Ýíá ÷áñôß. 2. ÖôéÜ÷íåé Ýíá óêáñßöçìá ôçò ëÝîçò, áðü ôï ðñþôï êáé áðü ôï ôåëåõôáßï ãñÜììá êáé ìéá óåéñÜ ðáýëåò, þóôå êÜèå ðáýëá íá áíôéóôïé÷åß óå Ýíá åíäéÜìåóï ãñÜììá. 3. Äåß÷íåé ôï óêáñßöçìá óôïí Üëëï ðáßêôç. 4. Ï äåýôåñïò ðáßêôçò ëÝåé êÜðïéï ãñÜììá. 5. Áí ôï ãñÜììá õðÜñ÷åé ìÝóá óôç ëÝîç, ï ðñþôïò ðáßêôçò ôï óçìåéþíåé óôç èÝóç ôçò áíôßóôïé÷çò ðáýëáò. Áí üìùò äåí õðÜñ÷åé, ÷ñåþíåé ìå Ýíá ðüíôï áðïôõ÷ßáò ôï äåýôåñï ðáßêôç. 6. Ïé ðñïóðÜèåéåò ôïõ äåýôåñïõ ðáßêôç óõíå÷ßæïíôáé, ìÝ÷ñé íá âñåé ôç ëÝîç, ïðüôå êåñäßæåé, Þ ìÝ÷ñé íá õðåñâåß êÜðïéï áñéèìü áðïôõ÷éþí, ïðüôå ÷Üíåé. Óôï ðñüãñáììá ðïõ áêïëïõèåß, ï õðïëïãéóôÞò äÝ÷åôáé ôçí êñõöÞ ëÝîç óå Ýíá ðëáßóéï êåéìÝíïõ áðü ôïí ðñþôï ðáßêôç êáé áíáëáìâÜíåé íá ôïí áíôéêáôáóôÞóåé óôï ðáé÷íßäé. Ðáôþíôáò ï ðáßêôçò Ýíá ðëÞêôñï äéáôáãÞò ç ëÝîç áíôéêáèßóôáôáé óôï ðëáßóéï êåéìÝíïõ ìå ôïí óêåëåôü ôçò. Óôç óõíÝ÷åéá ï äåýôåñïò ðáßêôçò ðñïóðáèåß íá ìáíôÝøåé Ýíá Ýíá ãñÜììá êáé ðáñáêïëïõèåß ôï óêïñ ôïõ. Áí óõìðëçñùèïýí üëá ôá ãñÜììáôá ôï ðáé÷íßäé áñ÷ßæåé áðü ôçí áñ÷Þ.

Ôï ðñüãñáììá ðïõ áíáðôýîáìå åßíáé ôï åîÞò:

Private Sub Sentence_Change() Led.FillColor = vbWhite End Sub Private Dim Dim Dim Dim

Letter Display Score

Sub Cancer_Click() WithoutSpaces As String Letter As String * 1 i As Integer Reverse As String

'Áöáßñåóç êåíþí äéáóôçìÜôùí, ìåôáôñïðÞ óå êåöáëáßá WithoutSpaces = "" For i = 1 To Len(Sentence) Letter = UCase(Mid(Sentence, i, 1)) If Letter<>" " Then WithoutSpaces=WithoutSpaces+Letter Next i 'ÁíôéóôñïöÞ ðñüôáóçò Reverse = "" For i = 1 To Len(WithoutSpaces) Letter = Mid(WithoutSpaces, i, 1) Reverse = Letter + Reverse Next i 138

DoCrypto

Åéêüíá 10-4. Ôï ðñüãñáììá ðïõ áíáðôýîáìå åßíáé ôï åîÞò:

Option Explicit Dim Word As String 'ÌåôáâëçôÞ ãéá ôçí êñõöÞ ëÝîç Dim Crypto As String 'ÌåôáâëçôÞ ãéá ôïí óêåëåôü Private Sub Form_Load() 'Áñ÷éêïðïßçóç ìåôáâëçôþí, áðåíåñãïðïßçóç áíôéêåéìÝíùí Score = 0 Letter = "" Letter.Enabled = False End Sub 139


Private Sub DoCrypto_Click() Dim CryptoLen As Integer

Ïé Ñùìáßïé ÷ñçóéìïðïéïýóáí 7 ãñÜììáôá ãéá ôçí ðáñÜóôáóç ôùí áñéèìþí, ôá:

'Áí ç ëÝîç Ý÷åé ëéãüôåñá áðü 2 ãñÜììáôá, äéÜêïøå If Len(Display) < 2 Then GoTo ExitDoCrypto 'ÌåôÜôñåøå ôá ãñÜììáôá óå êåöáëáßá êáé óõãêñÜôçóå ôç ëÝîç Word = UCase(Display) 'Äçìéïýñãçóå ôï óêåëåôü ôçò ëÝîçò Crypto = Word CryptoLen = Len(Crypto) Mid(Crypto, 2, CryptoLen - 2) = String(CryptoLen, "-") 'Ðáñïõóßáóå ôï óêåëåôü Display = Crypto 'Åíåñãïðïßçóå êáé áðåíåñãïðïßçóå áíôéêåßìåíá DoCrypto.Enabled = False 'Áðåíåñãïðïßçóå ôï ðëÞêôñï 'Åíåñãïðïßçóå êáé Letter.Enabled = True 'åóôßáóå óôï ðëáßóéï êåéìÝíïõ ãéá ôï ãñÜììá Letter.SetFocus ExitDoCrypto: End Sub Private Sub Letter_LostFocus() 'Äåßêôçò. True áí ôï ãñÜììá õðÜñ÷åé óôç ëÝîç Dim Exists As Boole Dim Pos As Integer 'ÈÝóç ãñÜììáôïò ìÝóá óôç ëÝîç 'Áñ÷éêïðïßçóç ìåôáâëçôþí Letter = UCase(Letter) Exists = False 'Ç áíáæÞôçóç áñ÷ßæåé áðü ôï äåýôåñï ãñÜììá Pos = 2 Pos = InStr(Pos, Word, Letter) 'Áí âñÝèçêå ôï ãñÜììá, óÜñùóå ôç ëÝîç ãéá åðáíáëÞøåéò ôïõ ßäéïõ ãñÜììáôïò Do While (Pos <> 0) And (Pos <> Len(Word)) 'ÂñÝèçêå ãñÜììá Exists = True 'ÁíôéêáôÝóôçóå ðáýëá ìå ãñÜììá Mid(Crypto, Pos, 1) = Letter Pos = InStr(Pos + 1, Word, Letter) 'ÍÝá áíáæÞôçóç Loop 'Åëåãîå áí âñÝèçêå ôïõëÜ÷éóôïí ìéá öïñÜ ãñÜììá If Exists Then 'Ðáñïõóßáóå ôïí óõìðëçñùìÝíï óêåëåôü Display = Crypto Else 'Áýîçóå ôï óêïñ Score = Score + 1 End If 'ÊáèÜñéóå ôï ãñÜììá Letter = "" 'Åëåãîå áí âñÝèçêå ç ëÝîç If Crypto <> Word Then Letter.SetFocus Else DoCrypto.Enabled = True Letter.Enabled = False Display.SetFocus Score = 0 End If End Sub Ç õðïñïõôßíá åîõðçñÝôçóçò óõìâÜíôùí DoCrypto_Click åîõðçñåôåß ôïí ðñþôï ðáßêôç, åíþ ç Letter_LostFocus åîõðçñåôåß ôï äåõýôåñï.

ÌåôáôñïðÞ ñùìáúêþí áñéèìþí óå áñáâéêïýò Ïé Ñùìáßïé ÷ñçóéìïðïéïýóáí Ýíá êÜðùò ðåñßåñãï óýóôçìá áñßèìçóçò. Áí êáé óÞìåñá ÷ñçóéìïðïéåßôáé ôï áñáâéêü óýóôçìá ðïõ åßíáé ðéï åý÷ñçóôï, ôï óýóôçìá ôùí Ñùìáßùí äåí Ý÷åé åêôïðéóôåß åíôåëþò áðü üëåò ôéò áíèñþðéíåò äñáóôçñéüôçôåò. Óôá "êáíôñÜí" ìåñéêþí ñïëïãéþí Þ óå åðéãñáöéêÝò áíáöïñÝò çìåñïìçíéþí, áêüìç êáé óôç ìÝôñçóç óðïõäáßùí ãåãïíüôùí, üðùò åßíáé ïé ÏëõìðéÜäåò ê.Ü., ïé áñéèìïß áíáãñÜöïíôáé óôï Ñùìáúêü óýóôçìá. 140

É,

V,

×,

L,

C,

D,

M

100,

500,

1000

ôá ïðïßá áíôéóôïé÷ïýí óôïõò áñéèìïýò: 1,

5,

10,

50,

Ìå áõôÜ ôá ãñÜììáôá êáé ìüíï ðáñßóôáíáí üëïõò ôïõò áñéèìïýò. Ãéá íá äïýìå üìùò óå ðïéïí áñáâéêü áñéèìü áíôéóôïé÷åß Ýíáò ñùìáúêüò, ðñÝðåé íá ãíùñßæïõìå ôïõò êáíüíåò óýíèåóçò ðïõ ÷ñçóéìïðïéïýóáí. Áõôïß åßíáé: 1. ¼ôáí Ý÷ïõìå óõíå÷üìåíá äýï üìïéá ãñÜììáôá ðñïóèÝôïõìå ôéò áîßåò ôïõò, ð.÷. CCC = 100 + 100 + 100 = 300 2. ¼ôáí Ýíá ãñÜììá Ý÷åé ìåãáëýôåñç áîßá áðü ôï åðüìåíü ôïõ, ç áîßá ôïõ åßíáé ðñïóèåôéêÞ, ð.÷. CXVI = 100 + 10 + 5 + 1 = 116 3. ¼ôáí Ýíá ãñÜììá Ý÷åé ìéêñüôåñç áîßá áðü ôï åðüìåíü ôïõ, ç áîßá ôïõ åßíáé áöáéñåôéêÞ, ð.÷. XL = 50 - 10 = 40 Ôï ðñüãñáììá ðïõ èá äçìéïõñãÞóïõìå äÝ÷åôáé ìéá óåéñÜ áðü ãñÜììáôá (20 ôï ðïëý) êáé üôáí ðñïêýøåé ôï óõìâÜí LostFocus óôï ðëáßóéï êåéìÝíïõ åéóáãùãÞò ôçò, åëÝã÷åé áí áõôÞ áðïôåëåß ñùìáúêü áñéèìü êáé áí áðïôåëåß, õðïëïãßæåé ôçí ôéìÞ ôïõ, äéáöïñåôéêÜ ðáñïõóéÜæåé êáôÜëëçëï ìÞíõìá.

Roman Arabic

Åéêüíá 10-5. Ç äéåðáöÞ äåí åßíáé áíáãêáßï íá ðåñéÝ÷åé ðÜíôá ðëÞêôñá

Private Sub Roman_LostFocus() Dim Letter As String * 1 Dim NextLetter As String * 1 Dim i As Integer Dim LetterWeight As Integer Dim NextLetterWeight As Integer If (Len(Roman) < 1) Or (Len(Roman) > 20) Then Arabic = "Åêôüò ïñßùí" 'ÔåñìÜôéóå GoTo ExitRoman End If 'Áñ÷éêÝò ôéìÝò Arabic = 0: Roman = Roman & " " 'Ãéá êÜèå ãñÜììá ôïõ ñùìáúêïý For i = 1 To Len(Roman) - 1 Letter = Mid(Roman, i, 1): NextLetter = Mid(Roman, i+1, 1) 'Âñåò ôï âÜñïò ôïõ ãñÜììáôïò Select Case Letter Case "M" LetterWeight = 1000 Case "D" LetterWeight = 500 Case "C" LetterWeight = 100 Case "L" LetterWeight = 50 Case "X" LetterWeight = 10 Case "V" LetterWeight = 5 Case "I" LetterWeight = 1 Case Else Arabic = "Ìç ñùìáúêüò" GoTo ExitRoman End Select 141


'Âñåò ôï âÜñïò ôïõ ãñÜììáôïò Select Case NextLetter Case "M" NextLetterWeight = 1000 Case "D" NextLetterWeight = 500 Case "C" NextLetterWeight = 100 Case "L" NextLetterWeight = 50 Case "X" NextLetterWeight = 10 Case "V" NextLetterWeight = 5 Case "I" NextLetterWeight = 1 Case " " NextLetterWeight = 0 End Select If LetterWeight >= NextLetterWeight Then Arabic = Arabic + LetterWeight Else Arabic = Arabic - LetterWeight End If Next i Roman = Left(Roman, Len(Roman) - 1) Roman.Setfocus ExitRoman: End Sub

ÐáñáôçñÞóôå üôé ðñéí ôçí åßóïäï óôï âñü÷ï áõîÜíåôáé êáôÜ ìéá èÝóç ï ñùìáúêüò áñéèìüò, þóôå íá Ý÷åé íüçìá êáé ç ýðáñîç åðïìÝíïõ ãñÜììáôïò ãéá ôï ôåëåõôáßï ôïõ. Ôï âÜñïò ôïõ êåíïý äéáóôÞìáôïò ïñßæåôáé 0.

Ðñüóèåóç äõáäéêþí áñéèìþí Äåí åßíáé ëßãåò ïé öïñÝò ðïõ ùò ìç÷áíéêïß áó÷ïëïýìåíïé ìå ôïõò õðïëïãéóôÝò, ðñÝðåé íá êÜíïõìå ðñÜîåéò ìå äõáäéêïýò áñéèìïýò. Óå áõôÞ ôçí ðáñÜãñáöï èá áíáëýóïõìå Ýíá ðñüãñáììá, ôï ïðïßï ðñïóèÝôåé äýï èåôéêïýò áêÝñáéïõò áñéèìïýò ãñáììÝíïõò óôï äõáäéêü óýóôçìá. Ôï ðñüâëçìá äåí åßíáé ôüóï áðëü üóï öáßíåôáé, áöïý äåí õðÜñ÷åé ôñüðïò áðåõèåßáò åéóáãùãÞò äõáäéêïý áñéèìïý óå Ýíá ðëáßóéï êåéìÝíïõ ïýôå óõíáñôÞóåéò åêôÝëåóçò ðñÜîåùí ìåôáîý äõáäéêþí áñéèìþí. Ç åßóïäïò ôùí äõáäéêþí áñéèìþí ìðïñåß íá ãßíåé ìüíï áí áõôïß åéóá÷èïýí ìå ìïñöÞ óõìâïëïóåéñþí êáé ïé ðñÜîåéò ìåôáîý ôïõò ãßíïíôáé åöáñìüæïíôáò bit ðñïò bit ôïõò áëãüñéèìïõò ôùí âáóéêþí ðñÜîåùí. Ôá âÞìáôá ôïõ áëãïñßèìïõ ôçò ðñüóèåóçò ôùí áñéèìþí åßíáé: 1. ÅõèõãñÜììéóç ôùí øçößùí ôïõò, äçëáäÞ ôïðïèÝôçóç ôïõ øçößïõ ôùí ìïíÜäùí ôïõ åíüò, êÜôù áðü ôï øçößï ôùí ìïíÜäùí ôïõ Üëëïõ, ôïðïèÝôçóç ôïõ øçößïõ ôùí äõÜäùí ôïõ åíüò, êÜôù áðü ôï øçößï ôùí äõÜäùí ôïõ Üëëïõ ê.ï.ê. Ç åõèõãñÜììéóç åðéâÜëëåôáé, äéüôé åíþ ç äéá÷åßñéóç ôùí óõìâïëïóåéñþí ãßíåôáé áðü ôá áñéóôåñÜ ðñïò ôá äåîéÜ, ç ðñüóèåóç ãßíåôáé áðü ôá äåîéÜ ðñïò ôá áñéóôåñÜ. Ãéá ðáñÜäåéãìá, áí äþóïõìå ôéò óõìâïëïóåéñÝò "10010101" êáé "110" ÷ùñßò íá êÜíïõìå åõèõãñÜììéóç ôùí øçößùí, åßíáé óáí íá ðñïóðáèïýìå íá êÜíïõìå ôçí ðñüóèåóç: 10010111 + 110 Ç åõèõãñÜììéóç ôùí øçößùí ãßíåôáé ôïðïèåôþíôáò ìçäåíéêÜ óôá áñéóôåñÜ ôïõ ìéêñüôåñïõ áñéèìïý, þóôå êáé ïé äýï áñéèìïß íá áðïêôÞóïõí ôï ßäéï ìÞêïò: 10010111 + 00000110 2. Ðñüóèåóç ôùí áíôßóôïé÷ùí øçößùí ëáìâÜíïíôáò õð' üøéí êáé ôá äéáäï÷éêÜ êñáôïýìåíá. Îåêéíþíôáò áðü ôá äåîéÜ, êáé ìå áñ÷éêü êñáôïýìåíï 0, ðñïóèÝôïõìå ôï øçößï ôùí ìïíÜäùí ôïõ åíüò ìå ôï øçößï ôùí ìïíÜäùí ôïõ Üëëïõ, êéíïýìåíïé ðñïò ôá áñéóôåñÜ 142

ðñïóèÝôïõìå ôï êñáôïýìåíï, ðïõ ðñïÝêõøå áðü ôçí ðñïçãïýìåíç ðñüóèåóç, ìå ôï øçößï ôùí äõÜäùí ôïõ åíüò êáé ìå ôï øçößï ôùí äõÜäùí ôïõ Üëëïõ ê.ï.ê. Ôá äéáäï÷éêÜ øçößá ôïõ áèñïßóìáôïò êáé ôá äéáäï÷éêÜ êñáôïýìåíá õðïëïãßæïíôáé ùò åîÞò: Áí ôï åðéìÝñïõò Üèñïéóìá åßíáé ìéêñüôåñï áðü 2 (0 Þ 1, äçëáäÞ ìïíïøÞöéïò óôï äõáäéêü), ôüôå áõôü áðïôåëåß êáé ôï áíôßóôïé÷ï øçößï ôïõ áèñïßóìáôïò. Åðßóçò, ôï íÝï êñáôïýìåíï åßíáé 0. Áí üìùò ôï Üèñïéóìá ìåôáîý äýï øçößùí åßíáé ìåãáëýôåñï Þ ßóï ôïõ 2 (2 Þ 3, äçëáäÞ óôï äõáäéêü 10 Þ 11 áíôßóôïé÷á), ôüôå ôï áíôßóôïé÷ï øçößï ôïõ áèñïßóìáôïò õðïëïãßæåôáé áí áöáéñåèåß 2 (áðïôÝëåóìá 0 Þ 1). Åðßóçò ôï íÝï êñáôïýìåíï åßíáé 1. 3. ÓõíÝíùóç ôùí åðß ìÝñïõò áèñïéóìÜôùí ãéá ôï ó÷çìáôéóìü ôçò óõìâïëïóåéñÜò ðïõ ðáñéóôÜíåé ôï Üèñïéóìá. 4. ÔïðïèÝôçóç ôïõ ôåëéêïý êñáôïõìÝíïõ, áí õðÜñ÷åé, ìðñïò áðü ôç óõìâïëïóåéñÜ Üèñïéóìá êáé åõèõãñÜììéóç üëùí ôùí óõìâïëïóåéñþí.

NumA NumB Sum Åéêüíá 10-6. ÐáñáóôáôéêÞ äéåðáöÞ

Private Dim Dim Dim Dim Dim Dim Dim

Sub NumB_LostFocus() NumALen As Integer NumBLen As Integer BitA As Integer BitB As Integer BitC As Integer Carry As Integer i As Integer

'ÌÞêïò Á ðñïóèåôÝïõ 'ÌÞêïò  ðñïóèåôÝïõ 'ÔñÝ÷ïí bit Á ðñïóèåôÝïõ 'ÔñÝ÷ïí bit B ðñïóèåôÝïõ 'ÔñÝ÷ïí bit áèñïßóìáôïò 'Êñáôïýìåíï 'Äåßêôçò

'ÅõèõãñÜììéóç øçößùí. ÓõìðëÞñùóç ìå ìçäåíéêÜ NumALen = Len(NumA): NumBLen = Len(NumB) If NumALen < NumBLen Then NumA = String(NumBLen - NumALen, "0") + NumA Else NumB = String(NumALen - NumBLen, "0") + NumB End If 'Ðñüóèåóç áñéèìþí Sum = "" Carry = 0 'Áñ÷éêü êñáôïýìåíï 0 For i = Len(NumA) To 1 Step -1 'ÓÜñùóç áðü äåîéÜ óôá áñéóôåñÜ 'ÁñéèìçôéêÞ ôéìÞ ôùí bits BitA = CLng(Mid(NumA, i, 1)) BitB = CLng(Mid(NumB, i, 1)) BitC = BitA + BitB + Carry 'Áèñïéóìá 'Õðïëïãéóìüò êñáôïõìÝíïõ If BitC < 2 Then Carry = 0 Else Carry = 1 BitC = BitC - 2 End If 'ÔïðïèÝôçóç bit óôï ôåëéêü Üèñïéóìá Sum = CStr(BitC) & Sum Next i 'ÔïðïèÝôçóç ôåëéêïý êñáôïõìÝíïõ êáé åõèõãñÜììéóç óõìâïëïóåéñþí If Carry = 1 Then Sum = "1" & Sum NumA = "0" & NumA NumB = "0" & NumB End If End Sub 143


ÅñãáóôçñéáêÝò ÁóêÞóåéò

ÌÜèçìá 11

1. ÕëïðïéÞóôå ôï ðñüãñáììá õðïëïãéóìïý ôïõ áñéèìïý ð. 2. ÕëïðïéÞóôå ôï ðñüãñáììá ðïõ ðñïóïìïéþíåé ôï ðáñÜäïîï ôïõ Á÷éëëÝá êáé ôçò ÷åëþíáò.

ÅêóöáëìÜôùóç

3. ÕëïðïéÞóôå ôï ðñüãñáììá ðïõ åëÝã÷åé áí ìéá ðñüôáóç åßíáé êáñêéíéêÞ Þ ü÷é. 4. ÕëïðïéÞóôå ôï ðñüãñáììá ðïõ ðñïóïìïéþíåé ôï ðáé÷íßäé êñåìÜëá. 5. ÕëïðïéÞóôå ôï ðñüãñáììá ðïõ ìåôáôñÝðåé ôïõò ñùìáúêïýò áñéèìïýò óå áñáâéêïýò. 6. ÕëïðïéÞóôå ôï ðñüãñáììá ôçò ðñüóèåóçò äýï äõáäéêþí áñéèìþí. 7. ÃñÜøôå ðñüãñáììá ãéá ôçí ðñïóïìïßùóç ôïõ ðáé÷íéäéïý "êïñþíá- ãñÜììáôá". Óõìðëçñþóôå ôï ðñüãñáììá þóôå íá ðáñïõóéÜæåé ôçí áìåñïëçøßá ôïõ åìöáíßæïíôáò óå äýï ðëáßóéá êåéìÝíïõ ôï ðïóïóôü ôùí ñßøåùí êïñþíá êáé ôï ðïóïóôü ôùí ñßøåùí ãñÜììáôá ìåôÜ áðü 1.000.000 ñßøåéò. 8. ÃñÜøôå ðñüãñáììá ðïõ íá ðñïóïìïéþíåé ôçí êëÞñùóç ëá÷åßïõ. Õðüäåéîç: Íá ðáñá÷èïýí 8 áñéèìïß ìåôáîý 0 êáé 9 êáé íá ôïðïèåôçèïýí óôç óåéñÜ.

Óçìåéþóåéò:

Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí:

Íá äéáêñßíïõí ôá åßäç ôùí ëáèþí. Íá åêìåôáëëåýïíôáé ôá åñãáëåßá åêóöáëìÜôùóçò ôïõ ðåñéâÜëëïíôïò åñãáóßáò. Íá é÷íçëáôïýí ôï ðñüãñáììÜ ôïõò êáé íá áíé÷íåýïõí ôá ëïãéêÜ ëÜèç ðïõ ðåñéÝ÷åé.

¼óï ðéï ìåãÜëá êáé ðéï óýíèåôá ãßíïíôáé ôá ðñïãñÜììáôá ìáò, ôüóï ðéï åýêïëï åßíáé íá õðïðÝóïõìå óå ëÜèç, ôá ïðïßá äýóêïëá áíé÷íåýïíôáé. Áêüìá êáé ï ðéï Ýìðåéñïò êáé ðñïóåêôéêüò ðñïãñáììáôéóôÞò äåí ìðïñåß íá áðïöýãåé ôá ðñïãñáììáôéóôéêÜ ëÜèç, ôá áðïêáëïýìåíá æéæÜíéá Þ æïõæïýíéá (bugs), êáé åõèýò åîáñ÷Þò íá óõíôÜîåé ðñïãñÜììáôá ðïõ ëåéôïõñãïýí Üøïãá óå üëï ôïí êýêëï æùÞò ôïõò. Ãéá ôï ëüãï áõôü ìåôÜ áðü ôç óõããñáöÞ ôïõ ðñïãñÜììáôïò åðéâÜëëåôáé íá áêïëïõèÞóåé ç öÜóç ôùí äïêéìþí ðñïêåéìÝíïõ íá åíôïðéóôïýí êáé íá äéïñèùèïýí ôá ëÜèç ìå ôç äéáäéêáóßá ôçò åêóöáëìÜôùóçò (debugging). Óå áõôü ôï ìÜèçìá èá áó÷ïëçèïýìå ìå ôá åñãáëåßá åêóöáëìÜôùóçò ðïõ äéáèÝôåé ç VB, ôá ïðïßá ìáò åðéôñÝðïõí íá äéáãíþóïõìå ôá ðñïâëÞìáôá, íá ðñïóäéïñßóïõìå ôá ëÜèç êáé íá ðñï÷ùñÞóïõìå óôç äéüñèùóÞ ôïõò.

¼ëá ôá ðñïãñÜììáôá Ý÷ïõí ëÜèç. Ç áñ÷Þ ôïõ õðåñáéóéüäïîïõ ðñïãñáììáôéóôÞ

Êáôçãïñßåò ëáèþí Ï âáèìüò äõóêïëßáò ôçò åêóöáëìÜôùóçò åîáñôÜôáé áðü ôá åßäç ôùí ëáèþí, ôá ïðïßá åí ãÝíåé Áí êÜôé ìðïñåß íá ðÜåé óôñáâÜ, èá ðÜåé. ìðïñåß íá åßíáé: Ï íüìïò ôïõ ÌÝñöõ

ÓõíôáêôéêÜ ÅêôÝëåóçò ËïãéêÜ Ôá óõíôáêôéêÜ ëÜèç (syntax errors) ïöåßëïíôáé óôçí ðáñáâßáóç ôùí êáíüíùí óýíôáîçò êáé ãñáììáôéêÞò ôçò VB. Ãéá ðáñÜäåéãìá, ç ðáñÜëåéøç ìéáò ðáñÝíèåóçò Þ åíüò êüììáôïò, ç ëáíèáóìÝíç ðëçêôñïëüãçóç ìéáò êùäéêÞò ëÝîçò Þ ç åëëåéðÞò óýíôáîç ìéáò ðñïãñáììáôéóôéêÞò äïìÞò, áðïôåëïýí óõíôáêôéêÜ ëÜèç. Ôá ëÜèç áõôÜ åíôïðßæïíôáé åýêïëá ãéáôß ìáò ôá õðïäåéêíýåé Üìåóá ï ìåôáöñáóôÞò ôïõ ðåñéâÜëëïíôïò åñãáóßáò. ÌÜëéóôá, ôï ðåñéâÜëëïí åñãáóßáò ðåñéÝ÷åé ôç ëåéôïõñãßá Auto Syntax Check, ç ïðïßá üôáí åßíáé åíåñãïðïéçìÝíç, êáôÜ ôçí ðëçêôñïëüãçóç êÜèå ãñáììÞò åëÝã÷åôáé ï êþäéêáò ôçò ãéá êÜðïéá åßäç óõíôáêôéêþí ëáèþí. 1. Áðü ôï ìåíïý åðéëÝãïõìå Tools | Options. 2. ÄéáëÝãïõìå ôïí êáñôåëïäåßêôç Editor. 3. ÌáñêÜñïõìå ôï ðëáßóéï óçìåßùóçò Auto Syntax Check.

Åéêüíá 11-1. Ñýèìéóç ãéá áõôüìáôo óõíôáêôéêü êáé ïñèïãñáöéêü Ýëåã÷ï 144

145


Áí ç ãñáììÞ äåí ðåñéÝ÷åé ëÜèç ãßíåôáé êáëëéôå÷íéêÞ ìïñöïðïßçóÞ ôçò, ìå ôïðïèÝôçóç åíüò ìüíï êåíïý äéáóôÞìáôïò ìåôáîý ôùí ëÝîåùí, ìå ìðëå ÷ñùìáôéóìü êÜðïéùí êùäéêþí ëÝîåùí, ìå ôÞñçóç ôçò ïìïéïìïñößáò êåöáëáßùí êáé ðåæþí ãñáììÜôùí ìÝóá óôéò ëÝîåéò. Áíôßèåôá, áí ç ãñáììÞ ðåñéÝ÷åé ëÜèç ÷ñùìáôßæåôáé êüêêéíç êáé ôáõôü÷ñïíá åìöáíßæåôáé äéáëïãéêü ðáñÜèõñï ìå ìÞíõìá ðïõ åðåîçãåß ôï ëÜèïò.

ÐñÜãìáôé, áí êáôÜ ôç óôéãìÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò, ðëçêôñïëïãÞóïõìå ìéá óõìâïëïóåéñÜ óôï ðëáßóéï êåéìÝíïõ Decimal, èá åìöáíéóôåß ôï äéáëïãéêü ðáñÜèõñï ðïõ ðñïåéäïðïéåß ãéá ôï ëÜèïò. Êùäéêüò ëÜèïõò ÐåñéãñáöÞ ëÜèïõò

ÐáñÜäåéãìá 11-1. ÊÜíôå êëéê ãéá ôåñìáôéóìü ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò.

¸óôù üôé åéóÜãïõìå ôï ðñüãñáììá ôçò åöáñìïãÞò "ìåôáôñïðÞ áêåñáßïõ äåêáäéêïý óå äõáäéêü" ôïõ ìáèÞìáôïò 9. ÊáôÜ ôçí ðëçêôñïëüãçóç ôçò ðñþôçò ãñáììÞò ôïõ áëãïñßèìïõ, áðü âéáóýíç, äåí ðëçêôñïëïãïýìå ôçí áñéóôåñÞ ðáñÝíèåóç. Ôç óôéãìÞ ðïõ áëëÜæïõìå ãñáììÞ ï áõôüìáôïò óõíôáêôéêüò Ýëåã÷ïò áíé÷íåýåé ôï óöÜëìá.

ÊÜíôå êëéê ãéá ìåôÜâáóç óôï óçìåßï ôïõ êþäéêá ðïõ ðñïêáëåß ôç äéáêïðÞ. ÊÜíôå êëéê ãéá åðåîÞãçóç ôçò áéôßáò ðïõ ðñïêÜëåóå ôï óöÜëìá.

Ç ãñáììÞ ìå ôï ëÜèïò óçìåéþíåôáé ìå êüêêéíï ÷ñþìá. Ðëáéóéþíåôáé ìå ìðëå ÷ñþìá êÜðïéï óçìåßï áñéóôåñÜ ôïõ ïðïßïõ âñßóêåôáé ôï ëÜèïò.

Åéêüíá 11-3. Ðñïåéäïðïéçôéêü äéáëïãéêü ðáñÜèõñï ãéá ôçí åìöÜíéóç ëÜèïõò åêôÝëåóçò.

Áí ðáôÞóïõìå ôï ðëÞêôñï Debug, åìöáíßæåôáé ôï ðáñÜèõñï êþäéêá ìå óçìåéùìÝíç ôçí åíôïëÞ óôçí ïðïßá áíé÷íåýèçêå ôï ëÜèïò. Åìöáíßæåôáé äéáëïãéêü ðáñÜèõñï ìå:

Ç ãñáììÞ ìå ôï óöÜëìá ÷ñùìáôßæåôáé êßôñéíç.

Äéáãíùóôéêü ìÞíõìá ëÜèïõò. ÐëÞêôñï âïÞèåéáò ãéá áíáæÞôçóç êáôáôïðéóôéêþí ðëçñïöïñéþí Åéêüíá 11-2. Ï ðñïãñáììáôéóôÞò Ýêëåéóå ðáñÝíèåóç ó÷åôéêþí ìå ôï äéáãíùóôéêü ìÞíõìá ÷ùñßò íá ôçí Ý÷åé áíïßîåé ðñïçãïõìÝíùò. ôïõ ëÜèïõò.

Áí ïäçãÞóïõìå ôï äñïìÝá ðÜíù óôçí ðáñÜìåôñï ôçò óõíÜñôçóçò åìöáíßæåôáé åôéêÝôá ðïõ ìáò ðëçñïöïñåß ãéá ôçí ôéìÞ ôçò.

Ôá ìçíýìáôá ôïõ äéáëïãéêïý ðáñáèýñïõ ðïõ ðáñïõóéÜæåé ï ìåôáöñáóôÞò äåí åßíáé ðÜíôá êáé ôüóï êáôáôïðéóôéêÜ. Ôï ëÜèïò ðïõ ðñïêáëåß ôçí áäõíáìßá ìåôÜöñáóçò ôçò åíôïëÞò äåí åßíáé ðñïöáíÝò. Ãé' áõôü êáé ï ìåôáöñáóôÞò áðáíôÜ ôüóï ãåíéêÜ. Óôç óõãêåêñéìÝíç ðåñßðôùóç, ï ìåôáöñáóôÞò äåí ìðïñåß íá äéáêñßíåé üôé åìåßò èÝëïõìå íá ðåñéëÜâïõìå ôç ëÝîç Decimal ìåôáîý ðáñåíèÝóåùí. ÕðïèÝôåé üôé ç ðáñÝíèåóç óôï ôÝëïò ôçò ãñáììÞò ôïðïèåôÞèçêå áðü ëÜèïò êáé ìáò áðáíôÜ üôé "áíáìÝíåôáé ôåñìáôéóìüò ôçò åíôïëÞò" êáé ü÷é óõíÝ÷åéÜ ôçò ìå êÜôé ðïõ èåùñåß ðåñéôôü. Áò óçìåéùèåß, üôé äåí áíé÷íåýïíôáé üëá ôá óõíôáêôéêÜ ëÜèç áõôüìáôá êáôÜ ôçí åéóáãùãÞ ôùí ãñáììþí. Ãéá ðáñÜäåéãìá äåí áíé÷íåýåôáé ç ðáñÜëçøç äÞëùóçò ìåôáâëçôþí, ç Ýëëåéøç åíüò ôìÞìáôïò ìéáò ðñïãñáììáôéóôéêÞò äïìÞò (If ÷ùñßò End If) ê.Ü. ÁõôÜ ôá ëÜèç áíé÷íåýïíôáé ìüíïí êáôÜ ôçí ðëÞñç ìåôÜöñáóç ôçò äéáäéêáóßáò äéá÷åßñéóçò ôïõ óõìâÜíôïò ðïõ êùäéêïðïéïýìå. Ç ðëÞñçò ìåôÜöñáóç ãßíåôáé åßôå ôç óôéãìÞ ðïõ ðñïêýðôåé ôï óõìâÜí åßôå ôç óôéãìÞ Ýíáñîçò ôïõ ðñïãñÜììáôïò áí áíôß ãéá Run | Start åðéëÝîïõìå Run | Start With Full Compile áðü ôç ãñáììÞ ìåíïý. Ôá ëÜèç åêôÝëåóçò (run-time errors) ïöåßëïíôáé óå ëåéôïõñãßåò ðïõ êáëåßôáé íá åêôåëÝóåé ôï õðïëïãéóôéêü óýóôçìá êÜôù áðü óõíèÞêåò ðïõ åßíáé áóáöåßò Þ/êáé áðáãïñåõôéêÝò. Ãéá ðáñÜäåéãìá ç ðñïóðÜèåéá äéáßñåóçò ìå äéáéñÝôç ìçäÝí, ç ðñïóðÜèåéá åéóáãùãÞò óõìâïëïóåéñÜò óôçí ðáñÜìåôñï ìéáò áñéèìçôéêÞò óõíÜñôçóçò, ç ðñïóðÜèåéá ÷ñÞóçò ìéáò áðïóõíäåäåìÝíçò ðåñéöåñåéáêÞò óõóêåõÞò Þ ç ðñïóðÜèåéá áíÜãíùóçò áíýðáñêôïõ áñ÷åßïõ ïäçãïýí óå ëÜèç åêôÝëåóçò. Ôá ëÜèç áõôÜ ðñïêáëïýí óõíÞèùò äéáêïðÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò êáé áíôéìåôùðßæïíôáé åßôå ìå êáôÜëëçëïõò åëÝã÷ïõò ðñéí åêôåëåóôåß ìéá äéáäéêáóßá ðïõ ìðïñåß íá ðñïêáëÝóåé ëÜèïò (ð.÷. Ýëåã÷ïò áí ï äéáéñÝôçò åßíáé 0 ðñéí ôçí åêôÝëåóç ìéáò äéáßñåóçò) Þ ìå ôçí åéóáãùãÞ óôï ðñüãñáììá êáôÜëëçëùí õðïñïõôéíþí äéá÷åßñéóçò ëáèþí (âëÝðå ðáãßäåõóç ëáèþí).

Åéêüíá 11-4. Ôï ðáñÜèõñï êþäéêá ìå ôï óçìåßï óôï ïðïßï áíé÷íåýèçêå ôï ëÜèïò. Ôï ðåñéâÜëëïí åñãáóßáò Ý÷åé åéóÝëèåé óå ìéá êáôÜóôáóç ðïõ åßíáé ãíùóôÞ ùò êáôÜóôáóç äéáêïðÞò (break mode), ôçò ïðïßáò ôéò äõíáôüôçôåò èá ìåëåôÞóïõìå ìå ëåðôïìÝñåéá óå ðñïóå÷Þ ðáñÜãñáöï. Áò óçìåéùèåß üôé áí Ý÷åé æçôçèåß íá ãßíåé ç åêôÝëåóç ôïõ ðñïãñÜììáôïò áðü åêôåëÝóéìï áñ÷åßï êáé ü÷é êÜôù áðü ôçí åðïðôåßá ôïõ ðåñéâÜëëïíôïò åñãáóßáò ðáñïõóéÜæåôáé äéáöïñåôéêü äéáëïãéêü ðáñÜèõñï, äåí õðÜñ÷åé ç äõíáôüôçôá åéóáãùãÞò óå êáôÜóôáóç äéáêïðÞò êáé ðñïêáëåßôáé ï ôåñìáôéóìüò ôïõ. ÔÝëïò ôá ëïãéêÜ ëÜèç (logic errors), áðïôåëïýí ôçí ðéï äýóêïëç êáôçãïñßá. Ïöåßëïíôáé óå ëÜèïò áëãüñéèìï Þ êùäéêïðïßçóç áëãïñßèìïõ êáé äéáðéóôþíïíôáé áðü ôçí ðåñßåñãç óõìðåñéöïñÜ ôïõ ðñïãñÜììáôïò. Ôï ðñüãñáììá ðáñüëï ðïõ åßíáé óõíôáêôéêÜ óùóôü êáé ôñÝ÷åé ÷ùñßò íá åêôåëåß áðáãïñåõìÝíåò ëåéôïõñãßåò äßíåé ëáíèáóìÝíá áðïôåëÝóìáôá. ÐáñÜäåéãìá 11-3. ¸óôù üôé óôï ðñüãñáììá "ìåôáôñïðÞ áêåñáßïõ äåêáäéêïý óå äõáäéêü" ãñÜöïõìå:

Do

'Ôï ðçëßêï óôç èÝóç ôïõ Í N=N\2 Y = N Mod 2 'Ôá äéáäï÷éêÜ õðüëïéðá óôá áñéóôåñÜ Binary = Y & Binary 'Áí ôï ðçëßêï åßíáé 0 ôåñìÜôéóå Loop Until N = 0

áíôß ãéá:

ÐáñÜäåéãìá 11-2. ¸óôù üôé Ý÷ïõìå åéóÜãåé üëï ôï ðñüãñáììá ôçò åöáñìïãÞò "ìåôáôñïðÞ áêåñáßïõ äåêáäéêïý óå äõáäéêü" êáé æçôÜìå ôçí åêôÝëåóÞ ôïõ. ÅðåéäÞ äåí Ý÷ïõìå ðñïíïÞóåé íá äÝ÷åôáé ôï ðëáßóéï êåéìÝíïõ Decimal ìüíïí áñéèìçôéêÝò ôéìÝò åßíáé äõíáôüí íá ðñïêëçèåß ëÜèïò åêôÝëåóçò. 146

Áíôßóôñïöç ôïðïèÝôçóç ôùí åíôïëþí

Do

Y = N Mod 2 N=N\2 Binary = Y & Binary Loop Until N = 0

'Ôï ðçëßêï óôç èÝóç ôïõ Í 'Ôá äéáäï÷éêÜ õðüëïéðá óôá áñéóôåñÜ 'Áí ôï ðçëßêï åßíáé 0 ôåñìÜôéóå 147


Ç áíôßóôñïöç ôïðïèÝôçóç ôùí åíôïëþí ðñïêáëåß ðáñáãùãÞ åóöáëìÝíùí áðïôåëåóìÜôùí. Óå áõôü ôï ðáñÜäåéãìá Ýíáò Ýëåã÷ïò ìå áñéèìïýò ðïõ äßíïõí ãíùóôÜ áðïôåëÝóìáôá èá ìáò äåßîåé üôé êÜôé äåí ðÜåé êáëÜ. Óå Üëëåò üìùò ðåñéðôþóåéò ôï óöÜëìá åßíáé äéáëåßðïí êáé åßíáé äýóêïëç áêüìç êáé ç äéáðßóôùóç ôçò ýðáñîÞò ôïõ. Ãéá Üëëá äåäïìÝíá ôá áðïôåëÝóìáôá åßíáé ôá áíáìåíüìåíá êáé ãéá Üëëá ü÷é. Ôá âÞìáôá åêóöáëìÜôùóçò óå áõôïý ôïõ åßäïõò ôá ëÜèç äåí åßíáé ðñïêáèïñéóìÝíá. ÁíÜëïãá ìå ôï åßäïò ôçò áíùìáëßáò ðïõ ðáñïõóéÜæåé ôï ðñüãñáììá ÷ñåéÜæåôáé íá áêïëïõèÞóïõìå êáé äéáöïñåôéêü äñüìï êáé ôï ìüíï âáóéêü âÞìá ðïõ ìðïñïýìå íá êÜíïõìå åßíáé íá åëÝãîïõìå êáé íá áíáëýóïõìå ôá áðïôåëÝóìáôá ÷ñçóéìïðïéþíôáò óõíÞèùò åìðåéñéêïýò êáíüíåò. ¸íáò ôñüðïò åßíáé íá æçôÞóïõìå ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò ìå äåäïìÝíá ãéá ôá ïðïßá ãíùñßæïõìå åê ôùí ðñïôÝñùí ôá óùóôÜ áðïôåëÝóìáôá. Ùóôüóï, áêüìç êáé óôçí ðåñßðôùóç ðïõ ôï ðñüãñáììá èá áíôáðïêñéèåß ïñèÜ ãéá êÜðïéá äåäïìÝíá, ï Ýëåã÷ïò ðñÝðåé íá óõíå÷éóôåß ìÝ÷ñé íá åîáóöáëéóôåß üôé ôï ðñüãñáììá ëåéôïõñãåß óùóôÜ ãéá ïðïéáäÞðïôå äéáäñïìÞ ôïõ áëãïñßèìïõ, ãéá ïðïéåóäÞðïôå óõíèÞêåò êáé ìå ïðïéáäÞðïôå óôïé÷åßá.

Ôá ëïãéêÜ ëÜèç ãßíïíôáé óå óçìåßá ðïõ ðñïêáëïýí ôç ìåãáëýôåñç äõíáôÞ æçìéÜ. ÂáóéêÞ áñ÷Þ åíôïðéóìïý ëáèþí

ÅíáëëáêôéêÜ, ãéá íá ôïðïèåôÞóïõìå Ýíá óçìåßï äéáêïðÞò óå ìéá ãñáììÞ ìðïñïýìå íá êÜíïõìå êëéê óôï ðåñéèþñéï ôïõ ðáñáèýñïõ êþäéêá, óôï ýøïò ôçò ãñáììÞò. Ç ãñáììÞ ôïõ êþäéêá óôçí ïðïßá åéóÜãåôáé ôï óçìåßï äéáêïðÞò óçìåéþíåôáé ìå ìéá êïõêßäá êáé áðïêôÜ äéáöïñåôéêü ÷ñþìá. Ìðïñïýìå íá èÝóïõìå ðåñéóóüôåñá ôïõ åíüò óçìåßá äéáêïðÞò. Ç åêôÝëåóç ôïõ ðñïãñÜììáôïò èá äéáêüðôåôáé êÜèå öïñÜ ðïõ óõíáíôÜôáé Ýíá ôÝôïéï óçìåßï. Ãéá íá áðïìáêñýíïõìå áðü ôïí êþäéêá Ýíá óçìåßï äéáêïðÞò áêïëïõèïýìå ôçí ßäéá äéáäéêáóßá ìå áõôÞ ôçò åéóáãùãÞò ôïõ. ÅíáëëáêôéêÜ, åðéëÝãïõìå óôï ìåíïý Debug ôçí õðïåðéëïãÞ Clear All Breakpoints êáé áðïìáêñýíïõìå üëá ôá óçìåßá äéáêïðÞò.

Ôï ÷ñþìá ôùí ãñáììþí óôéò ïðïßåò Ý÷åé ôïðïèåôçèåß óçìåßï äéáêïðÞò êáèïñßæåôáé áðü ôïí êáñôåëïäåßêôç Edit Format ôïõ äéáëïãéêïý ðáñáèýñïõ Options.

ÐáñÜäåéãìá 11-4. Ôïðïèåôïýìå Ýíá óçìåßï äéáêïðÞò óôç ãñáììÞ N=CLng(Decimal), þóôå ðñéí ãßíåé ç åêôÝëåóÞ ôçò êáé ðñáãìáôïðïéçèåß ç êëÞóç ôçò óõíÜñôçóçò CLng, ðïõ ìðïñåß íá ðñïêáëÝóåé ëÜèïò åêôÝëåóç, íá Ý÷ïõìå ôç äõíáôüôçôá íá îåêéíÞóïõìå ôçí åêóöáëìÜôùóç.

Ôï ðñüãñáììá óå êáôÜóôáóç äéáêïðÞò ÊáôÜ ôçí áíÜðôõîç ìéáò åöáñìïãÞò ÷ñçóéìïðïéïýìå ôï ðåñéâÜëëïí åñãáóßáò åßôå óå êáôÜóôáóç ó÷åäéáóìïý (design), ïðüôå óõíôÜóóïõìå êáé äéïñèþíïõìå ôïí êþäéêÜ ìáò ÷ùñßò íá ìðïñïýìå íá åëÝãîïõìå ôá áðïôåëÝóìáôá, åßôå óå êáôÜóôáóç åêôÝëåóçò (run), ïðüôå ìðïñïýìå íá åêôåëÝóïõìå ôï ðñüãñáììá êáé íá ðáßñíïõìå áðïôåëÝóìáôá áëëÜ äåí Ý÷ïõìå ôç äõíáôüôçôá íá åðåìâáßíïõìå êáé íá ôñïðïðïéïýìå ôïí êþäéêá. ¸íáò ôñßôïò ôñüðïò ëåéôïõñãßáò ôïõ ðåñéâÜëëïíôïò åñãáóßáò åßíáé ç ëåéôïõñãßá óå êáôÜóôáóç äéáêïðÞò (break mode). ´Ïôáí ôï ðåñéâÜëëïí åñãáóßáò âñßóêåôáé óå êáôÜóôáóç äéáêïðÞò ìðïñïýìå íá ðÜñïõìå óôéãìéüôõðá ôçò êáôÜóôáóçò åêôÝëåóçò, íá åðÝìâïõìå óôïí êþäéêá êáé íá õðïâïçèÞóïõìå ðïéêéëïôñüðùò ôç äéáäéêáóßá åêóöáëìÜôùóçò. ÓõãêåêñéìÝíá óå êáôÜóôáóç äéáêïðÞò ìðïñïýìå: Íá ôñïðïðïéÞóïõìå ôïí êþäéêá ôïõ ðñïãñÜììáôïò. Íá áíé÷íåýóïõìå ôç äéáäï÷Þ ôùí äéáäéêáóéþí ðïõ Ý÷ïõí åêôåëåóôåß. Íá ðáñáêïëïõèÞóïõìå ôéò ôéìÝò ìåôáâëçôþí, éäéïôÞôùí êáé ðáñáóôÜóåùí. Íá áëëÜîïõìå ôéò ôéìÝò ìåôáâëçôþí êáé éäéïôÞôùí. Íá áëëÜîïõìå ôç ñïÞ ôïõ ðñïãñÜììáôïò. Íá æçôÞóïõìå ôçí åêôÝëåóç åíôïëþí åêôüò êþäéêá ðñïãñÜììáôïò. Ôï ðåñéâÜëëïí åñãáóßáò åéóÝñ÷åôáé óå êáôÜóôáóç äéáêïðÞò, üôáí åíþ åêôåëåß Ýíá ðñüãñáììá: ÓõíáíôÜ óçìåßï äéáêïðÞò (breakpoint). Åêôåëåß åíôïëÞ Stop. Åêôåëåóôåß ç ìÝèïäïò Assert ôïõ áíôéêåéìÝíïõ Debug (Debug.Assert) êáé ç óõíèÞêç ðïõ áðïôåëåß ðáñÜìåôñü ôçò Ý÷åé ôéìÞ False. ÐáôÞóïõìå ôï óõíäõáóìü ðëÞêôñùí Ctrl + Break Þ êÜíïõìå êëéê óôï ðëÞêôñï

Break ôçò åñãáëåéïèÞêçò åêóöáëìÜôùóçò. Áíé÷íåõèåß ëÜèïò åêôÝëåóçò.

ÅéóáãùãÞ óçìåßùí äéáêïðÞò Ôá óçìåßá äéáêïðÞò ôá ÷ñçóéìïðïéïýìå ãéá íá óôáìáôÞóïõìå ôçí åêôÝëåóç ôïõ êþäéêÜ ìáò óôá óçìåßá ðïõ åßíáé ýðïðôá ãéá ðñüêëçóç ðñïâëçìÜôùí, þóôå íá ìáò äïèåß ç äõíáôüôçôá íá áîéïðïéÞóïõìå ôá åñãáëåßá åêóöáëìÜôùóçò. Ôá óçìåßá äéáêïðÞò åßíáé ðñïóùñéíÜ êáé äåí áðïèçêåýïíôáé ìáæß ìå ôïí êþäéêá. Ãéá íá åéóÜãïõìå Ýíá óçìåßï äéáêïðÞò: 1. Ôïðïèåôïýìå ôï äñïìÝá óôï óçìåßï ôïõ êþäéêá óôï ïðïßï åðéèõìïýìå íá ãßíåé ç äéáêïðÞ ôçò åêôÝëåóçò. 2. Áðü ôç ãñáììÞ ìåíïý åðéëÝãïõìå Debug | Toggle Breakpoint Þ ðáôÜìå ôï ðëÞêôñï F9. 148

ÊÜíïõìå êëéê óôï ðåñéèþñéï êáé åéóÜãåôáé óçìåßï äéáêïðÞò.

Åéêüíá 11-5. ÅéóáãùãÞ óçìåßïõ äéáêïðÞò

Ç åíôïëÞ Stop êáé ç ìÝèïäïò Debug.Assert Ç åíôïëÞ Stop åßíáé áíÜëïãç ôïõ óçìåßïõ äéáêïðÞò ìå ôç äéáöïñÜ üôé ðáñáìÝíåé ùò ôìÞìá ôïõ êþäéêá ìÝ÷ñé íá ôçí áðïìáêñýíïõìå. ÊáôÜ ôç ìåôáãëþôôéóç ïé åíôïëÝò Stop áíôéìåôùðßæïíôáé áêñéâþò üðùò êáé ïé åíôïëÝò End. Ãé' áõôü ðñÝðåé íá ÷ñçóéìïðïéïýíôáé ìå ðñïóï÷Þ. Îå÷áóìÝíåò åíôïëÝò Stop ìðïñåß íá ðñïêáëÝóïõí äéáêïðÝò êáé áðñüâëåðôá ëÜèç åêôÝëåóçò óå ìéá åöáñìïãÞ ðïõ Ý÷åé ðáñáäïèåß ðñïò ÷ñÞóç. ÐáñÜäåéãìá 11-5. ÄéáêïðÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò ìå åíôïëÞ Stop.

Private Sub DecToBin_Click() Dim N As Long Dim Y As Long Stop N = CLng(Decimal) Binary = "" : End Sub Ìå ôç ìÝèïäï Debug.Assert ìðïñïýìå íá ðñïêáëÝóïõìå ôçí åéóáãùãÞ ôïõ ðåñéâÜëëïíôïò åñãáóßáò óå êáôÜóôáóç äéáêïðÞò êÜôù áðü ïñéóìÝíåò óõíèÞêåò. Ç ìÝèïäïò áõôÞ ÷ñçóéìïðïéåß ìéá äßôéìï (boolean) Ýêöñáóç ãéá íá êáèïñßóåé, áí ôï ðåñéâÜëëïí åñãáóßáò èá ðåñÜóåé Þ ü÷é óå êáôÜóôáóç äéáêïðÞò. Ôï ðñïôÝñçìá ôçò

Debug.Assert, Ýíáíôé ôçò åíôïëÞò Stop, åßíáé üôé áðïìáêñýíåôáé áðü ôïí êþäéêá êáé äå ìåôáöñÜæåôáé êáôÜ ôç äçìéïõñãßá åêôåëÝóéìïõ ðñïãñÜììáôïò óå áñ÷åßï. ¸ôóé, äåí õðÜñ÷åé ðåñßðôùóç îå÷áóìÝíåò åíôïëÝò íá ðñïêáëÝóïõí ëÜèç. 149


ÐáñÜäåéãìá 11-6. Ç êùäéêïðïéÞóç:

Private Sub DecToBin_Click() Dim N As Long Dim Y As Long If Not IsNumeric(Decimal) Then Stop N = CLng(Decimal) Binary = "" : End Sub êáé ç êùäéêïðïßçóç:

Private Sub DecToBin_Click() Dim N As Long Dim Y As Long Debug.Assert IsNumeric(Decimal) N = CLng(Decimal) Binary = "" : End Sub åßíáé éóïäýíáìåò êáôÜ ôçí åêóöáëìÜôùóç.

Äéáäéêáóßá åêóöáëìÜôùóçò

Set Next Statement (ÈÝóå ùò åðüìåíç åíôïëÞ): Åíôïëïäïôåßôáé ç ðáñÜêáìøç ôçò óåéñÜò ôùí åíôïëþí (÷ùñßò íá ðñáãìáôïðïéçèåß êáìéÜ åêôÝëåóç) êáé ç ôïðïèÝôçóç ôçò äéáêïðÞò óôçí åíôïëÞ ðïõ Ý÷ïõìå õðïäåßîåé ìå ôï äñïìÝá. ×ñçóéìïðïéåßôáé óõíÞèùò ãéá íá åðáíáöÝñïõìå ôï óçìåßï åêôÝëåóçò ôùí åíôïëþí êÜðïéåò åíôïëÝò ðßóù êáé íá ðáñáêïëïõèÞóïõìå îáíÜ ôïí ôñüðï åêôÝëåóçò ôïõ ðñïãñÜììáôïò.

¸ëåã÷ïò ôéìþí ìåôáâëçôþí êáé åêöñÜóåùí Åêôåëþíôáò ôï ðñüãñáììá åíôïëÞ åíôïëÞ, ìðïñïýìå íá äïýìå ôéò ôéìÝò ôùí ìåôáâëçôþí êáé ôùí éäéïôÞôùí áíôéêåéìÝíùí ôïðïèåôþíôáò åðÜíù óôï üíïìÜ ôïõò ôï äñïìÝá ôïõ ðïíôéêéïý. Ôï ðáñÜèõñï ¸÷ïõìå äåé üôé äßðëá ôïõò åìöáíßæåôáé áõôüìáôá ìéá åôéêÝôá ìå ôçí ôéìÞ ôïõò. ¼ìùò, ãéá íá ðáñáêïëïýèçóçò Ý÷ïõìå êÜðïõ óõãêåíôñùìÝíåò üëåò ôéò ìåôáâëçôÝò êáé ôéò ðáñáóôÜóåéò, ôùí ïðïßùí ç ìåôáâïëÞ ôùí ôéìþí ìáò åíäéáöÝñåé, ÷ñçóéìïðïéïýìå ôï ðáñÜèõñï ðáñáêïëïýèçóçò (Watch Window). Óå áõôü ôï ðáñÜèõñï ðñïâÜëëïíôáé, ü÷é ìüíï ïé ôéìÝò ôùí ìåôáâëçôþí êáé ôùí ðáñáóôÜóåùí ðïõ Ý÷ïõìå åéóÜãåé, áëëÜ êáé ðëçñïöïñßåò ãéá ôçí ðñïãñáììáôéóôéêÞ ìïíÜäá êáé ôç äéáäéêáóßá ìÝóá óôçí ïðïßá Ý÷ïõí ôçí áíáöåñüìåíç ôéìÞ. Åðßóçò, áðü ôï ëïãéóìéêü ðïõ äéá÷åéñßæåôáé áõôü ôï ðáñÜèõñï, ìðïñïýìå íá æçôÞóïõìå ôï ðÝñáóìá õðü óõíèÞêç óå êáôÜóôáóç äéáêïðÞò, äçëáäÞ ôç ìåôÜðôùóç óå êáôÜóôáóç äéáêïðÞò, üôáí ìéá áðü ôéò õðü ðáñáêïëïýèçóç ðáñáóôÜóåéò áðïêôÞóåé ôçí ôéìÞ True Þ áëëÜîåé ôéìÞ. ÁõôÞ ç äõíáôüôçôá åßíáé ðïëý åîõðçñåôéêÞ, áöïý ï ðñïãñáììáôéóôÞò äåí åßíáé õðï÷ñåùìÝíïò íá ðáñáêïëïõèåß óõíå÷þò ôéò ôéìÝò éäéáßôåñá üôáí ç ìåôáâïëÞ ôïõò ãßíåôáé ìÝóá óå Ýíá âñü÷ï. Ãéá ôçí åéóáãùãÞ Ç ðáñÜóôáóç äåí åßíáé ìéáò ìåôáâëçôÞò Þ ðáñÜóôáóçò óôï ðáñÜèõñï ðáñáêïëïýèçóçò ðñáãìáôïðïéïýìå ôá åîÞò áíáãêáßï íá õðÜñ÷åé êáé ìÝóá óôï ðñüãñáììá. âÞìáôá:

¼ðùò Þäç Ý÷ïõìå áíáöÝñåé, ç åýñåóç ôùí ëïãéêþí ëáèþí åßíáé ìéá áðü ôéò ðéï åðßðïíåò êáé äýóêïëåò äéáäéêáóßåò. Ôï ëïãéêü ëÜèïò äåí åßíáé äõíáôüí íá ôï áíé÷íåýóåé ôï õðïëïãéóôêü óýóôçìá. Ôçí ýðáñîÞ ôïõ ôç äéáðéóôþíïõìå åê ôùí õóôÝñùí áðü ôçí áðüêëéóç ôùí áðïôåëåóìÜôùí óå ó÷Ýóç ìå ôá áíáìåíüìåíá. Ï ìüíïò ôñüðïò áíß÷íåõóçò ôùí ëïãéêþí ëáèþí åßíáé ç ôïðïèÝôçóç óçìåßùí äéáêïðÞò óôçí ðåñéï÷Þ ôïõ êþäéêá ðïõ õðïðôåõüìáóôå üôé âñßóêïíôáé, ç åëåã÷üìåíç åêôÝëåóç ôïõ êþäéêá óå áõôÞ ôçí ðåñéï÷Þ êáé ç ðáñáêïëïýèçóç áëëáãÞò ôùí ôéìþí ôùí ìåôáâëçôþí êáé ôùí éäéïôÞôùí ôùí áíôéêåéìÝíùí.

1. Áðü ôï ìåíïý Debug åðéëÝãïõìå Add Watch ïðüôå åìöáíßæåôáé ôï äéáëïãéêü ðáñÜèõñï. 2. Óôï ðëáßóéï Expression ðëç��ôñïëïãïýìå ôçí ðáñÜóôáóç Þ ôç ìåôáâëçôÞ. 3. Óôçí ïìÜäá Context ïñßæïõìå ôçí ðåñéï÷Þ åëÝã÷ïõ ôçò ðáñÜóôáóçò, äçëáäÞ, óå ðïéá óçìåßá ôïõ êþäéêá ìáò åíäéáöÝñåé ç ôéìÞ ôçò. 4. Óôçí ïìÜäá Watch Type åðéëÝãïõìå ôïí

ôñüðï áðüêñéóçò ôïõ ðåñéâÜëëïíôïò åñãáóßáò óôçí ôéìÞ ôçò õðü ðáñáêïëïýèçóç ðáñÜóôáóçò.

ÂçìáôéêÞ åêôÝëåóç ôïõ ðñïãñÜììáôïò ¼ôáí ôï ðñüãñáììá âñßóêåôáé óå êáôÜóôáóç äéáêïðÞò, åßíáé äõíáôÞ ç åêôÝëåóç ôùí åíôïëþí ôïõ âÞìá âÞìá. Ç âçìáôéêÞ (stepwise) åêôÝëåóç ðñáãìáôïðïéåßôáé ìå ôéò åðéëïãÝò ôïõ ìåíïý Debug. ÓõãêåêñéìÝíá, ìå ôçí åðéëïãÞ: Step Into (ÂÞìá óôï): Åêôåëåßôáé ç åíôïëÞ óôçí ïðïßá åß÷å ãßíåé ç äéáêïðÞ. Êáôüðéí ôï ðåñéâÜëëïí åñãáóßáò åðáíÝñ÷åôáé óå êáôÜóôáóç äéáêïðÞò êáé ìÜëéóôá óôçí åðüìåíç åíôïëÞ ðïõ Ý÷åé óåéñÜ. Ôï ðëÞêôñï óõíôüìåõóçò ôçò åðéëïãÞò åßíáé ôï ðëÞêôñï F8. Ðáôþíôáò ôï ðëÞêôñï F8 ï ðñïãñáììáôéóôÞò ìðïñåß íá ðáñáêïëïõèÞóåé ôç äéáäñïìÞ ðïõ áêïëïõèåß ôï ðñüãñáììÜ ôïõ, ðáñáôçñþíôáò ôï äåßêôç åêôÝëåóçò ðñïãñÜììáôïò (êßôñéíç äéáöáíÞò ãñáììÞ) íá ðçäÜ áðü åíôïëÞ óå åíôïëÞ. Step Over (ÂÞìá ðÜíù áðü): Åêôåëåßôáé ç åíôïëÞ óôçí ïðïßá åß÷å ãßíåé ç äéáêïðÞ. Ç ìüíç äéáöïñÜ ôçò Step Over óå ó÷Ýóç ìå ôçí Step Into åßíáé üôé óôçí ðåñßðôùóç ðïõ èá óõíáíôÞóåé õðïñïõôßíåò êáé óõíáñôÞóåéò ìÝóá óôïí êþäéêá, ôéò åêôåëåß ìå ìéáò êáé ü÷é åíôïëÞ ðñïò åíôïëÞ. ¸ôóé åßíáé äõíáôü íá åðéôá÷õíèåß êÜðùò ç äéáäéêáóßáò ôçò åêóöáëìÜôùóçò. Step Out (ÂÞìá åêôüò): Åêôåëåßôáé ôï õðüëïéðï ìéáò õðïñïõôßíáò Þ ìéáò óõíÜñôçóçò êáé ï äåßêôçò åêôÝëåóçò ðñïãñÜììáôïò ìåôáöÝñåôáé óôçí åðüìåíç ãñáììÞ ôçò êáëïýóáò äéáäéêáóßáò. Run To Cursor (ÅêôÝëåóç ìÝ÷ñé ôï äñïìÝá): Åêôåëåßôáé ôï õðüëïéðï ôïõ ðñïãñÜììáôïò ìÝ÷ñé ôïõ óçìåßïõ ðïõ Ý÷åé ôïðïèåôçèåß ï äñïìÝáò êåéìÝíïõ ìÝóá óôïí êþäéêá. Ëåéôïõñãåß äçëáäÞ óáí íá Ý÷åé ôïðïèåôçèåß Ýíá óçìåßï äéáêïðÞò óôç ãñáììÞ ðïõ âñßóêåôáé ï äñïìÝáò. 150

Åéêüíá 11-6. ÅéóáãùãÞ ðáñÜóôáóçò óôï ðáñÜèõñï ðáñáêïëïýèçóçò Áí, ðñéí áíïßîïõìå ôï äéáëïãéêü ðáñÜèõñï Add Watch, ï äñïìÝáò âñßóêåôáé ðÜíù óôï üíïìá ìéáò ìåôáâëçôÞò Þ ìéáò éäéüôçôáò, ôï ðëáßóéï êåéìÝíïõ Expression óõìðëçñþíåôáé áõôüìáôá. Åðßóçò, áí åðéëÝîïõìå ðñþôá ìéá ðáñÜóôáóç êáé óôç óõíÝ÷åéá áíïßîïõìå ôï äéáëïãéêü ðáñÜèõñï Add Watch, ôï ðëáßóéï êåéìÝíïõ Expression óõìðëçñþíåôáé áõôüìáôá ìå ôïí êþäéêá ôçò ðáñÜóôáóçò. Óôçí ïìÜäá Context óõìðëçñþíïõìå ôá ðëáßóéá Procedure êáé Module åðéëÝãïíôáò ôç äéáäéêáóßá Þ üëåò ôéò äéáäéêáóßåò êáé ôçí ðñïãñáììáôéóôéêÞ ìïíÜäá Þ üëåò ôéò ðñïãñáììáôéóôéêÝò ìïíÜäåò óôéò ïðïßåò èÝëïõìå íá ðáñáêïëïõèïýìå ôéò åêöñÜóåéò. Óôçí ïìÜäá Watch Type åðéëÝãïõìå ôïí ôñüðï áðüêñéóçò ôïõ ðåñéâÜëëïíôïò åñãáóßáò óôçí õðü ðáñáêïëïýèçóç Ýêöñáóç. ÓõãêåêñéìÝíá åðéëÝãïõìå: Watch Expression ãéá áðëÞ åìöÜíéóç ôçò ôéìÞò ôçò Ýêöñáóçò Break When Value is True ãéá äéáêïðÞ ôçò åêôÝëåóçò êÜèå öïñÜ ðïõ ç ôéìÞ ôçò Ýêöñáóçò ãßíåôáé áëçèÞò. Break When Value Changes ãéá äéáêïðÞ ôçò åêôÝëåóçò, üôáí ç ôéìÞ ôçò Ýêöñáóçò áëëÜîåé. ÊÜèå Ýêöñáóç ðáñáêïëïýèçóçò ðïõ åìöáíßæåôáé óôï ðáñÜèõñï ìðïñåß íá äéïñèùèåß Þ íá äéáãñáöåß. Ãéá íá äéïñèþóïõìå ìéá Ýêöñáóç åðéëÝãïõìå ôçí Ýêöñáóç êáé áðü ôï ìåíïý Debug åðéëÝãïõìå Edit Watch. Ãéá íá äéáãñÜøïõìå ìéá Ýêöñáóç ôçí åðéëÝãïõìå êáé ðáôÜìå ôï ðëÞêôñï Delete. 151


Ôï ðáñÜèõñï Üìåóçò åêôÝëåóçò åíôïëþí

¢óêçóç 11-1. Óôï ðñüãñáììá "ìåôáôñïðÞ áêåñáßïõ äåêáäéêïý óå äõáäéêü" Ý÷ïõìå êÜíåé ëÜèïò óôçí êùäéêïðïßçóç êáé äå ëáìâÜíïõìå óùóôÜ áðïôåëÝóìáôá. Íá ôïðïèåôçèåß óçìåßï äéáêïðÞò êáé íá åéóá÷èïýí óôï ðáñÜèõñï ðáñáêïëïýèçóçò ìåôáâëçôÝò êáé åêöñÜóåéò.

Óçìåßï äéáêïðÞò Äåßêôçò åêôÝëåóçò ðñïãñÜììáôïò ÐáñÜèõñï ðáñáêïëïýèçóçò Ëßóôá åêöñÜóåùí Ëßóôá ôéìþí åêöñÜóåùí Ôýðïò äåäïìÝíùí Ðåñéï÷Þ åëÝã÷ïõ

ÊáôÜ ôçí åêóöáëìÜôùóç ï ðñïãñáììáôéóôÞò ÷ñåéÜæåôáé Ýíá åßäïò ðñï÷åßñïõ ãéá íá êñáôÜ ôï éóôïñéêü ôéìþí ôùí ìåôáâëçôþí êáé ôùí ðáñáóôÜóåùí, íá ðñáãìáôïðïéåß äïêéìÝò êáé íá åêôåëåß ëåéôïõñãßåò ðïõ äåí ôïõ åðéôñÝðåïõí ôá Üëëá âïçèçôéêÜ ðáñÜèõñá ðïõ Þäç áíáöÝñáìå. Ôï ðáñÜèõñï Üìåóçò åêôÝëåóçò åíôïëþí (Immediate Window) ÷ñçóéìïðïéåßôáé ìå áõôü ôï óêïðü. Ôï ðáñÜèõñï áõôü åìöáíßæåôáé åðéëÝãïíôáò áðü ôç ãñáììÞ ìåíïý View | Immediate Window. Óôï ðáñÜèõñï Üìåóçò åêôÝëåóçò ìðïñïýìå íá: ãñÜøïõìå åíôïëÝò, ïé ïðïßåò åêôåëïýíôáé Üìåóá ôç óôéãìÞ ðïõ ðáôÜìå ôï ðëÞêôñï Enter ãéá íá áëëÜîïõìå ãñáììÞ. ÓõíÞèùò ÷ñçóéìïðïéïýìå áõôÞ ôç äõíáôüôçôá, ãéá íá áðïäþóïõìå ôéìÝò óå ìåôáâëçôÝò Þ éäéüôçôåò êáé íá óõíå÷ßóïõìå ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò ìå ôéò íÝåò ôéìÝò. åëÝãîïõìå ôéò ôéìÝò ðáñáóôÜóåùí êáé ìåôáâëçôþí ÷ùñßò íá ÷ñçóéìïðïéÞóïõìå êáô' áíÜãêç ôï ðáñÜèõñï ðáñáêïëïýèçóçò. Áõôüò ï ôñüðïò åëÝã÷ïõ Ý÷åé ôï åðéðëÝïí ðëåïíÝêôçìá üôé êñáôåßôáé ôï éóôïñéêü ôùí ìåôáâïëþí óôçí ïèüíç (óôï ðáñÜèõñï ðáñáêïëïýèçóçò ìðïñïýìå íá äïýìå ìüíï ôéò ôñÝ÷ïõóåò ôéìÝò). Ãéá íá åëÝãîïõìå ôéò ôéìÝò ðáñáóôÜóåùí ÷ñçóéìïðïéïýìå ôç ìÝèïäï Print ìå ðáñáìÝôñïõò ôéò ðáñáóôÜóåéò ãéá íá ôõðùèïýí ïé ôéìÝò ôïõò. ¸÷ïõìå äýï äõíáôüôçôåò: Íá ðëçêôñïëïãÞóïõìå áðåõèåßáò ôç ìÝèïäï Print óôï ðáñÜèõñï. Áò óçìåéùèåß üôé åäþ ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå êáé ôï óýìâïëï (?) ùò óýíôìçóç ôçò êùäéêÞò ëÝîçò

Åéêüíá 11-7. Äéáäéêáóßá åêóöáëìÜôùóçò ìå ðáñÜèõñï ðáñáêïëïýèçóçò Ðñáãìáôïðïéïýìå âçìáôéêÞ åêôÝëåóç êáé ðáñáêïëïõèïýìå ôéò ôéìÝò ôùí ìåôáâëçôþí êáé ôùí åêöñÜóåùí ãéá íá åíôïðßóïõìå ôï óçìåßï ðïõ ðñïêáëåßôáé åêôñïðÞ ôùí ôéìþí áðü ôá áíáìåíüìåíá. Óôçí ðåñßðôùóç ðïõ èÝëïõìå íá äïýìå êáé ôçí ôéìÞ ìéáò ìåôáâëçôÞò, éäéüôçôáò Þ ðáñÜóôáóçò Ôï ðáñÜèõñï ãñÞãïñïõ ÷ùñßò íá ãßíåé õðï÷ñåùôéêÜ ç åéóáãùãÞ ôçò óôï ðáñÜèõñï ðáñáêïëïýèçóçò, ôçí åðéëÝãïõìå åëÝã÷ïõ ìÝóá óôïí êþäéêá êáé áíïßãïõìå Ýíá ðáñÜèõñï ãñÞãïñïõ åëÝã÷ïõ (Quick Watch) áðü ôï ìåíïý Debug.

Print. Íá óõìðåñéëÜâïõìå óôïí êþäéêÜ ìáò åíôïëÝò ìå ôç ìÝèïäï Print ôïõ áíôéêåéìÝíïõ Ïé åíôïëÝò Debug.Print Debug, þóôå íá ãßíåé ç åêôýðùóç áêüìá êáé áí ôï ðåñéâÜëëïí äå âñßóêåôáé óå êáôÜóôáóç áðïìáêñýíïíôáé áõôüìáôá äéáêïðÞò. ¢óêçóç 11-3. Ùò óõíÝ÷åéá ôçò Üóêçóçò 11-1, óå äýï äéáäï÷éêÝò áíáêõêëþóåéò íá ôõðùèïýí, óôï ðáñÜèõñï Üìåóçò åêôÝëåóçò, ïé ôéìÝò ôùí ìåôáâëçôþí ðïõ ìáò åíäéáöÝñïõí.

áðü ôïí êþäéêá ôç óôéãìÞ ôçò ìåôÜöñáóçò ôïõ ðñïãñÜììáôïò óå åêôåëÝóéìï áñ÷åßï.

¢óêçóç 11-2. Óôïí êþäéêá ôçò ðéï ðÜíù Üóêçóçò åðéëÝãïõìå ôçí ðáñÜóôáóç Y & Binary êáé áíïßãïõìå ôï ðáñÜèõñï ãñÞãïñïõ åëÝã÷ïõ. Ãéá íá óõíå÷éóôåß ï Ýëåã÷ïò ôçò ðáñÜóôáóçò ìðïñïýìå íá ôçí ðñïóèÝóïõìå óôï ðáñÜèõñï ðáñáêïëïýèçóçò.

Åéêüíá 11-8. Äéáäéêáóßá åêóöáëìÜôùóçò ìå ðáñÜèõñï ãñÞãïñïõ åëÝã÷ïõ

Ç åéóáãùãÞ ìåôáâëçôþí óôï ðáñÜèõñï ðáñáêïëïýèçóçò áðáéôåß ÷ñüíï áðü ôïí Ôï ðáñÜèõñï ôïðéêþí ðñïãñáììáôéóôÞ. Ôï ðñüâëçìá ãßíåôáé éäéáßôåñá Ýíôïíï óå ðñïãñÜììáôá ìå ðïëëÝò ìåôáâëçôþí äéáäéêáóßåò óõìâÜíôùí. Ç ëýóç äßíåôáé ìå ôç ÷ñÞóç ôïõ ðáñáèýñïõ ôïðéêþí ìåôáâëçôþí (Locals Window). Ôï ðáñÜèõñï áõôü åìöáíßæåôáé åðéëÝãïíôáò View | Locals Window.

Åéêüíá 11-10. ¢ìåóç åêôÝëåóç åíôïëþí ¢óêçóç 11-4. ÐáñåìâÜëëïõìå åíôïëÝò Debug.Print ìÝóá óôïí êþäéêá.

N = CLng(Decimal) Binary = "" Debug.Print "Decimal", "N", "Y", "Binary" Do 'Ôï ðçëßêï óôç èÝóç ôïõ Í N=N\2 Y = N Mod 2 Binary = Y & Binary 'Ôá äéáäï÷éêÜ õðüëïéðá óôá áñéóôåñÜ Debug.Print Decimal, N, Y, Binary Loop Until N = 0 'Áí ôï ðçëßêï åßíáé 0 ôåñìÜôéóå

Ìåôáâáßíïíôáò áðü äéáäéêáóßá óå äéáäéêáóßá ôï ðáñÜèõñï ôïðéêþí ìåôáâëçôþí åíçìåñþíåôáé áõôüìáôá ìå ôéò ôñÝ÷ïõóåò ôïðéêÝò ìåôáâëçôÝò.

Åéêüíá 11-11. Ôï ðáñÜèõñï Üìåóçò åêôÝëåóçò åíôïëþí åíçìåñþíåôáé êáé óå êáôÜóôáóç åêôÝëåóçò

Åéêüíá 11-9. Ôï ðáñÜèõñï ôïðéêþí ìåôáâëçôþí 152

153


Ç ãñáììÞ åñãáëåßùí åêóöáëìÜôùóçò Ç ãñáììÞ åñãáëåßùí åêóöáëìÜôùóçò ðñïóöÝñåé ãñÞãïñç ðñïóðÝëáóç óôéò ðéï óõ÷íÜ ÷ñçóéìïðïéïýìåíåò ëåéôïõñãßåò. Ç ãñáììÞ åñãáëåßùí åêóöáëìÜôùóçò åìöáíßæåôáé áðü ôçí åðéëïãÞ View | Toolbars | Debug. Ôç ãñáììÞ áõôÞ ôçí Ý÷ïõìå óå Üìåóç ÷ñÞóç üôáí ðñáãìáôïðïéïýìå åêóöáëìÜôùóç.

Start

Åêôåëåß ôçí åöáñìïãÞ.

Break Äéáêüðôåé ðñïóùñéíÜ ôçí åêôÝëåóç. Ãéá íá óõíå÷ßóïõìå êÜíïõìå êëéê óôï ðëÞêôñï Continue (Ôï ðëÞêôñï Start ìå Üëëï üíïìá). End Ôåñìáôßæåé ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò. ÅðéóôñïöÞ óå êáôÜóôáóç ó÷åäéáóìïý.

Toggle Breakpoint ÅéóÜãåé Þ áðïìáêñýíåé Ýíá óçìåßï äéáêïðÞò.

â) Ðñéí ôåñìáôßóåé ôï ðñüãñáììá, æçôÞóôå íá åêôåëåóôåß ç åíôïëÞ:

[Decimal].Text = 5 óôï ðáñÜèõñï Üìåóçò åêôÝëåóçò. ÅðáíáöÝñåôå ôï äåßêôç ðñïãñÜììáôïò óôçí åíôïëÞ áñ÷éêïðïßçóçò ôïõ N ðñéí ôï âñü÷ï êáé óõíå÷ßóôå ôç âçìáôéêÞ åêôÝëåóç. ÐáñáêïëïõèÞóôå ôç äñáóôçñéüôçôá óôï ðáñÜèõñï Üìåóçò åêôÝëåóçò. Õðüäåéîç: Ôéò áãêýëåò ôéò ÷ñçóéìïðïéïýìå óå Ýíá üíïìá, üôáí õðÜñ÷åé äåóìåõìÝíç ëÝîç ðïõ óõìðßðôåé ìå ôï üíïìá. Áí ðñïóðáèÞóåôå íá äþóåôå ôçí åíôïëÞ ÷ùñßò ôéò áãêýëåò èá äåßôå üôé ðñïêáëåßôáé ëÜèïò åêôÝëåóçò.

Óçìåéþóåéò:

Step Into Åêôåëåß ôçí áìÝóùò åðüìåíç ãñáììÞ êþäéêá. Step Over Åêôåëåß üëï ôïí êþäéêá ìéáò äéáäéêáóßáò. Step Out Åêôåëåß ôçí õðüëïéðç ôñÝ÷ïõóá äéáäéêáóßá. Locals Window Åìöáíßæåé ôï ðáñÜèõñï ôïðéêþí ìåôáâëçôþí. Immediate Window Åìöáíßæåé ôï ðáñÜèõñï Üìåóçò åêôÝëåóçò. Watch Window Åìöáíßæåé ôï ðáñÜèõñï ðáñáêïëïýèçóçò. Quick Watch Åìöáíßæåé ôï ðáñÜèõñï ãñÞãïñïõ åëÝã÷ïõ. Call Stack Åìöáíßæåé ëßóôá ìå ôéò ôñÝ÷ïõóåò åíåñãÝò êëÞóåéò äéáäéêáóéþí (äéáäéêáóßåò ðïõ Ý÷ïõí êáëÝóåé Üëëåò êáé äåí Ý÷ïõí ïëïêëçñùèåß

Áíáêåöáëáßùóç Ôá åßäç ôùí ëáèþí åßíáé óõíôáêôéêÜ, åêôÝëåóçò, ëïãéêÜ. Ôá óõíôáêôéêÜ ëÜèç ïöåßëïíôáé óôçí ðáñáâßáóç ôùí êáíüíùí óýíôáîçò êáé ãñáììáôéêÞò ôçò VB. Ôá ëÜèç åêôÝëåóçò ïöåßëïíôáé óå ëåéôïõñãßåò ðïõ êáëåßôáé íá åêôåëÝóåé ôï õðïëïãéóôéêü óýóôçìá êÜôù áðü óõíèÞêåò ðïõ åßíáé áóáöåßò Þ/êáé áðáãïñåõôéêÝò. Ôá ëïãéêÜ ëÜèç ïöåßëïíôáé óå ëÜèïò áëãüñéèìï Þ êùäéêïðïßçóç áëãïñßèìïõ. ¸íáò ôñßôïò ôñüðïò ëåéôïõñãßáò ôïõ ðåñéâÜëëïíôïò åñãáóßáò åßíáé ç ëåéôïõñãßá óå êáôÜóôáóç äéáêïðÞò. ´Ïôáí ôï ðåñéâÜëëïí åñãáóßáò âñßóêåôáé óå êáôÜóôáóç äéáêïðÞò ìðïñïýìå íá ðÜñïõìå óôéãìéüôõðá ôçò êáôÜóôáóçò åêôÝëåóçò, íá åðÝìâïõìå óôïí êþäéêá êáé íá õðïâïçèÞóïõìå ðïéêéëïôñüðùò ôç äéáäéêáóßá åêóöáëìÜôùóçò. Óå êáôÜóôáóç äéáêïðÞò ìðïñïýìå íá ðñáãìáôïðïéÞóïõìå âçìáôéêÞ åêôÝëåóç ôïõ ðñïãñÜììáôïò êáé íá ðáñáêïëïõèÞóïõìå ôéò ôéìÝò ìåôáâëçôþí êáé åêöñÜóåùí óôá ðáñÜèõñá ðáñáêïëïýèçóçò, ãñÞãïñïõ åëÝã÷ïõ êáé ôïðéêþí ìåôáâëçôþí. Åðßóçò, ìðïñïýìå íá åêìåôáëëåõôïýìå ôéò äõíáôüôçôåò ôïõ ðáñáèýñïõ Üìåóçò åêôÝëåóçò ãéá Üìåóç åêôÝëåóç ôùí åíôïëþí êáé åêôýðùóç ôéìþí.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. ÐñáãìáôïðïéÞóôå âÞìá âÞìá ôï ðáñÜäåéãìá 11-2. ÅëÝãîôå ôéò ôéìÝò ôùí ìåôáâëçôþí ìå ôç âïÞèåéá ôïõ äñïìÝá ôïõ ðïíôéêéïý. 2. ÔïðïèåôÞóôå óçìåßï äéáêïðÞò üðùò óôï ðáñÜäåéãìá 11-4. ÐáñïõóéÜóôå ôç ãñáììÞ åñãáëåßùí åêóöáëìÜôùóçò êáé ðñáãìáôïðïéÞóôå âçìáôéêÞ åêôÝëåóç ôïõ ðñïãñÜììáôïò. 3. ÅðáíáëÜâåôå ôçí ðñïçãïýìåíç Üóêçóç ìå áíïé÷ôü ôï ðáñÜèõñï ðáñáêïëïýèçóçò (Üóêçóç 11-1). Ãéá ìéá ðáñÜóôáóç êáëÝóôå êáé ôï ðáñÜèõñï ãñÞãïñïõ åëÝã÷ïõ . 4. ÐñáãìáôïðïéÞóôå ôçí Üóêçóç 11-4. 5. ÅðáíáëÜâåôå ôçí Üóêçóç 4. á) Åíþ âñßóêåóôå óôï åóùôåñéêü ôïõ âñü÷ïõ, æçôÞóôå íá ìåôáöåñèåß ï äåßêôçò ðñïãñÜììáôïò óôçí åíôïëÞ áñ÷éêïðïßçóçò ôïõ N ðñéí ôï âñü÷ï êáé óõíå÷ßóôå ôç âçìáôéêÞ åêôÝëåóç. Íá ðáñáêïëïõèåßôå ôá áðïôåëÝóìáôá óôï ðáñÜèõñï Üìåóçò åêôÝëåóçò åíôïëþí. 154

155


Óçìåéþóåéò:

ÌÜèçìá 12

Äçìéïõñãßá Ìåíïý Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá äçìéïõñãïýí ãñáììÝò ìåíïý, õðïìåíïý êáé ðôõóóüìåíá ìåíïý. Íá áíáãíùñßæïõí ôéò éäéüôçôåò ôùí åðéëïãþí ôùí ìåíïý. Íá áíôéóôïé÷ßæïõí óôéò åðéëïãÝò ôùí ìåíïý êþäéêá äéá÷åßñéóçò óõìâÜíôùí.

Óôá ðñïçãïýìåíá ìáèÞìáôá áíáðôýîáìå ìéêñÝò åöáñìïãÝò óôéò ïðïßåò ÷ñçóéìïðïéÞóáìå ðëÞêôñá äéáôáãÞò ãéá íá åíôïëïäïôïýìå ôçí Ýíáñîç êÜðïéùí äéáäéêáóéþí. ¼ìùò, üôáí ôï ðëÞèïò ôùí äéáäéêáóéþí êáé ôùí äéáöïñåôéêþí åðéëïãþí åßíáé ðïëý ìåãÜëï, ìéá öüñìá ìå ìåãÜëï ðëÞèïò ðëÞêôñùí äéáôáãÞò êáé åðéëïãÞò, ðïëëÜ áðü ôá ïðïßá äåí åßíáé ðÜíôá óå ÷ñÞóç, ðñïêáëåß óßãïõñá óýã÷õóç êáé áðïóôñïöÞ óôï ÷ñÞóôç. Ìéá Üñéóôç åíáëëáêôéêÞ ëýóç äçìéïõñãßáò äéåðáöÞò ìå ôï ÷ñÞóôç áðïôåëïýí ôá ìåíïý. Ìå ôá ìåíïý ïñãáíþíïõìå ôéò äéáôáãÝò óå ïìÜäåò, ìå ôñüðï êïéíü êáé ãíþñéìï óôï ÷ñÞóôç, áíÜëïãï åêåßíïõ ðïõ ÷ñçóéìïðïéïýí ïé ðåñéóóüôåñåò åöáñìïãÝò ôùí Windows.

ÅðåîåñãáóôÞò ìåíïý Ôï ðåñéâÜëëïí åñãáóßáò äéáèÝôåé ôïí åðåîåñãáóôÞ ìåíïý (menu editor) ìå ôïí ïðïßï ãßíåôáé åýêïëá ç äçìéïõñãßá ãñáììþí ìåíïý êáé ç äéá÷åßñéóç ôùí ìåíïý, ôùí õðïìåíïý êáé ôùí åðéëïãþí ðïõ ôïðïèåôïýíôáé ìÝóá óå áõôÜ. ÓõãêåêñéìÝíá, ìå ôïí åðåîåñãáóôÞ ìåíïý ìðïñïýìå: Íá äçìéïõñãÞóïõìå ãñáììÝò ìåíïý (menu bar), ìåíïý ìå äéáôáãÝò, õðïìåíïý (submenu) êáèþò êáé áíáäõüìåíá ìåíïý (pop-up menu). Íá áðïäþóïõìå óôéò åðéëïãÝò ôïõ ìåíïý, ðïõ êáëïýíôáé êáé óôïé÷åßá ôïõ ìåíïý (menu item), éäéüôçôåò üðùò üíïìá (Name), ðåñéãñáöÞ (Caption), äõíáôüôçôá åìöÜíéóçò Þ áðüêñõøçò (Visible) ê.Ü íá óõíäÝóïõìå Ýíá ìåíïý ìå ôï óýóôçìá Üìåóçò âïÞèåéáò (Help) Óå ìéá öüñìá åðéóõíÜðôïõìå ìéá ãñáììÞ ìåíïý áêïëïõèþíôáò ôçí åîÞò äéáäéêáóßá: 1. Áðü ôç ãñáììÞ ìåíïý ôïõ ðåñéâÜëëïíôïò åñãáóßáò åðéëÝãïõìå Tools | Menu Editor Þ ðáôÜìå ôï áíôßóôïé÷ï ðëÞêôñï ôçò ãñáììÞò åñãáëåßùí. 2. Óôçí éäéüôçôá Caption ðëçêôñïëïãïýìå ôï ðåñéãñáöéêü üíïìá ôçò ðñþôçò åðéëïãÞò ôïõ ìåíïý, üðùò èÝëïõìå íá åìöáíßæåôáé êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò. 3. Óôçí éäéüôçôá Name ðëçêôñïëïãïýìå ôï üíïìá ìå ôï ïðïßï èá áíáöÝñïõìå ôï áíôéêåßìåíï ìÝóù ôùí åíôïëþí ôïõ ðñïãñÜììáôïò. 4. ÊÜíïõìå êëéê óôï ðëÞêôñï Next ïðüôå ôï áíôéêåßìåíï åìöáíßæåôáé óôç ëßóôá åðéëïãþí. 5. Ôï ðáñÜèõñï ôïõ åðåîåñãáóôÞ ìåíïý åðáíåìöáíßæåôáé êåíü Ýôïéìï íá äå÷ôåß ôïí ïñéóìü ôùí õðüëïéðùí åðéëïãþí ôïõ ìåíïý. ÅðáíáëáìâÜíïõìå ôá âÞìáôá 2 Ýùò 4 ìÝ÷ñé íá ïëïêëçñþóïõìå ôï ìåíïý.

Åéêüíá 12-1. Äéáäéêáóßá äçìéïõñãßáò ìåíïý óôï ðáñÜèõñï ôïõ åðåîåñãáóôÞ ìåíïý

Áðü üôé öáßíåôáé ïé åðéëïãÝò ìåíïý åßíáé áíôéêåßìåíá ðïõ Ý÷ïõí éäéüôçôåò. Ïé äéáöïñÜ ôïõò áðü ôá Üëëá áíôéêåßìåíá åßíáé üôé ç áñ÷éêÞ áðüäïóç ôéìþí óôéò éäéüôçôÝò ôïõò äå ãßíåôáé áðü ôï ðáñÜèõñï éäéïôÞôùí áëëÜ áðü ôïí åðåîåñãáóôÞ ìåíïý ãéá ëüãïõò ðïõ èá áíáðôýîïõìå ðéï êÜôù. 156

157


Ãéá íá óõíäÝóïõìå ìéá åðéëïãÞ ôçò ãñáììÞò ìåíïý ìå Ýíá ðëÞêôñï Üìåóçò ðñüóâáóçò, èÝôïõìå ôï ÷áñáêôÞñá (&) ìðñïò áðü ôï áíôßóôïé÷ï ãñÜììá ôçò éäéüôçôáò Caption. Ãéá ðáñÜäåéãìá, áí áðïäþóïõìå ôçí ôéìÞ &File óôç éäéüôçôá Caption ìéáò åðéëïãÞò, ïñßæïõìå üôé ôï ðëÞêôñï Üìåóçò ðñüóâáóçò èá åßíáé ôï F. Áõôü óçìáßíåé üôé üôáí åêôåëïýìå ôçí

Ç ëåéôïõñãßá ôùí ðëÞêôñùí Üìåóçò ðñüóâáóçò Ý÷åé åîçãçèåß óôï ìÜèçìá 4.

åöáñìïãÞ ìðïñïýìå íá áíïßîïõìå áðåõèåßáò ôçí åðéëïãÞ File ðáôþíôáò ôï óõíäõáóìü ðëÞêôñùí Alt + F.

1. Óôï ðëáßóéï ëßóôáò áíôéêåéìÝíùí õðïäåéêíýïõìå ôçí åðéëïãÞ &ÅðéìÝëåéá êáé ðáôÜìå ôï ðëÞêôñï Insert. ÁìÝóùò áíïßãåé ÷þñïò ãéá íá õðïäå÷ôåß ôçí ðñþôç õðïåðéëïãÞ. 2. Óýìöùíá ìå ôá ðñïçãïýìåíá óõìðëçñþíïõìå ôï ðëáßóéï Caption êáé Name ãéá êÜèå

ÐáñÜäåéãìá 12-1.

õðïåðéëïãÞ êáé óõãêåêñéìÝíá:

Ç ãñáììÞ ìåíïý ôçò öüñìáò ìéáò åöáñìïãÞò, ç ïðïßá åßíáé ðáñüìïéá ìå ôï ÓçìåéùìáôÜñéï (Notepad) ôùí Windows, èÝëïõìå íá ðåñéÝ÷åé ôéò åðéëïãÝò Áñ÷åßï, ÅðéìÝëåéá, AíáæÞôçóç, ÂïÞèåéá. Áöïý äçìéïõñãÞóïõìå ôç öüñìá, êáëïýìå ôïí åðåîåñãáóôÞ ìåíïý êáé åéóÜãïõìå ôéò åðéëïãÝò ìåíïý ðïõ ðñïäéáãñÜøáìå.

Caption &Áñ÷åßï &ÅðéìÝëåéá Áíá&æÞôçóç &ÂïÞèåéá

ÐáñÜäåéãìá 12-2. Óõíå÷ßæïõìå ôï ðñïçãïýìåíï ðáñÜäåéãìá ðñïêåéìÝíïõ íá äåßîïõìå åðéðëÝïí äõíáôüôçôåò ôïõ åðåîåñãáóôÞ ìåíïý. Äçìéïõñãïýìå ôéò õðïåðéëïãÝò ôçò åðéëïãÞò Áñ÷åßï, áêïëïõèþíôáò ôçí åîÞò äéáäéêáóßá:

Caption Name &Áñ÷åßï mnuFile mnuFileNew &ÍÝï mnuFIleOpen &Áíïéîå mnuFileSave &Óþóå mnuFileSaveAs Óþóå &Ùò &Äéáìüñöùóç Óåëßäáò mnuFileSetUp mnuFilePrint Åêôý&ðùóç mnuFileExit &Åîïäïò mnuEdit &ÅðéìÝëåéá mnuSearch Áíá&æÞôçóç mnuHelp &ÂïÞèåéá

Name mnuFile mnuEdit mnuSearch mnuHelp

Åéêüíá 12-2. Ç öüñìá êáé ïé éäéüôçôåò ôùí åðéëïãþí ôçò ãñáììÞò ìåíïý

Áí æçôÞóïõìå åêôÝëåóç ôçò åöáñìïãÞò ðáñáôçñïýìå üôé äå äçìéïõñãÞèçêå ôï ìåíïý ôçò åðéëïãÞò Áñ÷åßï áëëÜ ðñïóôÝèçêáí üëåò ïé åðéëïãÝò óôç ãñáììÞ ìåíïý.

Áò óçìåéùèåß üôé ôá ðëÞêôñá Üìåóçò ðñüóâáóçò öáßíåôáé üôé äå ëåéôïõñãïýí, êáé áõôü ãéáôß äåí Ý÷ïõìå äçìéïõñãÞóåé ìåíïý êÜôù áðü êÜèå åðéëïãÞ. Ç äéáäéêáóßá ðïõ ðåñéãñÜøáìå ðéï ðÜíù åßíáé ç âáóéêÞ äéáäéêáóßá ç ïðïßá ðáñÜãåé Ýíá ìåíïý ìå åðéëïãÝò, ðïõ êáôÜ ôçí åêôÝëåóç èá åìöáíéóôïýí óå ìéá ãñáììÞ êáé ãéá ôéò ïðïßåò Ý÷ïõìå ïñßóåé ôéò âáóéêÝò éäéüôçôåò Caption êáé Name. Áí èÝëïõìå íá äçìéïõñãÞóïõìå åðßðåäá åðéëïãþí (ìåíïý êáé õðïìåíïý), íá áðåíåñãïðïéÞóïõìå Þ/êáé íá áðïêñýøïõìå êÜðïéåò åðéëïãÝò ìðïñïýìå íá ôï êÜíïõìå êáôÜ ôï ÷ñüíï äçìéïõñãßáò ôïõ ìåíïý Þ êáé åê ôùí õóôÝñùí áîéïðïéþíôáò ôá õðüëïéðá ðëáßóéá êáé ðëÞêôñá ðïõ äéáèÝôåé ï åðåîåñãáóôÞò ìåíïý. ÓõãêåêñéìÝíá, ãéá íá: äçìéïõñãÞóïõìå åðßðåäá åðéëïãþí Óôç ëßóôá åðéëïãþí ôïõ åðåîåñãáóôÞ ìåíïý õðïäåéêíýïõìå ôçí åðéëïãÞ ðïõ ìáò åíäéáöÝñåé êáé ðáôÜìå Ýíá áðü ôá ðëÞêôñá ìå ôá âåëÜêéá, ðïõ ÷áñáêôçñßæïíôáé ùò óêéáãñÜöçóçò åðéðÝäùí (outlining buttons).

Åéêüíá 12-3. Áí ïé åðéëïãÝò ôçò ãñáììÞò ìåíïý äå ÷ùñïýí óôïðëÜôïò ôïõ ðáñáèýñïõ åðåêôåßíïíôáé êáé óå äåýôåñç ãñáììÞ

3. Ãéá íá åìöáíßóïõìå ôéò íÝåò åðéëïãÝò ùò ìåíïý ôçò åðéëïãÞò Áñ÷åßï, ôéò õðïäåéêíýïõìå ìéá ðñïò ìéá óôç ëßóôá áíôéêåéìÝíùí ôïõ åðåîåñãáóôÞ ìåíïý êáé ðáôÜìå ôï ðëÞêôñï âÝëïò äåîéÜ ãéá íá êáôÝâïõí Ýíá åðßðåäï. Óôç ëßóôá åðéëïãþí ôïõ åðåîåñãáóôÞ ìåíïý Ý÷ïõìå:

ìåôáöÝñåé ôçí åðéëïãÞ ðñïò ôá äåîéÜ êáé åìöáíßæåé ôåëåßåò ìðñïóôÜ áðü ôï üíïìÜ ôçò, ðïõ óçìáßíåé üôé ç åðéëïãÞ êáôÝâçêå Ýíá åðßðåäï. ìåôáöÝñåé ôçí åðéëïãÞ ðñïò ôá áñéóôåñÜ ðïõ óçìáßíåé üôé ç åðéëïãÞ áíÝâçêå Ýíá åðßðåäï. ìåôáöÝñåé ôçí åðéëïãÞ ìéá èÝóç åðÜíù (áëëÜæåé ìå ôçí ðñïçãïýìåíÞ ôçò).

&Áñ÷åßï ...&ÍÝï ...&Áíïéîå ...&Óþóå ...Óþóå &Ùò ...&Äéáìüñöùóç Óåëßäáò ...Åêôý&ðùóç ...&Åîïäïò &ÅðéìÝëåéá

ìåôáöÝñåé ôçí åðéëïãÞ ìéá èÝóç êÜôù (áëëÜæåé ìå ôçí åðüìåíÞ ôçò). Insert åéóÜãåé ìéá åðéëïãÞ ðÜíù áðü áõôÞí ðïõ õðïäåéêíýïõìå óôç ëßóôá åðéëïãþí. Delete äéáãñÜöåé ìéá åðéëïãÞ ðïõ õðïäåéêíýïõìå óôç ëßóôá åðéëïãþí. áíôéóôïé÷ßóïõìå ðëÞêôñá óõíôïìßáò (shortcut keys) óôéò åðéëïãÝò Óôç ëßóôá åðéëïãþí ôïõ åðåîåñãáóôÞ ìåíïý õðïäåéêíýïõìå ôçí åðéëïãÞ ðïõ ìáò åíäéáöÝñåé êáé áðü ôï óýíèåôï ðëáßóéï ëßóôáò Shortcut åðéëÝãïõìå ôïí åðéèõìçôü óõíäõáóìü. Ìüíï ìéá ãñáììÞ ìåíïý ìðïñåß íá õðÜñ÷åé áíÜ áðïäþóïõìå éäéüôçôåò óôéò åðéëïãÝò öüñìá. Óôçí åéäéêÞ Enabled åíåñãïðïéåß/áðåíåñãïðïéåß ôçí åðéëïãÞ ìÝóá óôï ìåíïý.

Visible åìöáíßæåé/êñýâåé ôçí åðéëïãÞ ìÝóá óôï ìåíïý. Checked åìöáíßæåé ôï óçìåßï ìáñêáñßóìáôïò äßðëá óôçí åðéëïãÞ. Óôéò ðáñáðÜíù éäéüôçôåò ìðïñïýìå íá áðïäþóïõìå ôéìÝò ü÷é ìüíï áðü ôïí åðåîåñãáóôÞ ìåíïý áëëÜ êáé ìÝóá áðü ôïí êþäéêá ðïõ ãñÜöïõìå ãéá ôç äéáäéêáóßá äéá÷åßñéóçò óõìâÜíôùí Click ôùí åðéëïãþí ôïõ ìåíïý. 158

Ôüôå ç ãñáììÞ ìåíïý áðïêôÜ ðÜëé ôÝóóåñéò åðéëïãÝò êáé åðéëÝãïíôáò Áñ÷åßï ìå ôï ðïíôßêé Þ ìå ôï óõíäõáóìü ôùí ðëÞêôñùí Alt + Á ôï ìåíïý ìå ôéò õðïåðéëïãÝò åìöáíßæåôáé óôï ÷þñï ôïõ ðáñáèýñïõ.

ðåñßðôùóç ðïõ èÝëïõìå íá ÷ñçóéìïðïéåß ï ÷ñÞóôçò ðåñéóóüôåñåò áðü ìéá, êÜíïõìå ïñáôÝò Þ áüñáôåò ôéò êáôÜëëçëåò âáóéêÝò åðéëïãÝò.

Åéêüíá 12-4. Ôï ìåíïý Áñ÷åßï 159


ÐáñÜäåéãìá 12-5.

ÐáñÜäåéãìá 12-3. Äçìéïõñãïýìå ôï ìåíïý ôçò åðéëïãÞò ÅðéìÝëåéá êáé áíôéóôïé÷ßæïõìå ðëÞêôñá óõíôïìßáò óôéò õðïåðéëïãÝò ôïõ.

Ãéá íá ðáñåìâÜëëïõìå äéá÷ùñéóôéêÞ ãñáììÞ áíÜìåóá óôçí åðéëïãÞ Óþóå Ùò êáé Äéáìüñöùóç Óåëßäáò áêïëïõèïýìå ôçí åîÞò äéáäéêáóßá:

1. ÅðéëÝãïõìå óôç ëßóôá åðéëïãþí ôç &Äéáìüñöùóç Óåëßäáò êáé ðáôÜìå ôï

1. Ìå ôï ðëÞêôñï Insert äçìéïõñãïýìå ÷þñï ðÜíù áðü ôçí åðéëïãÞ áíáæÞôçóç. 2. Äçëþíïõìå ôéò éäéüôçôåò Caption êáé Name. 3. ÅðéëÝãïõìå ôïí åðéèõìçôü óõíäõáóìü ðëÞêôñùí óõíôüìåõóçò. 4. ÅíèÝôïõìåôçí åðéëïãÞ óå äåýôåñï åðßðåäï óôçí éåñáñ÷ßá ôùí åðéëïãþí. 5. ÅðáíáëáìâÜíïõìå ôá âÞìáôá 1 Ýùò 4 ãéá üëåò ôéò åðéëïãÝò.

ðëÞêôñï Insert. 2. Ãéá ôçí êáéíïýñãéá åðéëïãÞ ðëçêôñïëïãïýìå óôçí éäéüôçôá Caption ìéá ðáýëá (-) êáé óôçí éäéüôçôá Name åéóÜãïõìå õðï÷ñåùôéêÜ Ýíá üíïìá (ð.÷ separator1), ôï ïðïßï üìùò äåí Ý÷åé êáìéÜ óçìáóßá ãéá ôçí åöáñìïãÞ (äåí ôï ÷ñçóéìïðïéïýìå óå êáíÝíá óçìåßï ôïõ êþäéêá). 3. Ìå ôïí ßäéï ôñüðï ðáñåìâÜëëïõìå ìéá äéá÷ùñéóôéêÞ ãñáììÞ áíÜìåóá óôçí åðéëïãÞ Åêôýðùóç êáé ¸îïäïò.

Åéêüíá 12-5. Äçëþóåéò ðëÞêôñùí óõíôüìåõóçò

Åéêüíá 12-8. Äçìéïõñãßá ïìÜäùí åðéëïãþí

ÊáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò, áí êáëÝóïõìå ôï ìåíïý ÅðéìÝëåéá ï óõíäõáóìüò ôùí ðëÞêôñùí óõíôüìåõóçò åìöáíßæåôáé äåîéÜ áðü ôï üíïìá êÜèå åðéëïãÞò. Ìå ôç ÷ñÞóç ôùí ðëÞêôñùí óõíôïìßáò ìðïñïýìå íá Ý÷ïõìå Üìåóç ðñüóâáóç óå ìéá õðïåðéëïãÞ ÷ùñßò íá áíïßîïõìå ôï ìåíïý ðïõ ôçí ðåñéÝ÷åé.

Åéêüíá 12-9. Ç ôåëéêÞ ìïñöÞ ôïõ ìåíïý Áñ÷åßï

Åéêüíá 12-6. Ôï ìåíïý ÅðéìÝëåéá ÐáñÜäåéãìá 12-4. Áí èÝëïõìå êÜðïéåò åðéëïãÝò íá åßíáé áñ÷éêÜ áðåíåñãïðïéçìÝíåò (üðùò ðñÜãìáôé óõìâáßíåé óôçí åöáñìïãÞ Notepad) äåí Ý÷ïõìå ðáñÜ íá ôéò åðéëÝîïõìå óôç ëßóôá áíôéêåéìÝíùí ôïõ åðåîåñãáóôÞ ìåíïý êáé íá îåìáñêÜñïõìå ôçí éäéüôçôá ôïõò Enabled. ÓõíÞèùò ôçí éäéüôçôá Enabled, üðùò êáé ôç Visible, ôéò ÷åéñéæüìáóôå ìÝóù ôïõ êþäéêá,

Åðéóýíáøç êþäéêá óå åðéëïãÞ ìåíïý Ãéá íá åêôåëÝóïõìå ôéò åðéèõìçôÝò åñãáóßåò ìÝóù ôùí åðéëïãþí åíüò ìåíïý ðñÝðåé íá äçìéïõñãÞóïõìå ôïí áíôßóôïé÷ï êþäéêá. Ôá áíôéêåßìåíá ôùí ìåíïý õðïóôçñßæïõí Ýíá ìüíï óõìâÜí, ôï óõìâÜí Click, êáé åðïìÝíùò óôçí áíôßóôïé÷ç õðïñïõôßíá óõìâÜíôïò ãñÜöïõìå ôïí êáôÜëëçëï êþäéêá. Ãéá íá åìöáíßóïõìå óôï ðáñÜèõñï êþäéêá ôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò Click ìéáò åðéëïãÞò, êëåßíïõìå ôïí åðåîåñãáóôÞ ìåíïý êáé ìå ôï ðïíôßêé åðéëÝãïõìå ôçí åðéëïãÞ áðü ôç ëßóôá áíôéêåéìÝíùí ðïõ ìáò åíäéáöÝñåé.

üðïõ êÜôù áðü óõíèÞêåò ôïõò áðïäßäïõìå áëçèÞ Þ øåõäÞ ôéìÞ. ¢óêçóç 12-1. Èá ãñÜøïõìå ôïí êþäéêá ðïõ èá áðïêüâåé, èá áíôéãñÜöåé, èá åðéêïëëÜ êáé èá äéáãñÜöåé Ýíá ôìÞìá ôïõ êåéìÝíïõ, ðïõ Ý÷ïõìå ãñÜøåé ìÝóá óå Ýíá ðëáßóéï êåéìÝíïõ. Óôç öüñìá ôïõ Óçìåéùìáôáñßïõ ôïðïèåôïýìå Ýíá ðëáßóéï êåéìÝíïõ ìå üíïìá TextArea. Óôï ðëáßóéï êåéìÝíïõ èá ãñÜöïõìå ôï ðñïò åðåîåñãáóßá êåßìåíï, ðïõ êáôÜ êáíüíá èá ðåñéÝ÷åé ðïëëÝò ãñáììÝò. Ãé' áõôü äßíïõìå ôçí ôéìÞ True óôçí éäéüôçôá MultiLine

Åéêüíá 12-7. Ôï ìåíïý ÅðéìÝëåéá ìå áðåíåñãïðïéçìÝíåò åðéëïãÝò Ãéá íá ÷ùñßóïõìå óå ïìÜäåò ôéò õðïåðéëïãÝò ÷ñçóéìïðïéïýìå ïñéæüíôéåò äéá÷ùñéóôéêÝò ãñáììÝò (separator bars). Ïé ãñáììÝò áõôÝò áðïôåëïýí åðßóçò áíôéêåßìåíá, ôá ïðïßá üìùò äåí åðéëÝãïíôáé êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò. 160

(ðëáßóéï êåéìÝíïõ ðïëëþí ãñáììþí) êáé ôçí ôéìÞ 2-Vertical óôçí éäéüôçôá ScrollBars (åìöÜíéóç êáôáêüñõöçò ñÜâäïõ êýëéóçò). Ç åðéëïãÞ êåéìÝíïõ ãßíåôáé üðùò áêñéâþò óå üëïõò ôïõò åðåîåñãáóôÝò êåéìÝíïõ. ÊÜíïõìå êëéê óôçí áñ÷Þ ôçò ðåñéï÷Þò ðïõ èÝëïõìå íá åðéëÝîïõìå êáé óýïõìå ôï ðïíôßêé ìÝ÷ñé ôï ôÝëïò ôçò. ¼ôáí Ý÷åé ãßíåé åðéëïãÞ ìéáò ðåñéï÷Þò êåéìÝíïõ, ç ôéìÞ ôçò éäéüôçôáò SelText ôïõ ðëáéóßïõ êåéìÝíïõ éóïýôáé ìå ôç óõìâïëïóåéñÜ ðïõ Ý÷åé åðéëåãåß. 161


Ç áðïêïðÞ, ç áíôéãñáöÞ êáé ç åðéêüëëçóç êåéìÝíïõ èá ãßíåôáé ìå ôç âïÞèåéá ôïõ ðñï÷åßñïõ (Cliboard). ¼ðùò åßäáìå óôï ìÜèçìá 4 õðÜñ÷åé Ýíá áíôéêåßìåíï ìå üíïìá Clipboard. Ôï áíôéêåßìåíï áõôü õðïóôçñßæåôáé áðü ôç ìÝèïäï Clear, ìå ôçí ïðïßá äéáãñÜöïõìå ôï ðåñéå÷üìåíü ôïõ, ôç ìÝèïäï SetText, ìå ôçí ïðïßá óõìðëçñþíïõìå ôï ðåñéå÷üìåíü ôïõ êáé áðü ôç ìÝèïäï GetText, ìå ôçí ïðïßá áíôëïýìå ôçí ôéìÞ ôïõ ðåñéå÷ïìÝíïõ ôïõ.

Ðëáßóéï êåéìÝíïõ TextArea. ÅðéëåãìÝíï êåßìåíï. Ïé åðéëïãÝò ôïõ ìåíïý Ý÷ïõí åíåñãïðïéçèåß ìéá êáé õðÜñ÷åé áíôéêåßìåíï ãéá áðïêïðÞ, áíôéãñáöÞ êáé äéáãñáöÞ.

Åéêüíá 12-10. ÅðéëÝãïõìå ÅðéìÝëåéá ãéá åðåîåñãáóßá ôçò åðéëåãìÝíçò ðåñéï÷Þò. Ïé äéáäéêáóßåò åîõðçñÝôçóçò óõìâÜíôùí Click ãéá ôéò åðéëïãÝò ÅðéìÝëåéá, Êüøéìï, ÁíôéãñáöÞ, Åðéêüëëçóç, ÄéáãñáöÞ åßíáé:

Private Sub mnuEdit_Click() 'Åíåñãïðïßçóç/Áðåíåñãïðïßçóç åðéëïãþí 'ÁíÜêëçóç ... 'Êüøéìï, ÁíôéãñáöÞ, ÄéáãñáöÞ (Ýëåãîå áí õðÜñ÷åé åðéëåãìÝíï êåßìåíï) If Len(TextArea.SelText) > 0 Then mnuEditCut.Enabled = True mnuEditCopy.Enabled = True mnuEditDelete.Enabled = True Else mnuEditCut.Enabled = False mnuEditCopy.Enabled = False mnuEditDelete.Enabled = False End If 'Åðéêüëëçóç (¸ëåãîå áí õðÜñ÷åé êåßìåíï óôï Ðñü÷åéñï) mnuEditPaste.Enabled = (Clipboard.GetText() <> "") End Sub Private Sub mnuEditCut_Click() 'ÄéáãñáöÞ ôïõ ðåñéå÷ïìÝíïõ ôïõ Ðñï÷åßñïõ Clipboard.Clear 'ÁíôéãñáöÞ åðéëåãìÝíïõ êåéìÝíïõ óôï Ðñü÷åéñï Clipboard.SetText TextArea.SelText 'ÄéáãñáöÞ åðéëåãìÝíïõ êåéìÝíïõ TextArea.SelText = "" End Sub Private Sub mnuEditCopy_Click() 'ÄéáãñáöÞ ôïõ ðåñéå÷ïìÝíïõ ôïõ Ðñï÷åßñïõ Clipboard.Clear 'ÁíôéãñáöÞ åðéëåãìÝíïõ êåéìÝíïõ óôï Ðñü÷åéñï Clipboard.SetText TextArea.SelText End Sub Private Sub mnuEditPaste_Click() 'ÔïðïèÝôçóç êåéìÝíïõ áðü ôï Ðñü÷åéñï óôï óçìåßï ôïõ êåéìÝíïõ ðïõ åðéëÝ÷èçêå TextArea.SelText = Clipboard.GetText() End Sub 162

Private Sub mnuEditDelete_Click() 'ÄéáãñáöÞ åðéëåãìÝíïõ êåéìÝíïõ TextArea.SelText = "" End Sub

Áíáäõüìåíá ìåíïý

Ôá áíáäõüìåíá ìåíïý (Pop-Up Menu) åßíáé ìåíïý åðéëïãþí ðïõ åìöáíßæïíôáé óå ìéá öüñìá, üôáí ï ÷ñÞóôçò ðáôÜåé ôï äåîß ðëÞêôñï ôïõ ðïíôéêéïý. Ôá áíáäõüìåíá ìåíïý åìöáíßæïíôáé óôï óçìåßï ðïõ âñßóêåôáé ï äåßêôçò ôïõ ðïíôéêéïý ôç óõãêåêñéìÝíç óôéãìÞ. Ôá ÷ñçóéìïðïéïýìå ùò ìåíïý óõíôïìßáò ãéá íá ðáñïõóéÜóïõìå ôéò ðéï ÷ñÞóéìåò äéáôáãÝò ãéá ôï áíôéêåßìåíï ðïõ äåß÷íïõìå. Ôá áíáäõüìåíá ìåíïý äçìéïõñãïýíôáé ìå ôç âïÞèåéá ôïõ åðåîåñãáóôÞ ìåíïý, üðùò ðåñéãñÜøáìå ðáñáðÜíù. Ìðïñïýìå íá äçìéïõñãÞóïõìå ðïëëÜ áíáäõüìåíá ìåíïý, áëëÜ êÜèå öïñÜ ìðïñïýìå íá åìöáíßæïõìå ìüíï Ýíá. ÊÜèå ìåíïý åðéëïãþí ôçò ãñáììÞò ìåíïý ìéáò öüñìáò ìðïñåß íá åìöáíéóôåß êáôÜ ôçí åêôÝëåóç ìå ôç ìïñöÞ áíáäõüìåíïõ ìåíïý. Ùóôüóï, ìðïñïýìå íá äçìéïõñãÞóïõìå áíáäõüìåíá ìåíïý ðïõ äåí åßíáé ïñáôÜ ìÝóù ôçò ãñáììÞò ìåíïý áñêåß íá äþóïõìå óôçí éäéüôçôá Visible ôçí ôéìÞ False. Ãéá íá åìöáíßóïõìå Ýíá áíáäõüìåíï ìåíïý ÷ñçóéìïðïéïýìå ôç ìÝèïäï PopupMenu, ôçò ïðïßáò ìéá ìïñöÞ åßíáé ç:

PopupMenu üíïìá_ìåíïý ÔõðéêÜ, êáëïýìå ôç ìÝèïäï PopupMenu óôç äéáäéêáóßá äéá÷åßñéóçò óõìâÜíôïò MouseUp ãéá Ôï ìåíïý ðïõ èÝëïõìå íá ôï áíôéêåßìåíï ðïõ èá åîõðçñåôçèåß áðü ôï ìåíïý. ¼ðùò åßíáé öáíåñü ìðïñïýìå íá ïñßóïõìå ùò áíáäõüìåíï åìöáíßóïõìå Ýíá áíáäõüìåíï ìåíïý ãéá êÜèå áíôéêåßìåíï ðïõ õðïóôçñßæåé ôï óõìâÜí ðñÝðåé íá Ý÷åé ôïõëÜ÷éóôïí Ýíá õðïìåíïý! MouseUp. ÐáñÜäåéãìá 12-6. Ïñßæïõìå ùò áíáäõüìåíï ìåíïý, ôï ìåíïý mnuEdit, ðïõ äçìéïõñãÞóáìå óå ðñïçãïýìåíï ðáñÜäåéãìá. Ç åìöÜíéóÞ ôïõ èá ãßíåôáé êÜèå öïñÜ ðïõ ðáôÜìå ôï äåîß ðëÞêôñï ôïõ ðïíôéêéïý åðÜíù óôo ðëáßóéï êåéìÝíïõ TextArea êáé óôï óçìåßï ðïõ õðïäåéêíýåé ï äåßêôçò ôïõ ðïíôéêéïý.

Åéêüíá 12-11. Ôï áíáäõüìåíï ìåíïý åßíáé Ýíá ìåíïý ôçò ãñáììÞò ìåíïý. Ãé' áõôü óõíôÜóóïõìå ôç äéáäéêáóßá äéá÷åßñéóçò óõìâÜíôïò MouseUp ãéá ôï ðëáßóéï êåéìÝíïõ êáé áðü ôçí ôéìÞ ôçò ðáñáìÝôñïõ Button åëÝã÷ïõìå áí ðáôÞèçêå ôï äåîß ðëÞêôñï ôïõ ðïíôéêéïý (vbRightButton).

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Button = vbRightButton Then 'ÐáôÞèçêå äåîß ðëÞêôñï; PopupMenu mnuEdit End If End Sub Ãéá íá ïñßóïõìå ùò áíáäõüìåíï ìåíïý ôï ìåíïý mnuFile, äåí Ý÷ïõìå ðáñÜ íá áíôéêáôáóôÞóïõìå óôïí ðáñáðÜíù êþäéêá ôçí PopupMenu mnuEdit ìå ôçí PopupMenu

mnuFile. ÔÝëïò, óçìåéþíïõìå üôé ç PopupMenu mnuHelp èá äçìéïõñãÞóåé ëÜèïò åêôÝëåóçò ãéáôß ãéá ôçí åðéëïãÞ ÂïÞèåéá äåí Ý÷ïõìå ïñßóåé ìåíïý. 163


Óôçí ðåñßðôùóç ðïõ èÝëïõìå íá äçìéïõñãÞóïõìå Ýíá áíáäõüìåíï ìåíïý, ôï ïðïßï íá ìç öáßíåôáé óôç ãñáììÞ ìåíïý äåí Ý÷ïõìå ðáñÜ íá ôï ÷áñáêôçñßóïõìå ùò ìç ïñáôü.

Áíáêåöáëáßùóç Ôï ðåñéâÜëëïí åñãáóßáò äéáèÝôåé ôïí åðåîåñãáóôÞ ìåíïý ìå ôïí ïðïßï ãßíåôáé åýêïëá ç äçìéïõñãßá ãñáììþí ìåíïý êáé ç äéá÷åßñéóç ôùí ìåíïý, ôùí õðïìåíïý êáé ôùí åðéëïãþí ðïõ ôïðïèåôïýíôáé ìÝóá óå áõôÜ. Ìå ôïí åðåîåñãáóôÞ ìåíïý ìðïñïýìå íá äçìéïõñãÞóïõìå ãñáììÝò ìåíïý, ìåíïý ìå äéáôáãÝò, õðïìåíïý êáé áíáäõüìåíá ìåíïý. Åðßóçò, ìðïñïýìå íá áðïäþóïõìå óôéò åðéëïãÝò ôïõ ìåíïý ôéò éäéüôçôåò ôïõò üðùò ôï üíïìá, ôçí ðåñéãñáöÞ, ôç äõíáôüôçôá åìöÜíéóçò Þ áðüêñõøçò ê.Ü. Ãéá íá åêôåëÝóïõìå ôéò åðéèõìçôÝò åñãáóßåò ìÝóù ôùí åðéëïãþí åíüò ìåíïý ðñÝðåé íá äçìéïõñãÞóïõìå ôïí áíôßóôïé÷ï êþäéêá. Ôá áíôéêåßìåíá ôùí ìåíïý õðïóôçñßæïõí Ýíá ìüíï óõìâÜí, ôï óõìâÜí Click, êáé åðïìÝíùò óôçí áíôßóôïé÷ç õðïñïõôßíá óõìâÜíôïò ãñÜöïõìå ôïí êáôÜëëçëï êþäéêá.

ÌÜèçìá 13

ÄéáëïãéêÜ ðáñÜèõñá ÅöáñìïãÝò ìå ðïëëÜ ðáñÜèõñá Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá äçìéïõñãïýí áðëÜ äéáëïãéêÜ ðáñÜèõñá. Íá ÷ñçóéìïðïéïýí ôá ðñïôõðïðïéçìÝíá äéáëïãéêÜ ðáñÜèõñá ôýðïõ Open, Print ê.Ü. Íá äçìéïõñãïýí åöáñìïãÝò ìå ðïëëÝò öüñìåò. Ðïëý óõ÷íÜ êáôÜ ôçí åêôÝëåóç ìéáò åöáñìïãÞò ï ÷ñÞóôçò ÷ñåéÜæåôáé íá åíçìåñùèåß ìå óôïé÷åßá áðü ôçí åöáñìïãÞ Þ/êáé íá äþóåé óôïé÷åßá óôçí åöáñìïãÞ. Ó' áõôüí ôï äéÜëïãï, âáóéêü ñüëï ðáßæïõí ôá åéäéêÞò ìïñöÞò ðáñÜèõñá, ðïõ åßíáé ãíùóôÜ ùò äéáëïãéêÜ ðáñÜèõñá (dialog boxes). Ç VB äßíåé ôç äõíáôüôçôá íá äçìéïõñãÞóïõìå äéáëïãéêÜ ðáñÜèõñá áðü ðïëý áðëÜ ùò éäéáßôåñá óýíèåôá. ÓõãêåêñéìÝíá ìðïñïýìå: Íá êáëÝóïõìå óôïí êþäéêÜ ôïõ ðñïãñÜììáôïò ôéò äéáëïãéêÝò óõíáñôÞóåéò MsgBox êáé InputBox.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. ÐñáãìáôïðïéÞóôå ü,ôé ðåñéãñÜöåôáé óôï ðáñÜäåéãìá 12-1 ãéá ôç äçìéïõñãßá ôçò ãñáììÞò ìåíïý. 2. ÁêïëïõèÞóôå âÞìá âÞìá üóá ðåñéãñÜöïíôáé óôï ðáñÜäåéãìá 12-2 ãéá ôç äçìéïõñãßá ôïõ ìåíïý Áñ÷åßï. 3. ÁêïëïõèÞóôå âÞìá âÞìá üóá ðåñéãñÜöïíôáé óôï ðáñÜäåéãìá 12-3 ãéá ôç äçìéïõñãßá ôïõ ìåíïý ÅðéìÝëåéá. 4. ÄçìéïõñãÞóôå ìåíïý ãéá ôçí åðéëïãÞ ÁíáæÞôçóç êáé ÂïÞèåéá. Âåëôéþóôå üëåò ôéò åðéëïãÝò ôçò ãñáììÞò ìåíïý, þóôå íá äéá÷ùñßæïíôáé ïé ïìÜäåò åðéëïãþí ôïõò ìå äéá÷ùñéóôéêÝò ãñáììÝò êáé íá åßíáé áðåíåñãïðïéçìÝíåò ïé åðéëïãÝò ðïõ äåí åßíáé äõíáôüí íá ëåéôïõñãÞóïõí åîáñ÷Þò. Õðüäåéîç: Óõìâïõëåõôåßôå êáé ôï NotePad ôùí Windows. 5. ÐñáãìáôïðïéÞóôå ôçí Üóêçóç 12-1 ãéá íá åðéóõíÜøåôå êþäéêá óôéò åðéëïãÝò ÅðéìÝëåéá, Êüøéìï, ÁíôéãñáöÞ, Åðéêüëëçóç, ÄéáãñáöÞ. ÐñáãìáôïðïéÞóôå üôé ðåñéãñÜöåôáé óôï ðáñÜäåéãìá 12-6 ãéá ôç äçìéïõñãßá áíáäõüìåíïõ 6. ìåíïý. 7. ÄçìéïõñãÞóôå Ýíá áíáäõüìåíï ìåíïý ìå ôéò âáóéêÝò åðéëïãÝò ôçò åöáñìïãÞò, ôï ïðïßï íá ìçí åìöáíßæåé áíôßóôïé÷ç åðéëïãÞ óôç ãñáììÞ ôßôëïõ. 8. ÄçìéïõñãÞóôå öüñìá, ãñáììÞ ìåíïý, ìåíïý êáé õðïìåíïý ãéá åöáñìïãÞ ðáñüìïéá ìå ôï ðñüãñáììá ÆùãñáöéêÞ (Paint) ôùí Windows. 9. Ãéá ôï ðñüãñáììá ÆùãñáöéêÞ äçìéïõñãÞóôå áíáäõüìåíï ìåíïý ôçò ìïñöÞò:

10. Óôï ìåíïý åöáñìïãÞò ôïõ Óçìåéùìáôáñßïõ ðïõ äçìéïõñãÞóáôå, íá åéóÜãåôå ìéá åðéëïãÞ ìå ôçí ïðïßá íá åßíáé äõíáôÞ ç áëëáãÞ ôçò éäéüôçôáò Caption üëùí ôùí åðéëïãþí ôïõ ìåíïý, þóôå ç ðåñéãñáöÞ íá ãßíåôáé åßôå óôá åëëçíéêÜ åßôå óôá áããëéêÜ. 164

·Íá ÷ñçóéìïðïéÞóïõìå ôï ìç ïñáôü áíôéêåßìåíï CommonDialog ãéá íá ðáñïõóéÜóïõìå ðñïôõðïðïéçìÝíá êïéíÜ äéáëïãéêÜ ðáñÜèõñá óáí áõôÜ ðïõ ðáñïõóéÜæïõí ïé åðéëïãÝò Open, Print ê.Ü. ôùí åöáñìïãþí Office ôçò Microsoft. Íá äçìéïõñãÞóïõìå åîáñ÷Þò äéáëïãéêÜ ðáñÜèõñá âáóéóìÝíá óå öüñìåò ðïõ íá éêáíïðïéïýí ôéò éäéáßôåñåò áíÜãêåò ìáò. Ç åðéêïéíùíßá ÷ñÞóôç - åöáñìïãÞò äå âáóßæåôáé ìüíï óå ìéá öüñìá êáé äéáëïãéêÜ ðáñÜèõñá. Óå óýíèåôåò åöáñìïãÝò ìðïñåß íá âåëôéùèåß óçìáíôéêÜ ÷ñçóéìïðïéþíôáò ðïëëÝò öüñìåò êáé ðïëëÜ ðáñÜèõñá. Ç åìöÜíéóç êáé ç áðüêñõøç ôùí ðáñáèýñùí ãßíåôáé, üðùò èá äïýìå, ìå êáôÜëëçëåò åíôïëÝò êáé ìåèüäïõò.

ÓõíáñôÞóåéò åéóüäïõ êáé åîüäïõ Ç óõíÜñôçóç MsgBox

Ðñüêåéôáé ãéá ìéá êÜðùò ðåñßåñãç óõíÜñôçóç, ç ïðïßá äåí åðéóôñÝöåé ìüíï êÜðïéá ôéìÞ áëëÜ êáé åìöáíßæåé Ýíá äéáëïãéêü ðáñÜèõñï (Message box) óôçí ïèüíç. Ôá äéáëïãéêü ðáñÜèõñï ðåñéÝ÷åé Ýíá ìÞíõìá ðñïò ôï ÷ñÞóôç êáé Ýíá Þ ðåñéóóüôåñá ðëÞêôñá äéáôáãÞò, ìå ôá ïðïßá ï ÷ñÞóôçò äçëþíåé ôçí áðÜíôçóÞ ôïõ. Ç ôéìÞ ðïõ åðéóôñÝöåé ç óõíÜñôçóç åßíáé Ýíáò áêÝñáéïò áñéèìüò êáé êáèïñßæåôáé áðü ôï ðëÞêôñï ðïõ ðáôÜåé ï ÷ñÞóôçò ãéá íá êëåßóåé ôï äéáëïãéêü ðáñÜèõñï. Ç ãåíéêÞ ìïñöÞ ôçò óõíÜñôçóçò åßíáé:

MsgBox (ìÞíõìá, ìïñöÞ, ôßôëïò) Ç ôéìÞ ôçò ðáñáìÝôñïõ ìÞíõìá áðïôåëåß ôï ìÞíõìá ðñïò ôïí ÷ñÞóôç, ôï ïðïßï èá åìöáíéóôåß óôï åóùôåñéêü ôïõ äéáëïãéêïý ðáñáèýñïõ. Ç ðáñÜìåôñïò ìïñöÞ êáèïñßæåé ôïí áñéèìü êáé ôïí ôýðï ôùí ðëÞêôñùí äéáôáãÞò ðïõ èá ôïðïèåôçèïýí óôï äéáëïãéêü ðáñÜèõñï, ôï åéêïíßäéï ðïõ ðéèáíüí èá ðåñéÝ÷åôáé óå áõôü êáé ôç óõìðåñéöïñÜ ôïõ ðáñáèýñïõ. ÔÝëïò, ç ðáñÜìåôñïò ôßôëïò êáèïñßæåé ôïí ôßôëï ôïõ ðáñáèýñïõ. Áðü ôéò ôñåéò ðáñáìÝôñïõò ìüíïí ç ðáñÜìåôñïò ìÞíõìá åßíáé õðï÷ñåùôéêÞ. Ïé Üëëåò äýï åðéôñÝðåôáé íá ðáñáëçöèïýí. Óôçí ðåñßðôùóç ðïõ ðáñáëçöèåß ç äåýôåñç ðáñÜìåôñïò, ç èÝóç ôçò ðñÝðåé íá äåóìåõôåß ìå Ýíá êüììá. Áí ðáñáëåßøïõìå ôçí ðáñÜìåôñï ìïñöÞ, ç óõíÜñôçóç óõìðåñéöÝñåôáé óáí íá äüèçêå ìïñöÞ ìå ôéìÞ 0 êáé åìöáíßæåé óôï åóùôåñéêü ôïõ ðáñáèýñïõ Ýíá ìüíï ðëÞêôñï äéáôáãÞò. Áí ðáñáëåßøïõìå ôïí ôßôëï, ùò ôßôëïò ôïõ ðáñáèýñïõ ôïðïèåôåßôáé ôï üíïìá ôïõ Ýñãïõ ôçò åöáñìïãÞò. Ôï ìÝãåèïò ôçò ôéìÞò ôçò ðáñáìÝôñïõ ìÞíõìá ìðïñåß íá åßíáé ìÝ÷ñé 1024 ÷áñáêôÞñåò ðåñßðïõ. Ôï ìÞíõìá ìðïñåß íá áðïôåëåßôáé áðü ðåñéóóüôåñåò ôçò ìéáò ãñáììÞ. Ãéá íá êáèïñßóïõìå ôá óçìåßá óôá ïðïßá èá ãßíåôáé ç áëëáãÞ ãñáììÞò, ìåôáîý ôùí óõìâïëïóåéñþí ðïõ áðïôåëïýí ôï ðåñéå÷üìåíï êÜèå ãñáììÞò ðñÝðåé íá ðáñåìâÜëëïõìå ôïõò ÷áñáêôÞñåò ðïõ áíôéóôïé÷ïýí óôçí åóùôåñéêÞ óôáèåñÜ vbCrLf. 165


ãéá íá ôï êëåßóåé êáé íá ïëïêëçñùèåß ç åðåîåñãáóßá ðïõ ôï åß÷å åìöáíßóåé. ÌåôÜ ìðïñåß íá óõíå÷ßóåé ôç äéá÷åßñéóç ôùí Üëëùí ðáñáèýñùí. ¼ôáí Ýíá äéáëïãéêü ðáñÜèõñï åìðïäßæåé ôï ÷ñÞóôç íá åðéëÝîåé ðáñÜèõñá Üëëçò åöáñìïãÞò ÷áñáêôçñßæåôáé ùò õðï÷ñåùôéêÞò áðüêñéóçò óå åðßðåäï óõóôÞìáôïò, äéáöïñåôéêÜ ÷áñáêôçñßæåôáé ùò õðï÷ñåùôéêÞò áðüêñéóçò óå åðßðåäï åöáñìïãÞò. Ç ôéìÞ ôçò ðáñáìÝôñïõ ìïñöÞ ìðïñåß íá ðñïêýøåé ùò Üèñïéóìá óôáèåñþí ðïõ áíÞêïõí óå äéáöïñåôéêÝò ïìÜäåò ôïõ ðßíáêá. Óå áõôÞí ôçí ðåñßðôùóç ôï ðáñÜèõñï Ý÷åé ôá åðéìÝñïõò ÷áñáêôçñéóôéêÜ ðïõ ôïõ áðïäßäåé ç ôéìÞ ôçò êÜèå ïìÜäáò.

ÐáñÜäåéãìá 13-1. Ç åíôïëÞ:

lReturn = MsgBox("Áðñïóäéüñéóôï ëÜèïò" & vbCrLf & _ "ÐñïóðáèÞóôå îáíÜ", , "Ðñïóï÷Þ")

åìöáíßæåé óôçí ïèüíç äéáëïãéêü ðáñÜèõñï ìå ìÞíõìá äýï ãñáììþí êáé ìå ôßôëï: "Ðñïóï÷Þ". Ôßôëïò ÌÞíõìá

ÐáñÜäåéãìá 13-2.

Åéêüíá 13-1. MsgBox ìå ôßôëï êáé ìç ðñïóäéïñéóìÝíç ìïñöÞ. Ôï ðëáßóéï äéáëüãïõ ðáñïõóéÜæåôáé ëéôü ìå Ýíá ìüíï ðëÞêôñï äéáôáãÞò, ðïõ ôï ðÜôçìÜ ôïõ êëåßíåé ôï ðáñÜèõñï.

Åéêüíá 13-2. MsgBox("Êñßóéìï óöÜëìá" & vbCrLf &"ÄéáêïðÞ ôïõ VðñïãñÜììáôïò;", _ vbCritical, _ "ÄéáêïðÞ")

Ç ôéìÞ ðïõ äÝ÷åôáé ç ðáñÜìåôñïò ìïñöÞ åßíáé áñéèìçôéêÞ êáé ðñïêýðôåé áðü ôï Üèñïéóìá ôùí åðéèõìçôþí ôéìþí óýìöùíá ìå ôéò óôáèåñÝò êáé ôéò ëåéôïõñãßåò ðïõ ðåñéãñÜöïíôáé óôïí ðßíáêá 13-1. ÓôáèåñÜ vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo VbRetryCancel VbCritical vbQuestion vbExclamation VbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal

ÔéìÞ 0 1 2 3 4 5 16 32 48 64 0 256 512 768 0 4096

Ëåéôïõñãßá ÅìöÜíéóå ìüíï ôï ðëÞêôñï Ok ÅìöÜíéóå ôá ðëÞêôñá Ok êáé Cancel ÅìöÜíéóå ôá ðëÞêôñá Abort, Retry êáé Ignore ÅìöÜíéóå ôá ðëÞêôñá Yes, No êáé Cancel ÅìöÜíéóå ôá ðëÞêôñá Yes êáé No ÅìöÜíéóå ôá ðëÞêôñá Retry êáé Cancel ÅìöÜíéóå ôï åéêïíßäéï ÅìöÜíéóå ôï åéêïíßäéï ÅìöÜíéóå ôï åéêïíßäéï ÅìöÜíéóå ôï åéêïíßäéï Ôï ðñþôï ðëÞêôñï åßíáé ðñïåðéëåãìÝíï Ôï äåýôåñï ðëÞêôñï åßíáé ðñïåðéëåãìÝíï Ôï ôñßôï ðëÞêôñï åßíáé ðñïåðéëåãìÝíï Ôï ôÝôáñôï ðëÞêôñï åßíáé ðñïåðéëåãìÝíï Õðï÷ñåùôéêÞ áðüêñéóç óå åðßðåäï åöáñìïãÞò Õðï÷ñåùôéêÞ áðüêñéóç óå åðßðåäï óõóôÞìáôïò

Åéêüíá 13-3. MsgBox("ÁðÝôõ÷å ç óýíäåóç óôï äßêôõï", _ vbInformation + _ vbAbortRetryIgnore + _ vbDefaultButton3) Óôç ãñáììÞ ôßôëïõ åìöáíßæåôáé ï ôßôëïò ôïõ Ýñãïõ

Ðßíáêáò 13-1. ÓôáèåñÝò ôùí ïðïßùí ïé ôéìÝò êáèïñßæïõí ôç ìïñöÞ ôïõ äéáëïãéêïý ðáñáèýñïõ ðïõ åìöáíßæåé ç óõíÜñôçóç MsgBox.

ÓôáèåñÜ VbOK VbCancel VbAbort VbRetry vbIgnore vbYes vbNo

Ç ðñþôç ïìÜäá, ìå ôéìÝò (0 - 5), êáèïñßæåé ôïí áñéèìü êáé ôïí ôýðï ôùí ðëÞêôñùí ðïõ èá ðåñéÝ÷åé ôï äéáëïãéêü ðáñÜèõñï. Ç äåýôåñç ïìÜäá, ìå ôéìÝò (16, 32, 48, 64), êáèïñßæåé ôï åéêïíßäéï ðïõ èá ðåñéÝ÷åé ôï äéáëïãéêü ðáñÜèõñï. Ç ôñßôç ïìÜäá, ìå ôéìÝò (0, 256, 512, 768), êáèïñßæåé ðïéï ðëÞêôñï èá åßíáé ðñïåðéëåãìÝíï. Ç ôÝôáñôç ïìÜäá, ìå ôéìÝò (0, 4096), êáèïñßæåé áí ç áðüêñéóç ôïõ ÷ñÞóôç èá åßíáé õðï÷ñåùôéêÞ óå åðßðåäï åöáñìïãÞò Þ óå åðßðåäï óõóôÞìáôïò.

166

Åéêüíá 13-5. MsgBox("Ôá äåäïìÝíá åßíáé åêôüò ïñßùí" & _ vbCrLf & "ÈÝëåôå íá óõíå÷ßóåôå;", _ vbExclamation + _ vbYesNo, _ "Ðñïåéäïðïßçóç") Ç ôéìÞ ðïõ åðéóôñÝöåé ç óõíÜñôçóç MsgBox ìáò âïçèÜ íá ðñïóäéïñßóïõìå ôï ðëÞêôñï ðïõ ðÜôçóå ï ÷ñÞóôçò, ùò áðüêñéóÞ ôïõ óôï äéáëïãéêü ðáñÜèõñï. Ïé åðéóôñåöüìåíåò ôéìÝò êáé ç ðåñéãñáöÞ ôïõò äßíïíôáé óôïí ðßíáêá 13-2.

Ðáñáôçñþíôáò ôïí ðßíáêá äéáêñßíïõìå ôÝóóåñéò ïìÜäåò ôéìþí:

Óå üôé áöïñÜ ôçí ôÝôáñôç ïìÜäá Ý÷ïõìå íá ðñïóèÝóïõìå üôé Ýíá äéáëïãéêü ðáñÜèõñï åßíáé ðÜíôá õðï÷ñåùôéêÞò áðüêñéóçò (modal). Áõôü óçìáßíåé üôé áðü ôç óôéãìÞ ðïõ åìöáíßæåôáé, äéáêüðôåôáé ç åêôÝëåóç ôçò åöáñìïãÞò êáé áðáéôåßôáé ïðùóäÞðïôå áðüêñéóç áðü ôïí ÷ñÞóôç. Ï ÷ñÞóôçò äåí Ý÷åé ôç äõíáôüôçôá íá åðéëÝîåé Üëëï ðáñÜèõñï ôçò ôñÝ÷ïõóáò åöáñìïãÞò êáé óå áñêåôÝò ðåñéðôþóåéò (ðïõ èåùñïýíôáé êñßóéìåò) äåí ìðïñåß íá åðéëÝîåé ïýôå ðáñÜèõñï Üëëçò åöáñìïãÞò. Åßíáé õðï÷ñåùìÝíïò íá ðáôÞóåé Ýíá ðëÞêôñï ôïõ äéáëïãéêïý ðáñáèýñïõ

Åéêüíá 13-4. MsgBox("ÈÝëåôå íá êÜíåôå êáé Üëëç áíáæÞôçóç;", _ vbQuestion + _ vbOKCancel + _ vbDefaultButton2, _ "ÁíáæÞôçóç")

Ïé ôéìÝò ôùí óôáèåñþí äåí åßíáé óõíå÷üìåíåò êáé öáßíåôáé óáí íá Ý÷ïõí åðéëåãåß áõèáßñåôá. ÐáñáôçñÞóôå üìùò üôé êÜðïéåò áðü áõôÝò áðïôåëïýí äõíÜìåéò ôïõ 2. Áõôü óçìáßíåé üôé Ý÷åé ãßíåé êÜðïéá áíôéóôïß÷éóç ëåéôïõñãéþí ìå ôá bits åíüò áêÝñáéïõ áñéèìïý.

Ôá ðáñÜèõñá ôùí Windows ðïõ äåí åßíáé äéáëïãéêÜ äåí åðéâÜëëïõí õðï÷ñåùôéêÞ áðüêñéóç ôïõ ÷ñÞóôç êáé ãé' áõôü ÷áñáêôçñßæïíôáé ùò modeless.

ÔéìÞ 1 2 3 4 5 6 7

ÐåñéãñáöÞ ÐáôÞèçêå ôï ÐáôÞèçêå ôï ÐáôÞèçêå ôï ÐáôÞèçêå ôï ÐáôÞèçêå ôï ÐáôÞèçêå ôï ÐáôÞèçêå ôï

ðëÞêôñï ðëÞêôñï ðëÞêôñï ðëÞêôñï ðëÞêôñï ðëÞêôñï ðëÞêôñï

Ok Cancel Abort Retry Ignore Yes No

Ðßíáêáò 13-2. Áíôéóôïé÷ßá ðëÞêôñùí ìå óôáèåñÝò. ÐáñÜäåéãìá 13-3. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ åìöáíßæåé ôï äéáëïãéêü ðáñÜèõñï ôçò åéêüíáò 13-3, áíé÷íåýåé ôï ðëÞêôñï ðïõ ðáôÜ ï ÷ñÞóôçò, êáé åêôåëåß êáôÜ ðåñßðôùóç ôçí êáôÜëëçëç ëåéôïõñãßá, Ý÷åé ôç ìïñöÞ: 167


UserAnswer = MsgBox("ÁðÝôõ÷å ç óýíäåóç óôï äßêôõï", _ vbInformation + vbAbortRetryIgnore + vbDefaultButton3) Select Case UserAnswer Case vbAbort 'ÅãêáôÜëåéøå êÜèå ðñïóðÜèåéá : Case vbRetry 'ÐñïóðÜèçóå îáíÜ : Case vbIgnore 'Áãíüçóå ôçí áóôï÷ßá êáé óõíÝ÷éóå : End select Ôçí MsgBox ìðïñïýìå íá ôç ÷ñçóéìïðïéÞóïõìå êáé óáí åíôïëÞ óôçí ðåñßðôùóç ðïõ èÝëïõìå íá åìöáíßóïõìå êÜðïéá ðëçñïöïñßá ÷ùñßò íá ìáò åíäéáöÝñåé ç áðüêñéóç ôïõ ÷ñÞóôç. Ôüôå óõíôÜóóåôáé ùò:

MsgBox ìÞíõìá, ìïñöÞ, ôßôëïò

Ç óõíÜñôçóç InputBox Ç óõíÜñôçóç InputBox åìöáíßæåé Ýíá äéáëïãéêü ðáñÜèõñï ðïõ ðåñéÝ÷åé Ýíá ðëáßóéï êåéìÝíïõ êáé äýï ðëÞêôñá äéáôáãÞò, ôï Ok êáé ôï Cancel. Ï ÷ñÞóôçò ðñÝðåé íá óõìðëçñþóåé ôï ðëáßóéï êåéìÝíïõ êáé íá êÜíåé êëéê óå Ýíá áðü ôá äýï ðëÞêôñá. Ç ôéìÞ ðïõ åðéóôñÝöåé ç óõíÜñôçóç ìå åðéëïãÞ ôïõ Ok åßíáé áêñéâþò ôï ðåñéå÷üìåíï ôïõ ðëáéóßïõ êåéìÝíïõ, åíþ ç åðéëïãÞ ôïõ ðëÞêôñïõ Cancel åðéóôñÝöåé ôç ìçäåíéêÞ óõìâïëïóåéñÜ (""). Ç ãåíéêÞ ìïñöÞ ôçò óõíÜñôçóçò åßíáé:

InputBox(ìÞíõìá, ôßôëïò, ðñïåðéëïãÞ, x, y) ìå ìïíáäéêÞ õðï÷ñåùôéêÞ ðáñÜìåôñï ôï ìÞíõìá. Ó' áõôÞí ôçí ðáñÜìåôñï ãñÜöïõìå Ýíá âïçèçôéêü êåßìåíï ðïõ êáèïäçãåß ôï ÷ñÞóôç êáé ôï ïðïßï ìðïñåß íá åßíáé ìÝ÷ñé 1024 ðåñßðïõ ÷áñáêôÞñåò (åîáñôÜôáé áðü ôï ðëÜôïò ôùí ÷ñçóéìïðïéïýìåíùí ÷áñáêôÞñùí). Ç ðáñÜìåôñïò ôßôëïò ÷ñçóéìåýåé ãéá íá êáèïñßóïõìå ôïí ôßôëï ôïõ äéáëïãéêïý ðáñáèýñïõ. Áí ðáñáëåßøïõìå áõôÞí ôçí ðáñÜìåôñï, ùò ôßôëïò ôïõ ðáñáèýñïõ åìöáíßæåôáé ôï üíïìá ôïõ Ýñãïõ ôçò åöáñìïãÞò. Ç ðáñÜìåôñïò ðñïåðéëïãÞ ìáò åðéôñÝðåé íá åìöáíßæïõìå áõôüìáôá, ìå ôçí ðáñïõóßáóç ôïõ äéáëïãéêïý ðáñáèýñïõ, êÜðïéá ðñïêáèïñéóìÝíç áðÜíôçóç óå ðåñßðôùóç ðïõ ï ÷ñÞóôçò äåí ðëçêôñïëïãÞóåé êÜðïéá ôéìÞ. Áí äå äþóïõìå ôéìÞ óå áõôÞí ôçí ðáñÜìåôñï ôï ðëáßóéï êåéìÝíïõ åìöáíßæåôáé Üäåéï. ÔÝëïò, ìå ôéò ðáñáìÝôñïõò x êáé y ìðïñïýìå íá ðñïóäéïñßóïõìå ôç èÝóç åìöÜíéóçò ôïõ äéáëïãéêïý ðáñáèýñïõ óå ó÷Ýóç ìå ôçí ðÜíù áñéóôåñÞ ãùíßá ôçò ïèüíçò. Ç óõíÜñôçóç InputBox ðñïóöÝñåé Ýíá ãñÞãïñï ôñüðï ãéá íá æçôÞóïõìå áðü ôï ÷ñÞóôç

Ï êþäéêáò ðïõ åðéóõíÜðôïõìå óôï óõìâÜí Click ôïõ ðëÞêôñïõ åßíáé: Private Sub SetDate_Click() As String Dim Today Do Today = InputBox("Ç çìåñïìçíßá óÞìåñá åßíáé:", _ "Çìåñïìçíßá", _ CStr(Date)) Loop Until IsDate(Today) Date = Today End Sub

ÐñïôõðïðïéçìÝíá êïéíÜ äéáëïãéêÜ ðáñÜèõñá ÊáôÜ êáíüíá ïé ÷ñÞóôåò ôùí Windows åßíáé åîïéêåéùìÝíïé ìå êÜðïéá ôõðïðïéçìÝíá äéáëïãéêÜ ðáñÜèõñá ôïõ Microsoft Office. Ãéá ðáñÜäåéãìá, ãíùñßæïõí ðþò íá åðéëÝîïõí Ýíá áñ÷åßï óôï äéáëïãéêü ðáñÜèõñï ðïõ åìöáíßæåé ç åðéëïãÞ File | Open ôïõ åðåîåñãáóôÞ êåéìÝíïõ Word Þ ôïõ õðïëïãéóôéêïý öýëëïõ Excel. Åðßóçò, ãíùñßæïõí ôéò ñõèìßóåéò åêôýðùóçò ðïõ ðñÝðåé íá êÜíïõí óôï äéáëïãéêü ðáñÜèõñï ðïõ åìöáíßæåé ç åðéëïãÞ File | Print. Áðü ôçí ðëåõñÜ ôïõ ðñïãñáììáôéóôÞ ðÜëé, åßíáé ðïëý äýóêïëï íá äçìéïõñãçèïýí ôüóï óýíèåôá êáé áîéüðéóôá óôç ëåéôïõñãßá äéáëïãéêÜ ðáñÜèõñá. ¼ìùò, õðÜñ÷åé Ýíá ðñüóèåôï áíôéêåßìåíï åëÝã÷ïõ, ðïõ åßíáé ãíùóôü ìå ôï üíïìá CommonDialog (êïéíü äéáëïãéêü ðáñÜèõñï), ôï ïðïßï ìðïñïýìå íá åêìåôáëëåõôïýìå êáé íá ðñïâÜëëïõìå äéáëïãéêÜ ðáñÜèõñá ãéá: ÅðéëïãÞ áñ÷åßïõ ìå óêïðü íá ôï áíïßîïõìå (Open). ÅðéëïãÞ áñ÷åßïõ ìå óêïðü íá óþóïõìå äåäïìÝíá (Save). Êáèïñéóìü ñõèìßóåùí åêôýðùóçò (Print). ×ñÞóç áñ÷åßïõ âïÞèåéáò (Help). ÅðéëïãÞ ãñáììáôïóåéñÜò (Font). ÅðéëïãÞ ÷ñþìáôïò (Color). Áí óôçí åñãáëåéïèÞêç äåí õðÜñ÷åé ôï áíôßóôïé÷ï åñãáëåßï ãéá ôçí ðñïóèÞêç êïéíþí äéáëïãéêþí ðáñáèýñùí, êÜíïõìå ôá åîÞò:

1. ÅðéëÝãïõìå Project | Components áðü ôç ãñáììÞ ìåíïý. 2. ÊÜíïõìå êëéê óôïí êáñôåëïäåßêôç Controls. 3. ÊÜíïõìå êëéê óôç ãñáììÞ Microsoft Common Dialog Control. 4. Ôï åéêïíßäéï ôïõ áíôéêåéìÝíïõ åìöáíßæåôáé óôçí åñãáëåéïèÞêç.

áðëÝò ðëçñïöïñßåò, üðùò Ýíá óõíèçìáôéêü Þ Ýíá üíïìá áñ÷åßïõ. Ôï åìöáíéæüìåíï äéáëïãéêü ðáñÜèõñï äåí åßíáé éäéáßôåñá ðïéïôéêü. Ôï åýñïò ôùí åöáñìïãþí ôçò óõíÜñôçóçò åßíáé ðåñéïñéóìÝíï. ¢óêçóç 13-1. Íá äçìéïõñãçèåß Ýíá ðáñÜèõñï, óôï ïðïßï ôï ðÜôçìá ôïõ ðëÞêôñïõ äéáôáãÞò SetDate íá åìöáíßæåé äéáëïãéêü ðáñÜèõñï, óôï ïðïßï ï ÷ñÞóôçò íá åßíáé õðï÷ñåùìÝíïò íá åéóÜãåé ìéá çìåñïìçíßá.

Åéêüíá 13-7. ÐñïóèÞêç ôïõ CommonDialog óôçí åñãáëåéïèÞêç

Åéêüíá 13-6. Äéáëïãéêü ðáñÜèõñï áðü óõíÜñôçóç InputBox 168

¸íá áíôéêåßìåíï "êïéíü äéáëïãéêü ðáñÜèõñï" ôïðïèåôåßôáé ðÜíù óå ìéá öüñìá, êáôÜ ôç ó÷åäßáóç ôçò äéåðáöÞò, êáé ðáñáìÝíåé áüñáôï êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò. Ôï êïéíü äéáëïãéêü ðáñÜèõñï äåí õðáêïýåé óå óõìâÜíôá êáé äéáèÝôåé ìüíïí éäéüôçôåò êáé ìåèüäïõò. Ïé ìÝèïäïé ðïõ õðïóôçñßæåé, êáèïñßæïõí ôïí ôýðï ôïõ ðáñáèýñïõ ðïõ èá 169


åìöáíéóôåß êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò. Åðßóçò, ïé éäéüôçôåò ôïõ, êáèïñßæïõí ôá ÷áñáêôçñéóôéêÜ áõôþí ôùí ðáñáèýñùí. Ïé ìÝèïäïé ðïõ ðñïêáëïýí åìöÜíéóç ôùí äéáëïãéêþí ðáñáèýñùí åßíáé ïé:

ShowOpen ShowSave ShowColor ShowFont ShowPrinter ShowHelp

¢íïéîå áñ÷åßï Óþóå óå áñ÷åßï

äéáëïãéêü ðáñÜèõñï áðü ôï ïðïßï íá êÜíåé ôçí åðéëïãÞ ãñáììáôïóåéñÜò.

1. Ôïðïèåôïýìå ðÜíù óôç öüñìá ôá ïñáôÜ áíôéêåßìåíá. 2. Ôïðïèåôïýìå óôç öüñìá Ýíá áíôéêåßìåíï êïéíïý äéáëïãéêïý ðáñáèýñïõ êáé ôïõ äßíïõìå ôï üíïìá CommonDlg.

Åðßëåîå ÷ñþìá Åðßëåîå ãñáììáôïóåéñÜ ×áñáêôçñéóôéêÜ åêôýðùóçò Åðßêëçóç âïÞèåéáò

ÊÜíïíôáò êëéê óôçí åðéëïãÞ Custom ôïõ ðáñáèýñïõ éäéïôÞôùí åíüò áíôéêåéìÝíïõ "êïéíü äéáëïãéêü ðáñÜèõñï", åìöáíßæåôáé ôï ðáñÜèõñï Property Pages. Áõôü ôï ðáñÜèõñï Ý÷åé ìéá óåéñÜ óåëéäïäåßêôåò, ðïõ áíôéóôïé÷ïýí óôéò ìåèüäïõò ðïõ ðåñéãñÜøáìå ðáñáðÜíù. ÅðéëÝãïíôáò Ýíá óåëéäïäåßêôç âëÝðïõìå ôéò éäéüôçôåò ðïõ ó÷åôßæïíôáé ìå ôï äéáëïãéêü ðáñÜèõñï ðïõ èá åìöáíéóôåß êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò ôç óôéãìÞ êëÞóçò ôçò óõãêåêñéìÝíçò ìåèüäïõ. ÐáñÜäåéãìá 13-4. Ï ðñþôïò êáñôåëïäåßêôçò áíôéóôïé÷åß óôéò ìåèüäïõò ShowOpen êáé ShowSave.

Åéêüíá 13-9. Ôá êïéíÜ äéáëïãéêÜ ðáñÜèõñá Color êáé Font

3. ÃñÜöïõìå ôïí êþäéêá:

Åéêüíá 13-9. Óõó÷Ýôéóç ôùí ðåäßùí ôïõ êïéíïý äéáëïãéêïý ðáñáèýñïõ Open ìå éäéüôçôåò ðïõ áíáãñÜöïíôáé óôï Property Pages.

Ç éäéüôçôá DialogTitle ðåñéÝ÷åé ôçí åðéêåöáëßäá ôïõ ðáñáèýñïõ. Áí åßíáé êåíÞ åìöáíßæåôáé ç ôõðïðïéçìÝíç åðéêåöáëßäá ôïõ áíôßóôïé÷ïõ êïéíïý äéáëïãéêïý ðáñáèýñïõ (óôçí åéêüíá 13-9 ç åðéêåöáëßäá Open). Ç éäéüôçôá FileName ðåñéÝ÷åé ôï üíïìá áñ÷åßïõ ðïõ åðéèõìïýìå íá åßíáé ðñïåðéëåãìÝíï. Ç éäéüôçôá InitDir ðåñéÝ÷åé ôï öÜêåëï ôùí áñ÷åßùí, ðïõ èá åìöáíéóôåß áñ÷éêÜ

óôçí

ðåñéï÷Þ Look in. Ç éäéüôçôá Filter ðåñéÝ÷åé ìéá ëßóôá ìå ôéò ðåñéãñáöÝò ôùí ôýðùí ôùí áñ÷åßùí êáé ôùí ößëôñùí ðïõ èÝëïõìå íá õðÜñ÷ïõí óôçí ðôõóóüìåíç ëßóôá ôçò ðåñéï÷Þò Files of type. Óôçí åéêüíá 13-8 ç ðôõóóüìåíç ëßóôá ðåñéÝ÷åé ôéò ðåñéãñáöÝò "all files (*.*)" êáé ".Ô×Ô

files". Óå áõôÞí ôçí éäéüôçôá, ôï óýìâïëï (|) ðáßæåé ôï ñüëï ôïõ äéá÷ùñéóôéêïý ìåôáîý ôùí ðåñéãñáöþí êáé ôùí ößëôñùí, ôá ïðïßá åíáëëÜóóïíôáé ìÝóá óôç óõìâïëïóåéñÜ ôçò ôéìÞò ôçò. Ó÷åôéêÞ åßíáé êáé ç éäéüôçôá FilterIndex, ç ïðïßá êáèïñßæåé ðéï áðü ôá ößëôñá ôò ëßóôáò èá åßíáé ðñïåðéëåãìÝíï. Áí Ý÷åé ôçí ôéìÞ 0 äåí åðéëÝãåôáé êáíÝíá ößëôñï êáé óôï ðéíÜêéï ôùí öáêÝëùí êáé ôùí áñ÷åßùí åìöáíßæïíôáé üëá ôá áñ÷åßá. Óôçí åéêüíá 13-8 ç éäéüôçôá FilterIndex Ý÷åé ôçí ôéìÞ 2, ïðüôå ðñïåðéëÝãåôáé ôï äåýôåñï ößëôñï. ¢óêçóç 13-2. Íá äçìéïõñãçèåß öüñìá óôçí ïðïßá íá õðÜñ÷åé ðëáßóéï êåéìÝíïõ ìå üíïìá TextArea êáé äýï ðëÞêôñá, ôï SetBackColor êáé ôï SetFont. ¼ôáí ï ÷ñÞóôçò ðáôÜ ôï ðëÞêôñï

SetBackColor íá åìöáíßæåôáé äéáëïãéêü ðáñÜèõñï, áðü ôï ïðïßï íá êÜíåé ôçí åðéëïãÞ ÷ñþìáôïò ôïõ öüíôïõ ôïõ ðëáéóßïõ êåéìÝíïõ êáé üôáí ðáôÜ ôï ðëÞêôñï SetFont íá 170

Private Sub SetBackColor_Click() 'Ïñéóå ôéò éäéüôçôåò êáé åìöÜíéóå ôï êïéíü äéáëïãéêü ðáñÜèõñï CommonDlg.Flags = cdlCCFullOpen CommonDlg.ShowColor 'ÌåôÝöåñå ôéò åðéëïãÝò ôïõ ÷ñÞóôç TextArea.BackColor = CommonDlg.Color End Sub Private Sub SetFont_Click() 'Ïñéóå ôéò éäéüôçôåò êáé åìöÜíéóå ôï êïéíü äéáëïãéêü ðáñÜèõñï CommonDlg.Flags = cdlCFBoth Or cdlCFEffects CommonDlg.ShowFont 'ÌåôÝöåñå ôéò åðéëïãÝò ôïõ ÷ñÞóôç TextArea.FontName = CommonDlg.FontName TextArea.FontSize = CommonDlg.FontSize TextArea.FontBold = CommonDlg.FontBold TextArea.FontItalic = CommonDlg.FontItalic TextArea.FontStrikethru = CommonDlg.FontStrikethru TextArea.FontUnderline = CommonDlg.FontUnderline TextArea.ForeColor = CommonDlg.Color End Sub Ç éäéüôçôá Flags êáèïñßæåé ôï ðþò èá åìöáíßæåôáé ôï êïéíü äéáëïãéêü ðáñÜèõñï. Óôçí

SetBackColor_Click ôçò äßíåôáé, ùò ôéìÞ ç åóùôåñéêÞ óôáèåñÜ cdlCCFullOpen ãéá íá åìöáíéóôåß ôï ðáñÜèõñï óå ðëÞñç áíÜðôõîç ìå ôçí õðïñïõôßíá

171


áíáðôõãìÝíç ðáëÝôá ÷ñùìÜôùí. Óôçí õðïñïõôßíá SetFont_Click ôçò äßíåôáé êáôÜëëçëç ôéìÞ, þóôå íá åìöáíéóôïýí óôï ðáñÜèõñï ïé ãñáììáôïóåéñÝò ïèüíçò, ïé ãñáììáôïóåéñÝò åêôõðùôÞ (cdlCFBoth) áëëÜ êáé ïé åðéëïãÝò åéäéêþí åöÝ õðïãñÜììéóçò, äéáãñáöÞò, ÷ñþìáôïò (cdlCFEffects). ÕðÜñ÷åé ðëÞèïò åóùôåñéêþí óôáèåñþí ãéá ôçí éäéüôçôá Flags. Ãéá íá äïýìå áõôÝò ôéò óôáèåñÝò ðñÝðåé íá áíáôñÝîïõìå óôçí åðéëïãÞ Help | Books Online êáé íá êÜíïõìå áíáæÞôçóç ìå êùäéêÞ ëÝîç CommonDialog.

÷ñüíïõ áíÜðôõîçò íÝùí åöáñìïãþí, áöïý åßíáé äõíáôüí íá åêìåôáëëåõôïýìå ðáëáéüôåñåò åñãáóßåò ìáò, áëëÜ êáé ïìïéïãÝíåéá óôç ìïñöÞ ôùí åöáñìïãþí ðïõ áíáðôýóóïõìå. Ç ðñïóèÞêç ìéáò öüñìáò, ðïõ Þäç õðÜñ÷åé, ãßíåôáé åðéëÝãïíôáò ôïí êáñôåëïäåßêôç Existing ôïõ äéáëïãéêïý ðáñáèýñïõ Add Form. Ç öüñìá ìå ôçí ïðïßá èá åêêéíÞóåé ìéá åöáñìïãÞ ïñßæåôáé áðü ôçí åðéëïãÞ Project | üíïìá_Ýñãïõ Properties. Áöïý åðéëÝîïõìå ôïí êáñôåëïäåßêôç General, åðéëÝãïõìå ìÝóá áðü ôçí ðôõóóüìåíç ëßóôá StartUp Object ôï üíïìá ôçò öüñìáò åêêßíçóçò.

ÅöáñìïãÝò ìå ðïëëÝò öüñìåò Óôéò ðåñéóóüôåñåò åöáñìïãÝò Ýíá ðáñÜèõñï äåí åßíáé áñêåôü ãéá íá êáëýøåé üëåò ôéò áíÜãêåò ôçò äéåðáöÞò ìå ôï ÷ñÞóôç. ¼ðùò åßäáìå, ôá äéáëïãéêÜ ðáñÜèõñá ìðïñïýí íá óõìâÜëëïõí óôç âåëôßùóç ôçò äéåðáöÞò, áëëá äåí åßíáé êáé ôüóï åõÝëéêôá ãéá íá êáëýøïõí üëåò ôéò áíÜãêåò ìáò. Ìå ôçí VB åßíáé äõíáôüí íá áíáðôýîïõìå åöáñìïãÝò ðïõ óõíôßèåíôáé áðü ðïëëÝò öüñìåò, þóôå êáé ç äéåðáöÞ íá áðïôåëåßôáé áðü ðïëëÜ ðáñÜèõñá. Ãéá íá ðñïóèÝóïõìå ìéá íÝá öüñìá óôçí åöáñìïãÞ, åðéëÝãïõìå Project | Add Form áðü ôç ãñáììÞ ìåíïý. Óôç óõíÝ÷åéá, áðü ôçí ðåñéï÷Þ õðïäåéãìÜôùí ôïõ ðáñáèýñïõ Add Form äéáëÝãïõìå ôï ðñüôõðï ìéáò öüñìáò (óõíÞèùò ôï ðñïôåéíüìåíï õðüäåéãìá Form) êáé óôç óõíÝ÷åéá ðáôÜìå ôï ðëÞêôñï Open.

Ùò öüñìá åêêßíçóçò ôïõ Ýñãïõ Project1 åðéëÝãåôáé ç öüñìá Form1.

Åéêüíá 13-10. ÅðéëïãÞ õðïäåßãìáôïò öüñìáò Äçìéïõñãßá íÝáò öüñìáò

Åéêüíá 13-12. Ôï äéáëïãéêü ðáñÜèõñï ìå ôéò éäéüôçôåò ôïõ Ýñãïõ

ÅðéëïãÞ ìéáò áðü ôéò Þäç õðÜñ÷ïõóåò öüñìåò

Ìéá åöáñìïãÞ åêêéíåß åìöáíßæïíôáò Ýíá ìüíï ðáñÜèõñï. Ôá õðüëïéðá ðáñÜèõñá äåí öïñôþíïíôáé áìÝóùò üëá ìáæß óôç ìíÞìç ôïõ õðïëïãéóôÞ êáé äåí åßíáé ïñáôÜ. Ï ðñïãñáììáôéóôÞò ìå êáôÜëëçëç êùäéêïðïßçóç äéáìïñöþíåé ôçí åöáñìïãÞ, þóôå ï ÷ñÞóôçò íá áíïßãåé êáé íá êëåßíåé ôá ðáñÜèõñÜ ôçò êáôÜ âïýëçóç. Ãéá íá öïñôùèåß Ýíá ðáñÜèõñï óôç ìíÞìç ôïõ õðïëïãéóôÞ, ðñÝðåé íá åêôåëåóôåß ç åíôïëÞ Load, ç ïðïßá Ý÷åé ôç ìïñöÞ:

Load öüñìá Ôï ðáñÜèõñï ôçò öüñìáò íáé ìåí öïñôþíåôáé óôç ìíÞìç, ïðüôå åßíáé äõíáôüí íá ãßíïõí áíáöïñÝò óå éäéüôçôåò êáé áíôéêåßìåíÜ ôïõ, äåí ðáñïõóéÜæåôáé üìùò áêüìç óôçí ïèüíç. Ãéá íá ãßíåé ïñáôü ôï ðáñÜèõñï óôçí ïèüíç, ðñÝðåé íá åêôåëåóôåß ç ìÝèïäïò Show, ç ïðïßá Ý÷åé ôç Óôçí ïèüíç åìöáíßæåôáé ç íÝá öüñìá êáé ôáõôü÷ñïíá óôï ðáñÜèõñï Ýñãïõ, êÜôù áðü ôïí öÜêåëï Forms, åìöáíßæåôáé êáé ôï üíïìá ôçò íÝáò öüñìáò. Ôþñá ðëÝïí åßíáé äõíáôüí íá áëëÜîïõìå ôï üíïìá ôçò öüñìáò, ôïí ôßôëï ôïõ ðáñáèýñïõ ôçò, ôéò äéáóôÜóåéò ôçò êáé ôï üíïìá ôïõ áñ÷åßïõ óôï ïðïßï èá áðïèçêåõèåß, óýìöùíá ìå üóá ðåñéãñÜøáìå óôï ìÜèçìá 4 (Üóêçóç 4-1).

Åéêüíá 13-11. Ôï üíïìá ôçò íÝáò öüñìáò åìöáíßæåôáé êáé óôï ðáñÜèõñï Ýñãïõ Ìå äéðëü êëéê ðÜíù óôï üíïìá ôçò öüñìáò, ç öüñìá Ýñ÷åôáé óôï ðñïóêÞíéï, áêüìç êáé áí êáëýðôåôáé Þäç áðü Üëëåò.

ìïñöÞ: öüñìá. Show óôõë Áí ôï óôõë Ý÷åé ôçí ôéìÞ 1 (åóùôåñéêÞ óôáèåñÜ vbModal) ôï ðáñÜèõñï ôçò öüñìáò "äåóìåýåé" áðïêëåéóôéêÜ ôçí ðñïóï÷Þ ôïõ ÷ñÞóôç (õðï÷ñåùôéêÞò áðüêñéóçò) êáé äåí ôïí áöÞíåé íá áëëçëåðéäñÜóåé ìå Üëëá ðáñÜèõñá. Áí ôï óôõë Ý÷åé ôçí ôéìÞ 0, Þ äåí õðÜñ÷åé ç ðáñÜìåôñïò óôõë, ï ÷ñÞóôçò ìðïñåß íá áëëçëåðéäñÜóåé êáé ìå Üëëá ðáñÜèõñá. Ç ìÝèïäïò Show ìðïñåß íá åêôåëåóôåß ÷ùñßò íá Ý÷åé ðñïçãçèåß åêôÝëåóç ôçò åíôïëÞò Load. Óå áõôÞí ôçí ðåñßðôùóç åßíáé óáí íá ðñïçãåßôáé ç åêôÝëåóç ôçò åíôïëÞò Load. Ãéá íá êÜíïõìå áüñáôï Ýíá ðáñÜèõñï, ÷ùñßò íá ôï îåöïñôþóïõìå áðü ôç ìíÞìç, ðñÝðåé íá åêôåëÝóïõìå ôç ìÝèïäï Hide, ç ïðïßá Ý÷åé ôç ìïñöÞ: öüñìá. Hide

ÊÜèå öüñìá åßíáé áðïëýôùò áõôüíïìç. Ôï áñ÷åßï óôï ïðïßï áðïèçêåýåôáé ðåñéÝ÷åé ôçí ðåñéãñáöÞ ôïõ ïðôéêïý ó÷åäßïõ ôçò öüñìáò êáé ôïí êþäéêá ôçò ðñïãñáììáôéóôéêÞò ôçò ìïíÜäáò. Áõôü Ý÷åé ðïëëáðëÜ ïöÝëç. Áí ç öüñìá ó÷åäéáóôåß êáôÜëëçëá, ìðïñåß íá ÷ñçóéìïðïéçèåß áêñéâþò ç ßäéá áðü ðïëëÝò åöáñìïãÝò. ¸ôóé, ðåôõ÷áßíïõìå êáé ìåßùóç ôïõ 172

Ãéá íá îåöïñôþóïõìå Ýíá ðáñÜèõñï áðü ôç ìíÞìç, åêôåëïýìå ôç ìÝèïäï Unload, ç ïðïßá Ý÷åé ôç ìïñöÞ:

UnLoad öüñìá Ç åíôïëÞ UnLoad ìðïñåß íá åêôåëåóôåß ÷ùñßò íá Ý÷åé ðñïçãçèåß åêôÝëåóç ôçò ìåèüäïõ Hide. 173


ÊáôÜ ôç öüñôùóç åíüò ðáñáèýñïõ óôç ìíÞìç, åßôå ìå ôçí åêôÝëåóç ôçò åíôïëÞò Load åßôå ìå

¢óêçóç 13-3.

ôçí åêôÝëåóç ôçò ìåèüäïõ Show, ðñïêýðôåé ôï óõìâÜí Load. ÓõíÞèùò, óôçí õðïñïõôßíá

Óå Ýíá ðñüãñáììá õðÜñ÷åé ìéá öüñìá ìå ôï üíïìá Main. Íá äçìéïõñãçèåß ìéá áêüìá

äéá÷åßñéóçò óõìâÜíôïò Form_Load ãßíïíôáé ïé áñ÷éêïðïéÞóåéò ôùí ôéìþí ôùí ìåôáâëçôþí.

öüñìá ìå üíïìá Login, óôçí ïðïßá íá õðÜñ÷ïõí äýï ðëáßóéá êåéìÝíïõ ìå üíïìá

Åðßóçò, êáôÜ ôçí åêöüñôùóç åíüò ðáñáèýñïõ áðü ôç ìíÞìç ðñïêýðôåé ôï óõìâÜí Unload.

UserName êáé Password, êáèþò êáé äýï ðëÞêôñá, ôï Ok êáé ôï Cancel. Ùò öüñìá åêêßíçóçò ôçò åöáñìïãÞò íá êáèïñéóôåß ç öüñìá Login. Ôï ðÜôçìá ôïõ ðëÞêôñïõ Cancel íá ðñïêáëåß ôï êëåßóéìï ôçò öüñìáò êáé ôïí ôåñìáôéóìü ôçò åöáñìïãÞò. Ôï ðÜôçìá ôïõ ðëÞêôñïõ Ok íá ðñïêáëåß ôïí Ýëåã÷ï ôïõ óõíèçìáôéêïý. Áí ôï óõíèçìáôéêü âñåèåß óùóôü íá êëåßíåé ç öüñìá Login êáé íá öïñôþíåôáé ç öüñìá Main.

ÓõíÞèùò, óôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò Form_Unload ãßíïíôáé áðïäåóìåýóåéò ðüñùí (óõóêåõþí, áñ÷åßùí ê.Ü) ôïõ õðïëïãéóôéêïý óõóôÞìáôïò. ÐáñÜäåéãìá 13-6. Óôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò Unload ðïõ áêïëïõèåß, åìöáíßæåôáé Ýíá äéáëïãéêü ðáñÜèõñï ôï ïðïßï ñùôÜ ôïí ÷ñÞóôç, áí åðéèõìåß ôç äéáêïðÞ ôïõ ðñïãñÜììáôïò. Áí ï ÷ñÞóôçò áðáíôÞóåé áñíçôéêÜ äßíåôáé ç ôéìÞ True óôçí ðáñÜìåôñï Cancel ôçò

UserName Password Ok Cancel

õðïñïõôßíáò. Ó' áõôÞí ôçí ðåñßðôùóç ç VB áíáóôÝëëåé ôç äéáäéêáóßá Unload.

Private Sub Form_Unload(Cancel As Integer) Dim Answer As Long Answer = MsgBox("Ôåñìáôéóìüò ÐñïãñÜììáôïò", vbYesNo) If Answer = vbNo Then Cancel = True Else End End If End Sub

Åéêüíá 13-13. Ãéá íá åìöáíßæïíôáé áóôåñßóêïé óôç èÝóç ôùí ÷áñáêôÞñùí ðïõ ðëçêôñïëïãïýìå, äßíïõìå óôçí éäéüôçôá PasswordChar ôïõ ðëáéóßïõ êåéìÝíïõ Password ôçí ôéìÞ *. Óôç óõíÝ÷åéá, óôï ðáñÜèõñï êùäéêïðïßçóçò ãñÜöïõìå ôïí êþäéêá:

Private Sub Cancel_Click() Unload Me End Sub

Áðü ìéá öüñìá ìðïñïýìå íá áíáöåñèïýìå óå Ýíá áíôéêåßìåíï åëÝã÷ïõ ìéáò Üëëçò öüñìáò. Ç áíáöïñÜ ãßíåôáé ìå áíáãñáöÞ ôïõ ïíüìáôïò ôçò öüñìáò ðñéí áðü ôï üíïìá ôïõ áíôéêåéìÝíïõ åëÝã÷ïõ.

Private Sub OK_Click() If Password = "password" Then Me.Hide Main.Show Else MsgBox "Ôï óõíèçìáôéêü äåí åßíáé óùóôü!", , "Login" Password.SetFocus End If End Sub ¼ôáí ïé áíÜãêåò ìáò åðéâÜëëïõí ôç äçìéïõñãßá åíüò ðëáéóßïõ äéáëüãïõ äéáöïñåôéêïý áðü áõôÜ ðïõ ìðïñåß íá ìáò ðñïóöÝñåé Ýôïéìá ç VB, ìðïñïýìå íá ôï äçìéïõñãÞóïõìå áðü ôçí áñ÷Þ ÷ñçóéìïðïéþíôáò ìéá öüñìá. ÓõãêåêñéìÝíá, óå ìéá öüñìá êÜíïõìå ôá åîÞò:

1. Äßíïõìå óôçí éäéüôçôá Border ôçò öüñìáò ôçí ôéìÞ Fixed Dialog (ôá ðëáßóéá äéáëüãïõ äåí ðñÝðåé íá áëëÜæïõí ìÝãåèïò). Áò óçìåéùèåß, üôé äßíïíôáò áõôÞí ôçí ôéìÞ óôçí éäéüôçôá Border äå ëáìâÜíïíôáé õð' üøéí ïé ôéìÝò ôùí éäéïôÞôùí MaxButton êáé

MinButton êáé ôï ðáñÜèõñï èá åìöáíéóôåß ÷ùñßò ðëÞêôñá. 2. Ïñßæïõìå ôïí ôßôëï ôïõ ðëáéóßïõ ìÝóù ôçò éäéüôçôáò Caption ôçò öüñìáò. 3. Ôïðïèåôïýìå ðÜíù óôç öüñìá ôá áíôéêåßìåíá åëÝã÷ïõ. 4. Åìöáíßæïõìå ôç öüñìá ùò õðï÷ñåùôéêü äéáëïãéêüì ðáñÜèõñï äßíïíôáò óôçí ðáñÜìåôñï óôõë ôçò ìåèüäïõ Show ôçí ôéìÞ vbModal, Þ ùò ìç õðï÷ñåùôéêü äéáëïãéêü ðáñÜèõñï äßíïíôáò ôçò ôçí ôéìÞ vbModeless. ÐáñÜäåéãìá 13-5.

Åéêüíá 13-14. Ðëáßóéï äéáëüãïõ Ýîù áðü ôá êáèéåñùìÝíá Ôï åéêïíßäéï óôï åóùôåñéêü ôïõ ðáñáèýñïõ äåí åßíáé Ýíá áðü ôá ðñïôõðïðïéçìÝíá. Ï ðñïãñáììáôéóôÞò ìðïñåß íá äéáëÝîåé Ýíá ïðïéïäÞðïôå. Åðßóçò, ìðïñåß íá ôïðïèåôÞóåé ðëáßóéá êåéìÝíïõ êáé Üëëá áíôéêåßìåíá åëÝã÷ïõ ÷ùñßò ðåñéïñéóìïýò. 174

ÐáñÜäåéãìá 13-7. Óôç öüñìá Main õðÜñ÷åé ðëáßóéï êåéìÝíïõ ìå ôï üíïìá Money. Áðü ìéá Üëëç öüñìá, Þ áðü ìéá âáóéêÞ ðñïãñáììáôéóôéêÞ ìïíÜäá, åßíáé äõíáôÞ ç áëëáãÞ ôùí éäéïôÞôùí ôïõ ðëáéóßïõ êåéìÝíïõ.

Äçìéïõñãßá ðñùôüôõðùí ðëáéóßùí äéáëüãïõ

Main.Money.Text = "ÊÜôù üñéï" Main.Money.ForeColor = vbYellow Main.Money.BackColor = vbRed

Áíáêåöáëáßùóç Ç óõíÜñôçóç MsgBox åìöáíßæåé óôçí ïèüíç Ýíá äéáëïãéêü ðáñÜèõñï, ôï ïðïßï ðåñéÝ÷åé Ýíá ìÞíõìá ðñïò ôï ÷ñÞóôç êáé Ýíá Þ ðåñéóóüôåñá ðëÞêôñá äéáôáãÞò. Ç ôéìÞ ðïõ åðéóôñÝöåé ç óõíÜñôçóç åßíáé Ýíáò áêÝñáéïò áñéèìüò êáé êáèïñßæåôáé áðü ôï ðëÞêôñï ðïõ ðáôÜåé ï ÷ñÞóôçò ãéá íá êëåßóåé ôï äéáëïãéêü ðáñÜèõñï. Ç óõíÜñôçóç InputBox, åìöáíßæåé Ýíá äéáëïãéêü ðáñÜèõñï ðïõ ðåñéÝ÷åé Ýíá ðëáßóéï êåéìÝíïõ êáé äýï ðëÞêôñá äéáôáãÞò, ôï Ok êáé ôï Cancel. Ç óõíÜñôçóç åðéóôñÝöåé ùò ôéìÞ ôï ðåñéå÷üìåíï ôïõ ðëáéóßïõ êåéìÝíïõ, áí ðáôçèåß ôï ðëÞêôñï Ok, åíþ ç åðéëïãÞ ôïõ ðëÞêôñïõ Cancel, åðéóôñÝöåé ôç ìçäåíéêÞ óõìâïëïóåéñÜ (""). Ìå ôï áíôéêåßìåíï åëÝã÷ïõ "êïéíü äéáëïãéêü ðáñÜèõñï" ìðïñïýìå íá åêìåôáëëåõôïýìå ôéò äõíáôüôçôåò ôùí äéáëïãéêþí ðáñáèýñùí ãéá íá åðéëÝîïõìå áñ÷åßï ìå óêïðü íá ôï áíïßîïõìå (Open), íá åðéëÝîïõìå áñ÷åßï ìå óêïðü íá áðïèçêåýóïõìå äåäïìÝíá (Save), íá êáèïñßóïõìå ôéò ñõèìßóåéò åêôýðùóçò (Print), íá êáëÝóïõìå áñ÷åßï âïÞèåéáò (Help), íá åðéëÝîïõìå ãñáììáôïóåéñÝò (Font), íá åðéëÝîïõìå ÷ñþìá (Color). Ìå ôçí VB åßíáé äõíáôüí íá áíáðôýîïõìå åöáñìïãÝò ðïõ óõíôßèåíôáé áðü ðïëëÝò öüñìåò. ÊÜèå öüñìá åßíáé áðïëýôùò áõôüíïìç. Ôï áñ÷åßï óôï ïðïßï áðïèçêåýåôáé ìéá öüñìá ðåñéÝ÷åé êáé ôçí ðåñéãñáöÞ ôïõ ïðôéêïý ôçò ó÷åäßïõ êáé ôïí êþäéêá ôçò ðñïãñáììáôéóôéêÞò ôçò ìïíÜäáò. Ãéá íá öïñôùèåß Ýíá ðáñÜèõñï óôç ìíÞìç ôïõ õðïëïãéóôÞ, ðñÝðåé íá åêôåëåóôåß ç åíôïëÞ Load. Ãéá íá ãßíåé ïñáôü ôï ðáñÜèõñï êáé óôçí ïèüíç, ðñÝðåé íá åêôåëåóôåß ç ìÝèïäïò

Show. Ãéá íá êÜíïõìå áüñáôï Ýíá ðáñÜèõñï, ÷ùñßò íá ôï îåöïñôþóïõìå áðü ôç ìíÞìç, ðñÝðåé íá åêôåëÝóïõìå ôç ìÝèïäï Hide. Ãéá íá îåöïñôþóïõìå Ýíá ðáñÜèõñï áðü ôç ìíÞìç åêôåëïýìå ôç ìÝèïäï Unload. 175


ÅñãáóôçñéáêÝò ÁóêÞóåéò

ÌÜèçìá 14

1. Íá åêôåëåóôåß ç Üóêçóç 13-1. Ðþò ìðïñåßôå íá åëÝãîåôå, áí ôï ðñüãñáììá áëëÜæåé ôçí þñá ôïõ õðïëïãéóôéêïý óõóôÞìáôïò; 2. Íá åêôåëåóôåß ç Üóêçóç 13-2. Íá ãßíïõí äïêéìÝò ãéá äéÜöïñåò ãñáììáôïóåéñÝò êáé ÷ñþìáôá. 3. Íá åêôåëåóôåß ç Üóêçóç 13-3. Íá ôïðïèåôÞóåôå ôç öüñìá Login óå ìéá áðü ôéò åöáñìïãÝò ðïõ Ý÷åôå õëïðïéÞóåé óå ðñïçãïýìåíá ìáèÞìáôá. 4. Áðïôåëåß êïéíÞ ôå÷íéêÞ, óôçí áñ÷Þ ôïõ ðñïãñÜììáôïò íá åìöáíßæåôáé Ýíá ðáñÜèõñï (ðáñÜèõñï splash) ìå êÜðïéá ðëçñïöïñéáêÜ óôïé÷åßá ãéá ôï ðñüãñáììá êáé ìå ôïí ëïãüôõðï ôçò åôáéñåßáò ðïõ Ý÷åé êÜíåé ôçí êáôáóêåõÞ ôïõ. ¼óï äéÜóôçìá ðáñáôçñåß ï ÷ñÞóôçò ôï ðáñÜèõñï óôçí ïèüíç, ï êþäéêáò ôçò öüñìáò öïñôþíåé êáé ôéò õðüëïéðåò öüñìåò ôïõ ðñïãñÜììáôïò êñáôþíôáò áõôÝò áüñáôåò. Ïé öüñìåò ãßíïíôáé ïñáôÝò üôáí æçôçèåß ìÝóá áðü ôïí êþäéêá êáé ç ôá÷ýôçôá åìöÜíéóÞò ôïõò åßíáé ðïëý ìåãáëýôåñç áðü áõôÞ ðïõ èá Þôáí áí öïñôþíïíôáí åêåßíç ôç óôéãìÞ áðü ôï äßóêï. Íá ðñïóèÝóåôå óå ìéá åöáñìïãÞ óáò Ýíá ðáñÜèõñï splash. Õðüäåéîç: ÕðÜñ÷åé õðüäåéãìá öüñìáò óôï ðéíÜêéï õðïäåéãìÜôùí ôïõ äéáëïãéêïý ðáñáèýñïõ Add Form. 5. Èá Ý÷åôå ðáñáôçñÞóåé üôé óå üëåò ó÷åäüí ôéò åðáããåëìáôéêÝò åöáñìïãÝò õðÜñ÷åé êáé ìéá åðéëïãÞ óôï ìåíïý Help, ç åðéëïãÞ About, áðü ôçí ïðïßá äßíïíôáé ðëçñïöïñßåò ãéá ôçí åöáñìïãÞ, ôï õëéêü êáé ôï ëïãéóìéêü ðïõ åßíáé åãêáôåóôçìÝíï óôïí õðïëïãéóôÞ. ¸íá áðü ôá õðïäåßãìáôá äçìéïõñãßáò öüñìáò ôçò VB, ðïõ åìöáíßæïíôáé óôï ðáñÜèõñï Add Form ôçò äçìéïõñãßáò öüñìáò åßíáé ôï About Dialog ðïõ äçìéïõñãåß öüñìåò ôïõ ôýðïõ

Ôßôëïò åöáñìïãÞò Ëïãüôõðïò åôáéñåßáò ¸êäïóç ÐåñéãñáöÞ ôçò åöáñìïãÞò Ðñïåéäïðïßçóç ðåñß ðíåõìáôéêþí äéêáéùìÜôùí ÊëÞóç åöáñìïãÞò ãéá ôçí ðáñï÷Þ ðëçñïöïñéþí ôïõ õðïëïãéóôéêïý óõóôÞìáôïò

Åéêüíá 13-15. Ç öüñìá About Óå Ýíá áðü ôá ðñïãñÜììáôá ðïõ Ý÷åôå äçìéïõñãÞóåé, íá åéóÜãåôå ôç äõíáôüôçôá åìöÜíéóçò ôïõ ðáñáèýñïõ About åßôå áðü åðéëïãÞ ìåíïý åßôå áðü ôï ðÜôçìá ðëÞêôñïõ. Óõìðëçñþóôå êáôÜëëçëá ôéò åôéêÝôåò êáé ôï ðëáßóéï åéêüíáò ôçò öüñìáò.

Ðñüóèåôá áíôéêåßìåíá åëÝã÷ïõ Åêôõðþóåéò Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá äçìéïõñãïýí ëßóôåò óôçí ïèüíç. Íá ðñïóöÝñïõí ôç äõíáôüôçôá åðéëïãÞò óõãêåêñéìÝíùí ëåéôïõñãéþí óå Ýíáí ÷ñÞóôç. Íá åêôõðþíïõí ôá áðïôåëÝóìáôá åíüò ðñïãñÜììáôïò óôïí åêôõðùôÞ. ¼óï áðïôåëåóìáôéêüò êáé áðïäïôéêüò áí åßíáé ï êþäéêáò ôïõ ðñïãñÜììáôïò ðïõ ãñÜöïõìå ãéá ìéá åöáñìïãÞ, äåí áñêåß ãéá íá ôçò äþóåé åðáããåëìáôéêÞ ìïñöÞ êáé íá ôçí êÜíåé áðïäåêôÞ áðü ôïõò õðïøÞöéïõò ÷ñÞóôåò ôçò. ¸÷ïõìå Þäç äåé, üôé ï ó÷åäéáóìüò ôçò äéåðáöÞò ìå ôï ÷ñÞóôç áðïôåëåß ôï ðéï óçìáíôéêü óôïé÷åßï ãéá ôçí áíÜäåéîç ìéáò åöáñìïãÞò. Ç äéåðáöÞ ðñÝðåé íá ðñïóöÝñåé åõêïëßá ÷ñÞóçò, ��á êåíôñßæåé ôï åíäéáöÝñïí ôïõ ÷ñÞóôç êáé ãåíéêÜ íá ôïí ðñïäéáèÝôåé èåôéêÜ áðÝíáíôé óôçí åöáñìïãÞ. ÌÝ÷ñé ôþñá ãéá ôç äçìéïõñãßá ôçò äéåðáöÞò ÷ñçóéìïðïéÞóáìå ôá ðéï âáóéêÜ áíôéêåßìåíá åëÝã÷ïõ, ôçí åôéêÝôá, ôï ðëáßóéï êåéìÝíïõ, ôï ðëÞêôñï äéáôáãÞò. Ó' áõôü ôï ìÜèçìá èá ìåëåôÞóïõìå êáé ôïí ôñüðï åêìåôÜëëåõóçò êáé êÜðïéùí Üëëùí âáóéêþí áíôéêåéìÝíùí åëÝã÷ïõ ôçò åñãáëåéïèÞêçò êáé èá äïýìå ðþò ìðïñïýìå íá åìðëïõôßóïõìå ôçí åñãáëåéïèÞêç ìå åñãáëåßá ðïõ äçìéïõñãïýí ðñüóèåôá áíôéêåßìåíá åëÝã÷ïõ ôïõ ôýðïõ ActiveX. Åðßóçò, èá ìåëåôÞóïõìå ðþò ãßíïíôáé åêôõðþóåéò ìÝóù ôïõ åéäéêïý áíôéêåéìÝíïõ åêôõðùôÞ.

Ëßóôá êáé ÓõíäõáóìÝíç ëßóôá Ç ëßóôá (ListBox) êáé ç óõíäõáóìÝíç ëßóôá (ComboBox) åßíáé éäéáßôåñá ÷ñÞóéìá áíôéêåßìåíá åëÝã÷ïõ êáé ÷ñçóéìïðïéïýíôáé óôéò ðåñéðôþóåéò ðïõ èÝëïõìå íá åìöáíßóïõìå, óå ìïñöÞ êáôáëüãïõ, ìéá óåéñÜ áðü åðéëïãÝò áðü ôéò ïðïßåò ï ÷ñÞóôçò íá ìðïñåß íá åðéëÝîåé ìéá êáôÜ ðåñßðôùóç. Ç ëßóôá ÷ñçóéìïðïéåßôáé üôáí èÝëïõìå íá äåóìåýóïõìå ôïí ÷ñÞóôç íá åðéëÝîåé ìÝóá áðü Ýíá ðåñéïñéóìÝíï ðëÞèïò åðéëïãþí. Áíôßèåôá, ç óõíäõáóìÝíç ëßóôá ÷ñçóéìïðïéåßôáé óôéò ðåñéðôþóåéò ðïõ èÝëïõìå íá äçìéïõñãÞóïõìå ìéá áíïé÷ôÞ ëßóôá, äçëáäÞ ìéá ëßóôá ôçí Ëßóôá ÓõíäõáóìÝíç ëßóôá ïðïßá íá ìðïñåß íá åíçìåñþóåé ï ÷ñÞóôçò. Ç Åéêüíá 14-1. óõíäõáóìÝíç ëßóôá áðïôåëåß óõíäõáóìü ìéáò ëßóôáò êáé åíüò ðëáéóßïõ êåéìÝíïõ. Áí ç ëßóôá äåí ðåñéÝ÷åé üëåò ôéò åðéëïãÝò ðïõ èá Þèåëå Ýíáò ÷ñÞóôçò, áõôüò ìðïñåß íá ôçò ðñïóèÝóåé ìéá íÝá åðéëïãÞ ðëçêôñïëïãþíôáò ôçí óôï ðëáßóéï êåéìÝíïõ. Ç åìöÜíéóç ôïõ ðëáéóßïõ óõíäõáóìÝíçò ëßóôáò êáèïñßæåôáé áðü ôçí éäéüôçôá Style. Ïé ôéìÝò ðïõ ìðïñåß íá ðÜñåé ç éäéüôçôá Style åßíáé: 0 - Dropdown Combo. Ôï áíôéêåßìåíï ìïéÜæåé ìå ðëáßóéï êåéìÝíïõ ðïõ Ý÷åé Ýíá âÝëïò óôá äåîéÜ. Ìå êëéê ðÜíù óôï âÝëïò, ç ëßóôá áíáðôýóóåôáé ðñïò ôá êÜôù (ðôõóóüìåíç ëßóôá). Ôï ðåñéå÷üìåíï ôçò ëßóôáò ìðïñåß íá óõìðëçñùèåß ìå íÝá óôïé÷åßá, ôá ïðïßá ðëçêôñïëïãåß ï ÷ñÞóôçò óôï ðëáßóéïõ êåéìÝíïõ (áíïé÷ôÞ ëßóôá). 1 - Simple Combo. Ôï áíôéêåßìåíï ìïéÜæåé ìå ëßóôá ðÜíù áðü ôçí ïðïßá õðÜñ÷åé ðëáßóéï êåéìÝíïõ. Ôï ðåñéå÷üìåíï ôçò ëßóôáò ìðïñåß íá óõìðëçñùèåß ìå íÝá óôïé÷åßá, ôá ïðïßá ðëçêôñïëïãåß ï ÷ñÞóôçò óôï ðëáßóéïõ êåéìÝíïõ (áíïé÷ôÞ ëßóôá). 2 - Dropdown List. Ôï áíôéêåßìåíï ìïéÜæåé ìå ðëáßóéï êåéìÝíïõ ðïõ Ý÷åé Ýíá âÝëïò óôá äåîéÜ. Ìå êëéê ðÜíù óôï âÝëïò, ç ëßóôá áíáðôýóóåôáé ðñïò ôá êÜôù (ðôõóóüìåíç ëßóôá). Ôï ðåñéå÷üìåíï ôçò ëßóôáò äåí ìðïñåß íá óõìðëçñùèåß ìå íÝá óôïé÷åßá (êëåéóôÞ ëßóôá).

Áí ç éäéüôçôá Style Ý÷åé ôçí ôéìÞ 0 Þ 1, üôáí ãßíåôáé ôñïðïðïßçóç ôïõ óôïé÷åßïõ óôï ðëáßóéï êåéìÝíïõ, ðñïêáëåßôáé óõìâÜí Change.

Ç óõìðëÞñùóç ìå óôïé÷åßá, ôüóï ôçò ëßóôáò üóï êáé ôçò óõíäõáóìÝíçò ëßóôáò, ìðïñåß íá ãßíåé ÐñïóèÞêç óôïé÷åßùí óôç êáé êáôÜ ôç äéÜñêåéá ôïõ ó÷åäéáóìïý ôçò äéåðáöÞò êáé êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ëßóôá ðñïãñÜììáôïò. ÊáôÜ ôï ó÷åäéáóìü, åéóÜãïõìå ôá óôïé÷åßá äßíïíôáò ôéìÝò óôçí 176

177


éäéüôçôá List. Ôï Ýíá óôïé÷åßï ðëçêôñïëïãåßôáé ìåôÜ ôï Üëëï êáé ï äéá÷ùñéóìüò ôïõò ãßíåôáé

¢óêçóç 14-1.

ðáôþíôáò óå óõíäõáóìü ôá ðëÞêôñá Ctrl + Enter.

Óå ìéá öüñìá íá ôïðïèåôçèåß ìéá óõíäõáóìÝíç ëßóôá ìå üíïìá Parts êáé ìéá ëßóôá ìå

Ç ðñïóèÞêç óôïé÷åßùí ìÝóá áðü ôïí êþäéêá ôïõ ðñïãñÜììáôïò ãßíåôáé ìå åêôÝëåóç ôçò ìåèüäïõ AddItem (ðñüóèåóå óôïé÷åßï) ãéá êÜèå Ýíá óôïé÷åßï ðïõ èÝëïõìå íá åéóÜãïõìå. Ç

üíïìá Order. Åðßóçò, íá ôïðïèåôçèïýí êáé äýï ðëÞêôñá, ìå üíïìá Add êáé Remove. Óôç óõíäõáóìÝíç ëßóôá íá õðÜñ÷ïõí êáôá÷ùñéóìÝíá ôá åîáñôÞìáôá áðü ôá ïðïßá ìðïñåß íá óõíôåèåß Ýíáò çëåêôñïíéêüò õðïëïãéóôÞò. Íá ãñáöåß ðñüãñáììá ìå ôï ïðïßï ï ÷ñÞóôçò íá ìðïñåß íá äéáëÝîåé õëéêÜ áðü ôç óõíäõáóìÝíç ëßóôá Parts, Þ íá ìðïñåß íá ðëçêôñïëïãÞóåé ôçí ðåñéãñáöÞ åíüò õëéêïý

óýíôáîç ôçò ìåèüäïõ åßíáé: áíôéêåßìåíï. AddItem óôïé÷åßï, äåßêôçò üðïõ áíôéêåßìåíï åßíáé ôï üíïìá ôçò ëßóôáò Þ ôçò óõíäõáóìÝíçò ëßóôáò, óôïé÷åßï åßíáé ìéá óõìâïëïóåéñÜ ìå ôï êåßìåíï ðïõ èÝëïõìå íá ðñïóèÝóïõìå ùò ãñáììÞ óôç ëßóôá êáé äåßêôçò åßíáé Ýíáò áêÝñáéïò ðïõ õðïäåéêíýåé ôç èÝóç ôçò ëßóôáò óôçí ïðïßá èá åéóá÷èåß ôï íÝï óôïé÷åßï. Áí äåí ïñßóïõìå äåßêôç, ôï óôïé÷åßï åéóÜãåôáé óôï ôÝëïò ôçò ëßóôáò, áí ç éäéüôçôá Sorted

ðïõ äåí õðÜñ÷åé óôç ëßóôá êáé üôáí ðáôÞóåé ôï ðëÞêôñï Add, ôï õëéêü íá áíôéãñÜöåôáé óôç ëßóôá Order. Óå ðåñßðôùóç ðïõ ï ÷ñÞóôçò êÜíåé ëÜèïò, íá Ý÷åé ôç äõíáôüôçôá, áöïý õðïäåßîåé ôï õëéêü óôç ëßóôá Order, íá ôï áöáéñåß, ðáôþíôáò ôï ðëÞêôñï Remove.

(ëßóôá ôáîéíïìçìÝíç) Ý÷åé ôçí ôéìÞ False. Áí ç éäéüôçôá Sorted ôçò ëßóôáò Ý÷åé ôçí ôéìÞ True, ôï óôïé÷åßï ôïðïèåôåßôáé áõôüìáôá óôçí êáôÜëëçëç èÝóç, þóôå ôá óôïé÷åßá ôçò ëßóôáò

1. Ôïðïèåôïýìå ôï áíôéêåßìåíï Parts ðÜíù óôç öüñìá. Äßíïõìå óôçí éäéüôçôá Style, ôçò

íá åßíáé êáé íá ðáñïõóéÜæïíôáé ôáîéíïìçìÝíá. Ç éäéüôçôá NewIndex (íÝïò äåßêôçò) åðéóôñÝöåé ôï äåßêôç ôïõ ôåëåõôáßïõ óôïé÷åßïõ ðïõ ÐñïóðÝëáóç ëßóôáò Ý÷åé åéóá÷èåß óôç ëßóôá êáé åßíáé ÷ñÞóéìç üôáí äïõëåýïõìå ìå ôáîéíïìçìÝíåò ëßóôåò. ¼ôáí åéóÜãïõìå Ýíá óôïé÷åßï óå ôáîéíïìçìÝíç ëßóôá, åîïñéóìïý ç VB åéóÜãåé ôï óôïé÷åßï ìå áëöáâçôéêÞ óåéñÜ. Ç éäéüôçôá NewIndex ìáò äßíåé ôç èÝóç ôïõ íåïåéóá÷èÝíôïò óôïé÷åßïõ êáé ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ôçí ôéìÞ ôçò ãéá íá ôï åðéëÝîïõìå. Ãéá íá õðïäåßîåé ï ÷ñÞóôçò Ýíá óôïé÷åßï ôçò ëßóôáò êÜíåé êëéê åðÜíù ôïõ. Ôüôå ôï óôïé÷åßï ôïíßæåôáé ìå ìðëå ÷ñþìá êáé ç éäéüôçôá Text ôçò ëßóôáò ëáìâÜíåé ùò ôéìÞ ôï êåßìåíï ôïõ

óõíäõáóìÝíçò ëßóôáò ôçí ôéìÞ 1-Simple Combo. Ç óõíäõáóìÝíç ëßóôá èá öáßíåôáé ìå áíåðôõãìÝíï ôï ðåñéå÷üìåíï ôçò êáé èá ðñïóöÝñåé ôç äõíáôüôçôá íá ðëçêôñïëïãïýìå óôçí ðåñéï÷Þ ôïõ ðëáéóßïõ êåéìÝíïõ áêüìá êáé åîáñôÞìáôá ôá ïðïßá äåí õðÜñ÷ïõí óôç ëßóôá. 2. Ôïðïèåôïýìå ôï áíôéêåßìåíï Order ðÜíù óôç öüñìá. Äßíïõìå óôçí éäéüôçôá Sorted ôçí ôéìÞ True, þóôå êÜèå óôïé÷åßï ðïõ ôïðïèåôåßôáé óôç ëßóôá íá ôáîéíïìåßôáé áõôüìáôá óôç óùóôÞ èÝóç. 3. Ôïðïèåôïýìå ôá ðëÞêôñá äéáôáãÞò, ôïõò áöáéñïýìå ôçí éäéüôçôá Caption, äßíïõìå óôçí éäéüôçôá Style ôçí ôéìÞ 1-Graphical êáé ôïðïèåôïýìå ôï êáôÜëëçëï åéêïíßäéï ðÜíù

åðéëåãìÝíïõ óôïé÷åßïõ. ÌÝóá áðü ôï ðñüãñáììá ìðïñïýìå íá ðñïóðåëÜóïõìå ôá óôïé÷åßá ìéáò ëßóôáò Þ ìéáò óõíäõáóìÝíçò ëßóôáò ÷ñçóéìïðïéþíôáò ôçí éäéüôçôá ListIndex. Ç

óôá ðëÞêôñá åíçìåñþíïíôáò ôçí éäéüôçôá Picture.

éäéüôçôá ListIndex èÝôåé Þ åðéóôñÝöåé ôï äåßêôç ôïõ åðéëåãìÝíïõ óôïé÷åßïõ. Áí äåí Ý÷ïõìå åðéëÝîåé óôïé÷åßï, ç éäéüôçôá ListIndex Ý÷åé ôéìÞ ßóç ìå -1. Ôï ðñþôï óôïé÷åßï ôçò ëßóôáò Ý÷åé äåßêôç 0. Ôï ðëÞèïò ôùí óôïé÷åßùí ôçò ëßóôáò ôï äßíåé ç ôéìÞ ôçò éäéüôçôáò ListCount. ÅðïìÝíùò, ï äåßêôçò ôïõ ôåëåõôáßïõ óôïé÷åßïõ ôçò ëßóôáò éóïýôáé ìå ListCount - 1. ÔÝëïò, ç

Parts Order Add Remove

éäéüôçôá ItemData(äåßêôçò) Ý÷åé ãéá ôéìÞ ôç óõìâïëïóåéñÜ ôïõ óôïé÷åßïõ ôçò ëßóôáò ðïõ õðïäåéêíýåé ï äåßêôçò. ÐáñÜäåéãìá 14-1. Óå ìéá óõíäõáóìÝíç ëßóôá ãñÜöïõìå ôéò çìÝñåò ôçò åâäïìÜäáò áñ÷ßæïíôáò áðü ôç Ðñüêåéôáé ãéá ðßíáêá éäéïôÞôùí. Äåßôå ìÜèçìá ÄåõôÝñá. ÊÜíïõìå êëéê óôçí ÐÝìðôç. Ïé éäéüôçôåò ðïõ ðåñéãñÜøáìå Ý÷ïõí ôéò ôéìÝò: 20.

Ç éäéüôçôá ListCount Ý÷åé ôçí ôéìÞ 7. Ðñþôï óôïé÷åßï, äåßêôçò 0

Ç éäéüôçôá Text Ý÷åé ôçí ôéìÞ " ÐÝìðôç " .

Ôåëåõôáßï óôïé÷åßï, äåßêôçò 6

Ç éäéüôçôá ListIndex Ý÷åé ôçí ôéìÞ 3.

Åéêüíá 14-2. Áí ç ëßóôá Ý÷åé ôï üíïìá Days ïé ôéìÝò ôùí éäéïôÞôùí ItemData åßíáé:

Days.ItemData(0) < "ÄåõôÝñá" Days.ItemData(1) < "Ôñßôç" : Days.ItemData(6) < "ÊõñéáêÞ" Ãéá íá áðïìáêñýíïõìå Ýíá åðéëåãìÝíï óôïé÷åßï áðü ôç ëßóôá ÷ñçóéìïðïéïýìå ôç ìÝèïäï ÄéáãñáöÞ óôïé÷åßïõ ëßóôáò RemoveItem, ç ïðïßá óõíôÜóóåôáé ùò åîÞò: áíôéêåßìåíï.RemoveItem äåßêôçò Áîéïðïéþíôáò ôçí éäéüôçôá ListIndex ìðïñïýìå íá õðïäåßîïõìå óôç ìÝèïäï RemoveItem, Ç ìÝèïäïò Clear äéáãñÜöåé ôï óôïé÷åßï ôçò ëßóôáò ðïõ Ý÷åé åðéëåãåß áðü ôïí ÷ñÞóôç. üëá ôá óôïé÷åßá ôçò ëßóôáò. 178

Åéêüíá 14-3. 4.

ÅéóÜãïõìå ôï ðñüãñáììá óôï ðáñÜèõñï êþäéêá.

Private Sub Form_Load() 'ÅíçìÝñùóç ôçò ëßóôáò ìå ôéò ðåñéãñáöÝò ôùí åîáñôçìÜôùí Parts.AddItem "CPU Alpha" Parts.AddItem "RAM 256K" Parts.AddItem "RAM 512K" Parts.AddItem "RAM 1G" Parts.AddItem "Äßóêïò 40G" Parts.AddItem "Äßóêïò 70G" Parts.AddItem "ÄéóêÝôá 3+1/4" Parts.AddItem "CD-ROM" Parts.AddItem "VGA" Parts.AddItem "Ç÷åßá" Parts.AddItem "Ðëçêôñïëüãéï" End Sub Private Sub Add_Click() Order.AddItem Parts.Text End Sub Private Sub Delete_Click() If Order.ListIndex > -1 Then Order.RemoveItem Order.ListIndex End If End Sub 179


Ï êþäéêáò ãéá ôï óõìâÜí Load ôçò öüñìáò ÷ñçóéìïðïéåß ôç ìÝèïäï AddItem ãéá íá óõìðëçñþóåé ôç ëßóôá. Óôï ðñïçãïýìåíï ìÜèçìá åß÷áìå áíáöÝñåé üôé óõíÞèùò ôéò áñ÷éêïðïéÞóåéò ìÝóá óôï ðñüãñáììá ôéò ðñáãìáôïðïéïýìå ôç óôéãìÞ ôçò åêôÝëåóçò ôçò õðïñïõôßíáò äéá÷åßñéóçò ôïõ óõìâÜíôïò Load.

ÐëÞêôñï óçìåßùóçò êáé ðëÞêôñï åðéëïãÞò Ôï ðëÞêôñï óçìåßùóçò (CheckBox) êáé ôï ðëÞêôñï åðéëïãÞò (OptionButton) ëåéôïõñãïýí üðùò áêñéâþò êáé Ýíáò äéáêüðôçò. Ï ÷ñÞóôçò êÜíïíôáò êëéê åðÜíù ôïõò åðéëÝãåé áíÜìåóá óå äýï êáôáóôÜóåéò áëçèÞ-øåõäÞ Þ on-off. Ç äéáöïñÜ ôïõò åßíáé, üôé êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò óå ìéá ïìÜäá ðëÞêôñùí óçìåßùóçò ìðïñïýí íá åßíáé ôáõôü÷ñïíá åðéëåãìÝíá äýï Þ ðåñéóóüôåñá ðëÞêôñá, åíþ óå ìéá ïìÜäá ðëÞêôñùí åðéëïãÞò ìüíï ôï Ýíá áðü áõôÜ ìðïñåß íá åßíáé åðéëåãìÝíï êÜèå öïñÜ. Ç éäéüôçôá Caption áõôþí ôùí áíôéêåéìÝíùí ìáò äßíåé ôç äõíáôüôçôá íá ïñßóïõìå ôï êåßìåíï ðïõ èá åìöáíéóôåß äßðëá óå Ýíá ôÝôïéïõ åßäïõò ðëÞêôñï. Ç éäéüôçôá Alignment ðñïóäéïñßæåé áí ôï êåßìåíï èá âñßóêåôáé óôá äåîéÜ ôïõ áíôéêåéìÝíïõ Þ óôá áñéóôåñÜ ôïõ. Ç éäéüôçôá Value ãéá ôï ðëÞêôñï åðéëïãÞò ìðïñåß íá Ý÷åé ôéìÞ True Þ False, áíÜëïãá ìå ôï áí

êáèïñßæïõí ôá üñéá ôùí ôéìþí ðïõ ìðïñïýí íá ðáñá÷èïýí áðü ôç ñÜâäï êýëéóçò. Ç ôéìÞ Min áíôéóôïé÷åß óôçí ôéìÞ ðïõ èÝëïõìå íá ðáßñíåé ç éäéüôçôá Value ôçò ñÜâäïõ üôáí ôï ïñèïãþíéï êýëéóçò âñßóêåôáé óôçí ðÜíù (ãéá êáôáêüñõöç ñÜâäï) Þ áñéóôåñÞ èÝóç (ãéá ïñéæüíôéá ñÜâäï). Ç ôéìÞ Max áíôéóôïé÷åß óôçí ôéìÞ ðïõ èÝëïõìå íá ðáßñíåé ç éäéüôçôá Value ôçò ñÜâäïõ üôáí ôï ðëáßóéï âñßóêåôáé óôçí êÜôù (ãéá êáôáêüñõöç ñÜâäï) Þ ôç äåîéÜ èÝóç (ãéá ïñéæüíôéá ñÜâäï). Ç éäéüôçôá Value äßíåé ôçí ôñÝ÷ïõóá ôéìÞ, ðïõ áíôéóôïé÷åß óôçí ôñÝ÷ïõóá èÝóç ôïõ ïñèïãùíßïõ êýëéóçò ìÝóá óôç ñÜâäï. Ç éäéüôçôá SmallChange êáèïñßæåé ôç ìåôáâïëÞ ôçò Value, üôáí ãßíåôáé êëéê óôá âÝëç êýëéóçò ðïõ âñßóêïíôáé óôá Üêñá ôçò ñÜâäïõ, åíþ ç éäéüôçôá LargeChange êáèïñßæåé ôç ìåôáâïëÞ ôçò Value, üôáí ãßíåôáé êëéê ðÜíù óôç ñÜâäï, äçëáäÞ áíÜìåóá óå Ýíá âÝëïò êýëéóçò êáé óôï ïñèïãþíéï êýëéóçò. ¢óêçóç 14-2. ÓõíäõÜóôå ìéá ïñéæüíôéá ñÜâäï êýëéóçò ìå Ýíá ðëáßóéï êåéìÝíïõ, þóôå ç ôñÝ÷ïõóá ôéìÞ ôçò ñÜâäïõ íá åìöáíßæåôáé ó ôï ðëáßóéï êåéìÝíïõ. Óôï ðëáßóéï êåéìÝíïõ èÝëïõìå íá åìöáíßæïõìå ôá Ýôç áðü ôï 1900 ùò ôï 2000 áíÜ äåêáåôßá êáé ðåíôáåôßá.

ôï ðëÞêôñï Ý÷åé åðéëåãåß Þ ü÷é. Ãéá ôï ðëÞêôñï óçìåßùóçò ç éäéüôçôá Value ìðïñåß íá ðÜñåé ôéò ôéìÝò ôùí åóùôåñéêþí óôáèåñþí vbUnchecked (ìç åðéëåãìÝíï, ìå ôéìÞ 0), vbChecked

txtYear hscYear

(åðéëåãìÝíï, ìå ôéìÞ 1) Þ vbGrayed (ìç äéáèÝóéìï, ìå ôéìÞ 2). ÓõíÞèùò ôá ðëÞêôñá óçìåßùóçò êáé ôá ðëÞêôñá åðéëïãÞò ôïðïèåôïýíôáé óå ìéá öüñìá ïìáäïðïéçìÝíá. Ãéá íá ôá ïìáäïðïéÞóïõìå, åßôå ãéá ëüãïõò åìöÜíéóçò åßôå ãéá ëåéôïõñãéêïýò ëüãïõò, ìðïñïýìå íá ôá óõìðåñéëÜâïõìå ìÝóá óå Ýíá ðëáßóéï (Frame) Þ ìÝóá óå Ýíá ðëáßóéï åéêüíáò (PictureBox). Ó' áõôÞí ôçí ðåñßðôùóç, ëÝìå üôé áíÞêïõí óå Ýíáí öïñÝá (container). Ãéá íá äçìéïõñãÞóïõìå ìéá ïìÜäá ðëÞêôñùí, ó÷åäéÜæïõìå ðñþôá ôï öïñÝá êáé óôç óõíÝ÷åéá ôïðïèåôïýìå ìÝóá óôïí öïñÝá ôá ðëÞêôñá óçìåßùóçò êáé ôá ðëÞêôñá åðéëïãÞò. Áí ôá ðëÞêôñá ðñïûðÜñ÷ïõí äåí ìðïñïýìå íá ôá óýñïõìå ìÝóá óôï öïñÝá. Ìðïñïýìå âÝâáéá íá ôá ôïðïèåôÞóïõìå êáôåõèåßáí ðÜíù óôç öüñìá. Óå áõôÞí ôçí ðåñßðôùóç ëåéôïõñãïýí óáí ìéá êáé ìüíïí ïìÜäá. ÐáñÜäåéãìá 14-2. Óôï ðáñÜèõñï ôçò åéêüíáò 14-4 õðÜñ÷ïõí äýï ðëáßóéá, ôï ðëáßóéï ìå Caption "ÌïíÜäåò" êáé ôï ðëáßóéï ìå Caption "×ñùìáôéóìüò". Áðü ôï ðñþôï ðëáßóéï ï ÷ñÞóôçò ìðïñåß íá åðéëÝîåé ôéò ìïíÜäåò ìÝôñçóçò åíüò ðáñáèýñïõ êáé áðü ôï äåýôåñï ðëáßóéï ìðïñåß íá åðéëÝîåé ôï áí ôï ðáñÜèõñï èá ðáñïõóéÜæåé áóðñüìáõñï Þ Ýã÷ñùìï ôï ðåñéå÷üìåíü ôïõ.

Åéêüíá 14 - 6. Óôï óõìâÜí Load ôçò öüñìáò èá áñ÷éêïðïéÞóïõìå êáôÜëëçëá ôéò ôéìÝò ôùí éäéïôÞôùí ôçò ñÜâäïõ, åíþ óôï óõìâÜí Change ôçò ñÜâäïõ èá áðïäßäïõìå óôï ðëáßóéï êåéìÝíïõ ôçí ôñÝ÷ïõóá ôéìÞ ôçò ñÜâäïõ. ÃñÜöïõìå ôïí êþäéêá:

Private Sub Form_Load() hscYear.Min = 1900 hscYear.Max = 2000 hscYear.SmallChange = 5 hscYear.LargeChange = 10 End Sub Private Sub hscYear_Change() txtYear = hscYear.Value End Sub

'ÅëÜ÷éóôç ôéìÞ 'ÌÝãéóôç ôéìÞ 'ÅëÜ÷éóôï Üëìá áýîçóçò 'ÌÝãéóôï Üëìá áýîçóçò

Áíôéêåßìåíá åëÝã÷ïõ ActiveX

Åéêüíá 1 4 - 5 .

Åéêüíá 1 4 - 4.

Óôï ðáñÜèõñï ôçò åéêüíáò 14-5 õðÜñ÷ïõí ôÝóóåñá ðëÞêôñá óçìåßùóçò. ÐáñáôçñÞóôå üôé ìáñêÜñïíôáò Ýíá áðü áõôÜ äåí áðïêëåßåôáé Ýíá Üëëï, üðùò óõìâáßíåé ìå ôá ðëÞêôñá åðéëïãÞò.

ÑÜâäïé êýëéóçò Ïé ñÜâäïé êýëéóçò (scrollbars) ÷ñçóéìïðïéïýíôáé óõíÞèùò óå óõíäõáóìü ìå Üëëá áíôéêåßìåíá, üðùò ðëáßóéá êåéìÝíïõ, ðëáßóéá åéêüíáò ê.Ü. ãéá íá äéåõêïëýíïõí ôçí áíÜãíùóç ìéáò ìåãÜëçò ëßóôáò óôïé÷åßùí, ãéá íá äåßîïõí ôçí ðñüïäï ìéáò åñãáóßáò Þ ãéá íá ðñïóöÝñïõí Ýíáí åíáëëáêôéêü ôñüðï åéóáãùãÞò óôïé÷åßùí. Ïé éäéüôçôåò Min (åëÜ÷éóôï) êáé Max (ìÝãéóôï) 180

Åêôüò áðü ôá ôõðéêÜ åñãáëåßá ðïõ áíáöÝñáìå, ôá ïðïßá åìöáíßæïíôáé áðáñ÷Þò óôçí åñãáëåéïèÞêç ôçò VB, õðÜñ÷ïõí êáé áñêåôÜ ðñüóèåôá ôá ïðïßá ìðïñïýí íá äçìéïõñãÞóïõí áíôéêåßìåíá åëÝã÷ïõ ôýðïõ ActiveX. Ðñüêåéôáé ãéá åîåéäéêåõìÝíá åñãáëåßá, ôá ïðïßá áõîÜíïõí óçìáíôéêÜ ôéò äõíáôüôçôåò ôçò VB, áöïý ìðïñåß íá ÷ñçóéìïðïéÞóåé ï ÷ñÞóôçò ãéá íá ôïðïèåôÞóåé ðÜíù óå ìéá öüñìá, áíôéêåßìåíá åëÝã÷ïõ, ôá ïðïßá åêôåëïýí ðéï óýíèåôåò ëåéôïõñãßåò. ÌåñéêÜ áðü áõôÜ åãêáèßóôáíôáé ìå ôçí åãêáôÜóôáóç ôçò VB, åíþ Üëëá ðñïóöÝñïíôáé áðü ôñßôïõò ðñïìçèåõôÝò êáé äéáíÝìïíôáé óå îå÷ùñéóôÜ áñ÷åßá ðïõ Ý÷ïõí êáôÜëçîç .ocx. Ãéá íá ðñïóèÝóïõìå Ýíá åñãáëåßï ActiveX óôçí åñãáëåéïèÞêç: 1. ÅðéëÝãïõìå Project | Components áðü ôç ãñáììÞ ìåíïý. 2. ÅðéëÝãïõìå ôïí êáñôåëïäåßêôç Controls. 3. Áðü ôï ðéíÜêéï ìå ôéò ïìÜäåò ôùí åñãáëåßùí (äåßôå åéêüíá 13-8) åðéëÝãïõìå áõôÝò ôùí ïðïßùí ôá åñãáëåßá èÝëïõìå íá ðñïóèÝóïõìå óôçí åñãáëåéïèÞêç. ÌåñéêÜ áðü ôá ðéï êïéíÜ åñãáëåßá âñßóêïíôáé óôçí ïìÜäá Microsoft Windows Common Controls, êáé ðåñéãñÜöïíôáé óôç óõíÝ÷åéá. TabStrip (Óõóôïé÷ßá êáñôåëþí): Äçìéïõñãåß ìéá óõóôïé÷ßá åðéêáëõðôüìåíùí êáñôåëþí, ðïõ Ý÷ïõí Ýíáí êáñôåëïäåßêôç óôï ðÜíù Üêñï ôïõò êáé ìðïñïýí íá ðåñéëÜâïõí äéáöïñåôéêÜ áíôéêåßìåíá åëÝã÷ïõ. Ï ÷ñÞóôçò åðéëÝãïíôáò Ýíáí êáñôåëïäåßêôç âëÝðåé ôï ðåñéå÷üìåíï ôçò áíôßóôïé÷çò êáñôÝëáò. 181

Ôï ðáñÜèõñï Components (åéêüíá 13-8) åéóáãùãÞò íÝùí åñãáëåßùí ðåñéÝ÷åé TabStrip.


ToolBar (ÃñáììÞ åñãáëåßùí): ×ñçóéìïðïéåßôáé ãéá ôç äçìéïõñãßá ãñáììþí åñãáëåßùí ðïõ ðåñéÝ÷ïõí Ýíá óýíïëï áíåîÜñôçôùí ðëÞêôñùí. ÊÜèå Ýíá ðëÞêôñï ìðïñåß íá ðåñéÝ÷åé åéêüíá Þ êåßìåíï. Ôá ðëÞêôñá åêôåëïýí óõíÞèùò ëåéôïõñãßåò ðïõ åßíáé äõíáôüí íá åêôåëåóôïýí êáé áðü ôï ìåíïý ôçò åöáñìïãÞò. StatusBar (ÃñáììÞ êáôÜóôáóçò): ×ñçóéìïðïéåßôáé ãéá ôç äçìéïõñãßá ãñáììþí êáôÜóôáóçò óôï êÜôù ìÝñïò ôïõ ðáñáèýñïõ ôçò åöáñìïãÞò. Ïé ãñáììÝò êáôÜóôáóçò ðáñÝ÷ïõí ðëçñïöïñßåò ãéá ôç ëåéôïõñãßá ôùí åöáñìïãþí êáé õðïäåßîåéò ãéá ôç óçìáóßá ôùí áíôéêåéìÝíùí ðïõ åðéëÝãåé ï ÷ñÞóôçò. ProgressBar (ÃñáììÞ ðñïüäïõ): Äçìéïõñãåß Ýíá ïñèïãþíéï óôï åóùôåñéêü ôïõ ïðïßïõ ðñïâÜëëåôáé, ìå ìéá óåéñÜ áðü ôåôñáãùíßäéá, ç ðñüïäïò ìéáò åñãáóßáò. ¸ôóé, ï ÷ñÞóôçò Ý÷åé ìéá åéêüíá ôïõ ÷ñüíïõ ðïõ áðáéôåßôáé ãéá ôçí ðëÞñç åêôÝëåóç ôçò åñãáóßáò. TreeView (ÄåíäñïåéäÞò ðñïâïëÞ): ×ñçóéìïðïéåßôáé ãéá ôçí ðáñïõóßáóç ôçò éåñáñ÷éêÞò ó÷Ýóçò ìåôáîý ôùí óôïé÷åßùí åíüò óõíüëïõ, ãéá ðáñÜäåéãìá ãéá ôçí ðáñïõóßáóç ôùí ðåñéå÷ïìÝíùí åíüò êåéìÝíïõ, ôç ó÷Ýóç öáêÝëùí êáé áñ÷åßùí åíüò äßóêïõ ê.Ü. Óå êÜèå êüìâï ìðïñåß íá ðåñéÝ÷åé ìéá åôéêÝôá Þ Ýíá ãñáöéêü. ImageList (Ëßóôá åéêüíùí): Äçìéïõñãåß ôïí áðïèçêåõôéêü ÷þñï ìéáò ëßóôáò åéêüíùí, ïé ïðïßåò ðñïâÜëëïíôáé óôï åóùôåñéêü Üëëùí áíôéêåéìÝíùí åëÝã÷ïõ. Ãéá ðáñÜäåéãìá, ôï åñãáëåßï ToolBar ìðïñåß íá áíôëåß ôá åéêïíßäéá ôùí ðëÞêôñùí ôïõ ìÝóá áðü ìéá ëßóôá åéêüíùí. ListView (¼øç ëßóôáò): ÅðéôñÝðåé ôçí ðïëõìïñöéêÞ ðáñïõóßáóç ìéáò óõëëïãÞò óôïé÷åßùí, ãéá ðáñÜäåéãìá áñ÷åßùí êáé öáêÝëùí, óå ìïñöÞ ìéêñþí Þ ìåãÜëùí åéêïíéäßùí, åðéêåöáëßäùí Þ ãñáììþí. Ôï äåîß ôìÞìá ôïõ ðáñáèýñïõ ôïõ Explorer ôïõ ëåéôïõñãéêïý óõóôÞìáôïò ëåéôïõñãåß óáí áíôéêåßìåíï ListView. Slider (Äåßêôçò ïëßóèçóçò): Äçìéïõñãåß áíôéêåßìåíá ðáñüìïéá ìå ôç ñÜâäï êýëéóçò. Ï ÷ñÞóôçò ìðïñåß íá óýñåé Ýíáí äåßêôç êáôÜ ìÞêïò åíüò Üîïíá êáé íá åðéëÝîåé ìéá ôéìÞ áðü Ýíá óýíïëï óõíå÷üìåíùí äéáêñéôþí ôéìþí. Óôï Control Panel êÜðïéåò áðü ôéò éäéüôçôåò ôïõ ðïíôéêéïý ñõèìßæïíôáé ìå áõôüí ôïí ôñüðï. ImageCombo (ÓõíäõáóìÝíç ëßóôá åéêüíùí): Äçìéïõñãåß ìéá âåëôéùìÝíç ìïñöÞ ôçò óõíäõáóìÝíçò ëßóôáò. Óôï åóùôåñéêü áõôÞò ôçò ëßóôáò åßíáé äõíáôüí íá ôïðïèåôçèïýí åéêïíßäéá äßðëá áðü êÜèå óôïé÷åßï, þóôå ï ÷ñÞóôçò íá Ý÷åé êáé ìéá ðéï ïéêåßá óå áõôüí ãñáöéêÞ áðåéêüíéóç. ¢óêçóç 14-3. ¸íá áñêåôÜ ÷ñÞóéìï åñãáëåßï, ôï üñãáíï (Gauge), ìå ôï ïðïßï åßíáé äõíáôÞ ç ðáñáãùãÞ áíôéêåéìÝíùí åëÝã÷ïõ ðïõ Ý÷ïõí ôç ìïñöÞ ïñãÜíùí ìÝôñçóçò (èåñìïìÝôñùí, ôá÷õìÝôñùí, âïëôïìÝôñùí ê.Ü.), âñßóêåôáé ìÝóá óôçí ïìÜäá MicroHelp MhGauge Control. Íá äçìéïõñãçèåß åöáñìïãÞ óôçí ïðïßá ï ÷ñÞóôçò íá êéíåß ôï äåßêôç åíüò Slider (äåßêôç ïëßóèçóçò) êáé íá ìåôáôïðßæåôáé áíáëüãùò êáé ôáõôü÷ñïíá ç âåëüíá óå Ýíá üñãáíï ìÝôñçóçò. 1. ÅéóÜãïõìå óôçí åñãáëåéïèÞêç ôéò ïìÜäåò åñãáëåßùí Microsoft Windows Common Controls êáé MicroHelp MhGauge Control. 2. Ôïðïèåôïýìå ðÜíù óå ìéá öüñìá Ýíá áíôéêåßìåíï ïñãÜíïõ ìå üíïìá Gauge êáé Ýíá áíôéêåßìåíï äåßêôç ïëßóèçóçò ìå üíïìá Slider. 3. Óôéò éäéüôçôåò Min êáé Max ôùí áíôéêåéìÝíùí Slider

ôï áñ÷åßï Circlock.bmp ðïõ âñßóêåôáé óôïí öÜêåëï C:\…\Vb\Graphics\Bitmaps\Gauge\. 182

3-Full, þóôå ç âåëüíá íá ðåñéóôñÝöåôáé ðåñß ôï êÝíôñï ôïõ ïñãÜíïõ. 6. ÃñÜöïõìå ôïí êþäéêá:

Private Sub Slider_Change() Gauge.Value = Slider.Value End Sub ÊÜèå áëëáãÞ ôéìÞò (ðñüêëçóç óõìâÜíôïò Change) óôï áíôéêåßìåíï Slider, ðñïêáëåß êáé ôçí áíôßóôïé÷ç ìåôáâïëÞ óôçí ôéìÞ ôïõ áíôéêåéìÝíïõ Gauge.

Ôï áíôéêåéìÝíï ÅêôõðùôÞò Ôï ëåéôïõñãéêü óýóôçìá ôùí Windows, äéá÷åéñßæåôáé ôéò åêôõðþóåéò ìÝóù ôïõ äéá÷åéñéóôÞ åêôõðþóåùí (Printer Manager). Ï äéá÷åéñéóôÞò åêôõðþóåùí äÝ÷åôáé ôéò åêôõðþóåéò áðü ðïëëÜ äéáöïñåôéêÜ ðñïãñÜììáôá êáé áíáëáìâÜíåé ôç óùóôÞ åêôýðùóÞ ôïõò. Áí äå ìåóïëáâïýóå ï äéá÷åéñéóôÞò åêôõðþóåùí, êáé ôï êÜèå ðñüãñáììá Ýóôåëíå áðåõèåßáò ôçí åêôýðùóÞ ôïõ óôïí åêôõðùôÞ, Þ èá ìðëÝêïíôáí ïé åêôõðþóåéò, Þ ôá ðñïãñÜììáôá ìå ìéêñÝò åêôõðþóåéò èá áíÝìåíáí ôïí ôåñìáôéóìü ðñïãñáììÜôùí ìå ìåãÜëåò åêôõðþóåéò ðïõ èá åß÷áí äåóìåýóåé ðñþôá ôïí åêôõðùôÞ. ¼ôáí Ýíá ðñüãñáììá äçìéïõñãåß ìéá åêôýðùóç, ôá ôìÞìáôÜ ôçò óõãêåíôñþíïíôáé áðü ôïí äéá÷åéñéóôÞ åêôõðþóåùí (ðñþôç öÜóç ôçò åêôýðùóçò) êáé üôáí óõìðëçñùèåß üëç ç äéáäéêáóßá, ï äéá÷åéñéóôÞò åêôõðþóåùí äåóìåýåé ôïí êáôÜëëçëï åêôõðùôÞ êáé ôçí ðñáãìáôïðïéåß (äåýôåñç öÜóç ôçò åêôýðùóçò). Ç VB, ìÝóù ôïõ áíôéêåéìÝíïõ Printer, ìáò äßíåé ôç äõíáôüôçôá íá åêìåôáëëåõôïýìå üëá ôá ðëåïíåêôÞìáôá åêôýðùóçò ôïõ ãñáöéêïý ðåñéâÜëëïíôïò ôùí Windows. ¸ôóé, åßíáé äõíáôÞ ç åêôýðùóç êåéìÝíïõ óå äéÜöïñåò ãñáììáôïóåéñÝò êáé óôõë (ôïíéóìÝíï, ìå ðëÜãéïõò ÷áñáêôÞñåò ê.Ü.), ç åêôýðùóç ãñáöéêþí êáé ç óõíäõáóìÝíç åêôýðùóç êåéìÝíïõ êáé ãñáöéêþí. Ç åêôýðùóç êåéìÝíïõ óôçí VB ãßíåôáé ìå ôç ìÝèïäï Print, ðïõ Þäç Ý÷ïõìå ãíùñßóåé óôá ìáèÞìáôá 9 êáé 11 êáé ç åêôýðùóç ãñáöéêþí ìå ôéò ìåèüäïõò ãñáöéêþí Pset, Line,

Áí ìÝóá óôï ðñüãñáììá äåí õðÜñ÷åé åíôïëÞ ðïõ ¸íá óýíïëï ìåèüäùí åêôýðùóçò ôåñìáôßæåôáé ðÜíôá ìå ìéá åíôïëÞ ðïõ æçôÜ ôçí åêôÝëåóç íá æçôÜ ôçí åêôÝëåóç ôçò ôçò ìåèüäïõ EndDoc (ôÝëïò ôïõ åããñÜöïõ). Ç ìÝèïäïò EndDoc åéäïðïéåß ôïí äéá÷åéñéóôÞ ìåèüäïõ EndDoc ç

Circle ðïõ èá ãíùñßóïõ��å óôï ìÜèçìá 15.

åêôõðþóåùí üôé ôï ðñüãñáììá Ý÷åé ïëïêëçñþóåé ôçí ðñþôç öÜóç ôçò åêôýðùóçò êáé üôé åêôýðùóç ìðïñåß íá ðñï÷ùñÞóåé óôç öÜóç áðïóôïëÞò óôïí åêôõðùôÞ ôùí ðñïò åêôýðùóç äåäïìÝíùí. ðñáãìáôïðïéåßôáé ìå ôïí Ôï ðëÞèïò ôùí ðáñáìÝôñùí ôçò ìåèüäïõ Print äåí åßíáé êáèïñéóìÝíï. ÄåîéÜ áðü ôçí ôåñìáôéóìü ôïõ êùäéêÞ ëÝîç Print åßíáé äõíáôüí íá èÝóïõìå üóåò ðáñáìÝôñïõò èÝëïõìå. Ïé ôéìÝò ôïõò èá ðñïãñÜììáôïò. ôõðùèïýí óôçí ßäéá ãñáììÞ. Aí äåí ÷ùñïýí, ç åêôýðùóç óõíå÷ßæåôáé óôçí åðüìåíç ãñáììÞ. Ï äéá÷ùñéóìüò ôïõò äåí åßíáé õðï÷ñåùôéêü íá ãßíåé ìå êüììáôá (,), üðùò ãßíåôáé óõíÞèùò óå üëåò ôéò ìåèüäïõò. Åßíáé äõíáôüí íá ãßíåé ìå êåíÜ äéáóôÞìáôá Þ ôï óýìâïëï semicolon (; ç áããëéêÞ Üíù ôåëåßá). Ôá óýìâïëá áõôÜ äåí ðáßæïõí ìüíï äéá÷ùñéóôéêü ñüëï ìåôáîý ôùí ðáñáìÝôñùí, áëëÜ åðéäñïýí óôç ìïñöÞ ôçò åêôýðùóçò. ÐáñÜäåéãìá 14-3. á) Ïé åíôïëÝò:

Printer.Print "ÄÕÁÄÉÊÏÓ"; "ÄÅÊÁÄÉÊÏÓ"; "ÄÅÊÁÅÎÁÄÉÊÏÓ" Printer.Print "10101101"; -173; Hex(97) Printer.EndDoc

èá ôõðþóïõí:

êáé Gauge äßíïõìå ôéò ôéìÝò 0 êáé 10 áíôßóôïé÷á ãéá íá Ý÷ïõí êáé ôá äýï áíôéêåßìåíá ôçí ßäéá êëßìáêá ôéìþí. 4. Ãéá ôçí éäéüôçôá Picture ôïõ ïñãÜíïõ åðéëÝãïõìå

5. Óôï áíôéêåßìåíï Gauge êáé óôçí éäéüôçôá NeedleWidth (ðÜ÷ïò âåëüíáò), åê÷ùñïýìå ôçí ôéìÞ 3, þóôå ç âåëüíá ôïõ ïñãÜíïõ íá Ý÷åé êÜðïéï ðÜ÷ïò, êáé óôçí éäéüôçôá Style ôçí ôéìÞ

ÄÕÁÄÉÊÏÓÄÅÊÁÄÉÊÏÓÄÅÊÁÅÎÁÄÉÊÏÓ 10101101-173 61 Åéêüíá 14-7

Måôáîý ôùí ðáñáìÝôñùí, ôï semicolon Þ ôï êåíü äéÜóôçìá äå äçìéïõñãåß êáíÝíá äéá÷ùñéóìü ìåôáîý ôùí åêôõðïýìåíùí ôéìþí. Ãé' áõôü êáé ç åêôýðùóç ôùí óõìâïëïóåéñþí ôçò ðñþôçò ãñáììÞò öáßíåôáé óõíå÷üìåíç. Óôç äåýôåñç ãñáììÞ, õðÜñ÷åé ìåôáîý ôùí 183


äýï ôåëåõôáßùí áñéèìþí Ýíá êåíü äéÜóôçìá, äéüôé ï äåýôåñïò áñéèìüò åßíáé èåôéêüò êáé óôïõò èåôéêïýò áñéèìïýò ðáñáëåßðåôáé ôï ðñüóçìï. â) Ïé åíôïëÝò:

Printer.Print "ÄÕÁÄÉÊÏÓ", "ÄÅÊÁÄÉÊÏÓ", "ÄÅÊÁÅÎÁÄÉÊÏÓ" Printer.Print "10101101",-173, Hex(97) Printer.EndDoc

èá ôõðþóïõí:

ÄÕÁÄÉÊÏÓ 10101101

ÄÅÊÁÄÉÊÏÓ -173

ÄÅÊÁÅÎÁÄÉÊÏÓ 61

Ôï êüììá ùò äéá÷ùñéóôéêü ïñéïèåôåß, ôçí áñ÷Þ ôùí ðåñéï÷þí ðïõ Ý÷ïõí ìÝãåèïò 14 ÷áñáêôÞñåò. Áí èÝëïõìå íá áöÞóïõìå êåíÞ ìéá ðåñéï÷Þ, åéóÜãïõìå ìåôáîý ôùí áíôßóôïé÷ùí ðáñáìÝôñùí äýï óõíå÷üìåíá êüììáôá. Áò óçìåéùèåß üôé áí, ìåôÜ áðü üëåò ôéò ðáñáìÝôñïõò, õðÜñ÷åé êüììá Þ semicolon óôï ôÝëïò, ç åðüìåíç ìÝèïäïò Print èá ôõðþóåé óôçí ßäéá óåéñÜ. ¼ðùò Þäç Ý÷ïõìå áíáöÝñåé ìðïñïýìå íá êáèïñßóïõìå ôç ãñáììáôïóåéñÜ ôïõ êåéìÝíïõ êáé ôï óôõë ôùí ãñáììÜôùí ðïõ èá ÷ñçóéìïðïéçèïýí. Ï êáèïñéóìüò ãßíåôáé áðü éäéüôçôåò ôïõ áíôéêåéìÝíïõ Printer. ÓõãêåêñéìÝíá, ç éäéüôçôá:

FontName: ÃñáììáôïóåéñÜ. Ç ôéìÞ ôçò éäéüôçôáò åßíáé ìéá óõìâïëïóåéñÜ. Ôï üíïìá ôçò ãñáììáôïóåéñÜò åßíáé áõôü áêñéâþò ðïõ áíáãíùñßæïõí ôá Windows. Ãéá ðáñÜäåéãìá, "Times New Roman", "Courier New", "Wingdings" ê.Ü. FontSize: ÌÝãåèïò. Ôï ìÝãåèïò ôçò ãñáììáôïóåéñÜò ðñÝðåé íá êáèïñßæåôáé óå óôéãìÝò (points) ðïõ åßíáé ôï 1/72 ôçò ßíôóáò. FontBold: Ôïíéóìüò. Áí ç ôéìÞ ôçò éäéüôçôáò åßíáé True, ôá ãñÜììáôá ôõðþíïíôáé ôïíéóìÝíá.

FontItalic: ÐëÜãéá ãñÜììáôá. Áí ç ôéìÞ ôçò åßíáé True, ôá ãñÜììáôá ôõðþíïíôáé ìå êëßóç. FontUndeline: ÕðïãñÜììéóç. Áí ç ôéìÞ ôçò ôçò éäéüôçôáò åßíáé True, ôá ãñÜììáôá ôõðþíïíôáé õðïãñáììéóìÝíá. FontStrikethru: ÄéáãñáöÞ. Áí ç ôéìÞ ôçò ôçò éäéüôçôáò åßíáé True, ôá ãñÜììáôá ôõðþíïíôáé ìå ìéá ãñáììÞ óôï ìÝóïí ôïõò óáí íá Ý÷ïõí óâçóôåß. ÐáñÜäåéãìá 14-4.

Áí èÝëïõìå íá êÜíïõìå åêôýðùóç óå ìéá óõãêåêñéìÝíç èÝóç ìéáò óåëßäáò ÷ñçóéìïðïéïýìå ôéò éäéüôçôåò CurrentX êáé CurrentY. Ïé ôéìÝò áõôþí ôùí éäéïôÞôùí ïñßæïõí óå twip ôç x êáé ôç y óõíôåôáãìÝíç áíôßóôïé÷á, ôïõ óçìåßïõ áðü ôï ïðïßï èá áñ÷ßóåé ìéá åêôýðùóç. Ãéá íá áêõñþóïõìå ìéá åêôýðùóç ÷ñçóéìïðïéïýìå ôç ìÝèïäï KillDoc. ÁõôÞ ç ìÝèïäïò áêõñþíåé ôçí åêôýðùóç, áêüìá êé áí Ýíá ìÝñïò ôçò Ý÷åé õëïðïéçèåß áðü ôïí äéá÷åéñéóôÞ åêôõðþóåùí.

Áíáêåöáëáßùóç Ç ëßóôá åßíáé áíôéêåßìåíï ðïõ äåóìåýåé ôï ÷ñÞóôç íá åðéëÝîåé ìÝóá áðü Ýíáí ðñïêáèïñéóìÝíï óýíïëï åðéëïãþí. Ìå ôç óõíäõáóìÝíç ëßóôá äçìéïõñãïýìå ìéá áíïé÷ôÞ ëßóôá, äçëáäÞ ìéá ëßóôá ôçí ïðïßá íá ìðïñåß íá åíçìåñþóåé ï ÷ñÞóôçò. Ôï ðëÞêôñï óçìåßùóçò êáé ôï ðëÞêôñï åðéëïãÞò ëåéôïõñãïýí üðùò áêñéâþò êáé Ýíáò äéáêüðôçò. Áðü ìéá ïìÜäá ðëÞêôñùí óçìåßùóçò ìðïñïýí íá åßíáé ôáõôü÷ñïíá åðéëåãìÝíá äýï Þ ðåñéóóüôåñá ðëÞêôñá, åíþ áðüìéá ïìÜäá ðëÞêôñùí åðéëïãÞò ìüíï ôï Ýíá åðéôñÝðåôáé íá åßíáé åðéëåãìÝíï êÜèå öïñÜ. Ïé ñÜâäïé êýëéóçò ÷ñçóéìïðïéïýíôáé óå óõíäõáóìü ìå Üëëá áíôéêåßìåíá üðùò ðëáßóéá êåéìÝíïõ, ðëáßóéá åéêüíáò ê.Ü. ãéá íá äéåõêïëýíïõí ôçí áíÜãíùóç ìéáò ìåãÜëçò ëßóôáò óôïé÷åßùí, ãéá íá äåß÷íïõí ôçí ðñüïäï ìéáò åñãáóßáò Þ ãéá íá ðñïóöÝñïõí Ýíáí åíáëëáêôéêü ôñüðï åéóáãùãÞò óôïé÷åßùí. Ôá ActiveX åßíáé ðñüóèåôá åñãáëåßá ìå ôá ïðïßá äçìéïõñãïýíôáé áíôéêåßìåíá åëÝã÷ïõ, ðïõ åêôåëïýí åîåéäéêåõìÝíåò ëåéôïõñãßåò. Äéáôßèåíôáé áðü ôñßôïõò ðñïìçèåõôÝò êáé äéáíÝìïíôáé óå áñ÷åßá ôýðïõ .ocx.Ç VB, ìÝóù ôïõ áíôéêåéìÝíïõ Printer, äßíåé ôç äõíáôüôçôá åêìåôÜëëåõóçò üëùí ôùí ðëåïíåêôçìÜôùí åêôýðùóçò ôïõ ãñáöéêïý ðåñéâÜëëïíôïò ôùí Windows. ¸ôóé, åßíáé äõíáôÞ ç åêôýðùóç êåéìÝíïõ óå äéÜöïñåò ãñáììáôïóåéñÝò êáé óôõë, ç åêôýðùóç ãñáöéêþí êáé ç óõíäõáóìÝíç åêôýðùóç êåéìÝíïõ êáé ãñáöéêþí.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. Óå ìéá öüñìá ôïðïèåôÞóôå ìéá ëßóôá êáé ìéá óõíäõáóìÝíç ëßóôá. Óå êáôÜóôáóç ó÷åäßáóçò óõìðëçñþóôå ôá óôïé÷åßá ôïõò ìå ôéò ôéìÝò ðïõ Ý÷ïõí ôá áíôßóôïé÷á áíôéêåßìåíá ôçò åéêüíáò 14-1. 2. Íá ôïðïèåôçèåß ìéá ëßóôá óå ìéá öüñìá, ç ïðïßá íá óõìðëçñþíåôáé ìå ôéò ôõðéêÝò ôéìÝò ôùí áíôéóôÜóåùí áíï÷Þò 5% ðïõ êõêëïöïñïýí óôçí áãïñÜ áðü 1Ù Ýùò 1ÌÙ.

Ôï ôìÞìá ðñïãñÜììáôïò:

Printer.FontName = "Times New Roman" Printer.FontSize = 11 Printer.FontBold = False:Printer.FontItalic = False Printer.Print "Normal" Printer.FontBold = True: Printer.FontItalic = False Printer.Print "Bold" Printer.FontBold = False: Printer.FontItalic = True Printer.Print "Italic" Printer.FontBold = True: Printer.FontItalic = True Printer.Print "Bold Italic" Printer.EndDoc

Õðüäåéîç: ×ñçóéìïðïéÞóôå ôïí ðßíáêá 2-1 ôïõ ìáèÞìáôïò 2. 3. Íá åêôåëåóôåß ç Üóêçóç 14-1. Íá óõìðëçñùèåß ç öüñìá, þóôå íá ãßíåôáé äéáãñáöÞ üëùí ôùí óôïé÷åßùí ôçò ëßóôáò Order ìå ìÝèïäï Clear. 4. Íá åêôåëåóôåß ç Üóêçóç 14-2. 5. Íá äçìéïõñãçèåß öüñìá óôçí ïðïßá íá ôïðïèåôçèåß ìéá êáôáêüñõöç êáé ìéá ïñéæüíôéá ñÜâäïò êýëéóçò. ¼ôáí ï ÷ñÞóôçò êéíåß ôï ïñèïãþíéï êýëéóçò êÜèå ñÜâäïõ, Ýíá ôåôñÜãùíï ðïõ Ý÷åé ó÷åäéáóôåß ìå ôï åñãáëåßï "ãåùìåôñéêü ó÷Þìá" íá áëëÜæåé èÝóç êáé íá ôïðïèåôåßôáé óôéò áíôßóôïé÷åò óõíôåôáãìÝíåò. Åéêüíá 14-8.

èá ðñïêáëÝóåé ôçí åêôýðùóç:

Õðüäåéîç: Ïé éäéüôçôåò Min êáé Max ôçò

Normal Bold Italic Bold Italic

êáôáêüñõöçò ñÜâäïõ íá õðïëïãéóôïýí áðü ôéò éäéüôçôÝò ôçò Top êáé Height ôïõ ãåùìåôñéêïý ó÷Þìáôïò êáé ïé éäéüôçôåò Min êáé

Óôçí ðåñßðôùóç ðïõ èÝëïõìå íá ãßíåé áëëáãÞ óåëßäáò óôïí åêôõðùôÞ, ÷ñçóéìïðïéïýìå ôç ìÝèïäï NewPage. Óå üðïéï óçìåßï êé áí âñßóêåôáé ç åêôýðùóç, ç óåëßäá ðïõ Ý÷åé ãñáöôåß

êáé Width.

ðñïùèåßôáé óôçí Ýîïäï êáé ïé ìÝèïäïé Print ðïõ èá åêôåëåóôïýí óôç óõíÝ÷åéá, åêôõðþíïõí óôçí åðüìåíç óåëßäá.

6. Íá åêôåëåóôåß ç Üóêçóç 14-3. 184

Max

ôçò

ïñéæüíôéáò

ñÜâäïõ

íá

õðïëïãéóôïýí áðü ôéò éäéüôçôÝò ôçò Left

185


7. Óôïí êáôÜëïãï C:\…\Vb\Graphics\Bitmaps\Gauge\ õðÜñ÷åé áñ÷åßï ìå üíïìá

Horz.bmp. Ôï áñ÷åßï áõôü ðåñéÝ÷åé ôçí åéêüíá åíüò èåñìïìÝôñïõ. Íá äçìéïõñãçèåß ðñüãñáììá, óôï ïðïßï ï ÷ñÞóôçò íá ïëéóèáßíåé ôï ïñèïãþíéï êýëéóçò ìéáò ñÜâäïõ êýëéóçò êáé íá êéíåßôáé ï õäñÜñãõñïò ôïõ èåñìïìÝôñïõ.

ÌÜèçìá 15

ÃñáöéêÜ Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí:

Åéêüíá 14-9. 8. Óå ìéá ïèüíç ôïðïèåôÞóôå ôÝóóåñá ðëÞêôñá. ÅðéóõíÜøôå êþäéêá óôéò õðïñïõôßíåò äéá÷åßñéóçò óõìâÜíôùí ôùí ðëÞêôñùí, þóôå ôï Ýíá ðëÞêôñï íá ôõðþíåé óôïí åêôõðùôÞ Ýíá ìÞíõìá, ôï äåýôåñï íá æçôÜ ôçí áëëáãÞ óåëßäáò, ôï ôñßôï íá ôåñìáôßæåé ìéá åêôýðùóç êáé ôï ôÝôáñôï íá ôç äéáêüðôåé. ÐñáãìáôïðïéÞóôå äïêéìÝò. Ó÷ïëéÜóôå ôï ðüôå áêñéâþò áíôéäñÜ ï åêôõðùôÞò ìåôÜ ôçí áðáßôçóç åêôÝëåóçò ôçò áíôßóôïé÷çò ìåèüäïõ.

Åéêüíá 14-10.

Óçìåéþóåéò:

Íá ÷ñçóéìïðïéïýí ôá åñãáëåßá ãñáöéêþí ãéá íá ó÷åäéÜæïõí áðëÜ ãåùìåôñéêÜ ó÷Þìáôá ðÜíù óå ìéá öüñìá. Íá ðåñéãñÜöïõí ôïí ôñüðï äéá÷åßñéóçò ôïõ ÷ñþìáôïò óôç ó÷åäßáóç ôùí âáóéêþí ãåùìåôñéêþí áíôéêåéìÝíùí. Íá ðåñéãñÜöïõí ôéò äéáöïñÝò ìåôáîý ôïõ åñãáëåßïõ "ðëáßóéï åéêüíáò" êáé ôïõ åñãáëåßïõ "åéêüíá". Íá ðñïãñáììáôßæïõí ôç äçìéïõñãßá ãñáöéêþí êÜíïíôáò êëÞóç ìåèüäùí ó÷åäßáóçò ãñáöéêþí. Íá êáèïñßæïõí ôéò êëßìáêåò ó÷åäßáóçò Óôïõò õðïëïãéóôÝò ïé åéêüíåò, ôá åéêïíßäéá, ôá ó÷Þìáôá, ôá ó÷Ýäéá êáé ôá äéáãñÜììáôá ÷áñáêôçñßæïíôáé ìå ôïí üñï ãñáöéêÜ (graphics). Ôá ãñáöéêÜ áðïôåëïýí áðáñáßôçôï óôïé÷åßï êÜèå óýã÷ñïíçò åöáñìïãÞò, áíåîÜñôçôá áðü ôï áí ç åéêüíá áðïôåëåß Þ ü÷é ôï èåìáôéêü ôçò áíôéêåßìåíï. Áðü ôç öýóç ôïõ ï Üíèñùðïò ìðïñåß íá áíôëÞóåé ðïëý ðéï ãñÞãïñá êáé åýêïëá ôéò ðëçñïöïñßåò ðïõ áðåéêïíßæïíôáé ìå ãñáöéêü ôñüðï, áðü üôé ôéò ðëçñïöïñßåò ðïõ ðåñéÝ÷ïíôáé óå Ýíá êåßìåíï Þ óå Ýíáí ðßíáêá áñéèìþí. Ç VB äéáèÝôåé äýï äéáöïñåôéêïýò ôñüðïõò ãéá ôç äçìéïõñãßá ãñáöéêþí. Óôïí Ýíáí ôñüðï ÷ñçóéìïðïéïýíôáé ôá åñãáëåßá ãñáöéêþí ôçò ðáëÝôáò åñãáëåßùí åíþ óôïí Üëëï ÷ñçóéìïðïéïýíôáé ïé ìÝèïäïé ãñáöéêþí ôçò ãëþóóáò ðñïãñáììáôéóìïý. Ôï ðïéïò áðü ôïõò äýï ôñüðïõò èá ÷ñçóéìïðïéçèåß, åîáñôÜôáé áðü ôï ôé áêñéâþò èÝëïõìå íá ðåôý÷ïõìå. ÊÜðïéá áðëÜ ãñáöéêÜ (ãñáììÝò, ïñèïãþíéá, êýêëïõò, åëëåßøåéò êëð) ìðïñïýìå íá ôá "æùãñáößóïõìå" åîáñ÷Þò ðÜíù óå ìéá öüñìá êáôÜ ôç äçìéïõñãßá ôçò äéåðáöÞò, ÷ñçóéìïðïéþíôáò ôá åñãáëåßá ãñáöéêþí. ¸ôóé, ÷ùñßò íá ãñÜøïõìå êáèüëïõ êþäéêá âëÝðïõìå ôï ôåëéêü ïðôéêü áðïôÝëåóìá. ÊÜðïéá Üëëá ãñáöéêÜ, ôá ïðïßá åßíáé ðéï óýíèåôá êáé ìðïñïýí íá ðåñéãñáöïýí ìüíïí áðü áëãïñßèìïõò Þ ãéá ôá ïðïßá õðÜñ÷åé ç áðáßôçóç íá åìöáíéóôïýí êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò ùò åöÝ, åðéâÜëëåôáé íá äçìéïõñãçèïýí áðü ìåèüäïõò ãñáöéêþí, ðïõ êáëïýíôáé ìÝóá áðü êþäéêá ðñïãñÜììáôïò. ÃñáöéêÜ ìðïñïýìå íá äçìéïõñãÞóïõìå ìÝóá óå ìéá öüñìá Þ ìÝóá óå Ýíá ðëáßóéï åéêüíáò ÷ñçóéìïðïéþíôáò ôá åñãáëåßá Þ/êáé ôéò ìåèüäïõò ãñáöéêþí. Åðßóçò, ìðïñïýìå íá åêôõðþóïõìå ãñáöéêÜ óôïí åêôõðùôÞ, áîéïðïéþíôáò ôéò ìåèüäïõò ãñáöéêþí ðïõ õðïóôçñßæåé ôï åéäéêü áíôéêåßìåíï Printer.

Åñãáëåßá ãñáöéêþí

¼ðùò Ý÷ïõìå Þäç äåé óôï ìÜèçìá 4, ôá åñãáëåßá ãñáöéêþí ôïõ ðåñéâÜëëïíôïò åñãáóßáò ôçò VB åßíáé: ôï åñãáëåßï "ãñáììÞ" (line), ôï åñãáëåßï "ãåùìåôñéêü ó÷Þìá" (shape), ôï åñãáëåßï "åéêüíá" (image) êáé ôï åñãáëåßï "ðëáßóéï åéêüíáò" (picture box). Ìå ôï åñãáëåßï "ãñáììÞ" ó÷åäéÜæïõìå åõèýãñáììá x2, y2 ôìÞìáôá. ×áñáêôçñéóôéêÝò ïðôéêÝò éäéüôçôåò ôùí åõèýãñáììùí ôìçìÜôùí åßíáé ïé:

X1, Y1 êáé X2, Y2: Ïé óõíôåôáãìÝíåò ôïõ óçìåßïõ áñ÷Þò

x1, y1

(x1,y1) êáé ïé óõíôåôáãìÝíåò ôïõ óçìåßïõ ôåñìáôéóìïý Ó÷Þìá 15 -1. ÏéóõíôåôáãìÝíåò (x2,y2). áñ÷Þò êáé ôÝëïõò BorderWidth: Ôï ðÜ÷ïò ôçò ãñáììÞò. BorderStyle: Ôï åßäïò ôçò ãñáììÞò, üôáí ôï ðÜ÷ïò ôçò Ý÷åé ôéìÞ 1, ìå ôéìÝò: 0 - Transparent 1 - Solid 2 - Dash 3 - Dot 4 - Dash-Dot 186

ÄéáöáíÞò ÓõìðáãÞò ÄéáêåêïììÝíç Ìå êïõêêßäåò ÄéáêåêïììÝíç ìå êïõêêßäåò 187

Ó÷Þìá 15 - 2. Åßäç ãñáììÞò


BorderColor: Ôï ÷ñþìá ôçò ãñáììÞò. DrawMode: Ï ôñüðïò ó÷åäßáóçò. Ç éäéüôçôá áõôÞ äÝ÷åôáé 16 äéáöïñåôéêÝò ôéìÝò êáéêáèïñßæåé ôïí ôñüðï, ìå ôïí ïðïßï åìöáíßæïíôáé êáé áëëçëåðéäñïýí ïé ãñáììÝò, êáé ãåíéêÜüëá ôá ãñáöéêÜ, ðïõ äçìéïõñãïýíôáé ðÜíù óôçí ðåñéï÷Þ ó÷åäßáóçò, ìå áõôÜ ðïõ Ý÷ïõí ó÷åäéáóôåß Þäç. ¸ôóé, ç åîïñéóìïý ôéìÞ ôçò DrawMode (13-Copy Pen (Default)) ó÷åäéÜæåé ðÜíù áðü ôá ãñáöéêÜ ðïõ õðÜñ÷ïõí Þäç, ìå ôï ÷ñþìá ðïõ ïñßæåé ç ôéìÞ ôçò éäéüôçôáò ForeColor ôïõ áíôéêåéìÝíïõ ðïõ ðåñéãñÜöåé ôçí ðåñéï÷Þ ó÷åäßáóçò, ç ôéìÞ 6-Invert áíôéóôñÝöåé ôï ÷ñþìá, åíþ Üëëåò ôéìÝò ôçò DrawMode óõíäõÜæïõí ôá ÷ñþìáôá ìå äéÜöïñïõò ôñüðïõò êáé åðéôñÝðïõí ôç äçìéïõñãßá ïðôéêþí åöÝ. Ôï åñãáëåßï "ãåùìåôñéêü ó÷Þìá"

Ìå ôï åñãáëåßï "ãåùìåôñéêü ó÷Þìá", áíÜëïãá ìå ôçí ôéìÞ ôçò éäéüôçôáò Shape, ó÷åäéÜæïõìå ïñèïãþíéá, Þ ðáñÜãùãá ôùí ïñèïãùíßùí, êýêëïõò, åëëåßøåéò ê.Ü. ÓõãêåêñéìÝíá, ç éäéüôçôá Shape ìðïñåß íá ðÜñåé ôéò

Ìå ôï åñãáëåßï "åéêüíá" ó÷åäéÜæïõìå ïñèïãþíéåò ðåñéï÷Ýò, óôéò ïðïßåò åßíáé äõíáôüí íá Ôá åñãáëåßá "åéêüíá" êáé ôïðïèåôçèïýí åéêüíåò ðïõ ðåñéÝ÷ïíôáé ìÝóá óå áñ÷åßá. Ìå ôï åñãáëåßï "ðëáßóéï åéêüíáò" "ðëáßóéï åéêüíáò" ó÷åäéÜæïõìå ïñèïãþíéåò ðåñéï÷Ýò, óôéò ïðïßåò åßíáé äõíáôüí íá ôïðïèåôçèïýí åéêüíåò ðïõ ðåñéÝ÷ïíôáé ìÝóá óå áñ÷åßá, áëëÜ åðéðëÝïí ìðïñïýí íá ôïðïèåôçèïýí êáé Üëëá ãñáöéêÜ áíôéêåßìåíá. Ôï áíôéêåßìåíï ðëáßóéï åéêüíáò åßíáé ðïëý ðéï éó÷õñü áíôéêåßìåíï áðü üôé ôï áíôéêåßìåíï åéêüíáò. ¸÷åé ðïëëÝò êïéíÝò éäéüôçôåò ìå ôéò öüñìåò êáé åßíáé äõíáôÞ ç ôïðïèÝôçóç óôï åóùôåñéêü ôïõ ãñáììþí êáé ãåùìåôñéêþí ó÷çìÜôùí. Ôï ðëáßóéï åéêüíáò äñá óáí öïñÝáò (container) ôùí áíôéêåéìÝíùí ðïõ èá ôïðïèåôçèïýí óôï åóùôåñéêü ôïõ. Ôá óõìðáñáóÝñíåé êáôÜ ôç ìåôáêßíçóÞ ôïõ. Èá ìðïñïýóå íá ðåé êáíåßò üôé óõìðåñéöÝñåôáé óáí õðïðáñÜèõñï ìÝóá óôï ðáñÜèõñï ìéáò öüñìáò. ¢óêçóç 15-1. Óôï åóùôåñéêü åíüò ðëáéóßïõ åéêüíáò ôïðïèåôïýìå ôñßá ïñèïãþíéá. Áí ìåôáêéíÞóïõìå ôï ðëáßóéï åéêüíáò ìÝóá óôç öüñìá èá óõìðáñáóýñåé êáé ôá ôñßá ïñèïãþíéá.

ôéìÝò: 01234-

Rectangle Ïñèïãþíéï Square ÔåôñÜãùíï Oval ¸ëëåéøç Circle Êýêëï Rounded Rectangle Ïñèïãþíéï ìå óôñïããõëåìÝíåò ãùíßåò 5 - Rounded Square ÔåôñÜãùíï ìå óôñïããõëåìÝíåò ãùíßåò

Åéêüíá 15 - 1 . ÃåùìåôñéêÜ ó÷Þìáôá

Ôá ãåùìåôñéêÜ ó÷Þìáôá ÷áñáêôçñßæïíôáé áðü ôéò ïðôéêÝò éäéüôçôåò BorderWidth,

BorderStyle, BorderColor, DrawMode, ôéò ïðïßåò Þäç ìåëåôÞóáìå óôï åñãáëåßï "ãñáììÞ". EðéðëÝïí, ôá ãåùìåôñéêÜ ó÷Þìáôá Ý÷ïõí êáé ôéò éäéüôçôåò: BackStyle: Åßäïò öüíôïõ, ðïõ êáèïñßæåé áí ôï öüíôï ôïõ åóùôåñéêïý ôïõ ó÷Þìáôïò èá åßíáé ãåìéóìÝíï ìå ÷ñþìá Þ äéáöáíÝò. ÓõãêåêñéìÝíá, ç éäéüôçôá ìðïñåß íá ðÜñåé ôéò ôéìÝò: 0 - Transparent ÄéáöáíÝò 1 - Opaque ÃåìéóìÝíï ìå ÷ñþìá FillStyle: Åßäïò ãåìßóìáôïò. Êáèïñßæåé ôïí ôñüðï ìå ôïí ïðïßï èá ãñáììïóêéáóôåß ôï åóùôåñéêü ôïõ ó÷Þìáôïò. 0 - Solid ÓõìðáãÝò 1 - Transparent ÄéáöáíÝò 2 - Horizontal Line Ìå ïñéæüíôéåò ãñáììÝò 3 - Vertical Line Ìå êáôáêüñõöåò ãñáììÝò 4 - Upward Diagonal Ìå äéáãþíéåò ãñáììÝò ðñïò ôá ðÜíù 5 - Downward Diagonal Ìå äéáãþíéåò ãñáììÝò ðñïò ôá êÜôù 6 - Cross Ìå óôáõñùôÝò ãñáììÝò 7 - Diagonal Cross Ìå äéáãþíéåò óôáõñùôÝò ãñáììÝò BackColor, FillColor: ×ñþìá öüíôïõ êáé ÷ñþìá ãñáììïóêßáóçò, áíôßóôïé÷á. ÐáñÜäåéãìá 15-1. Óå Ýíá ãåùìåôñéêü ó÷Þìá ìðïñïýìå íá êáèïñßóïõìå äéáöïñåôéêü ÷ñþìá ãéá ôï ðåñßãñáììá, ôï ÷ñþìá ãñáììïóêßáóçò êáé ôï ÷ñþìá ôïõ åóùôåñéêïý öüíôïõ.

Åéêüíá 15-2. Ôï ðáñÜèõñï éäéïôÞôùí åíüò ïñèïãùíßïõ, óôï ïðïßï äéáêñßíïíôáé ïé ïðôéêÝò ôïõ éäéüôçôåò êáé ïé ôéìÝò ôïõò. 188

(á ) (â) Åéêüíá 15-3. (á) Áñ÷éêÞ èÝóç ðëáéóßïõ åéêüíáò (â) Ôï ðëáßóéï åéêüíáò óôç íÝá ôïõ èÝóç óõìðáñáóýñåé ôï ðåñéå÷üìåíü ôïõ Áíôßèåôá, Ýíá áíôéêåßìåíï åéêüíáò äåí ìðïñåß íá óõìðåñéöåñèåß óáí öïñÝáò Üëëùí áíôéêåéìÝíùí. Ôá áíôéêåßìåíá ðëáéóßïõ åéêüíáò äå äéáèÝôïõí ôçí éäéüôçôá Strech, ôçí ïðïßá äéáèÝôïõí ôá áíôéêåßìåíá åéêüíáò, ôçí ïðïßá ðåñéãñÜøáìå óôçí Üóêçóç 5-3. Áíôßèåôá, äéáèÝôïõí ôçí éäéüôçôá AutoSize. Ç éäéüôçôá áõôÞ ìðïñåß íá êáèïñßóåé ôï ìÝãåèïò ôïõ ðëáéóßïõ åéêüíáò áíÜëïãá ìå ôï ìÝãåèïò ôçò åéêüíáò ðïõ èá õðïäå÷èåß. Áí ç ôéìÞ ôçò éäéüôçôáò AutoSize åßíáé True ãßíåôáé ðñïóáñìïãÞ ôïõ ìåãÝèïõò ôïõ ðëáéóßïõ åéêüíáò óôéò äéáóôÜóåéò óôéò åéêüíáò ðïõ ôïðïèåôåßôáé óôï åóùôåñéêü ôïõ. Áíôßèåôá, áí ç ôéìÞ áõôÞò ôçò éäéüôçôáò åßíáé False, ôï ðëáßóéï åéêüíáò äéáôçñåß ôéò äéáóôÜóåéò ôïõ êáé ç åéêüíá, Þ öáßíåôáé áðïêïììÝíç óôï åóùôåñéêü ôïõ Þ êáôáëáìâÜíåé Ýíá ôìÞìá ôïõ áíÜëïãá ìå ôï áí Ý÷åé ìåãáëýôåñåò Þ ìéêñüôåñåò äéáóôÜóåéò, áíôßóôïé÷á. ¸íá áíôéêåßìåíï åéêüíáò Þ ðëáéóßïõ åéêüíáò åßíáé äõíáôüí íá õðïäå÷èåß åéêüíåò ðïõ ðåñéÝ÷ïíôáé óå áñ÷åßá ìïñöïðïßçóçò: .bmp Þ .dib Window bitmap. Ôá áñ÷åßá áõôÜ ðåñéÝ÷ïõí øçöéïãñáöéêÜ ãñáöéêÜ (bitmap graphics). Áõôüò ï ôñüðïò ìïñöïðïßçóçò äçìéïõñãÞèçêå ãéá íá áðïèçêåýåé áñ÷åßá ôïõ ðñïãñÜììáôïò Paint ôùí Windows. .gif Graphic Interchange Format. Ôá áñ÷åßá áõôÜ ðåñéÝ÷ïõí óõìðéåóìÝíá øçöéïãñáöéêÜ ãñáöéêÜ ìå âÜèïò ÷ñþìáôïò 8 bits. Ç ìïñöïðïßçóç áõôÞ áíáðôý÷èçêå áðü ôçí Compuserve ãéá ôç ìåôÜäïóç åéêüíùí óôï Internet. .jpg Joint Photographic expert Group. ÁõôÞò ôçò ìïñöïðïßçóçò ôá áñ÷åßá ðåñéÝ÷ïõí øçöéïãñáöéêÜ ãñáöéêÜ óå óõìðéåóìÝíç ìïñöÞ. .wmf Þ .emf Windows metafiles. Ðñüêåéôáé ãéá áñ÷åßá ðïõ ðåñéÝ÷ïõí äéáíõóìáôéêÜ ãñáöéêÜ (vector graphics). ÕðÜñ÷åé üìùò ç äõíáôüôçôá íá áðïèçêåýóïõí êáé øçöéïãñáöéêÜ ãñáöéêÜ. .ico Icons. Ôá áñ÷åßá áõô ðåñéÝ÷ïõí åéêïíßäéá äéáóôÜóåùí 32x32 åéêïíïóôïé÷åßùí (pixels). .cur Cursors. Ðñüêåéôáé ãéá áñ÷åßá ôá ïðïßá ðåñéÝ÷ïõí åéêïíßäéá ðïõ ìðïñåß íá ÷ñçóéìïðïéÞóåé ãéá ìïñöÞ ï äñïìÝáò ôïõ ðïíôéêéïý. 189

ØçöéïãñáöéêÜ åßíáé ôá ãñáöéêÜ ðïõ óõíôßèåíôáé êïõêêßäá êïõêêßäá üðùò áêñéâþò êáé ôá øçöéäùôÜ. ÄéáíõóìáôéêÜ åßíáé ôá ãñáöéêÜ ðïõ ðåñéãñÜöïíôáé áðü óõíôïìïãñáößåò ìáèçìáôéêþí ðñïôÜóåùí êáé ó÷Ýóåùí áðëþí ãñáììþí.

Åéêïíïóôïé÷åßá åßíáé ïé êïõêêßäåò áðü ôéò ïðïßåò áðïôåëåßôáé Ýíá øçöéïãñáöéêü ãñáöéêü Þ ôï ðëÝãìá áðåéêüíéóçò ôçò ïèüíçò.


Ç ó÷åäßáóç ìå ìåèüäïõò ãñáöéêþí Ç ó÷åäßáóç ìå ìåèüäïõò ãñáöéêþí ìðïñåß íá ãßíåé óôï åóùôåñéêü ìéáò öüñìáò, óôï åóùôåñéêü åíüò ðëáéóßïõ åéêüíáò, óôï ÷áñôß ôïõ åêôõðùôÞ. Ïé ðéï áðëÝò ìÝèïäïé ãñáöéêþí åßíáé ïé áêüëïõèåò: Pset: áðïäßæåé ôï ÷ñþìá ðïõ ïñßæïõìå óå óõãêåêñéìÝíï óçìåßï (point) ôïõ áíôéêåéìÝíïõ óôï ïðïßï áíáöÝñåôáé (öüñìá, ðëáßóéï åéêüíáò, åêôõðùôÞò). Ç óýíôáîÞ ôçò åßíáé: áíôéêåßìåíï.Pset Step (x, y), ÷ñþìá

Line: ó÷åäéÜæåé ãñáììÝò êáé ïñèïãþíéá ó÷Þìáôá óôï åóùôåñéêü ôïõ áíôéêåéìÝíïõ óôï ïðïßï áíáöÝñåôáé (öüñìá, ðëáßóéï åéêüíáò, åêôõðùôÞò). Ç óýíôáîÞ ôçò åßíáé: áíôéêåßìåíï.Line Step (x1, y1) - Step (x2, y2), ÷ñþìá, BF

Circle: ó÷åäéÜæåé êáìðõëüãñáììá ó÷Þìáôá (êýêëïõò, åëëåßøåéò, ôüîá) óôï åóùôåñéêü ôïõ áíôéêåéìÝíïõ óôï ïðïßï áíáöÝñåôáé (öüñìá, ðëáßóéï åéêüíáò, åêôõðùôÞò). Ç óýíôáîÞ ôçò áíôéêåßìåíï.Circle Step (x, y), áêôßíá, ÷ñþìá, áñ÷Þ, ôÝëïò, ëüãïò_ìïñöÞò

Cls: êáèáñßæåé üëá ôá ãñáöéêÜ êáé ôï êåßìåíï, ôá ïðïßá Ý÷ïõí äçìéïõñãçèåß ðÜíù óå ìéá öüñìá Þ Ýíá ðëáßóéï åéêüíáò ìå ìåèüäïõò ó÷åäßáóçò êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò. Ç óýíôáîÞ ôçò åßíáé: áíôéêåßìåíï.Cls Óå üëåò ôéò ìåèüäïõò, ç áíáöïñÜ ôïõ ïíüìáôïò ôïõ áíôéêåéìÝíïõ ó÷åäßáóçò åßíáé ðñïáéñåôéêÞ. Áí áðïõóéÜæåé ôï áíôéêåßìåíï, ç ìÝèïäïò áíáöÝñåôáé óôç öüñìá, óôçí ïðïßá õðÜñ÷åé ï áíôßóôïé÷ïò êþäéêáò. Åðßóçò, ðñïáéñåôéêÝò åßíáé êáé ïé áíáöïñÝò êÜðïéùí áðü ôéò ðáñáìÝôñïõò, ãéá ðáñÜäåéãìá ôçò ðáñáìÝôñïõ ÷ñþìá, ëüãïò_ìïñöÞò ê.Ü. ¼ôáí Ý÷åé ðáñáëåéöèåß ìéá ðáñÜìåôñïò, åíþ äåí ðáñáëåßðïíôáé ïé ðáñÜìåôñïé ðïõ ôçí áêïëïõèïýí, ðñÝðåé íá ãßíåôáé äÝóìåõóç ôçò èÝóçò ôçò ìå Ýíá êüììá. ÔÝëïò, ðñïáéñåôéêÞ åßíáé êáé ç ÷ñÞóç ôçò êùäéêÞò ëÝîçò Step (âÞìá). Áí õðÜñ÷åé ç êùäéêÞ ëÝîç Step ç ó÷åäßáóç áñ÷ßæåé ìå óõíôåôáãìÝíåò ó÷åôéêÝò ùò ðñïò ôï óçìåßï ðïõ Ý÷åé ãßíåé ç ôåëåõôáßá ó÷åäßáóç.

Ï êþäéêáò ãéá ôï ðëÞêôñï PaintLine ìðïñåß íá ãñáöåß ùò:

Private Sub PaintLine_Click() Dim i As Long For i = 0 To 5000 Canvas.PSet (i, i), vbBlack Next End Sub

Ïé ãñáììÝò äå ãßíïíôáé ìå ôçí ðáñÜèåóç ìåñþí áëëÜ ìå ôç óõíå÷Þ êßíçóç ôùí óçìåßùí. Íåýôùí

Þ ìå ôç ÷ñÞóç ôçò êùäéêÞò ëÝîçò Step óôç ìÝèïäï Pset ùò: Private Sub PaintLine_Click() Dim i As Long Canvas.PSet (0, 0) 'Áñ÷éêÞ èÝóç For i = 1 To 5000 Canvas.PSet Step (1, 1), vbBlack Next End Sub Êáé ìüíï ìå ôç ìÝèïäï Pset ìðïñïýìå íá äçìéïõñãÞóïõìå üëåò ôéò õðïñïõôßíåò ó÷åäßáóçò ãñáììþí êáé ó÷çìÜôùí êáé íá ó÷åäéÜóïõìå ïðïéáäÞðïôå åéêüíá óå Ýíá áíôéêåßìåíï ó÷åäßáóçò. ¢óêçóç 15-2. ¼ëïé Ý÷ïõí ÷ñçóéìïðïéÞóåé ôï ðñüãñáììá ôçò ÆùãñáöéêÞò (Paint Þ Paintbrush) ôùí Windows, ëßãïé üìùò ãíùñßæïõí ðüóï åýêïëá ìðïñåß íá äïìçèåß áðü áðëÝò õðïñïõôßíåò ðïõ ðåñéÝ÷ïõí ìåèüäïõò ãñáöéêþí. Óå áõôÞí ôçí Üóêçóç èá äçìéïõñãÞóïõìå ôï ôìÞìá ôïõ ðñïãñÜììáôïò ÆùãñáöéêÞ, ôï ïðïßï ó÷åäéÜæåé åëåýèåñï ó÷Ýäéï ìå ôç âïÞèåéá ôïõ ðïíôéêéïý. 1. Óå ìéá öüñìá äçìéïõñãïýìå ��éá ðåñéï÷Þ ó÷åäßáóçò ìå ôï åñãáëåßï "ðëáßóéï åéêüíáò" êáé ôçò äßíïõìå ôï üíïìá Canvas. Åðßóçò, äçìéïõñãïýìå êáé Ýíá ðëÞêôñï ìå ôï üíïìá

ClearCanvas ãéá íá êáèáñßæïõìå ôçí ðåñéï÷Þ ó÷åäßáóçò.

Ó÷åäßáóç óçìåßùí Ãéá íá ó÷åäéÜóïõìå Ýíá óçìåßï óå Ýíá áíôéêåßìåíï ðñÝðåé íá áíáöÝñïõìå õðï÷ñåùôéêÜ ôéò óõíôåôáãìÝíåò ôïõ (x, y). Ç äÞëùóç ôïõ ÷ñþìáôïò, üðùò Ý÷åé áíáöåñèåß, åßíáé ðñïáéñåôéêÞ. Áí ç ðáñÜìåôñïò ÷ñþìá äåí åßíáé óõìðëçñùìÝíç, ÷ñçóéìïðïéåßôáé ùò ÷ñþìá áõôü ðïõ Ý÷åé äçëùèåß óôçí éäéüôçôá ForeColor ôïõ áíôéêåéìÝíïõ (öüñìáò, ðëáéóßïõ åéêüíáò, åêôõðùôÞ) óôï åóùôåñéêü ôïõ ïðïßïõ ãßíåôáé ç ó÷åäßáóç. ÐáñÜäåéãìá 15-2. Óå ìéá öüñìá ôïðïèåôïýìå Ýíá ðëáßóéï åéêüíáò ìå ôï üíïìá Canvas êáé äýï ðëÞêôñá. Ôï Ýíá ðëÞêôñï, ìå ôï üíïìá PaintLine, ó÷åäéÜæåé ìéá ãñáììÞ. Ôï Üëëï ðëÞêôñï, ìå ôï üíïìá ClearCanva, äéáãñÜöåé ôï ðåñéå÷üìåíï ôïõ ðëáéóßïõ åéêüíáò. PaintLine ClearCanvas Canvas

Åéêüíá 15 - 4.Ó÷åäßáóç ðëÜãéáò ãñáììÞò áðü óõóôïé÷ßá Ï êþäéêáò ãéá ôï ðëÞêôñï ClearCanva åßíáé:

Private Sub ClearCanvas_Click() Canvas.Cls End Sub 190

Åéêüíá 15 - 5. Ôï ðñüãñáììá æùãñáöéêÞ. Ç æùãñáöéêÞ ìå ôï ðïíôßêé äåí åßíáé êáé ôüóï åýêïëç. 2. Êáèïñßæïõìå ôç ìïñöÞ ôïõ äñïìÝá ôïõ ðïíôéêéïý óôï ðëáßóéï åéêüíáò, áðü ôéò éäéüôçôåò MousePointer êáé MouseIcon. Äßíïõìå ôçí ôéìÞ 99 - Custom óôçí éäéüôçôá

MousePointer êáé åðéëÝãïõìå ìéá ìïñöÞ ðïíôéêéïý óå ó÷Þìá ìïëõâéïý áðü ôïí öÜêåëï C:\….\Graphics\Icons\Writing. 3. ÃñÜöïõìå ôïí êþäéêá:

Option Explicit Dim PenDown As Boolean Private Sub Form_Load() PenDown = False End Sub Private Sub Canvas_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) PenDown = True End Sub 191


Private Sub Canvas_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) PenDown = False End Sub

Ãéá íá ó÷åäéÜóïõìå Ýíá ïñèïãþíéï ó÷Þìá óå Ýíá áíôéêåßìåíï áêïëïõèïýìå ôá âÞìáôá ðïõ áöïñïýí ôï ó÷åäéáóìü ãñáììÞò êáé óõìðëçñþíïõìå ôç óýíôáîç ìå ôçí ðáñÜìåôñï B (Box). ÐáñÜäåéãìá 15-4.

Private Sub Canvas_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If PenDown Then Canvas.PSet (X, Y) End Sub Ç ìåôáâëçôÞ PenDown ÷ñçóéìïðïéåßôáé ùò óçìáöüñïò (semaphor) ìåôáîý ôùí õðïñïõôéíþí. Ìå ôç öüñôùóç ôçò öüñìáò, óôçí PenDown äßíåôáé ç ôéìÞ Þ False, áðü ôçí õðïñïõôßíá Form_Load. ¸ôóé, üôáí ôï ðïíôßêé åéóÝëèåé óôçí ðåñéï÷Þ Canvas äåí áöÞíåé

Ç åíôïëÞ: áíôéêåßìåíï.Line (x1, y1) - (x2, y2), , B åßíáé éóïäýíáìç ìå ôï óýíïëï ôùí åíôïëþí: áíôéêåßìåíï.Line áíôéêåßìåíï.Line áíôéêåßìåíï.Line áíôéêåßìåíï.Line

(x1, (x2, (x2, (x1,

y1) y1) y2) y2)

-

(x2, (x2, (x1, (x1,

y1) y2) y2) y1)

ß÷íïò, åðåéäÞ ç õðïñïõôßíá Canvas_MouseMove äåí åêôåëåß ôç ìÝèïäï Pset ðïõ

Ìáæß ìå ôçí ðáñÜìåôñï B ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå, ðñïáéñåôéêÜ, êáé ôçí ðáñÜìåôñï F

âñßóêåôáé óôï åóùôåñéêü ôçò äïìÞò åðéëïãÞò. ¼ìùò, üôáí ðáôçèåß ôï ðëÞêôñï ôïõ ðïíôéêéïý ìÝóá óôçí ðåñéï÷Þ Canvas, ç õðïñïõôßíá Canvas_MouseDown äßíåé óôçí

(Fill). Óå áõôÞí ôçí ðåñßðôùóç ôï åóùôåñéêü ôïõ ïñèïãþíéïõ ÷ñùìáôßæåôáé ìå ôï ßäéï ÷ñþìá ðïõ ÷ñçóéìïðïéåßôáé ãéá ôéò ðëåõñÝò.

PenDown ôçí ôéìÞ True. Ôüôå, êáé ãéá üóï äéÜóôçìá ôï ðëÞêôñï ôïõ ðïíôéêéïý åßíáé ðáôçìÝíï, ìå ôçí êßíçóç ôïõ ðïíôéêéïý ç Canvas_MouseMove ó÷åäéÜæåé óçìåßá óôçí

ÐáñÜäåéãìá 15-5. Ç åíôïëÞ:

ôñÝ÷ïõóá èÝóç ôïõ äñïìÝá ôïõ ðïíôéêéïý. ¼ôáí áðåëåõèåñùèåß ôï ðëÞêôñï ôïõ ðïíôéêéïý, ç Canvas_MouseUp äßíåé óôçí PenDown åêíÝïõ ôçí ôéìÞ False, ïðüôå ðÜëé ôï ðïíôßêé

Line (2000, 500)-Step(500, 500), , B

ó÷åäéÜæåé ÷ñçóéìïðïéþíôáò ôï ÷ñþìá, ðïõ êáèïñßæåé ç éäéüôçôá ForeColor ôçò öüñìáò,

äåí èá áöÞíåé ß÷íïò.

Ýíá ôåôñÜãùíï ôïõ ïðïßïõ ç ìéá êïñõöÞ âñßóêåôáé óôï óçìåßï (2000, 500) êáé ôï ïðïßï Ý÷åé ìÞêïò ðëåõñÜò 500. Ãéá íá ó÷åäéáóôåß ôï ßäéï ôåôñÜãùíï ìå ÷ñùìáôéóìÝíï ôï åóùôåñéêü ôïõ, ç åíôïëÞ ðñÝðåé íá ãñáöôåß ùò åîÞò:

Ó÷åäßáóç åõèýãñáììùí ôìçìÜôùí, ôåôñáãþíùí êáé ïñèïãþíéùí Ãéá íá ó÷åäéÜóïõìå Ýíá åõèýãñáììï ôìÞìá óå Ýíá áíôéêåßìåíï ó÷åäßáóçò êáèïñßæïõìå, ðñïáéñåôéêÜ ôéò óõíôåôáãìÝíåò (x1,y1) ôïõ óçìåßïõ áñ÷Þò êáé õðï÷ñåùôéêÜ ôéò óõíôåôáãìÝíåò (x2,y2) ôïõ óçìåßïõ ôåñìáôéóìïý. Áí ðáñáëåßøïõìå ôï óçìåßï áñ÷Þò, ç VB èåùñåß üôé áõôü åßíáé ôï ôñÝ÷ïí óçìåßï ãñáöÞò åðß ôïõ áíôéêåéìÝíïõ ó÷åäßáóçò, ðïõ ðñïóäéïñßæåôáé ìÝóù ôùí éäéïôÞôùí ôïõ CurrentX êáé CurrentY (ôñÝ÷ïõóá óõíôåôáãìÝíç x êáé ôñÝ÷ïõóá

Line (2000, 500)-Step(500, 500), , BF ¢óêçóç 15-3.

óõíôåôáãìÝíç y) Þ áðü ôçí ôåëåõôáßá ìÝèïäï ãñáöéêþí, ðïõ Ý÷ïõìå ÷ñçóéìïðïéÞóåé. ÄéáöïñåôéêÜ, ç ó÷åäßáóç ôçò ãñáììÞò îåêéíÜåé áðü ôçí ðÜíù áñéóôåñÞ ãùíßá ôïõ áíôéêåéìÝíïõ. ¼ðùò êáé ìå ôç ó÷åäßáóç óçìåßùí, Ýôóé êáé ìå ôç ó÷åäßáóç ãñáììþí, áí ç ðáñÜìåôñïò Áðü ôï ðáñÜèõñï ÷ñþìá äåí åßíáé óõìðëçñùìÝíç, ÷ñçóéìïðïéåßôáé ùò ÷ñþìá áõôü ðïõ Ý÷åé äçëùèåß óôçí åðéóêüðéóçò áíôéêåéìÝíùí éäéüôçôá ForeColor ôïõ áíôéêåéìÝíïõ (öüñìáò, ðëáéóßïõ åéêüíáò, åêôõðùôÞ) óôï åóùôåñéêü (Object Browser) ìðïñïýìå íá äïýìå ôéò

ôïõ ïðïßïõ ãßíåôáé ç ó÷åäßáóç. Åðßóçò, ôï ðÜ÷ïò ôçò ãñáììÞò êáèïñßæåôáé áðü ôçí éäéüôçôá åóùôåñéêÝò óôáèåñÝò ðïõ DrawWidth ôïõ áíôéêåéìÝíïõ ó÷åäßáóçò, ôï åßäïò ôçò ãñáììÞò áðü ôçí éäéüôçôá ôïõ

Ý÷ïõí ïñéóôåß ãéá ôéò ôéìÝò

DrawStyle êáé ï ôñüðïò ó÷åäßáóçò áðü ôçí éäéüôçôá DrawMode. ôùí éäéïôÞôùí DrawWidth, Áí ÷ñçóéìïðïéÞóïõìå ôçí êùäéêÞ ëÝîç Step ôïõ óçìåßïõ áñ÷Þò, äçëþíïõìå üôé ïé DrawStyle, DrawMode. óõíôåôáãìÝíåò ôïõ ïñßæïíôáé óå ó÷Ýóç ìå ôçí ôñÝ÷ïõóá èÝóç (CurrentX, CurrentY). Áí ÷ñçóéìïðïéÞóïõìå ôçí êùäéêÞ ëÝîç Step ôïõ óçìåßïõ ôåñìáôéóìïý, äçëþíïõìå üôé ïé óõíôåôáãìÝíåò ôïõ ïñßæïíôáé óå ó÷Ýóç ìå ôï óçìåßï áñ÷Þò. ÐáñÜäåéãìá 15-3. Ïé åíôïëÝò:

Line (500, 0)-(500, 500), vbBlue Line (0, 500)-(500, 500), vbRed ó÷åäéÜæoõí óôç öüñìá (áöïý äåí áíáöÝñåôáé üíïìá áíôéêåéìÝíïõ) ìéá ïñéæüíôéá ìðëå ãñáììÞ êáé ìéá êáôáêüñõöç êüêêéíç ãñáììÞ áíôßóôïé÷á. Áí ç åíôïëÞ:

Line -Step(500, 500), vbGreen åßíáé ç ðñþôç åíôïëÞ ó÷åäßáóçò, ó÷åäéÜæåé ìéá ðëÜãéá ðñÜóéíç ãñáììÞ óôç öüñìá, áñ÷ßæïíôáò áðü ôï ðÜíù áñéóôåñü óçìåßï ôçò. Ôçí ßäéá ëåéôïõñãßá ðñáãìáôïðïéïýí êáé ïé åíôïëÝò:

Me.ForeColor=vbGreen PSet (0, 0) Line -Step(500, 500)

'Êáèüñéóå ÷ñþìá 'Óçìåßï áñ÷Þò 'ÃñáììÞ ìÝ÷ñé ôï óçìåßï (500,500) 192

Óôá ðáêÝôá ëïãéóìéêïý äçìéïõñãßáò ãñáöéêþí õðÜñ÷åé ìéá ëåéôïõñãßá ãéá ôç ó÷åäßáóç åõèýãñáììùí ôìçìÜôùí. ×ñçóéìïðïéþíôáò áõôÞí ôç ëåéôïõñãßá ï ÷ñÞóôçò, êÜíåé êëéê óôï óçìåßï ôçò áñ÷Þò ìÝóá óôçí ðåñéï÷Þ ó÷åäßáóçò, óýñåé ôï ðïíôßêé ðñïò ôï óçìåßï ôåñìáôéóìïý êáé åêåß ôï áöÞíåé. ¼óï äéÜóôçìá ï ÷ñÞóôçò êñáôÜ ðáôçìÝíï ôï ðëÞêôñï ôïõ ðïíôéêéïý óôçí ðåñéï÷Þ ó÷åäßáóçò åðáíáó÷åäéÜæåôáé ôï åõèýãñáììï ôìÞìá ìå êÜèå áëëáãÞ ôçò èÝóçò ôïõ ðïíôéêéïý. Óôçí ðñáãìáôéêüôçôá äå ó÷åäéÜæåôáé Ýíá ìüíï åõèýãñáììï ôìÞìá áëëÜ äýï. Óå êÜèå êßíçóç ôïõ ðïíôéêéïý óâÞíåôáé ôï ß÷íïò ôïõ åõèýãñáììïõ ôìÞìáôïò êáé ó÷åäéÜæåôáé íÝï åõèýãñáììï ôìÞìá. Ç äéáãñáöÞ ôïõ ðáëáéïý åõèýãñáììïõ ôìÞìáôïò ãßíåôáé ìå åðáíáó÷åäéáóìü ôïõ. Ãéá íá ëåéôïõñãÞóåé óùóôÜ ç äéáãñáöÞ ôïõ åõèýãñáììïõ ôìÞìáôïò êáé ï åðáíáó÷åäéáóìüò ðñÝðåé ç ó÷åäéÜóç íá ãßíåé ìå ôïí åéäéêü ôñüðï DrawMode 10 - Not Xor Pen. Ðñüêåéôáé ãéá Ýíáí ôñüðï ó÷åäßáóçò, Åéêüíá 15-6. óôïí ïðïßï üôáí óå Ýíá åéêïíïóôïé÷åßï æçôåßôáé íá áðïêôÞóåé ôï ÷ñþìá, ôï ïðïßï Þäç Ý÷åé, ôï åéêïíïóôïé÷åßï åðáíáêôÜ ôï ÷ñþìá ôïõ öüíôïõ. Ãéá ðáñÜäåéãìá, áí ôï åéêïíïóôïé÷åßï åßíáé ìáýñï óå ãêñé öüíôï êáé æçôçèåß íá åðáíáó÷åäéáóôåß ìå ìáýñï ÷ñþìá, áíôß íá äéáôçñÞóåé ôï ÷ñþìá ôïõ ãßíåôáé ãêñé. Ïé õðïñïõôßíåò ðïõ ðñáãìáôïðïéïýí ôç äõíáìéêÞ ó÷åäßáóç ôïõ åõèýãñáììïõ ôìÞìáôïò åßíáé:

Option Explicit Dim PenDown As Boolean Dim x1, y1 As Single Dim x2, y2 As Single Private Sub Form_Load() DrawMode = vbNotXorPen 'Åéäéêüò ôñüðïò ó÷åäßáóçò ãñáììþí End Sub 193


Private Sub Form_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) 'Ôï ðïíôßêé åßíáé ðáôçìÝíï PenDown = True 'ÓõíôåôáãìÝíåò áñ÷Þò x1 = X: y1 = Y 'ÓõíôåôáãìÝíåò ôÝëïõò x2 = X: y2 = Y End Sub Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If PenDown Then Line (x1, y1)-(x2, y2) 'ÄéáãñáöÞ ðñïçãïýìåíïõ ß÷íïõò 'Äçìéïõñãßá íÝïõ ß÷íïõò Line (x1, y1)-(X, Y) End If 'ÍÝåò óõíôåôáãìÝíåò ôÝëïõò x2 = X: y2 = Y End Sub Private Sub Form_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) PenDown = False End Sub

Ó÷åäßáóç êýêëùí, åëëåßøåùí, ôüîùí êáé ôïìÝùí Ãéá ôç ó÷åäßáóç åíüò êýêëïõ ðñÝðåé íá êáèïñßóïõìå, õðï÷ñåùôéêÜ, ôéò óõíôåôáãìÝíåò (x,y) ôïõ êÝíôñïõ ôïõ êáé ôï ìÞêïò ôçò áêôßíáò ôïõ. Áí ÷ñçóéìïðïéÞóïõìå ôçí êùäéêÞ ëÝîç Step ôïõ óçìåßïõ áñ÷Þò, äçëþíïõìå üôé ïé óõíôåôáãìÝíåò ôïõ ïñßæïíôáé óå ó÷Ýóç ìå ôçí ôñÝ÷ïõóá èÝóç (CurrentX, CurrentY). Óôç ãåùìåôñßá ãéá ôç ó÷åäßáóç ìéáò Ýëëåéøçò ÷ñåéÜæåôáé ç áíáöïñÜ ôïõ êÝíôñïõ óõììåôñßáò ôçò êáé ôá ìÞêç ôïõ ìåãÜëïõ êáé ôïõ ìéêñïý ÜîïíÜ ôçò. Óôç ìÝèïäï Circle ç ðáñÜìåôñïò áêôßíá áíôéóôïé÷åß óôï ìåãÜëï Üîïíá. Ôï ìÞêïò ôçò áêôßíáò ôïõ ìéêñïý Üîïíá õðïëïãßæåôáé äéáéñþíôáò ôçí áêôßíá ìå ôï ëüãï_ìïñöÞò (aspect ratio). Áí ï ëüãïò_ìïñöÞò Ý÷åé ôéìÞ ìéêñüôåñç ôïõ 1, ç áêôßíá åßíáé ç áêôßíá ôïõ x-Üîïíá êáé ç Ýëëåéøç åêôåßíåôáé êáôÜ ìÞêïò ôïõ ïñéæüíôéïõ Üîïíá, åíþ áí ï ëüãïò Ý÷åé ôéìÞ ìåãáëýôåñç Þ ßóç ìå 1 ç áêôßíá åßíáé ç áêôßíá ôïõ y-Üîïíá êáé ç Ýëëåéøç åêôåßíåôáé êáôÜ ìÞêïò ôïõ êáôáêüñõöïõ Üîïíá. Áí äåí õðÜñ÷åé ç êùäéêÞ ëÝîç Step, ôï æåõãÜñé (x, y) åßíáé ïé áðüëõôåò óõíôåôáãìÝíåò ôïõ Üîïíá óõììåôñßáò, åíþ áí õðÜñ÷åé åßíáé ïé ó÷åôéêÝò ôïõ óõíôåôáãìÝíåò. ÐáñÜäåéãìá 15-6. Ç åíôïëÞ:

Circle (3000, 1000), 750 ó÷åäéÜæåé Ýíáí êýêëï ìå êÝíôñï ôï óçìåßï (3000, 1000) êáé áêôßíá 750. Åðßóçò, ïé åíôïëÝò:

'Ëüãïò < 1 Circle (1000, 1000), 750, , , , 1/2 'Ëüãïò > 1 Circle (2500, 1000), 750, , , , 2 Åéêüíá 15-7. Äåßãìáôá ëüãïõ ìïñöÞò

ó÷åäßáæïõí ôçí áñéóôåñÞ êáé ôç äåîéÜ Ýëëåéøç, áíôßóôïé÷á, ôçò åéêüíáò 15-7.

Ìå ôç ìÝèïäï Circle ìðïñïýìå íá ó÷åäéÜóïõìå ôüîá êáé ôïìåßò êýêëùí Þ åëëåßøåùí. Óå áõôÞí ôçí ðåñßðôùóç ðñÝðåé íá óõìðëçñþóïõìå ôéò ðáñáìÝôñïõò áñ÷Þ êáé ôÝëïò ðïõ êáèïñßæïõí ôç ãùíßá áðü ôçí ïðïßá èá áñ÷ßóåé êáé ôç ãùíßá óôçí ïðïßá èá ôåëåéþóåé, áíôßóôïé÷á, ç ó÷åäßáóç ôçò Ýëëåéøçò Þ ôïõ êýêëïõ. Ïé ãùíßåò ðñÝðåé íá åßíáé åêöñáóìÝíåò óå áêôßíéá êáé ïé ôéìÝò ôïõò ðñÝðåé íá åßíáé ìåôáîý -2ð êáé 2ð. Ç ìÝôñçóç ôùí ãùíéþí áñ÷ßæåé áðü ôï äåîéüôåñï óçìåßï ôïõ êýêëïõ êáé ç öïñÜ äéáãñáöÞò ôïõò åßíáé áíôßèåôç ôçò öïñÜò êßíçóçò ôùí äåéêôþí ôïõ ñïëïãéïý. Áõôü Ý÷åé êÜðïéá äüóç áóõìöùíßáò ìå ôá ��áèçìáôéêÜ, ìéá êáé ôï óçìåßï (0,0) âñßóêåôáé óôçí ðÜíù áñéóôåñç ãùíßá, áëëÜ âïëåýåé ãéáôß ìå áõôÞ ôç öïñÜ Ý÷ïõìå óõíçèßóåé íá ðñïóáíáôïëéæüìáóôå óôïí ôñéãùíïìåôñéêü êýêëï. 194

ÐáñÜäåéãìá 15-7. Ôï ôüîï ðïõ ó÷åäéÜæåôáé ìå ôçí åíôïëÞ:

Circle (3500, 2500), 1200, , 3.141593, 0 åßíáé ôï êÜôù çìéêýêëéï, åíþ ôï ôüîï ðïõ ó÷åäéÜæåôáé ìå ôçí åíôïëÞ:

Circle (3500, 2500), 1200, , 0, 3.141593 åßíáé ôï ðÜíù çìéêýêëéï. Áí ç ôéìÞ åíüò Üêñïõ ôïõ ôüîïõ åßíáé áñíçôéêÞ, ó÷åäéÜæåôáé êáé ç áêôßíá ðïõ óõíäÝåé ôï Üêñï ìå ôï êÝíôñï. Áí êáé ôá äõï Üêñá Ý÷ïõí áñíçôéêÝò ôéìÝò, ó÷åäéÜæïíôáé êáé ïé äõï áêôßíåò êáé ôï ó÷Þìá ðïõ ðñïêýðôåé åßíáé Ýíáò êõêëéêüò Þ Ýíáò åëëåéðôéêüò ôïìÝáò. ÐáñÜäåéãìá 15-8. Ôï ôìÞìá ðñïãñÜììáôïò:

Dim ð, r As Single ð = 4 * Atn(1) r = 600 FillColor = vbYellow FillStyle = vbSolid Circle (1250,1300), r Circle (1000,1000), r/4, , ð, 0 Circle (1500,1000), r/4, , ð, 0 Circle (1250,1300), r/2, , 5/4*ð, 7/4*ð

Åéêüíá 15- 8.

ó÷åäéÜæåé Ýíá óõíåóôáëìÝíï ÷áñïýìåíï ðñïóùðÜêé. Åðßóçò, ôï ôìÞìá ðñïãñÜììáôïò:

Dim ð, r As Single ð = 4 * Atn(1) r = 600 FillStyle = vbSolid FillColor = vbYellow Circle (1500, 1000), r, , -ð/8, -15*ð/8 FillColor = vbWhite Circle (1500, 1000 - r/3), r/10

Åéêüíá 15 - 9.

ó÷åäéÜæåé ôï ãíùóôü "ðñáãìáôåõôÞ", ôïí packman. ÔÝëïò, ôï ôìÞìá ðñïãñÜììáôïò:

Dim ð, r As Single Line (1000, 600)-(1500, 600) Circle (1500, 1000), r, , -3*ð/2, -ð/2 Circle (2190, 1200 - r/3), r/10 Line (1000, 1400)-(1500, 1400) Line (2250, 1000)-(2500, 1000) ó÷åäéÜæåé ìéá ðýëç NAND.

Åéêüíá 15- 10.

Äéá÷åßñéóç ÷ñþìáôïò Óôï ìÜèçìá 4 åßäáìå üôé ôá ÷ñþìáôá ìðïñïýìå íá ôá áíáðáñáóôÞóïõìå ùò äåêáåîáäéêïýò áñéèìïýò. Åðßóçò, óôï ìÜèçìá 6 åßäáìå üôé õðÜñ÷ïõí êÜðïéåò åóùôåñéêÝò óôáèåñÝò ðïõ áíôéóôïé÷ïýí óôá ÷ñþìáôá. Ãéá ôïí áêñéâÞ êáèïñéóìü ôïõ ÷ñþìáôïò ç VB äéáèÝôåé äýï óõíáñôÞóåéò, ôçí RGB êáé ôçí QBColor.

Ç óõíÜñôçóç RGB (red, green, blue) Ôï üíïìá ôçò óõíÜñôçóçò ðáñÜãåôáé áðü ôá áñ÷éêÜ ôùí ëÝîåùí Red (êüêêéíï), Green (ðñÜóéíï) êáé Blue (ìðëå). Áðáéôåß ôñßá ïñßóìáôá ìå ôéìÝò áðü 0-255, ðïõ êáèïñßæïõí ôç óõììåôï÷Þ ôùí ÷ñùìÜôùí êüêêéíïõ, ðñÜóéíïõ êáé ìðëå óôç äçìéïõñãßá ôïõ åðéèõìçôïý 195


÷ñþìáôïò. Ôï êÜôù üñéï 0 õðïäçëþíåé ôçí Ýëëåéøç ôïõ áíôßóôïé÷ïõ ÷ñþìáôïò, åíþ ôï ðÜíù üñéï 255 õðïäçëþíåé ôç ìÝãéóôç äõíáôÞ óõììåôï÷Þ ôïõ. Ç óõíÜñôçóç åðéóôñÝöåé Ýíá ìåãÜëï áêÝñáéï ï ïðïßïò áíôéðñïóùðåýåé ôçí ôéìÞ ôïõ ÷ñþìáôïò. ¢óêçóç 15-4. Óå ðïëëÜ ðñïãñÜììáôá ãñáöéêþí êáé åðåîåñãáóßáò åéêüíáò (ð.÷. CorelDraw, PhotoShop), ï ÷ñÞóôçò ìðïñåß íá êáèïñßóåé áðü Ýíá ðáñÜèõñï êáé ìå ôç âïÞèåéá ñÜâäùí êýëéóçò ôïõò ÷ñùìáôéêïýò ôüíïõò. Èá äçìéïõñãÞóïõìå ìéá ðáñüìïéá öüñìá êáèïñéóìïý ôïõ ÷ñþìáôïò ãéá ìéá åöáñìïãÞ. 1. Óå ìéá öüñìá ôïðïèåôïýìå ôñåéò ñÜâäïõò êýëéóçò ìå ïíüìáôá Red, Green êáé Blue êáé äßíïõìå óôçí éäéüôçôá Max ôçí ôéìÞ 255.

ÐáñÜäåéãìá 15-9. Ç õðïñïõôßíá:

Private Sub Canvas_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Sample.BackColor = Canvas.Point(X, Y) End Sub ìå êÜèå êëéê ôïõ ðïíôéêéïý ðÜíù óôï ðëáßóéï åéêüíáò Canvas, ëáìâÜíåé äåßãìá ÷ñþìáôïò êáé ôï ðáñïõóéÜæåé ùò ÷ñþìá õðïâÜèñïõ óôï ðëáßóéï åéêüíáò Sample.

2. Ôïðïèåôïýìå Ýíá ðëáßóéï åéêüíáò ìå üíïìá Sample ôïõ ïðïßïõ ôï ÷ñþìá õðïâÜèñïõ èá áëëÜæåé óå êÜèå áëëáãÞ ôçò ôéìÞò ôùí ñÜâäùí êýëéóçò.

Canvas Sample

3. Ôïðïèåôïýìå êáé ôñßá ðëáßóéá êåéìÝíïõ ìå ïíüìáôá RedIndi, GreenIndi êáé BlueIndi

Åéêüíá 15-11. Öüñìá åðéëïãÞò ÷ñþìáôïò Óôï ðáñÜèõñï êþäéêá ãñÜöïõìå ôéò õðïñïõôßíåò:

Private Sub Blue_Change() Sample.BackColor = RGB(Red, Green, Blue) BlueIndi = Blue End Sub Private Sub Green_Change() Sample.BackColor = RGB(Red, Green, Blue) GreenIndi = Green End Sub Private Sub Red_Change() Sample.BackColor = RGB(Red, Green, Blue) RedIndi = Red End Sub

Ç óõíÜñôçóç QBColor(÷ñþìá) Ç óõíÜñôçóç áõôÞ äÝ÷åôáé ùò ðáñÜìåôñï Ýíáí áêÝñáéï áðü 0 Ýùò 15, ï ïðïßïò áíôéóôïé÷åß óå Ýíá áðü ôá 16 ÷ñþìáôá ðïõ ÷ñçóéìïðïéoýóå ç QuickBasic (ðñüãïíïò ôçò VB) êáé åðéóôñÝöåé ôïí áíôßóôïé÷ï êùäéêü ôïõ RGB ÷ñþìáôïò. ÓõãêåêñéìÝíá, ïé ôéìÝò ðïõ äÝ÷åôáé óôçí ðáñÜìåôñï ÷ñþìá ç QBColor êáé ôá áíôßóôïé÷á ÷ñþìáôá åßíáé: 0 - Ìáýñï 1 - Ìðëå 2 - ÐñÜóéíï 3 - Êõáíü 4 - Êüêêéíï 5 - Ìùâ 6 - Êßôñéíï 7 - ¢óðñï

8 - Ãêñé 9 - Áíïé÷ôü ìðëå 10 - Áíïé÷ôü ðñÜóéíï 11 - Áíïé÷ôü êõáíü 12 - Áíïé÷ôü êüêêéíï 13 - Áíïé÷ôü ìùâ 14 - Áíïé÷ôü êßôñéíï 15 - ¸íôïíï Üóðñï

Åéêüíá 15- 12.

Ïé éäéüôçôåò AutoRedraw êáé ClipControls ÊÜèå ãñáöéêü ðïõ äçìéïõñãåßôáé ìå ÷ñÞóç ìåèüäùí ãñáöéêþí óôç öüñìá Þ óôï ðëáßóéï åéêüíáò, áí êáëõöèåß ðñïóùñéíÜ áðü Ýíá Üëëï áíôéêåßìåíï èá ÷áèåß. Ôï ßäéï óõìâáßíåé áí åëá÷éóôïðïéÞóïõìå ìéá öüñìá ðïõ ðåñéÝ÷åé ãñáöéêÜ êáé óôç óõíÝ÷åéá ôçí åðáíáöÝñïõìå óôï êáíïíéêü ôçò ìÝãåèïò. Ôï ðñüâëçìá ìðïñïýìå íá ôï ëýóïõìå ìå ôï óõìâÜí Paint êáé íá îáíáäçìéïõñãÞóïõìå ôçí åéêüíá óôçí ïèüíç. Ùóôüóï, ç VB ðñïóöÝñåé ìéá ðéï áðëÞ ôå÷íéêÞ. ÊÜèå öüñìá êáé ðëáßóéï åéêüíáò äéáèÝôåé ôçí éäéüôçôá AutoRedraw (áõôüìáôç åðáíáó÷åäßáóç) ðïõ åîïñéóìïý Ý÷åé ôçí ôéìÞ False. Áí óôçí éäéüôçôá áõôÞ äþóïõìå ôçí ôéìÞ True, ç VB ÷åéñßæåôáé ìüíç ôçò ôçí åðáíáó÷åäßáóç ôçò ïèüíçò. Áõôü ôï ðåôõ÷áßíåé áðïèçêåýïíôáò óôç ìíÞìç Ýíá áíôßãñáöï. ¼ôáí ÷ñåéáóôåß íá áðïêáôáóôÞóåé ôç öüñìá áíáóýñåé ôï áíôßãñáöï êáé ôï åðáíáó÷åäéÜæåé óôçí ïèüíç. Áõôü âÝâáéá óôçí ðåñßðôùóç ìåãÜëùí êáé óýíèåôùí åöáñìïãþí ìðïñåß íá áðïâåß óå âÜñïò ôçò áðüäïóçò. ÅðïìÝíùò, ãéá áðëÝò åöáñìïãÝò ìðïñïýìå íá áîéïðïéïýìå ôçí éäéüôçôá AutoRedraw áëëÜ ãéá óýíèåôåò åöáñìïãÝò êáëü åßíáé íá ãñÜöïõìå ôéò äéáäéêáóßåò ó÷åäßáóçò óôï óõìâÜí Paint. ÔÝëïò, ôá ãñáöéêÜ êáé ôï êåßìåíï ðïõ ôïðïèåôïýíôáé óå ìéá öüñìá Þ Ýíá ðëáßóéï åéêüíáò üóï ç éäéüôçôá AutoRedraw Ý÷åé ôéìÞ True äåí åðçñåÜæïíôáé, áí ðñéí êáëÝóïõìå ôç ìÝèïäï Cls, áðïäþóïõìå óôçí éäéüôçôá AutoRedraw ôçí ôéìÞ False. Áõôü óçìáßíåé üôé ìðïñïýìå íá äéáôçñÞóïõìå êåßìåíï êáé ãñáöéêÜ óå ìéá öüñìá Þ ðëáßóéï åéêüíáò, áí ÷åéñéóôïýìå êáôÜëëçëá ôçí éäéüôçôÜ ôïõò AutoRedraw. Ìéá Üëëç óçìáíôéêÞ éäéüôçôá ôçò ðåñéï÷Þò ó÷åäßáóçò åßíáé ç éäéüôçôá ClipControls. Ç éäéüôçôá áõôÞ, êáèïñßæåé áí ïé ìÝèïäïé ãñáöéêþí ðïõ ÷ñçóéìïðïéïýíôáé óôéò äéáäéêáóßåò óõìâÜíôïò Paint èá åðáíáó÷åäéÜóïõí ïëüêëçñï ôï áíôéêåßìåíï Þ ìüíïí ôéò ðñüóöáôá ó÷åäéáóìÝíåò ðåñéï÷Ýò. Ï ôýðïò ôçò éäéüôçôáò åßíáé boolean êáé åîïñéóìïý Ý÷åé ôçí ôéìÞ

True, ðïõ óçìáßíåé üôé åðáíáó÷åäéÜæåôáé ïëüêëçñï ôï áíôéêåßìåíï.

Óýóôçìá óõíôåôáãìÝíùí

Ç ìÝèïäïò Point Ç ìÝèïäïò Point åðéóôñÝöåé ôçí RGB ôéìÞ ôïõ ÷ñþìáôïò åíüò óõãêåêñéìÝíïõ óçìåßïõ (point). Ç ãåíéêÞ ìïñöÞ ôçò ìåèüäïõ åßíáé: áíôéêåßìåíï.Point(x, y) Áí ôï óçìåßï ðïõ êáèïñßæïõí ïé óõíôåôáãìÝíåò x, y âñßóêåôáé åêôüò ôïõ áíôéêåéìÝíïõ, ç ìÝèïäïò åðéóôñÝöåé ôçí ôéìÞ -1 196

Ãéá íá äçìéïõñãÞóïõìå ãñáöéêÜ ÷ñåéÜæåôáé íá ðñïóäéïñßóïõìå óçìåßá óôçí ïèüíç, óôç öüñìá Þ óå Ýíá ðëáßóéï åéêüíáò. Ãéá ôï ëüãï áõôü ÷ñåéáæüìáóôå Ýíá óýóôçìá óõíôåôáãìÝíùí. Ôï åîïñéóìïý óýóôçìá ðïõ ðñïóöÝñåé ç VB êáé ðñïóäéïñßæåé ôç èÝóç ôùí áíôéêåéìÝíùí ðÜíù óôçí ïèüíç, ôç öüñìá Þ ôï ðëáßóéï åéêüíáò, äßíåé ôéò óõíôåôáãìÝíåò (0,0) óôçí åðÜíù áñéóôåñÞ ãùíßá ôïõò êáé áõîÜíåé ôéò ôéìÝò óôïí ïñéæüíôéï Üîïíá êáôÜ ôçí ðñïò ôá äåîéÜ ìåôáêßíçóç, êáé óôïí êáôáêüñõöï êáôÜ ôçí ðñïò ôá êÜôù ìåôáêßíçóç. Ïé ìïíÜäåò ìÝôñçóçò ðïõ ÷ñçóéìïðïéïýíôáé 197


êáôÜ ìÞêïò ôùí äõï áîüíùí êáèïñßæïõí êáé ôçí êëßìáêá ó÷åäßáóçò êáé ç ðñïêáèïñéóìÝíç êëßìáêá åßíáé óå twips. Ç VB ìðïñåß íá ÷ñçóéìïðïéÞóåé êáé Üëëåò êëßìáêåò, áíÜëïãá ìå ôéò áíÜãêåò ìáò, áñêåß íá ôï ðñïêáèïñßóïõìå ìÝóù ôçò éäéüôçôáò ôïõ áíôéêåéìÝíïõ ó÷åäßáóçò ScaleMode. Ïé ôéìÝò ðïõ ìðïñïýìå íá äþóïõìå óôçí éäéüôçôá ScaleMode åßíáé: 0 - User 1 - Twip 2 - Point 3 - Pixel 4 - Character 5 - Inch 6 - Millimeter 7-Centimeter

Oñßæåôáé áðï ôï ÷ñÞóôç Twips (20 áíÜ óôéãìÞ, 1440 áíÜ ßíôóá, 567 áíÜ åêáôïóôü) ÓôéãìÝò (72 áíÜ ßíôóá) Åéêïíïóôïé÷åßá ×áñáêôÞñåò (êáôáêüñõöá 6 áíÜ ßíôóá, ïñéæüíôéá 12 áíÜ ßíôóá) ºíôóåò ×éëéïóôÜ EêáôïóôÜ

ÔÝëïò, ìðïñïýìå íá áëëÜîïõìå ôüóï ôï óçìåßï åêêßíçóçò ôùí áîüíùí üóï êáé ôç äéåýèõíóÞ ôïõò - ãéá ðáñÜäåéãìá, íá ïñßóïõìå ôéò óõíôåôáãìÝíåò ãéá ôçí ðÜíù áñéóôåñÞ ãùíßá óå (3,-4). Ðñïò ôïýôï ÷ñçóéìïðïéïýìå ôéò éäéüôçôåò ScaleHeight, ScaleWidth, ScaleLeft êáé

ScaleTop. Áí áðïäþóïõìå ôéìÞ óå ìéá ôïõëÜ÷éóôïí áðü áõôÝò, äçìéïõñãïýìå äéêü ìáò óýóôçìá óõíôåôáãìÝíùí ãéá ôï áíôéêåßìåíï óôï ïðïßï áíáöåñüìáóôå, åíþ ç ôéìÞ ôçò ScaleMode ãßíåôáé áõôüìáôá 0. Ïé éäéüôçôåò ScaleHeight (ýøïò êëßìáêáò) êáé ScaleWidth (ðëÜôïò êëßìáêáò) åðéóôñÝöïõí Þ èÝôïõí ôéìÞ óôçí êáôáêüñõöç Þ ïñéæüíôéá, áíôßóôïé÷á, äéÜóôáóç ôçò ðåñéï÷Þò ó÷åäßáóçò. Ïé éäéüôçôåò ScaleLeft (áñéóôåñü êëßìáêáò) êáé ScaleTop (êïñõöÞ êëßìáêáò) áðïäßäïõí ôéìÞ óôçí ïñéæüíôéá êáé êáôáêüñõöç, áíôßóôïé÷á, óõíôåôáãìÝíç ôçò ðÜíù áñéóôåñÞò ãùíßáò ôçò ðåñéï÷Þò ó÷åäßáóçò. Êáé ïé äõï Ý÷ïõí åîïñéóìïý ôçí ôéìÞ 0, äçëáäÞ ïñßæïõí ôï óçìåßï áñ÷Þò (ôçò åðÜíù áñéóôåñÞò ãùíßáò) ùò (0,0). Áêüìç, ìðïñïýìå íá ïñßóïõìå ôï óýóôçìá óõíôåôáãìÝíùí êáôÜ ôï ÷ñüíï åêôÝëåóçò ôïõ ðñïãñÜììáôïò ÷ñçóéìïðïéþíôáò ôç ìÝèïäï Scale, ç ïðïßá Ý÷åé ãåíéêÞ óýíôáîç: áíôéêåßìåíï.Scale (x1, y1) - (x2, y2) ìå (x1, y1) ôçí ðÜíù áñéóôåñÞ ãùíßá ôïõ áíôéêåéìÝíïõ êáé (x2, y2) ôçí êÜôù äåîéÜ ãùíßá. Áí ÷ñçóéìïðïéÞóïõìå ôç ìÝèïäï Scale ÷ùñßò ïñßóìáôá, åðáíáöÝñïõìå ôï ðñïêáèïñéóìÝíï

Áò óçìåéùèåß üôé ï êþäéêáò äå ÷ñåéÜæåôáé êáìßá áëëáãÞ áí áëëÜîïõìå ôéò äéáóôÜóåéò ôïõ áíôéêåéìÝíïõ SinusArea. Ç VB èá ðñáãìáôïðïéÞóåé áõôüìáôá ôçí áðáñáßôçôç áëëáãÞ êëßìáêáò. Áõôü åðéôñÝðåé ôçí ïìáëÞ åêôÝëåóç ôùí åöáñìïãþí VB óå ðåñéâÜëëïíôá ìå äéáöïñåôéêÝò áíáëýóåéò ïèüíçò ÷ùñßò ó÷åäüí êáìßá áëëáãÞ óôïí êþäéêá.

Áíáêåöáëáßùóç Ç VB äéáèÝôåé äýï äéáöïñåôéêïýò ôñüðïõò ãéá ôç äçìéïõñãßá ãñáöéêþí. Óôïí Ýíáí ôñüðï ÷ñçóéìïðïéïýíôáé ôá åñãáëåßá ãñáöéêþí ôçò ðáëÝôáò åñãáëåßùí êáé óôïí Üëëï ôñüðï ÷ñçóéìïðïéïýíôáé ïé ìÝèïäïé ãñáöéêþí ôçò ãëþóóáò ðñïãñáììáôéóìïý. Ôá åñãáëåßá ãñáöéêþí ôïõ ðåñéâÜëëïíôïò åñãáóßáò ôçò VB åßíáé ôï åñãáëåßï "ãñáììÞ", ôï åñãáëåßï "ãåùìåôñéêü ó÷Þìá", ôï åñãáëåßï "åéêüíá" êáé ôï åñãáëåßï "ðëáßóéï åéêüíáò". Ç ó÷åäßáóç ìå ìåèüäïõò ãñáöéêþí ìðïñåß íá ãßíåé óôï åóùôåñéêü ìéáò öüñìáò, óôï åóùôåñéêü åíüò ðëáéóßïõ åéêüíáò, óôï ÷áñôß ôïõ åêôõðùôÞ. Ïé ðéï áðëÝò ìÝèïäïé ãñáöéêþí åßíáé ïé Pset, ç ïðïßá áðïäßæåé ôï ÷ñþìá ðïõ ïñßæïõìå óå óõã��åêñéìÝíï óçìåßï, ç Line, ç ïðïßá ó÷åäéÜæåé ãñáììÝò êáé ïñèïãþíéá ó÷Þìáôá, ç Circle, ç ïðïßá ó÷åäéÜæåé êáìðõëüãñáììá ó÷Þìáôá (êýêëïõò, åëëåßøåéò, ôüîá, ôïìåßò) êáé ç Cls, ç ïðïßá êáèáñßæåé üëá ôá ãñáöéêÜ êáé ôï êåßìåíï, ôá ïðïßá Ý÷ïõí äçìéïõñãçèåß ìå ìåèüäïõò êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò, óå ìéá öüñìá Þ Ýíá ðëáßóéï åéêüíáò.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. ÅêôåëÝóôå ôçí Üóêçóç 15-1 ìå áíôéêåßìåíá åéêüíáò êáé ðëáéóßïõ åéêüíáò. Ôé ðáñáôçñåßôå óå ó÷Ýóç ìå ôá ó÷Þìáôá êáé ôï áíôéêåßìåíï åéêüíáò; 2. Óå ìéá öüñìá íá äçìéïõñãÞóåôå Ýíá áíôéêåßìåíï ðëáéóßïõ åéêüíáò. Áðü ôçí éäéüôçôá Picture êáèïñßóôå íá åìöáíßæåôáé ìéá åéêüíá ìéêñüôåñùí äéáóôÜóåùí óôï åóùôåñéêü ôïõ. Äþóôå ôçí ôéìÞ True óôçí éäéüôçôá AutoSize. Ôé ðáñáôçñåßôå; ÁëëÜîôå ðÜëé ôéò äéáóôÜóåéò ôïõ áíôéêåéìÝíïõ ðëáéóßïõ åéêüíáò êáé æçôÞóôå ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò. Ôé ðáñáôçñåßôå;

óýóôçìá áîüíùí.

3. ÅêôåëÝóôå ôçí Üóêçóç 15-2. Óå ôé ïöåßëïíôáé ïé áóõíÝ÷åéåò êáôÜ ôç ó÷åäßáóç; Ðþò ìðïñåßôå íá âåëôéþóåôå ôï ïðôéêü áðïôÝëåóìá;

¢óêçóç 15-5.

4. ÅêôåëÝóôå ôçí Üóêçóç 15-3. ÅðáíáëÜâåôå ôï ðñüãñáììá äßíïíôáò äéáöïñåôéêÝò ôéìÝò óôçí éäéüôçôá DrawMode. Ôé ðáñáôçñåßôå; Ó÷ïëéÜóôå åéäéêÜ ôçí ðåñßðôùóç ãéá ôçí ôéìÞ

Èá äçìéïõñãÞóïõìå Ýíá ðñüãñáììá ðïõ èá ó÷åäéÜæåé óå Ýíá ðëáßóéï åéêüíáò ìéá çìéôïíéêÞ êáìðýëç óôï äéÜóôçìá [0, 6ð]. ¼ðùò ãíùñßæïõìå, ç çìéôïíéêÞ óõíÜñôçóç ðáßñíåé ôéìÝò áðü -1 Ýùò 1. Ç ðÜíù áñéóôåñÞ ãùíßá ðñÝðåé ëïéðüí íá Ý÷åé óõíôåôáãìÝíåò (0,1) êáé ç êÜôù äåîéÜ ãùíßá ðñÝðåé íá Ý÷åé óõíôåôáãìÝíåò (6ð,-1). Áí SinusArea åßíáé ôï üíïìá ôïõ ðëáéóßïõ åéêüíáò ìÝóá óôï ïðïßï ãßíåôáé ç ó÷åäßáóç, ôï ðéï êÜôù ôìÞìá ðñïãñÜììáôïò ó÷åäéÜæåé ôçí êáìðýëç.

Dim ð Dim Angle

vbCopyPen. 5. ÄçìéïõñãÞóôå ôï ôìÞìá ðñïãñÜììáôïò ðïõ ó÷åäéÜæåé ìéá ðýëç OR. 6. ÄçìéïõñãÞóôå ìéá öüñìá óôá áñéóôåñÜ ôçò ïðïßáò íá õðÜñ÷åé ìéá åñãáëåéïèÞêç ìå åñãáëåßá ó÷åäßáóçò: ìïëýâé ãéá åëåýèåñï ó÷Ýäéï, åõèýãñáììï ôìÞìá, ïñèïãþíéï, êýêëïò. Äþóôå ôç äõíáôüôçôá óôïí ÷ñÞóôç íá ìðïñåß íá åðéëÝîåé åñãáëåßï, íá ìðïñåß íá êáèïñßóåé ÷ñþìá êáé íá ìðïñåß íá ó÷åäéÜæåé óå ìéá ðåñéï÷Þ ó÷åäßáóçò. 7. ÅêôåëÝóôå ôçí Üóêçóç 15-5. ÅðáíáëÜâåôå ôçí Üóêçóç ãéá ôç óõíÜñôçóç óõíçìéôüíïõ. Ðþò ðñÝðåé íá äéáìïñöùèïýí ïé êëßìáêåò ãéá çìßôïíï ðëÜôïõò a;

Åéêüíá 15-13. Óçìåßï (0,1), óçìåßï (6ð,-1)

8. ÅðáíáëÜâåôå ôçí Üóêçóç 15-5 ãéá ôç óõíÜñôçóç ôïõ ôåôñáãùíéêïý ðáëìïý ðïõ ðåñéãñÜöåôáé óôï ðáñÜäåéãìá 7-5. Ðþò ìðïñåßôå íá äçìéïõñãÞóåôå êáé íá ðáñïõóéÜóåôå ôñéãùíéêü ðáëìü;

As Double As Double

ð = 4 * Atn(1) SinusArea.Scale (0, 1)-(6 * ð, -1) SinusArea.DrawWidth = 3 For Angle = 0 To 6 * ð Step ð / 30 SinusArea.PSet (Angle, Sin(Angle)) Next A 198

199


Óçìåéþóåéò:

ÌÜèçìá 16

Êéíïýìåíï ó÷Ýäéï Ôå÷íéêÞ óýñå êé Üóå Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá äçìéïõñãïýí áðëü êéíïýìåíï ó÷Ýäéï ìå åíáëëáãÞ Þ êáé ìå ìåôÜèåóç åéêüíùí. Íá ÷ñçóéìïðïéïýí ôçí ôå÷íéêÞ "óýñå êé Üóå" óôéò åöáñìïãÝò ôïõò. Ôï óýóôçìá ôçò üñáóçò ðáñïõóéÜæåé áäñÜíåéá óôçí åðåîåñãáóßá ìéáò åéêüíáò ìå áðïôÝëåóìá, áí ìáò ðñïâëçèïýí ãñÞãïñá ðïëëÝò äéáäï÷éêÝò åéêüíåò, ïé ïðïßåò äéáöÝñïõí ëßãï ìåôáîý ôïõò, íá ìáò äçìéïõñãåßôáé ç åíôýðùóç ôçò óõíå÷ïýò êßíçóçò ôùí áíôéêåéìÝíùí ðïõ Ý÷ïõí áëëÜîåé èÝóç. Áõôü ôï öáéíüìåíï åßíáé ãíùóôü ùò ìåôåßêáóìá êáé ôï åêìåôáëëåõüìáóôå óôç äçìéïõñãßá ôïõ êéíïýìåíïõ ó÷åäßïõ. Ôï êéíïýìåíï ó÷Ýäéï äçìéïõñãåßôáé áðü ìéá óåéñÜ äéáäï÷éêþí ó÷åäßùí. Ç ãñÞãïñç ðáñïõóßáóç ôùí ó÷åäßùí ìå ñõèìü 10 -15 ó÷Ýäéá ôï äåõôåñüëåðôï ðñïêáëåß ôçí øåõäáßóèçóç ôçò ïìáëÞò ìåôáêßíçóçò ôùí áíôéêåéìÝíùí Þ ôçò áëëáãÞò ôïõ ó÷Þìáôüò ôïõò. ÂáóéêÜ óôç äçìéïõñãßá ôïõ êéíïýìåíïõ ó÷åäßïõ ÷ñçóéìïðïéïýíôáé äýï ôå÷íéêÝò: ç êßíçóç ðÜíù óå ôñï÷éÜ (path animation) êáé ç äéáäï÷Þ äéáöïñåôéêþí óôÜóåùí (cel animation). Ôï äåýôåñï èÝìá ìå ôï ïðïßï èá áó÷ïëçèïýìå óå áõôü ôï ìÜèçìá áöïñÜ ôç ëåéôïõñãßá óýñå êé Üóå (drag & drop). Óôç ëåéôïõñãßá áõôÞ ðáôÜìå ôï ðëÞêôñï ôïõ ðïíôéêéïý êáé åðéëÝãïõìå Ýíá áíôéêåßìåíï óôçí ïèüíç, óýñïõìå (drag) ôï ðïíôßêé åíþ åîáêïëïõèïýìå íá êñáôÜìå ðáôçìÝíï ôï ðëÞêôñï, ðáñáóýñïíôáò ôï áíôéêåßìåíï óå ìéá Üëëç èÝóç, êáé áöÞíïõìå ôï ðëÞêôñï ôïõ ðïíôéêéïý, ïðüôå ôáõôü÷ñïíá áöÞíåôáé (drop) êáé ôï áíôéêåßìåíï. Ëßãï ðïëý üëïé ìáò Ý÷ïõìå ÷ñçóéìïðïéÞóåé áõôüí ôïí ÷åéñéóìü ãéá íá ìåôáöÝñïõìå Þ íá áíôéãñÜøïõìå Ýíá áñ÷åßï óôïí Explorer ôùí Windows Þ ãéá íá ìåôáöÝñïõìå ôï ðåñéå÷üìåíï ìéáò óåéñÜò êåëéþí åíüò õðïëïãéóôéêïý öýëëïõ ôïõ Excel óå ìéáí Üëëç èÝóç.

Êéíïýìåíï ó÷Ýäéï Ãéá íá äçìéïõñãÞóïõìå êßíçóç ìéáò åéêüíáò ðÜíù óå ôñï÷éÜ, ôïðïèåôïýìå ôçí åéêüíá ðÜíù óôï öüíôï ìéáò öüñìáò. Åðßóçò, óôç öüñìá ôïðïèåôïýìå êáé Ýíá ÷ñïíüìåôñï ùò âçìáôïäüôç ôçò êßíçóçò. Óå äéáäï÷éêÝò ÷ñïíéêÝò óôéãìÝò, ðïõ êáèïñßæïíôáé áðü ôçí éäéüôçôá Interval ôïõ ÷ñïíïìÝôñïõ, ìåôáôïðßæïõìå ôçí åéêüíá óå ìéá íÝá èÝóç ðÜíù óôçí åõèåßá, ôçí ôåèëáóìÝíç Þ ôçí êáìðýëç ðïõ ìáò Ý÷åé õðïäåé÷èåß ùò ôñï÷éÜ ôçò êßíçóçò. Ïé áðïóôÜóåéò ôùí äéáäï÷éêþí èÝóåùí ðÜíù óôç ãñáììÞ, óå óõíÜñôçóç ìå ôï ÷ñïíéêü äéÜóôçìá ðïõ ìåóïëáâåß, êáèïñßæïõí êáé ôçí ôá÷ýôçôá ôçò êßíçóçò. Ãéá ôçí êßíçóç åíüò áíôéêåéìÝíïõ åëÝã÷ïõ óå ìéá íÝá èÝóç ÷ñçóéìïðïéïýìå ôç ìÝèïäï Move. Ç ãåíéêÞ ìïñöÞ ôçò ìåèüäïõ Move åßíáé: áíôéêåßìåíï.Move x, y ìå x, y ôéò óõíôåôáãìÝíåò ôçò íÝáò èÝóçò ôçò ðÜíù áñéóôåñÞò êïñõöÞò ôïõ áíôéêåéìÝíïõ. ¢óêçóç 16-1. Óôïí öÜêåëï "C:\Program Files\DevStudio\VB\Samples\Pguide\VCR" õðÜñ÷åé áñ÷åßï ìå üíïìá Bfly2.bmp, ôï ïðïßï ðåñéÝ÷åé ôçí åéêüíá ìéáò ðåôáëïýäáò. Íá äçìéïõñãçèåß ðñüãñáììá ðïõ íá ðáñïõóéÜæåé ôçí ðåôáëïýäá íá ðåôÜ áêïëïõèþíôáò ìéá çìéôïíéêÞ ôñï÷éÜ. Ç ôá÷ýôçôá ðôÞóçò ôçò ðåôáëïýäáò íá êáèïñßæåôáé áðü ïñéæüíôéá ñÜâäï 1. ÐÜíù óôç öüñìá ôïðïèåôïýìå áíôéêåßìåíï åéêüíáò ìå üíïìá Butterfly. ÐñïôéìÜìå ôá áíôéêåßìåíá åéêüíáò, äéüôé, üðùò Ý÷ïõìå áíáöÝñåé, ó÷åäéÜæïíôáé ãñçãïñüôåñá êáé åßíáé äõíáôÞ ç êÜëõøç üëïõ ôïõ åóùôåñéêïý ôïõò ìå ôï ðåñéå÷üìåíï ôïõ áñ÷åßïõ (éäéüôçôá Stretch = True). Öïñôþíïõìå ôçí åéêüíá ôçò ðåôáëïýäáò óôï áíôéêåßìåíï, ìåôáâÜëëïíôáò ôçí éäéüôçôá Picture. 201

Êßíçóç ðÜíù óå ôñï÷éÜ


2. Tïðïèåôïýìå áíôéêåßìåíï ÷ñïíïìÝôñïõ, ôï ïðïßï ïíïìÜæïõìå TicTac. 3. TÝëïò, ôïðïèåôïýìå ñÜâäï êýëéóçò ìå üíïìá Velocity. Óôéò éäéüôçôåò Min êáé Max äßíïõìå ôéò ôéìÝò 30 êáé 200, ðïõ áíôéóôïé÷ïýí óå 33 êáé 5 áëëáãÝò ôï äåõôåñüëåðôï.

Butterfly Velocity TicTac

Ç öüñôùóç áðåõèåßáò áðü áñ÷åßï èÝôåé ðåñéïñéóìïýò ôá÷ýôçôáò. Óôçí ðåñßðôùóç ëïéðüí ðïõ ôá óôéãìéüôõðá åßíáé ëßãá óôïí áñéèìü, óõìöÝñåé íá ôá Ý÷ïõìå ðñïöïñôþóåé óå Üëëá ìç ïñáôÜ áíôéêåßìåíá ôçò öüñìáò êáé íá ôá ìåôáöïñôþíïõìå ôç óôéãìÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò óôï áíôéêåßìåíï åéêüíá. Ç ìåôáöüñôùóç ãßíåôáé ìå áðëÞ åê÷þñçóç ôçò ôéìÞò ôçò éäéüôçôáò Picture ôïõ åíüò áíôéêåéìÝíïõ, óôçí éäéüôçôá Picture ôïõ Üëëïõ, ð.÷. áíôéêåßìåíï1.Picture = áíôéêåßìåíï2.Picture ¢óêçóç 16-2. Óôïí öÜêåëï "C:\Program Files\DevStudio\VB\Samples\Pguide\VCR" åêôüò áðü ôï áñ÷åßï Bfly2.bmp õðÜñ÷åé êáé ôï áñ÷åßï Bfly1.bmp ìå ìéá äéáöïñåôéêÞ óôÜóç

Åéêüíá 16-1. Ùò ðåñéï÷Þ ó÷åäßáóçò ïñßæåôáé ç öüñìá. Ïé óõíôåôáãìÝíåò ôçò ðÜíù áñéóôåñÞòãùíßáò ïñßæïíôáé óå (0,1) êáé ôçò êÜôù äåîéÜò óå (6 * ð, 2.5)

1. ÐÜíù óôç öüñìá ôïðïèåôïýìå áíôéêåßìåíï åéêüíáò ìå üíïìá Butterfly. Äå ÷ñåéÜæåôáé

4. ÃñÜöïõìå ôïí êþäéêá:

Dim ð Dim x Dim y

As Double As Double As Double

Private Sub Form_Load() 'Áñ÷éêïðïßçóç ð = 4 * Atn(1) Scale (0, 1)-(6 * ð, -2.5) x = 0: y=0 TicTac.Interval = 50 End Sub

ðôÞóçò ôçò ðåôáëïýäáò. Íá äçìéïõñãçèåß ðñüãñáììá ðïõ íá ðáñïõóéÜæåé ôçí ðåôáëïýäá íá ðåôÜ áíïéãïêëåßíïíôáò ôá öôåñÜ ôçò. Ç ôá÷ýôçôá ðôÞóçò ôçò ðåôáëïýäáò íá êáèïñßæåôáé áðü ïñéæüíôéá ñÜâäï êýëéóçò.

'Ï áñéèìüò ð 'ÓõíôåôáãìÝíç x 'ÓõíôåôáãìÝíç y

'Ïñéóå ôïí áñéèìü ð 'Êáèüñéóå ôçí êëßìáêá 'Áñ÷éêÞ èÝóç áíôéêåéìÝíïõ '20 áëëáãÝò ôï äåõôåñüëåðôï

íá ôïõ åê÷ùñÞóïõìå êÜðïéá åéêüíá, áõôü èá ãßíåé êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò. 2. Åðßóçò, ôïðïèåôïýìå äýï áíôéêåßìåíá åéêüíáò ìå üíïìáôá Butfly1 êáé Butfly2 áíôßóôïé÷á, ôá ïðïßá èá äéáôçñÞóïõìå áüñáôá êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò, ãé' áõôü êáé äßíïõìå ôçí ôéìÞ False óôçí éäéüôçôá ôïõò Visible.

3. Tïðïèåôïýìå áíôéêåßìåíï ÷ñïíïìÝôñïõ, ôï ïðïßï ïíïìÜæïõìå TicTac.

4. TÝëïò, ôïðïèåôïýìå ñÜâäï êýëéóçò ìå üíïìá Velocity. Óôéò éäéüôçôåò Min êáé Max äßíïõìå ôéò ôéìÝò 10 êáé 1000, ðïõ áíôéóôïé÷ïýí óå 10 êáé 1 áëëáãÝò ôï äåõôåñüëåðôï.

Private Sub Velocity_Change() TicTac.Interval = Velocity.Value End Sub Private Sub TicTac_Timer() 'ÍÝá èÝóç ôïõ áíôéêåéìÝíïõ Butterfly.Move x, y 'Õðïëüãéóå ôçí åðüìåíç èÝóç 'Ìåôáôüðéóç óôïí x x = x + ð / 20 'Áí âãåéò åêôüò öüñìáò åðáíÜöåñå If x > 6 * ð Then x = 0 'Ìåôáôüðéóç óôïí y y = Sin(x) End Sub Ìå ôç öüñôùóç ôçò öüñìáò ãßíïíôáé ïé áñ÷éêïðïéÞóåéò. Ç êëßìáêá ôçò öüñìáò ïñßæåôáé þóôå íá ìçí êñýâåôáé êáíÝíá ìÝñïò ôçò åéêüíáò êáôÜ ôçí êßíçóç ôçò ðåôáëïýäáò. Óå ôáêôÜ ÷ñïíéêÜ äéáóôÞìáôá, ðïõ êáèïñßæïíôáé áðü ôçí ôéìÞ ôçò éäéüôçôáò Interval ôïõ áíôéêåéìÝíïõ TicTac, õðïëïãßæåôáé ç ìåôáôüðéóç ôçò åéêüíáò ùò ðñïò ôïí Üîïíá ôùí x êáé ç ìåôáôüðéóç ôçò åéêüíáò ùò ðñïò ôïí Üîïíá ôùí y. Óôçí ôå÷íéêÞ ôçò åíáëëáãÞò äéáöïñåôéêþí óôÜóåùí ôïðïèåôïýìå ðÜíù óôç öüñìá Ýíá Äéáäï÷Þ äéáöïñåôéêþí áíôéêåßìåíï åëÝã÷ïõ ðïõ ìðïñåß íá äå÷ôåß ìéá åéêüíá (åéêüíá, ðëáßóéï åéêüíáò, ðëÞêôñï óôÜóåùí äéáôáãÞò). Åðßóçò, óôç öüñìá ôïðïèåôïýìå êáé Ýíá ÷ñïíüìåôñï. Óå äéáäï÷éêÝò ÷ñïíéêÝò óôéãìÝò, ðïõ êáèïñßæïíôáé áðü ôçí éäéüôçôá Interval ôïõ ÷ñïíïìÝôñïõ, ðñïâÜëëïõìå óôï åóùôåñéêü ôïõ áíôéêåéìÝíïõ åëÝã÷ïõ, äéáöïñåôéêÝò óôÜóåéò Þ êáôáóôÜóåéò ôùí áíôéêåéìÝíùí ôïõ ó÷åäßïõ. Ç ãñÞãïñç åíáëëáãÞ ôùí óôéãìéïôýðùí äçìéïõñãåß ôçí åíôýðùóç ôçò ìåôáâïëÞò. Ôá óôéãìéüôõðá åßôå öïñôþíïíôáé áðü áñ÷åßï åßôå åßíáé öïñôùìÝíá ðÜíù óôç öüñìá óå Üëëá áíôéêåßìåíá êáé æçôåßôáé ç ìåôáöüñôùóÞ ôïõò. Ç öüñôùóç ìéáò åéêüíáò óôçí éäéüôçôá Picture êáôÜ ôç óôéãìÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò ãßíåôáé ìå ôç óõíÜñôçóç LoadPicture. Ï ôñüðïò åê÷þñçóçò êáé ç ��åíéêÞ óýíôáîç ôçò óõíÜñôçóçò åßíáé: áíôéêåßìåíï.Picture = LoadPicture(üíïìá_áñ÷åßïõ) 202

Butfly 1 Butfly 2

Åéêüíá 16-2. Óôçí ßäéá èÝóç åíáëëÜóóïíôáé ïé äýï åéêüíåò, þóôå íá äçìéïõñãåßôáé ç åíôýðùóç üôé ç ðåôáëïýäá áíïéãïêëåßíåé ôá öôåñÜ ôçò. 5. ÃñÜöïõìå ôïí êþäéêá:

'Óçìáöüñïò åíáëëáãÞò Dim FlipFlop As Integer Private Sub Form_Load() Const Folder = "C:\Program Files\DevStudio\VB\Samples\Pguide\VCR\" 'Áñ÷éêïðïßçóç Butfly1.Picture = LoadPicture(Folder & "Bfly1.bmp") Butfly2.Picture = LoadPicture(Folder & "Bfly2.bmp") FlipFlop = 0 End Sub Private Sub TicTac_Timer() '¢ëëáîå ôç óôÜóç áíÜëïãá ìå ôçí ôéìÞ ôïõ óçìáöüñïõ If FlipFlop Then Butterfly.Picture = Butfly1.Picture Else Butterfly.Picture = Butfly2.Picture End If FlipFlop = Not FlipFlop End Sub Private Sub HScroll1_Change() TicTac.Interval = Velocity.Value End Sub 203


Ìå ôç öüñôùóç ôçò öüñìáò ãßíïíôáé ïé áñ÷éêïðïéÞóåéò. Óôá áíôéêåßìåíá Butfly1 êáé

Private Sub HScroll1_Change() Timer2.Interval = HScroll1.Value End Sub

Butfly2 öïñôþíïíôáé ôá óôéãìéüôõðá ôçò ðåôáëïýäáò êáé äßíåôáé áñ÷éêÞ ôéìÞ óôç ìåôáâëçôÞ FlipFlop, ðïõ èá ëåéôïõñãÞóåé ùò óçìáöüñïò åíáëëáãÞò. Óå ôáêôÜ ÷ñïíéêÜ äéáóôÞìáôá, ðïõ êáèïñßæïíôáé áðü ôçí ôéìÞ ôçò éäéüôçôáò Interval ôïõ áíôéêåéìÝíïõ TicTac êáé áíÜëïãá ìå ôçí ôéìÞ ôïõ óçìáöüñïõ FlipFlop, öïñôþíåôáé óôï ïñáôü áíôéêåßìåíï Butterfly, ç ìéá Þ ç Üëëç åéêüíá êáé áëëÜæåé ç ôéìÞ ôïõ óçìáöüñïõ.

Ç ôå÷íéêÞ óýñå êé Üóå

ÓõíÞèùò, ÷ñçóéìïðïéåßôáé ï óõíäõáóìüò ôùí äýï ôå÷íéêþí. Äçìéïõñãåßôáé åíáëëáãÞ åéêüíùí Óõíäõáóìüò êßíçóçò ðÜíù óå ôñï÷éÜ êáé äéáäï÷Þò ìáæß ìå ðáñÜëëçëç ìåôáôüðéóç. äéáöïñåôéêþí óôÜóåùí

¢óêçóç 16-3. Íá äçìéïõñãçèåß ðñüãñáììá ðïõ íá ðáñïõóéÜæåé ôçí ðåôáëïýäá íá ðåôÜ áíïéãïêëåßíïíôáò ôá öôåñÜ ôçò, åíþ ìåôáêéíåßôáé ðÜíù óå çìéôïíéêÞ ôñï÷éÜ. 1. ×ñçóéìïðïéïýìå ôç öüñìá ìå ôá áíôéêåßìåíá ôçò Üóêçóçò 16-2.

Ãéá íá "áðåëåõèåñþóåé" ï ðñïãñáììáôéóôÞò Ýíá áíôéêåßìåíï, þóôå íá Ý÷åé ôç äõíáôüôçôá ï ÷ñÞóôçò íá ôï óýñåé ðÜíù óå ìéá öüñìá ìðïñåß: åßôå íá äþóåé óôçí éäéüôçôá DragMode ôïõ áíôéêåéìÝíïõ ôçí ôéìÞ 1 - Automatic (åóùôåñéêÞ óôáèåñÜ vbAutomatic óôçí ðåñßðôùóç, ðïõ êÜíåé ôçí åê÷þñçóç ôçò ôéìÞò ìÝóá áðü êþäéêá), åßôå íá áöÞóåé óôçí éäéüôçôá DragMode ôçí ôéìÞ 0 - Manual (åóùôåñéêÞ óôáèåñÜ

vbManual óôçí ðåñßðôùóç ðïõ êÜíåé ôçí åê÷þñçóç ôçò ôéìÞò ìÝóá áðü êþäéêá) êáé íá ÷ñçóéìïðïéÞóåé ôç ìÝèïäï Drag. Ï ðñþôïò ôñüðïò, ôï áõôüìáôï óýñå êé Üóå, åßíáé êáé ï ðéï áðëüò, áëëÜ Ý÷åé ôï ìåéoíÝêôçìá üôé áðïìïíþíåé ôï áíôéêåßìåíï áðü ôá óõìâÜíôá ôïõ ðïíôéêéïý. Ãéá ðáñÜäåéãìá, ôï áíôéêåßìåíï ðáýåé íá áíôéäñÜ óôï óõìâÜí Click.

1

¢óêçóç 16-4.

2

3

1. Óå ìéá öüñìá ôïðïèåôïýìå Ýíá áíôéêåßìåíï åéêüíáò êáé ôïõ åðéóõíÜðôïõìå ôçí åéêüíá ôïõ áñ÷åßïõ C:\...\Graphics\Icons\Mail01a.ico. 2. Óôçí éäéüôçôá DragMode äßíïõìå ôçí ôéìÞ 1 - Automatic. 3. ÔñÝ÷ïõìå ôï ðñüãñáììá. 4. Óýñïõìå ôï áíôéêåßìåíï. Ðáñáôçñïýìå üôé Ýíá ãêñé ðëáßóéï, ðïõ áíáðáñéóôÜ ôï áíôéêåßìåíï, êéíåßôáé ìáæß ìå ôï ðïíôßêé.

4

Åéêüíá 16- 3. Äéáäï÷éêÜ óôéãìéüôõðá åíáëëáãÞò ôçò åéêüíáò êáé ìåôáôüðéóçò 2. ÓõíäõÜæïõìå ôïõò êþäéêåò ôùí áóêÞóåùí 16-1 êáé 16-2 óå:

Dim Dim Dim Dim

FlipFlop As Integer ð As Double x As Double y As Double

'Óçìáöüñïò åíáëëáãÞò 'Ï áñéèìüò ð 'ÓõíôåôáãìÝíç x 'ÓõíôåôáãìÝíç y

Private Sub Form_Load() Const Folder = "C:\Program Files\DevStudio\VB\Samples\Pguide\VCR\" 'Áñ÷éêïðïßçóç 'Ïñéóå ôïí áñéèìü ð ð = 4 * Atn(1) Scale (0, 1)-(6 * ð, -2.5) 'Êáèüñéóå ôçí êëßìáêá 'Áñ÷éêÞ èÝóç áíôéêåéìÝíïõ x = 0: y=0 btrfly1.Picture = LoadPicture(Folder & "Bfly1.bmp") btrfly2.Picture = LoadPicture(Folder & "Bfly2.bmp") FlipFlop = 0 End Sub Private Sub TicTac_Timer() '¢ëëáîå ôç óôÜóç If FlipFlop = 0 Then btrfly.Picture = btrfly1.Picture FlipFlop = 1 Else btrfly.Picture = btrfly2.Picture FlipFlop = 0 End If '¢ëëáîå ôç èÝóç btrfly.Move x, y x = x + ð / 20 If x > 6 * ð Then x = 0 y = Sin(x) End Sub 204

Åéêüíá 16 - 4. Åßäùëï ÷ùñßò åéêüíá Ãéá íá Ý÷åé ôç ìïñöÞ åéêüíáò ôï áíôéêåßìåíï ôç óôéãìÞ ðïõ óýñåôáé, ðñÝðåé íá äþóïõìå ôéìÞ óôçí éäéüôçôá DragIcon. ¢óêçóç 16-5.

1. Óôçí éäéüôçôá DragIcon ôïõ áíôéêåéìÝíïõ äßíïõìå ôçí ôéìÞ C:\...\Graphics\Icons\Mail03.ico. 2. ÔñÝ÷ïõìå ôï ðñüãñáììá. 3. ÓÝñíïõìå ôï áíôéêåßìåíï. Ðáñáôçñïýìå üôé ï äåßêôçò ôïõ ðïíôéêéïý Ý÷åé áíôéêáôáóôáèåß áðü ôçí åéêüíá ðïõ Ý÷ïõìå åê÷ùñÞóåé óôçí éäéüôçôá DragIcon.

Åéêüíá 16- 5. Åßäùëï ìå åéêüíá Ìðïñïýìå íá åê÷ùñÞóïõìå ôéìÞ óôçí éäéüôçôá DragIcon êáé êáôÜ ôç óôéãìÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò. Ôüôå åßôå ÷ñçóéìïðïéïýìå ôç óõíÜñôçóç LoadPicture, åßôå ôçí éäéüôçôá

Picture Üëëïõ áíôéêåéìÝíïõ (äåßôå ðñïçãïýìåíç ðáñÜãñáöï). Ç ìåôÜèåóç ôïõ åéäþëïõ ôïõ áíôéêåéìÝíïõ óå ìéáí Üëëç èÝóç, äå óõíåðÜãåôáé êáé ôç ìåôÜèåóç ôïõ áíôéêåéìÝíïõ óå áõôÞí ôç èÝóç, üôáí ôåëéêÜ áöÞóïõìå ôï ðëÞêôñï ôïõ ðïíôéêéïý. Ãéá íá ãßíåé áõôü ðñÝðåé íá Ý÷ïõìå êÜíåé êáôÜëëçëç êùäéêïðïßçóç óôï óõìâÜí DragDrop. Ôï óõìâÜí DragDrop ðñïêýðôåé óå üëá ôá áíôéêåßìåíá óôü÷ïõò (ð.÷. öüñìåò, áíôéêåßìåíá åëÝã÷ïõ), ðÜíù óôá ïðïßá ï ÷ñÞóôçò áöÞíåé Ýíá áíôéêåßìåíï ðçãÞ, äçëáäÞ áíôéêåßìåíï ðïõ Ýóåñíå ìå ôï ðïíôßêé. Ç õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò DragDrop ãéá Ýíá áíôéêåßìåíï óõíôÜóóåôáé ùò:

Sub áíôéêåßìåíï_DragDrop(Source As Control, X As Single, Y As Single) Ç ðáñÜìåôñïò Source ðáñéóôÜíåé óôï áíôéêåßìåíï ðçãÞ. Åðßóçò, ïé ðáñÜìåôñïé X êáé Y áíôéóôïé÷ïýí óôéò óõíôåôáãìÝíåò ôïõ óçìåßïõ ðïõ áöÝèçêå ôï ðëÞêôñï ôïõ ðïíôéêéïý. 205


¢óêçóç 16-6. ÈÝëïõìå, ôá áíôéêåßìåíá ðïõ óýñïíôáé ðÜíù óå ìéá öüñìá, íá ìåôáêéíïýíôáé óôï óçìåßï ðïõ áöÞíïõìå ôï åßäùëü ôïõò. ÃñÜöïõìå ôïí êþäéêá:

Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X, Y End Sub ¸íá Üëëï åîßóïõ óçìáíôéêü óõìâÜí ðïõ Ý÷åé ó÷Ýóç ìå ôçí ôå÷íéêÞ óýñå êé Üóå, åßíáé ôï óõìâÜí. Ç óýíôáîç ôçò õðïñïõôßíáò äéá÷åßñéóçò óõìâÜíôïò DragOver åßíáé ðáñüìïéá ìå ôç óýíôáîç ôçò õðïñïõôßíáò äéá÷åßñéóçò óõìâÜíôïò DragDrop. ÓõãêåêñéìÝíá, ãñÜöïõìå:

Sub áíôéêåßìåíï_DragOver(Source As Control, X As Single, Y As Single, _ State As Integer) To óõìâÜí áõôü ðñïêýðôåé üôáí Ýíá áíôéêåßìåíï óÝñíåôáé ðÜíù áðü Ýíá Üëëï. Ç ðáñÜìåôñïò State ìðïñåß íá ðÜñåé ôéò ôéìÝò:

VbEnter ôï ðïíôßêé ìüëéò Ý÷åé ìðåé óôá üñéá ôïõ áíôéêåéìÝíïõ óôü÷ïõ, VbLeave ôï ðïíôßêé ìüëéò Ý÷åé áöÞóåé ôá üñéá ôïõ áíôéêåéìÝíïõ óôü÷ïõ, vbOver ôï ðïíôßêé âñßóêåôáé ðÜíù óôï áíôéêåßìåíï óôü÷ï. ¢óêçóç 16-7. Óôç öüñìá ðïõ ÷ñçóéìïðïéÞóáìå óôéò ðéï ðÜíù áóêÞóåéò, íá ôïðïèåôçèåß Ýíá áíôéêåßìåíï åéêüíáò ìå üíïìá Filer, óôï ïðïßï íá äïèåß ç ìïñöÞ óõñôáñéÝñáò êáé Ýíá áíôéêåßìåíï åéêüíáò ìå üíïìá Bin, óôï ïðïßï íá äïèåß ç ìïñöÞ êÜäïõ áðïññéìÜôùí. ¼ôáí óÝñíïõìå ôïí öÜêåëï ðÜíù áðü ôç óõñôáñéÝñá, íá áíïßãåé ôï êÜôù óõñôÜñé ôçò êáé áí áöÞóïõìå ôï ðëÞêôñï ôïõ ðïíôéêéïý, ôï óõñôÜñé íá êëåßíåé áðïññïöþíôáò ôï ãñÜììá. Åðßóçò, üôáí óÝñíïõìå ôïí öÜêåëï ðÜíù áðü ôïí êÜäï áðïññéìÜôùí íá åìöáíßæåôáé Ýíá áðáãïñåõôéêü óÞìá ðïõ íá ìáò åéäïðïéåß üôé äåí ìðïñïýìå íá êáôáóôñÝøïõìå áõôüí ôïí öÜêåëï.

'Ï ÷ñÞóôçò Üöçóå ôï ðïíôßêé Private Sub Filer_DragDrop(Source As Control, X As Single, Y As Single) 'Ìåôáêßíçóå ôïí öÜêåëï êáé êñýøå ôïí Source.Move X, Y Source.Visible = False 'Åéêïíßäéï êëåéóôü óõñôÜñé Filer.Picture = LoadPicture(Folder & "\Office\Files03a.ico") End Sub 'Áí ôï åßäùëï âñßóêåôáé ðÜíù áðü ôïí êÜäï Private Sub Bin_DragOver(Source As Control, X As Single, Y As Single, _ State As Integer) Select Case State Case vbEnter 'Åíôüò ôïõ êÜäïõ. Åéêïíßäéï Stop Source.DragIcon = LoadPicture(Folder & "\Misc\Misc06.ico") Case vbLeave 'Åêôüò ôïõ êÜäïõ. Åéêïíßäéï öÜêåëïò Source.DragIcon = LoadPicture(Folder & "\Mail\Mail03.ico") End Select End Sub ¼ëá üóá áíáöÝñáìå ìÝ÷ñé áõôü ôï óçìåßï ìðïñïýìå íá ôá åêìåôáëëåõôïýìå ôüóï óôçí áõôüìáôç, üóï êáé óôçí õðü Ýëåã÷ï ôå÷íéêÞ óýñå êé Üóå. Ç äåýôåñç ôå÷íéêÞ, ç óýñå êé Üóå õðü Ýëåã÷ï (éäéüôçôá DragMode ìå ôéìÞ 0 - Manual), åßíáé ðéï åõÝëéêôç, áöïý ðñïóöÝñåé óôïí ðñïãñáììáôéóôÞ ôç äõíáôüôçôá åëÝã÷ïõ ôùí åíåñãåéþí ôïõ ÷ñÞóôç, óå üôé áöïñÜ ôïí ÷åéñéóìü ôïõ ðïíôéêéïý. Ï ðñïãñáììáôéóôÞò, áíÜëïãá ìå ôçí ðåñßðôùóç, ìðïñåß íá åðéôñÝðåé Þ íá ìçí åðéôñÝðåé óôï ÷ñÞóôç íá óýñåé Ýíá áíôéêåßìåíï. Ç åíåñãïðïßçóç ôçò ëåéôïõñãßáò óýñå êé Üóå ãßíåôáé ðñïãñáììáôéóôéêÜ, êáôÜ ôï óõìâÜí MouseDown, æçôþíôáò ôçí åêôÝëåóç ôçò ìåèüäïõ

Drag ìå ôéìÞ ðáñáìÝôñïõ vbBeginDrag. Åðßóçò, ç áðåíåñãïðïßçóç ãßíåôáé êáôÜ ôï óõìâÜí MouseUp, æçôþíôáò ôçí åêôÝëåóç ôçò ìåèüäïõ Drag ìå ôéìÞ ðáñáìÝôñïõ vbEndDrag. ¢óêçóç 16-8. Áí åêôåëÝóïõìå ôçí Üóêçóç 16-6, ðáñáôçñïýìå üôé íáé ìåí ôá áíôéêåßìåíá ìåôáêéíïýíôáé óå ìéá íÝá èÜóç, áëëÜ áõôÞ äå óõìðßðôåé ìå ôï óçìåßï ðïõ äåß÷íåé ôï ðïíôßêé. Áõôü ïöåßëåôáé óôï üôé ìðïñïýìå íá ðéÜóïõìå êáé íá óýñïõìå ôï áíôéêåßìåíï áðü ïðïéïäÞðïôå óçìåßï ôïõ. ¼ìùò, êáôÜ ôçí áðüèåóç ôïõ áíôéêåéìÝíïõ äå ëáìâÜíïõìå õð' üøéí ìáò ôç ó÷åôéêÞ èÝóç ôïõ äåßêôç ôïõ ðïíôéêéïý ùò ðñïò ôçí ðÜíù áñéóôåñÞ ãùíßá ôïõ áíôéêåéìÝíïõ êé ãé' áõôü êáé ðáñáôçñåßôáé êáé ç ìåôÜðôùóç. Ìáò æçôåßôáé íá âåëôéþóïõìå ôï áéóèçôéêü áðïôÝëåóìá. Áí ôï üíïìá ôïõ áíôéêåéìÝíïõ ðïõ ðñüêåéôáé íá óýñïõìå åßíáé Envelope: 1. Äßíïõìå óôçí éäéüôçôá DragMode ôçí ôéìÞ 0 - Manual. 2. ÃñÜöïõìå ôïí êþäéêá:

Åéêüíá 16- 5. Áñ÷éêü êáé ôåëéêü óôéãìéüôõðï, üôáí ôï åßäùëï óÝñíåôáé óôç óõñôáñßåñá Þ ÃñÜöïõìå ôïí êþäéêá:

'ÖÜêåëïò ìå åéêïíßäéá Const Folder = "C:\Program Files\DevStudio\Vb\Graphics\Icons" 'Áí ôï åßäùëï âñßóêåôáé ðÜíù áðü ôç óõñôáñéÝñá Private Sub Filer_DragOver(Source As Control, X As Single, Y As Single, _ State As Integer) Select Case State Case vbEnter 'Åíôüò ôçò óõñôáñéÝñáò. Åéêïíßäéï áíïé÷ôü óõñôÜñé Filer.Picture = LoadPicture(Folder & "\Office\Files03b.ico") Case vbLeave 'Åêôüò ôçò óõñôáñéÝñáò. Åéêïíßäéï êëåéóôü óõñôÜñé Filer.Picture = LoadPicture(Folder & "\Office\Files03a.ico") End Select End Sub 206

Dim StartX As Single Dim StartY As Single Sub Envelope_MouseDown (Button As Integer, Shift As Integer, _ X As Single, Y As Single) Envelope.Drag vbBeginDrag StartX = X StartY = Y End Sub Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move (X - StartX), (Y - StartY) End Sub Sub Envelope_MouseUp (Button As Integer, Shift As Integer, _ X As Single, Y As Single) Envelope.Drag vbEndDrag End Sub

¼ôáí ï ÷ñÞóôçò ðáôÞóåé ôï ðëÞêôñï ôïõ ðïíôéêéïý ðÜíù óôï áíôéêåßìåíï, åêôåëåßôáé ç õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò MouseDown, ç ïðïßá åíåñãïðïéåß ôç ëåéôïõñãßá óýñå êé Üóå êáé óõãêñáôåß ôéò ó÷åôéêÝò óõíôåôáãìÝíåò ôïõ ðïíôéêéïý ùò ðñïò ôçí ðÜíù áñéóôåñÞ ãùíßá ôïõ áíôéêåéìÝíïõ (áõôÝò áêñéâþò ôéò ôéìÝò ðáßñíïõí ïé ðáñÜìåôñïé X, Y ôçò õðïñïõôßíáò). 207

Ãéá íá ãßíåé óùóôÜ ç ìåôÜèåóç ðñÝðåé êáé ïé êëßìáêåò ôïõ áíôéêåéìÝíïõ êáé ôçò öüñìáò íá Ý÷ïõí ôéò ßäéåò ìïíÜäåò.


üôáí ï ÷ñÞóôçò áöÞóåé ôï ðïíôßêé åêôåëåßôáé ç õðïñïõôßíá Form_DragDrop, ðïõ ìåôáêéíåß ôï áíôéêåßìåíï, êáé ç õðïñïõôßíá Envelope_MouseUp ðïõ áðåíåñãïðïéåß ôç ëåéôïõñãßá óýñå êé

ÌÜèçìá 17

Üóå.

ÐïëõìÝóá

Áíáêåöáëáßùóç

Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí:

Ç ãñÞãïñç ðáñïõóßáóç ôùí ó÷åäßùí ìå ñõèìü 10 -15 ó÷Ýäéá ôï äåõôåñüëåðôï ðñïêáëåß ôçí øåõäáßóèçóç ôçò ïìáëÞò ìåôáêßíçóçò ôùí áíôéêåéìÝíùí Þ ôçò áëëáãÞò ôïõ ó÷Þìáôüò ôïõò. Ç äçìéïõñãßá ôïõ êéíïýìåíïõ ó÷åäßïõ âáóßæåôáé óå äýï ôå÷íéêÝò: ôçí êßíçóç ðÜíù óå ôñï÷éÜ êáé ôç äéáäï÷Þ äéáöïñåôéêþí óôÜóåùí. ÓõíÞèùò óôéò åöáñìïãÝò ÷ñçóéìïðïéåßôáé ï óõíäõáóìüò ôïõò. Óå êÜèå ðåñßðôùóç ðñÝðåé íá õðÜñ÷åé Ýíáò âçìáôïäüôçò ðïõ êáèïñßæåé ôï ñõèìü ìåôáôüðéóçò Þ åíáëëáãÞò ôùí óôÜóåùí. Óôç ëåéôïõñãßá óýñå êé Üóå ðáôÜìå ôï ðëÞêôñï ôïõ ðïíôéêéïý êáé åðéëÝãïõìå Ýíá áíôéêåßìåíï óôçí ïèüíç. Óýñïõìå (drag) ôï ðïíôßêé, åíþ åîáêïëïõèïýìå íá êñáôÜìå ðáôçìÝíï ôï ðëÞêôñï êáé ðáñáóýñïõìå ôï áíôéêåßìåíï óå ìéá Üëëç èÝóç. ÁöÞíïõìå ôï ðëÞêôñï ôïõ ðïíôéêéïý, ïðüôå ôáõôü÷ñïíá áöÞíåôáé (drop) êáé ôï áíôéêåßìåíï. ÕðÜñ÷ïõí äýï ôå÷íéêÝò óýñå êé Üóå. Ç áõôüìáôç êáé ç õðü Ýëåã÷ï.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. ÅêôåëÝóôå ôçí Üóêçóç 16-1. ÄïêéìÜóôå äéÜöïñåò ôá÷ýôçôåò êßíçóçò. 2. Áíôß ôçò çìéôïíéêÞò óõíÜñôçóçò ÷ñçóéìïðïéÞóôå ãåííÞôñéá ôõ÷áßùí áñéèìþí, þóôå ç ðåôáëïýäá óôçí Üóêçóç 16-1 íá ìåôáêéíåßôáé óå ôõ÷áßåò èÝóåéò óôçí êáôáêüñõöç äéåýèõíóç. 3. ÅêôåëÝóôå ôçí Üóêçóç 16-2. 4. ÅêôåëÝóôå ôçí Üóêçóç 16-3. ÐñïóèÝóôå ôõ÷áéüôçôá óôçí êßíçóç ìå ìéá ãåííÞôñéá ôõ÷áßùí áñéèìþí. 5. ÅêôåëÝóôå ôçí Üóêçóç 16-4 êáé 16-5. 6. ÅêôåëÝóôå ôçí Üóêçóç 16-4 ðÜíù óôç öüñìá ôçò Üóêçóçò 16-5. 7. ÅêôåëÝóôå ôçí Üóêçóç 16-7. Âåëôéþóôå ôïí êþäéêá, þóôå íá ìðïñåßôå íá äéá÷åéñéóôåßôå ðåñéóóüôåñá áðü Ýíá áíôéêåßìåíá. 8. ÅêôåëÝóôå ôçí Üóêçóç 16-8. 9. ÌÝ÷ñé ôþñá ÷ñçóéìïðïéÞóáìå áíôéêåßìåíá åéêüíáò ãéá íá äåßîïõìå ôïí ôñüðï ìå ôïí ïðïßï ìðïñïýìå íá åêìåôáëëåõôïýìå ôçí ôå÷íéêÞ óýñå êé Üóå. Ôá áíôéêåßìåíá áõôÜ äåí åßíáé äåóìåõôéêÜ, èá ìðïñïýóáí íá Þôáí ðëáßóéá êåéìÝíïõ, ëßóôåò, óõíäõáóìÝíåò ëßóôåò Þ Üëëá áíôéêåßìåíá ðïõ äÝ÷ïíôáé óõìâÜíôá ðïíôéêéïý. ÄçìéïõñãÞóôå ìéá öüñìá ÷ùñéóìÝíç óôç ìÝóç. Óå êÜèå ðåñéï÷Þ ôçò öüñìáò íá Ý÷ïõí ôïðïèåôçèåß áíôéêåßìåíá ðôõóóüìåíçò ëßóôáò öáêÝëùí, ëßóôáò öáêÝëùí, ëßóôáò áñ÷åßùí. Íá ãñáöôåß êþäéêáò, þóôå íá ìðïñåß ï ÷ñÞóôçò íá åðéëÝãåé Ýíá áñ÷åßï ôçò ìéáò ðåñéï÷Þò ôçò ïèüíçò, íá ôï óýñåé óôç ëßóôá öáêÝëùí ôçò Üëëçò êáé áí ôï áöÞíåé óå áõôÞ íá ãßíåôáé êáé ç áíôéãñáöÞ ôïõ áñ÷åßïõ áðü ôïí Ýíá öÜêåëï óôïí Üëëï.

Íá ðåñéãñÜöïõí ôé åßíáé ç äéåðáöÞ åëÝã÷ïõ ôùí ìÝóùí. Íá ðåñéãñÜöïõí ôéò éäéüôçôåò êáé ôá óõìâÜíôá ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí. Íá ÷ñçóéìïðïéïýí ôï áíôéêåßìåíï ðïëõìÝóùí êáé ôï áíôéêåßìåíï åíóùìÜôùóçò êáé óýíäåóçò ãéá íá äçìéïõñãïýí ðñïãñÜììáôá ìå äõíáôüôçôåò ðïëõìÝóùí. Ôï ëåéôïõñãéêü óýóôçìá ôùí Windows åßíáé Ýíá ëåéôïõñãéêü óýóôçìá áíåîÜñôçôï óõóêåõÞò (device-independent), ìå ôçí Ýííïéá üôé ïé åöáñìïãÝò ìðïñïýí íá ÷åéñéóôïýí ôéò óõóêåõÝò åíüò óõãêåêñéìÝíïõ ôýðïõ, áíåîÜñôçôá áðü ôá éäéáßôåñá êáôáóêåõáóôéêÜ ÷áñáêôçñéóôéêÜ ðïõ ôïõò Ý÷ïõí ðñïóäüóåé ïé êáôáóêåõáóôÝò ôïõò. ÁõôÞ ç áíåîáñôçóßá åîáóöáëßæåôáé ìå ôçí ðáñáäï÷Þ, üôé êÜèå óõóêåõÞ óõíïäåýåôáé áðü ôï êáôÜëëçëï ëïãéóìéêü, ôï ïðïßï åßíáé ãíùóôü ùò ïäçãüò óõóêåõÞò (device driver) êáé ôïõ ïðïßïõ ç óõìâáôüôçôá ìå ôá Windows åßíáé ìÝëçìá ôïõ êáôáóêåõáóôÞ ôçò.

Ç äéåðáöÞ åëÝã÷ïõ ôùí ìÝóùí Ôá Windows ðáñÝ÷ïõí ôç äéåðáöÞ åëÝã÷ïõ ìÝóùí (Media Control Interface - MCI), ìÝóù ôçò ïðïßáò ï ðñïãñáììáôéóôÞò ìðïñåß íá óõìðåñéëÜâåé óôéò åöáñìïãÝò ôïõ Þ÷ï, âßíôåï êáé êéíïýìåíï ó÷Ýäéï. Ç MCI åßíáé Ýíá óýíïëï áðü âéâëéïèÞêåò õðïñïõôéíþí êáé óõíáñôÞóåùí, ïé ïðïßåò åðéôñÝðïõí óôïõò ðñïãñáììáôéóôÝò íá äéá÷åéñéóôïýí óõóêåõÝò, ÷ùñßò íá åßíáé õðï÷ñåùìÝíïé íá êáôáíïÞóïõí ôéò åéäéêÝò êáé ðïëëÝò öïñÝò óýíèåôåò õðïñïõôßíåò, ðïõ ðåñéÝ÷ïíôáé óôï ëåéôïõñãéêü óýóôçìá Þ óôïõò ïäçãïýò óõóêåõþí. Ïé ðñïãñáììáôéóôÝò ìðïñïýí íá áíáöÝñïíôáé óôéò óõóêåõÝò ìå óõìâïëéêÜ ïíüìáôá êáé íá æçôïýí ôçí åêôÝëåóç óõãêåêñéìÝíùí ëåéôïõñãéþí, áðïóôÝëïíôáò ôõðïðïéçìÝíåò äéáôáãÝò óå ìïñöÞ óõìâïëïóåéñþí. Ïé óõóêåõÝò ðïëõìÝóùí, ðïõ ìðïñåß íá õðÜñ÷ïõí óå Ýíá õðïëïãéóôéêü óýóôçìá, åßíáé ïé êÜñôåò Þ÷ïõ, ïé áêïëïõèçôÝò MIDI (sequencers), ïé óõóêåõÝò CD-ROM, ïé óõóêåõÝò áêïõóôéêþí CD, ïé óõóêåõÝò âéíôåïôáéíéþí êáé âéíôåïäßóêùí. Ç äéåðáöÞ MCI äéáêñßíåé ôéò óõóêåõÝò ðïëõìÝóùí óå áðëÝò (simple) êáé óå óýíèåôåò (compound). ÁðëÝò åßíáé ïé óõóêåõÝò ðïõ äåí ÷ñåéÜæïíôáé êÜðïéï áñ÷åßï äåäïìÝíùí êáé áíáæçôïýí óå ß÷íç (tracks) ôçí ðëçñïöïñßá ðÜíù óôá öõóéêÜ ìÝóá, ð.÷. áðü ôï áêïõóôéêü CD Þ áðü ôïí âéíôåïäßóêï. Ïé óõóêåõÝò áõôÝò ðáßæïõí êïììÜôéá êáé áíôëïýí ôçí ðëçñïöïñßá ðÜíù áðü ôï öõóéêü ìÝóï (äßóêï) äéáâÜæïíôáò ôá track. Ïé óýíèåôåò óõóêåõÝò ùóôüóï ÷ñåéÜæïíôáé Ýíá áñ÷åßï äåäïìÝíùí. Ãéá ðáñÜäåéãìá, ç êÜñôá Þ÷ïõ áíôëåß ôïí Þ÷ï áðü áñ÷åßï Þ÷ïõ. Áí êáé ïé êáôáóêåõáóôÝò õëéêïý óõíå÷þò âåëôéþíïõí ôéò óõóêåõÝò ôïõò êáé åéóÜãïõí êáéíïýñãéåò óôçí áãïñÜ, ç ïíïìáôïëïãßá äåí åßíáé ôõðïðïéçìÝíç. Óôïí ðßíáêá 17-1 äßíïíôáé ôá ôõðïðïéçìÝíá ïíüìáôá ôùí óõóêåõþí ðïõ ìðïñïýí íá åëåã÷èïýí áðü ôï MCI. Óõìâïëéóìüò CDAudio WaveAudio Sequencer Dat Animation VCR VideoDisk AVIVideo

ÓõóêåõÞ Áêïõóôéêü CD (audio CD player) ÊÜñôá Þ÷ïõ (sound card) MIDI sequencer (áñ÷åßá .mid Þ .rmi) ÓõóêåõÞ øçöéáêïý Þ÷ïõ óå ôáéíßá (digital audio tape player) "ÓõóêåõÞ" ãéá ðñïâïëÞ êéíïýìåíïõ ó÷åäßïõ (animation device) Óõóêåýç âéíôåïôáéíßáò (videotape recorder or player) Âéíôåïäßóêïò Áñ÷åßï ðïõ ðåñéÝ÷åé âßíôåï

Ðßíáêáò 17-1. Ïé óõóêåõÝò MCI ðïõ ìðïñïýí íá åëåã÷èïýí áðü ôá Windows.

Ïé ðåñéóóüôåñåò óõóêåõÝò ðïõ åëÝã÷ïíôáé ìÝóù ôïõ MCI Ý÷ïõí Ýíá óýíïëï áðü êïéíÜ ÷áñáêôçñéóôéêÜ ðïõ áöïñïýí ôïí ôñüðï ëåéôïõñãßáò ôïõò, üðùò îåêßíçìá, óôáìÜôçìá, ðáýóç, åðéóôñïöÞ ê.Ü. Ãéá ôçí ðñáãìáôïðïßçóç áõôþí ôùí ëåéôïõñãéþí áðïóôÝëëïíôáé

Åéêüíá 16-7.

208

209


óôç óõóêåõÞ äéáôáãÝò. Ïé äéáôáãÝò áõôÝò Ý÷ïõí ôõðïðïéçèåß. Óôïí ðßíáêá 17-2 äßíïíôáé ïé ôõðïðïéçìÝíåò êáôÜ MCI äéáôáãÝò.

ÄéáôáãÞ Open Close Play Pause Stop Back Step Prev Next Seek Record Eject Save

Ëåéôïõñãßá ¢íïéîå ôç óõóêåõÞ Êëåßóå ôç óõóêåõÞ Ðáßîå ôï ðåñéå÷üìåíï ôïõ ìÝóïõ (Þ÷ï, âßíôåï, …) ÄéÝêïøå ðñïóùñéíÜ ôï ðáßîéìï ÓôáìÜôá ÅðÝóôñåøå óå ðñïçãïýìåíá ß÷íç (tracks) Ðñï÷þñçóå óå åðüìåíá ß÷íç ÅðÝóôñåøå óôçí áñ÷Þ ôïõ ðñïçãïýìåíïõ ß÷íïõò Ðñï÷þñçóå óôçí áñ÷Þ ôïõ åðüìåíïõ ß÷íïõò ÊéíÞóïõ óå óõãêåêñéìÝíç èÝóç ÊÜíå åããñáöÞ Áðüâáëëå ôï öõóéêü ìÝóï (ð.÷ äßóêï) áðü ôç óõóêåõÞ ÁðïèÞêåõóå óå áñ÷åßï

Ðßíáêáò 17-2. Ïé äéáôáãÝò ðñïò ôéò óõóêåõÝò MCI.

Ôï áíôéêåßìåíï ðïëõìÝóùí Ç VB äéáèÝôåé Ýíá åéäéêü áíôéêåßìåíï åëÝã÷ïõ, ôï áíôéêåßìåíï ðïëõìÝóùí (Microsoft Multimedia Control), ìå ôï ïðïßï ïé ðñïãñáììáôéóôÝò ìðïñïýí íá ÷åéñßæïíôáé ìå áðëü ôñüðï ôéò óõóêåõÝò MCI. Áí óôçí åñãáëåéïèÞêç äåí õðÜñ÷åé ôï áíôßóôïé÷ï åñãáëåßï, ãéá ôçí ðñïóèÞêç ôïõ êÜíïõìå ôá åîÞò: 1. ÅðéëÝãïõìå Project | Components áðü ôç ãñáììÞ ìåíïý. 2. Óôï ðáñÜèõñï Components ðïõ èá åìöáíéóôåß åðéëÝãïõìå ôïí êáñôåëïäåßêôç Controls. 3. ÊÜíïõìå êëéê óôç ãñáììÞ Microsoft Multimedia Control. 4. Ôï åéêïíßäéï ôïõ áíôéêåéìÝíïõ åìöáíßæåôáé óôçí åñãáëåéïèÞêç.

Óå ìéá öüñìá ìðïñïýìå íá Ý÷ïõìå ðïëëÜ áíôéêåßìåíá ðïëõìÝóùí ðñïêåéìÝíïõ íá åëÝã÷ïõìå ôáõôü÷ñïíá ðïëëÝò óõóêåõÝò (÷ñçóéìïðïéïýìå Ýíá áíôéêåßìåíï áíÜ óõóêåõÞ). Ï ôýðïò ôçò óõóêåõÞò ðïõ åëÝã÷åé ôï áíôéêåßìåíï ðïëõìÝóùí ïñßæåôáé óôçí éäéüôçôá DeviceType. Ç óôÞëç "Óõìâïëéóìüò" ôïõ ðßíáêá 17-1 ðåñéÝ÷åé åíäåéêôéêÝò ôéìÝò ðïõ ìðïñåß íá ðÜñåé áõôÞ ç éäéüôçôá. ¸ôóé, áí ðñüêåéôáé ôï áíôéêåßìåíï ðïëõìÝóùí íá åëÝã÷åé ôçí êÜñôá Þ÷ïõ äßíïõìå óôçí éäéüôçôá áõôÞ ôçí ôéìÞ waveaudio, áí ôï áíôéêåßìåíï ðïëõìÝóùí åëÝã÷åé ôç óõóêåõÞ CD-ROM, óôçí ïðïßá Ý÷åé ôïðïèåôçèåß Ýíá áêïõóôéêü CD, äßíïõìå ôçí ôéìÞ CDAudio êëð. Ïé äéáôáãÝò ãéá ôïí Ýëåã÷ï ìéáò óõóêåõÞò ìðïñïýí íá äïèïýí ìÝóù ôçò éäéüôçôáò Command ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí. Ðáñáäåßãìáôá 17-1. á) Ïé åíôïëÝò:

MMControl1.DeviceType = "CDAudio" 'Ôýðïò óõóêåõÞò MMControl1.Command = "Open" 'Aíïéîå ôç óõóêåõÞ MMControl1.Command = "Play" 'Ðáßîå ôïí Þ÷ï ôïõ ðñþôïõ track

êáèïñßæïõí üôé ï ôýðïò ôçò óõóêåõÞò åßíáé CDAudio (áêïõóôéêü CD), áíïßãïõí ôç óõóêåõÞ, ìå ôç äéáôáãÞ Open, êáé åíôïëïäïôïýí ôï ðáßîéìï ôïõ ìïõóéêïý êïììáôéïý, ðïõ Ý÷åé óåéñÜ, ìå ôç äéáôáãÞ Play. â) Ãéá íá åêìåôáëëåõôïýìå óùóôÜ ôïõò ðüñïõò ôïõ óõóôÞìáôïò èá ðñÝðåé, ðñéí ôåñìáôßóïõìå ôçí åöáñìïãÞ ìáò, íá êëåßóïõìå ôéò áíïé÷ôÝò óõóêåõÝò. Ãé' áõôü óôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò ðïõ îåöïñôþíåé ìéá öüñìá ãñÜöïõìå:

Private Sub Form_Unload (Cancel Ás Integer) MMControl1.Command = "Close" 'Êëåßóå ôç óõóêåõÞ End Sub

ÊáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò, ôï áíôéêåßìåíï ðïëõìÝóùí ìðïñåß íá åìöáíßæåôáé Þ íá åßíáé áüñáôï. Áí åðéèõìïýìå ôçí áëëçëåðßäñáóç ìå ôï ÷ñÞóôç äßíïõìå óôéò éäéüôçôÝò ôïõ Enabled êáé Visible ôçí ôéìÞ True. Áí äå èÝëïõìå ï ÷ñÞóôçò íá Ý÷åé ïðïéïíäÞðïôå Ýëåã÷ï ðÜíù óôç óõóêåõÞ äßíïõìå óôçí éäéüôçôá Visible ôçí ôéìÞ False (ìéá åöáñìïãÞ ìðïñåß íá åëÝã÷åé MCI óõóêåõÝò ìå Þ ÷ùñßò ôçí áëëçëåðßäñáóç ôïõ ÷ñÞóôç). Áðïêñýðôïíôáò ôï áíôéêåßìåíï ðïëõìÝóùí ìðïñïýìå íá ôï ÷ñçóéìïðïéÞóïõìå ãéá íá êÜíïõìå áðëÝò ëåéôïõñãßåò, üðùò íá ðáßîïõìå óõãêåêñéìÝíá áñ÷åßá ôýðïõ .wav. ¼ôáí åìöáíßæïõìå ôï áíôéêåßìåíï ðïëõìÝóùí, ôá ðëÞêôñá ôïõ ìðïñïýí íá ðáñïõóéÜæïíôáé ïñéæüíôéá Þ êáôáêüñõöá. Áõôü ôï ñõèìßæïõìå ìÝóù ôçò éäéüôçôáò Orientation (åîïñéóìïý ôéìÞ 0 ãéá ïñéæüíôéá äéåõèÝôçóç Þ ôéìÞ 1 ãéá êáôáêüñõöç äéåõèÝôçóç). ¢óêçóç 17-1. Óå ìéá öüñìá ôïðïèåôïýìå Ýíá áíôéêåßìåíï ðïëõìÝóùí, ôï ïðïßï ïíïìÜæïõìå Applause. ÈÝëïõìå íá äçìéïõñãÞóïõìå ôïí êþäéêá, ï ïðïßïò íá ðáßæåé ôï ðåñéå÷üìåíï ôïõ áñ÷åßïõ C:\Windows\Media\Office97\Applause.wav, ôï ïðïßï ðåñéÝ÷åé ôïí Þ÷ï

Åéêüíá 17-1. ÐñïóèÞêç ôïõ Microsoft Multimedia Control óôçí åñãáëåéïèÞêç Ôï áíôéêåßìåíï ðïëõìÝóùí ðåñéëáìâÜíåé Ýíá óýíïëï áðü ðëÞêôñá, ôá ïðïßá áíôéóôïé÷ïýí óôéò ëåéôïõñãßåò ðïõ äéáêñß��ïõìå óå ìéá ôõðéêÞ óõóêåõÞ êáóåôïöþíïõ Þ óå ìéá ôõðéêÞ óõóêåõÞ âßíôåï ôçò ôçëåüñáóçò. Ðñïçãïýìåíï Previous

Ðáßîå Play

Ìðñïò Step

ÓôáìÜôá Áðüâáëëå Stop Eject

Åéêüíá 17-2. Ôá ðëÞêôñá ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí Åðüìåíï Next

ÄéÜêïøå Pause

Ðßóù Back

ÅíÝãñáøå Record

210

÷åéñïêñïôçìÜôùí. Óôï ðáñÜèõñï êþäéêá ãñÜöïõìå:

Private Sub Form_Load() Applause.DeviceType = "WaveAudio" Applause.Visible = False Applause.Enabled = False Applause.Filename = "C:\Windows\Media\Office97\Applause.wav" Applause.Command = "Open" Applause.Command = "Play" End Sub Ï ôýðïò ôçò óõóêåõÞò êáèïñßóôçêå óå WaveAudio áðü ôçí éäéüôçôá DeviceType êáé ôï áíôéêåßìåíï ðïëõìÝóùí áðïêñýöèçêå äßíïíôáò ôçí ôéìÞ False óôçí éäéüôçôá Visible. Ç óõóêåõÞ WaveAudio åßíáé ìéá óýíèåôç óõóêåõÞ êáé áðáéôåß êáé ôïí êáèïñéóìü ôïõ áñ÷åßïõ áðü ôï ïðïßï èá áíôëçèåß ï Þ÷ïò, ãé' áõôü êáé äüèçêå ç êáôÜëëçëç ôéìÞ óôçí éäéüôçôá

Filename. ÔÝëïò, ç óõóêåõÞ áíïß÷èçêå ìå ôç äéáôáãÞ Open êáé æçôÞèçêå ôï ðáßîéìï ôïõ Þ÷ïõ ìå ôç äéáôáãÞ Play. 211

Ç äéáôáãÞ Play ãßíåôáé áðïäåêôÞ áðü ôç óõóêåõÞ ìüíïí áí Ý÷åé ðñïçãçèåß ç äéáôáãÞ Open.


Åêôüò áðü ôç äõíáôüôçôá åíåñãïðïßçóçò/áðåíåñãïðïßçóçò ïëüêëçñïõ ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí, ìðïñïýìå åðéëåêôéêÜ íá åíåñãïðïéÞóïõìå Þ íá áðåíåñãïðïéÞóïõìå ìåìïíùìÝíá

Áí èÝëïõìå íá åëÝãîïõìå áí ìéá áíïé÷ôÞ óõóêåõÞ Ý÷åé Þ ü÷é êÜðïéåò óõãêåêñéìÝíåò

ðëÞêôñá ôïõ. Áõôü ôï ðåôõ÷áßíïõìå ìÝóù ôçò éäéüôçôáò ðëÞêôñïEnabled, üðïõ ðëÞêôñï

ðáñÜäåéãìá, ç óõóêåõÞ CDAudio õðïóôçñßæåé ôç äéáôáãÞ Eject, ðïõ áðïâÜëëåé ôï CD áðü ôç

ìðïñåß íá åßíáé ôï óõíèåôéêü Back, Step, Play êëð áíÜëïãá ìå ôçí áããëéêÞ ïíïìáóßá ôïõ ðëÞêôñïõ ðïõ ðåñéãñÜöåôáé óôçí åéêüíá 17-2. ÁíÜëïãç äõíáôüôçôá Ý÷ïõìå ãéá ôçí åìöÜíéóç Þ áðüêñõøç ìåìïíùìÝíùí ðëÞêôñùí ìÝóù ôçò éäéüôçôáò ðëÞêôñïVisible. ÊáèÝíá áðü ôá 9 ðëÞêôñá Ý÷åé ôçí éäéüôçôá Enabled êáé Visible. Ãéá ðáñÜäåéãìá, ãéá ôï ðëÞêôñï Back Ý÷ïõìå ôéò éäéüôçôåò BackEnabled êáé BackVisible.

äõíáôüôçôåò, åëÝã÷ïõìå ôéò éäéüôçôåò CanEject, CanPlay, CanRecord êáé CanStep. Ãéá óõóêåõÞ, áëëÜ ç óõóêåõÞ WaveAudio äåí ôçí õðïóôçñßæåé, áöïý üðùò Ý÷ïõìå Þäç áíáöÝñåé ðáßæåé Þ÷ï áðü áñ÷åßï, ïðüôå ôé íá áðïâÜëëåé. Ðáñáäåßãìáôá 17-4. Ïé åíôïëÝò:

¼ëåò ïé ëåéôïõñãßåò äåí åßíáé äéáèÝóéìåò óå üëåò ôéò óõóêåõÝò. Ãéá ðáñÜäåéãìá, äåí ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ôç äéáôáãÞ Record ãéá Ýíá áêïõóôéêü CD. Ãéá ôï ëüãï áõôü ìðïñïýìå íá èÝóïõìå ôçí éäéüôçôá AutoEnable óå ôéìÞ True, þóôå ç VB íá áðåíåñãïðïéÞóåé áõôüìáôá ôá ðëÞêôñá ðïõ áíôéóôïé÷ïýí óå ìç äéáèÝóéìåò ëåéôïõñãßåò. Ç ñýèìéóç True ôçò AutoEnable áíáéñåß üëåò ôéò ôéìÝò ðëÞêôñïEnabled. ÅðïìÝíùò, ãéá íá

MMC.StepVisible = MMC.CanStep MMC.PlayVisible = MMC.CanPlay MMC.RecordVisible = MMC.CanRecord MMC.EjectVisible = MMC.CanEject

ìðïñïýìå íá Ý÷ïõìå ôïí ðëÞñç Ýëåã÷ï ôùí ðëÞêôñùí ìå ôéò éäéüôçôåò ðëÞêôñïEnabled, ç

åìöáíßæïõí Þ áðïêñýðôïõí ôá ðåñéôôÜ ðëÞêôñá, áíÜëïãá ìå ôï åßäïò ôçò óõóêåõÞò ðïõ Ý÷ïõìå åê÷ùñÞóåé óôï áíôéêåßìåíï ðïëõìÝóùí MMC.

éäéüôçôá AutoEnable ðñÝðåé íá Ý÷åé ôçí ôéìÞ False. ¼ôáí ôï áíôéêåßìåíï ðïëõìÝóùí åßíáé

Ðáôþíôáò ôá ðëÞêôñá ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí ðñïêýðôïõí ôá óõìâÜíôá ðëÞêôñïClick.

ïñáôü êáé ç éäéüôçôÜ ôïõ AutoEnable Ý÷åé ôçí ôéìÞ True, ç äéáôáãÞ Open åíåñãïðïéåß ôá ðëÞêôñá ðïõ ìðïñåß íá õðïóôçñßîåé ç óõãêåêñéìÝíç MCI óõóêåõÞ. ÐáñÜäåãìá 17-2.

ÃñÜöïíôáò êþäéêá óôéò áíôßóôïé÷åò õðïñïõôßíåò äéá÷åßñéóçò óõìâÜíôùí, ìðïñïýìå íá âåëôéþóïõìå ôçí áëëçëåðßäñáóç ìå ôïí ÷ñÞóôç. Ãéá ðáñÜäåéãìá, íá æçôÞóïõìå åðéâåâáßùóç ôçò äéáôáãÞò êáé áí ÷ñåéáóôåß áêýñùóÞ ôçò. Áõôü ôï ðåôõ÷áßíïõìå ìÝóù ôçò ðáñáìÝôñïõ Cancel. Áí ìÝóá óôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò äþóïõìå óôçí ðáñÜìåôñï Cancel

Óôïí êþäéêá ðïõ áêïëïõèåß åíåñãïðïéïýíôáé ìüíïí ôá ðëÞêôñá Play êáé Stop êáé óôï

ôçí ôéìÞ True, ãßíåôáé áðüññéøç ôïõ óõìâÜíôïò.

áíôéêåßìåíï ðïëõìÝóùí ìå üíïìá CDPlayer åê÷ùñåßôáé ìéá óõóêåõÞ ôýðïõ CDAudio. Ãéá

¼ôáí ðåñáôùèåß ç ëåéôïõñãßá ðïõ áíôéóôïé÷åß óôá ðëÞêôñá, ðñïêýðôïõí óõìâÜíôá ðëÞêôñïCompleted, ðïõ ìáò åðéôñÝðïõí ìÝóù ôçò ðáñáìÝôñïõ ErrorCode íá åëÝãîïõìå

íá ìðïñïýìå íá Ý÷ïõìå ôïí ðëÞñç Ýëåã÷ï ìå ôéò éäéüôçôåò ðëÞêôñïEnabled, ç éäéüôçôá.

AutoEnable ôßèåôáé False. Private Sub Form_Load() CDPlayer.DeviceType = "CDAudio" CDPlayer.AutoEnable = False CDPlayer.BackEnabled = False CDPlayer.StepEnabled = False CDPlayer.PlayEnabled = True CDPlayer.PauseEnabled = False CDPlayer.PrevEnabled = False CDPlayer.NextEnabled = False CDPlayer.StopEnabled = True CDPlayer.RecordEnabled = False CDPlayer.EjectEnabled = False CDPlayer.Command = "Open" End Sub

Ðáñáäåßãìáôá 17-5. Ìå ôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò PlayClick æçôÜìå åðéâåâáßùóç åêôÝëåóçò ôçò äéáôáãÞò Play, ðïõ ðñïÝñ÷åôáé áðü ôï ðÜôçìá ôïõ áíôßóôïé÷ïõ ðëÞêôñïõ ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí ìå üíïìá MMC. Áí äïèåß èåôéêÞ áðÜíôçóç (ðëÞêôñï Ok ôçò óõíÜñôçóçò MsgBox), äéåêðåñáéþíåôáé ç äéáôáãÞ êáé ìå ôç óõìðëÞñùóÞ ôçò åêôåëåßôáé ç õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò PlayCompleted. Ôüôå, óôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò

Åéêüíá 17-3. Áíôéêåßìåíï ðïëõìÝóùí ìå åíåñãïðïéçìÝíá êáé áðåíåñãïðïéçìÝíá ðëÞêôñá

ÐáñÜäåãìá 17-3. Óôïí êþäéêá ðïõ áêïëïõèåß, óôï áíôéêåßìåíï ðïëõìÝóùí ìå üíïìá WavePlayer, åíåñãïðïéïýíôáé ôá ðëÞêôñá Previous, Next, Play êáé Stop êáé áðïêñýðôïíôáé ôá ðëÞêôñá Step, Back êáé Eject.

Private Sub Form_Load() WavePlayer.DeviceType = "WaveAudio" WavePlayer.filename = _ "C:\WINDOWS\MEDIA\Ctmelody.wav" WavePlayer.AutoEnable = True Åéêüíá 17-4. Áíôéêåßìåíï ðïëõìÝóùí ìå WavePlayer.Command = "Open" êñõììÝíá ðëÞêôñá End Sub Óôï ðáñÜäåéãìÜ ìáò, ôï Üíïéãìá ôçò óõóêåõÞò åíåñãïðïéåß ôá ðëÞêôñá Prev, Next, Play,

Back êáé Step. ¼ôáí ðáôÜìå ôï ðëÞêôñï Play åíåñãïðïéåßôáé ôï ðëÞêôñï Stop. ÁíÜëïãá, ôï Üíïéãìá ìéáò CDAudio óõóêåõÞò åíåñãïðïéåß ôá ðëÞêôñá Prev, Next, Play êáé Eject, åíþ üôáí ðáôÜìå ôï ðëÞêôñï Play åíåñãïðïéïýíôáé ôá ðëÞêôñá Stop êáé Pause. 212

áí êáôÜ ôçí åêôÝëåóç ôçò ëåéôïõñãßáò ðñïÝêõøå êÜðïéï ëÜèïò.

PlayCompleted, åîåôÜæåôáé ç ðáñÜìåôñïò ErrorCode, ðïõ ìáò åíçìåñþíåé ãéá ôçí åðéôõ÷Þ Þ ìç åðéôõ÷Þ Ýêâáóç ôçò äéáôáãÞò Play. Áí üìùò äïèåß áñíçôéêÞ áðÜíôçóç (ðëÞêôñï Cancel ôçò óõíÜñôçóçò MsgBox), äßíïõìå óôçí ðáñÜìåôñï Cancel ôçí ôéìÞ True êáé áêõñþíïõìå ôç äéáôáãÞ Play. Private Sub MMC_PlayClick(Cancel As Integer) If MsgBox("ÐáôÞóáôå ôï ðëÞêôñï", vbOKCancel)= vbOK Then Cancel = False Else MsgBox "ÄéáêïðÞ ôçò åêôÝëåóçò" Cancel = True End If End Sub Private Sub MMC_PlayCompleted(Errorcode As Long) If ErrorCode <> 0 Then MsgBox "ÐñïÝêõøå óöÜëìá êáôÜ ôçí åêôÝëåóç." Else MsgBox "H äéáôáãÞ åêôåëÝóôçêå åðéôõ÷þò." End If End Sub ÐïëëÝò äéáôáãÝò MCI ÷ñåéÜæïíôáé Ýíá áðñïóäéüñéóôï ÷ñïíéêü äéÜóôçìá ãéá íá ïëïêëçñþóïõí ôç ëåéôïõñãßá ôïõò. Ãéá ðáñÜäåéãìá, ôï ðáßîéìï åíüò áñ÷åßïõ Þ÷ïõ áðáéôåß ÷ñüíï ðïõ åîáñôÜôáé áðü ôç äéÜñêåéá ôïõ øçöéïðïéçìÝíïõ Þ÷ïõ. Áí èÝëïõìå íá ìáò ãíùóôïðïéçèåß ôï ðÝñáò ìéáò ëåéôïõñãßáò ðïõ áíôéóôïé÷åß óå äéáôáãÞ MCI, äßíïõìå óôçí éäéüôçôá Notify ôçí ôéìÞ 213


True, ðñéí æçôÞóïõìå ôçí åêôÝëåóç ôçò äéáôáãÞò. Ôüôå ìüíïí, ìå ôçí ïëïêëÞñùóç ôçò äéáôáãÞò ðñïêáëåßôáé ôï óõìâÜí Done êáé åêôåëåßôáé ç áíôßóôïé÷ç õðïñïõôßíá. Ç õðïñïõôßíá áõôÞ ìÝóù ôçò ðáñáìÝôñïõ NotifyCode ìáò åíçìåñþíåé ãéá ôçí åðéôõ÷Þ Þ ìç Ýêâáóç ôçò äéáôáãÞò. Ïé äõíáôÝò ôéìÝò ôçò ðáñáìÝôñïõ NotifyCode êáé ïé áíôßóôïé÷åò óôáèåñÝò ôïõò åßíáé: 1 mciSuccessful 2 mciSuperseded 4 mciAborted 8 mciFailure

Ç ëåéôïõñãßá åêôåëÝóôçêå ïìáëþò Ç äéáôáãÞ åêôïðßóôçêå áðü Üëëç Ç äéáôáãÞ äéáêüðçêå áðü ôïí ÷ñÞóôç Ç ëåéôïõñãßá ôçò äéáôáãÞò áðÝôõ÷å

¢óêçóç 17-2. Íá äçìéïõñãçèåß öüñìá óôçí ïðïßá ôï ðÜôçìá åíüò ðëÞêôñïõ äéáôáãÞò íá ðñïêáëåß ôï ðáßîéìï åíüò âßíôåï. ¼ôáí ïëïêëçñùèåß ôï ðáßîéìï ôïõ âßíôåï íá åìöáíßæåôáé óå äéáëïãéêü ðáñÜèõñï ôï ìÞíõìá "ÔÝëïò". Äçìéïõñãïýìå ðëÞêôñï äéáôáãÞò ìå üíïìá PlayVideo êáé áíôéêåßìåíï ðïëõìÝóùí ìå üíïìá MMC êáé ãñÜöïõìå ôïí êþäéêá:

Private Sub Form_Load() MMC.DeviceType = "AVIVideo" MMC.Filename = "C:\program files\devstudio\vb\graphics\avis\count16.avi" MMC.Visible = False End Sub Private Sub PlayVideo_Click() MMC.Command = "Open" MMC.Notify = True MMC.Command = "Play" End Sub Private Sub MMC_Done(NotifyCode As Integer) MsgBox "ÔÝëïò", , "Done" End Sub Private Sub Form_Unload(Cancel As Integer) Åéêüíá 17-5. Ôï âßíôåï ôïõ áñ÷åßïõ count16.avi MMC.Command = "Close" ðáñïõóéÜæåôáé óå îå÷ùñéóôü ðáñÜèõñï. End Sub Óçìáíôéêü óõìâÜí ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí åßíáé ôï StatusUpdate, ðïõ ëåéôïõñãåß óáí ôï óõìâÜí Timer ôïõ ÷ñïíïìÝôñïõ. Ç VB êáëåß óõíå÷þò ôçí õðïñïõôßíá äéá÷åßñéóçò óõìâÜíôïò StatusUpdate óå ôáêôÜ ÷ñïíéêÜ äéáóôÞìáôá, ôá ïðïßá ïñßæïõìå áðü ôçí éäéüôçôá

UpdateInterval. Ìå áõôü ôï óõìâÜí åßíáé äõíáôüí íá áíé÷íåýïõìå ôçí êáôÜóôáóç ðïõ âñßóêåôáé ç óõóêåõÞ MCI, åëÝã÷ïíôáò ôçí éäéüôçôá Mode. Ïé äõíáôÝò ôéìÝò áõôÞò ôçò éäéüôçôáò êáé ïé áíôßóôïé÷åò óôáèåñÝò ôïõò åßíáé:

mciModeNotOpen Ç óõóêåõÞ äåí åßíáé áíïé÷ôÞ ¸÷åé ãßíåé äéáêïðÞ áðü äéáôáãÞ Stop mciModeStop Ç óõóêåõÞ âñßóêåôáé óå ëåéôïõñãßá mciModePlay Ãßíåôáé åããñáöÞ (ç÷ïãñÜöçóç, âéíôåïóêüðçóç) mciModeRecord Ç ìåôÜâáóç óå íÝá èÝóç âñßóêåôáé óå åîÝëéîç mciModeSeek mciModePause ¸÷åé ãßíåé äéáêïðÞ áðü äéáôáãÞ Pause 529 Ç óõóêåõÞ åßíáé Ýôïéìç 530 mciModeReady 524 525 526 527 528

Ç éäéüôçôá TimeFormat êáèïñßæåé ôïí ôñüðï áíáöïñÜò ôùí ìïíÜäùí ÷ñüíïõ ðïõ

¢óêçóç 17-2. Íá äçìéïõñãçèåß öüñìá ìå ôçí ïðïßá íá åßíáé äõíáôÞ ç åðéëïãÞ ôïõ áñ÷åßïõ ðïëõìÝóùí, ðïõ ôï ðåñéå÷üìåíï èÝëïõìå íá áêïýóïõìå (áí åßíáé áñ÷åßï Þ÷ïõ) Þ íá äïýìå (áí åßíáé áñ÷åßï âßíôåï). Áí åðéëåãåß áñ÷åßï Þ÷ïõ íá ðáñïõóéÜæåôáé ç äéÜñêåéÜ ôïõ óå ÷éëéïóôÜ ôïõ äåõôåñïëÝðôïõ êáé áí åßíáé áñ÷åßï âßíôåï íá ðáñïõóéÜæåôáé ç äéÜñêåéÜ ôïõ óå ðëÞèïò ðëáéóßùí. 1. Óå ìéá öüñìá ôïðïèåôïýìå Ýíá ðëáßóéï (frame) êáé óôï åóùôåñéêü ôïõ äýï ðëÞêôñá åðéëïãÞò, ôï OptWav êáé ôï OptAvi. ¼ôáí åðéëÝãåôáé ôï ðñþôï èá äçëþíåôáé üôé èÝëïõìå íá ðáßæåôáé Þ÷ïò êáé üôáí åðéëÝãåôáé ôï äåýôåñï èá äçëþíåôáé üôé èÝëïõìå íá ðáßæåôáé âßíôåï. 2. Ôïðïèåôïýìå Ýíá áíôéêåßìåíï êïéíïý äéáëïãéêïý ðáñáèýñïõ, óôï ïðïßï äßíïõìå ôï üíïìá Dialog. Ôï äéáëïãéêü ðáñÜèõñï ðïõ èá áíïßãåôáé èá åßíáé ðáñÜèõñï áíïßãìáôïò áñ÷åßïõ ìå êáôÜëëçëï ößëôñï ð.÷. *.wav Þ *.avi. 3. Ôïðïèåôïýìå Ýíá áíôéêåßìåíï ðïëõìÝóùí ìå üíïìá MMC. Áðü ôá ðëÞêôñá áõôïý ôïõ áíôéêåéìÝíïõ èá ðáßæåôáé ôï ðåñéå÷üìåíï ôïõ áñ÷åßïõ, ðïõ èá åðéëÝãåôáé êÜèå öïñÜ. 4. Ôïðïèåôïýìå ìéá åôéêÝôá ìå üíïìá Status. Ôçí éäéüôçôá Caption áõôÞò ôçò åôéêÝôáò èá ôçí åíçìåñþíïõìå êÜèå öïñÜ ðïõ åêôåëåßôáé ç õðïñïõôßíá äéá÷åßñéóçò ôïõ óõìâÜíôïò StatusUpdate. 5. ÃñÜöïõìå ôïí êþäéêá:

Private Sub OptAvi_Click() Dialog.Filter = "all files (*.*)|*.*|.AVI files|*.AVI" Dialog.FilterIndex = 2 'Ðáñïõóßáóå ôï äåýôåñï óôïé÷åßï (AVI) 'Äéáëïãéêü ðáñÜèõñï Open Dialog.ShowOpen MMC.DeviceType = "AVIVideo" MMC.filename = Dialog.Filename MMC.UpdateInterval = 5 '5 msecs MMC.TimeFormat = mciformatframes MMC.Command = "Ïpen" End Sub Private Sub OptWav_Click() Dialog.Filter = "all files (*.*)|*.*|.WAV files|*.WAV" Dialog.FilterIndex = 2 'Ðáñïõóßáóå ôï äåýôåñï óôïé÷åßï (WAV) 'Äéáëïãéêü ðáñÜèõñï Open Dialog.ShowOpen MMC.DeviceType = "WaveAudio" MMC.filename = Dialog.Filename MMC.UpdateInterval = 5 '5 msecs MMC.TimeFormat = mciformatmilliseconds MMC.Command = "Ïpen" End Sub Private Sub MMC_StatusUpdate() If OptAvi Then Status.Caption = "Frame " & _ MMC.Position & " of " & MMC.Length Else Status.Caption = "Milliseconds:" & _ MMC.Position & " of " & MMC.Length Åéêüíá 17-6. Ôï ðáñÜèõñï ôçò åöáñìïãÞò åíþ End If ðáßæåôáé áñ÷åßï Þ÷ïõ. End Sub Private Sub Form_Unload(Cancel As Integer) MMC.Command = "Close" End Sub

÷ñçóéìïðïéïýíôáé áðü ôéò éäéüôçôåò ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí. Ð.÷. ãéá ôçí éäéüôçôá

Position (èÝóç áðü ôçí áñ÷Þ ôïõ êïììáôéïý ðïõ ðáßæåôáé) êáé ãéá ôçí éäéüôçôá Length (ìÝãåèïò ôïõ êïììáôéïý). 0 1 2 3

mciFormatMilliseconds ×éëéïóôÜ ôïõ äåõôåñïëÝðôïõ mciFormatHms ¿ñåò, ëåðôÜ, äåõôåñüëåðôá mciFormatMsf ËåðôÜ, äåõôåñüëåðôá, ðëáßóéá mciFormatFrames Ðëáßóéá 214

Óýíäåóç êáé ÅíóùìÜôùóç ÁíôéêåéìÝíùí ¸óôù üôé óå ìéá åöáñìïãÞ ðïëõìÝóùí èÝëïõìå íá äçìéïõñãÞóïõìå ìéá ðåñéï÷Þ, óôçí ïðïßá ïé ÷ñÞóôåò èá ìðïñïýí íá æùãñáößæïõí. Áíôß íá ãñÜøïõìå êþäéêá ðïõ õëïðïéåß üëåò ôéò ëåéôïõñãßåò åíüò Þäç õðÜñ÷ïíôïò ðñïãñÜììáôïò ìðïñïýìå íá ôçí ðåñéãñÜøïõìå ùò ðåñéï÷Þ, ðïõ åîõðçñåôåßôáé áðü ôï ðñüãñáììá ôçò ÆùãñáöéêÞò (Paint). Óôçí ðåñßðôùóç ëïéðüí ðïõ 215


ï ÷ñÞóôçò åíåñãïðïéÞóåé áõôÞí ôçí ðåñéï÷Þ, ôï ðñüãñáììá ÆùãñáöéêÞ èá áíáëáìâÜíåé íá ôïí åîõðçñåôÞóåé, ðáñÝ÷ïíôÜò ôïõ üëåò ôéò äõíáôüôçôåò óáí íá ãéíüôáí ç æùãñáöéêÞ óå Ýíá ðáñÜèõñü ôïõ, êáé ü÷é óôï ðáñÜèõñï ìéáò Üëëçò åöáñìïãÞò. ÁõôÞí ôç äõíáôüôçôá ôçí ðñïóöÝñåé Ýíáò ìç÷áíéóìüò ðïõ âáóßæåôáé ðÜíù óå ìéá åéäéêÞ ôå÷íïëïãßá ëïãéóìéêïý, ç ïðïßá åßíáé ãíùóôÞ ùò óýíäåóç êáé åíóùìÜôùóç áíôéêåéìÝíùí (Object Linking and Embedding OLE). Ç ôå÷íéêÞ ôçò óýíäåóçò êáé åíóùìÜôùóçò áíôéêåéìÝíùí âïçèÜ ôéò åöáñìïãÝò íá äéá÷åéñéóôïýí áíôéêåßìåíá ðïõ äçìéïõñãïýí êáé äéá÷åéñßæïíôáé Üëëåò åöáñìïãÝò Þ ðåñéÝ÷ïíôáé ìÝóá óôï ëïãéóìéêü ôñßôùí êáôáóêåõáóôþí. Ç åöáñìïãÞ, ðïõ ðñïóöÝñåé ôï áíôéêåßìåíï, ðáßæåé ôï ñüëï ôïõ åîõðçñåôçôÞ (server), åíþ ç åöáñìïãÞ, ðïõ êÜíåé ÷ñÞóç ôïõ ìÝóïõ, óõìðåñéöÝñåôáé óáí ðåëÜôçò (client). Óå ìéá åöáñìïãÞ ðåëÜôç, ðïõ êÜíåé åêìåôÜëëåõóç ôçò ôå÷íïëïãßáò óýíäåóçò êáé åíóùìÜôùóçò áíôéêåéìÝíùí, ìðïñïýìå íá äïýìå áíôéêåßìåíá, ôá ïðïßá ßóùò íá ìçí ìðïñïýóáí íá ðáñïõóéáóôïýí ìå Üëëï ôñüðï Þ íá ÷åéñéóôïýìå áíôéêåßìåíá ìå ðïëý áðëü ôñüðï ÷ùñßò íá ÷ñåéáóôåß íá åðÝìâïõìå ðñïãñáììáôéóôéêÜ. Óôçí ôå÷íïëïãßá óýíäåóçò êáé åíóùìÜôùóçò áíôéêåéìÝíùí õðÜñ÷ïõí äýï ìç÷áíéóìïß ëåéôïõñãßáò. Ï Ýíáò åîõðçñåôåß ôçí åíóùìÜôùóç êáé ï Üëëïò ôç óýíäåóç ôùí áíôéêåéìÝíùí. Áí êáé ï ÷ñÞóôçò, êáôÜ ôçí åêôÝëåóç ôïõ ðñïãñÜììáôïò ðåëÜôç, äåí ìðïñåß íá äéáêñßíåé êÜðïéá äéáöïñÜ ìåôáîý ôùí ìç÷áíéóìþí, áõôÞ õðÜñ÷åé êáé åßíáé óçìáíôéêÞ. Ìå ôçí åíóùìÜôùóç åíüò áíôéêåéìÝíïõ, ôï áíôéêåßìåíï ðïõ óõíÞèùò âñßóêåôáé óå áñ÷åßï, (ð.÷. Ýíá áñ÷åßï åéêüíáò), áíôéãñÜöåôáé ìÝóá óôçí åöáñìïãÞ ðåëÜôç êáé åãêëùâßæåôáé (ãßíåôáé óôáôéêü ìÝëïò ôçò åöáñìïãÞò). Ìå ôç óýíäåóç, üôáí ç åöáñìïãÞ ðåëÜôçò ÷ñåéáóôåß ôï áíôéêåßìåíï, ôï êáëåß ìÝóá áðü ôï áñ÷Ýôõðï áñ÷åßï. Ç óýíäåóç åðïìÝíùò Ý÷åé ìåãáëýôåñç äõíáìéêÞ. Ôï ßäéï áñ÷åßï ìðïñïýí íá ôï åêìåôáëëåõôïýí ðïëëÝò åöáñìïãÝò ðïõ ðáßæïõí ôï ñüëï ôïõ ðåëÜôç êáé áí ôõ÷üí ãßíïõí ãéá êÜðïéï ëüãï åðÜíù ôïõ áëëáãÝò áðü ìßá åöáñìïãÞ, ïé áëëáãÝò áíôéêáôïðôñßæïíôáé êáé óôéò õðüëïéðåò åöáñìïãÝò. Áíôßèåôá, áëëáãÝò óå Ýíá åãêëùâéóìÝíï áíôéêåßìåíï öáßíïíôáé ìüíïí ìÝóá óôçí åöáñìïãÞ ðïõ ôï Ý÷åé åãêëùâßóåé.

¢óêçóç 17-4. á) Óå ìéá öüñìá ôïðïèåôïýìå Ýíá áíôéêåßìåíï OLE ôýðïõ Bitmap Object (øçöéïãñáöéêÞò ó÷åäßáóçò). ÅðéëÝãïõìå ôçí ôå÷íéêÞ åíóùìÜôùóçò ôïõ áíôéêåéìÝíïõ. Áí êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò êÜíïõìå äéðëü êëéê ðÜíù óôï áíôéêåßìåíï, ç ðåñéï÷Þ ó÷åäßáóçò ôïíßæåôáé ìå Ýíá ðëáßóéï êáé óôï ðÜíù ìÝñïò ôïõ ðáñáèýñïõ åìöáíßæåôáé Ýíá ìåíïý ìå ôéò âáóéêÝò åðéëïãÝò ôïõ ðñïãñÜììáôïò ôçò ÆùãñáöéêÞò.

Åéêüíá 17-9. ÅíóùìÜôùóç áíôéêåéìÝíïõ æùãñáöéêÞò

â) Óå ìéá öüñìá ôïðïèåôïýìå Ýíá áíôéêåßìåíï OLE ôýðïõ Bitmap Object. ÅðéëÝãïõìå ôçí ôå÷íéêÞ óýíäåóçò ìå áñ÷åßï. Áí êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò êÜíïõìå äéðëü êëéê ðÜíù óôï áíôéêåßìåíï, åìöáíßæåôáé ôï ðáñÜèõñï ôïõ ðñïãñÜììáôïò ôçò ÆùãñáöéêÞò, äçëáäÞ ôïõ ðñïãñÜììáôïò ðïõ åßíáé óõíäåäåìÝíï ìå ôçí ðåñéï÷Þ ó÷åäßáóçò.

Åéêüíá 17-10. Óýíäåóç ìå áñ÷åßï áíôéêåéìÝíïõ æùãñáöéêÞò

Ãéá íá åéóÜãïõìå Ýíá áíôéêåßìåíï OLE óå ìéá öüñìá: Ôï åñãáëåßï OLE 1. ÅðéëÝãïõìå áðü ôçí åñãáëåéïèÞêç ôï åñãáëåßï OLE êáé ó÷åäéÜæïõìå ìéá ïñèïãþíéá ðåñéï÷Þ. 2. Áðü ôç ëßóôá Object Type åðéëÝãïõìå ôïí ôýðï ôïõ áíôéêåéìÝíïõ ðïõ èá õðïäå÷ôåß ôï áíôéêåßìåíï OLE. 3. ÊÜíïõìå ôçí åðéëïãÞ Create from File ïðüôå ôï ðáñÜèõñï ìåôáó÷çìáôßæåôáé óå áõôü ôçò åéêüíáò 17-8.

Åéêüíá 17-7. Ôï äéáëïãéêü ðáñÜèõñï ãéá ôçí åðéëïãÞ ôýðïõ áíôéêåéìÝíïõ

4. ÅðéëÝãïõìå óýíäåóç áíôéêåéìÝíïõ óçìåéþíïíôáò óôï ôåôñáãùíßäéï ôïõ ðëÞêôñïõ óçìåßùóçò Link. Áí äåí êÜíïõìå áõôÞí ôçí åðéëïãÞ èåùñåßôáé üôé èá ãßíåé åíóùìÜôùóç ôïõ áíôéêåéìÝíïõ. 5. Áðü ôï ðëÞêôñï Browse åìöáíßæïõìå ôï ðáñÜèõñï åðéëïãÞò áñ÷åßùí, áðü ôï ïðïßï åðéëÝãïõìå êáé áñ÷åßï.

Åéêüíá 17-8. Ôï äéáëïãéêü ðáñÜèõñï ãéá ôçí åðéëïãÞ ôýðïõ áíôéêåéìÝíïõ

Ç åíåñãïðïßçóç ôùí áíôéêåéìÝíùí OLE ãßíåôáé êáôÜ ôç äéÜñêåéá åêôÝëåóçò ôïõ ðñïãñÜììáôïò ìå äéðëü êëéê ðÜíù óôï áíôéêåßìåíï. 216

Ç ôå÷íéêÞ OLE äåí åöáñìüæåôáé ìüíï óôç óýíäåóç êáé åíóùìÜôùóç áíôéêåéìÝíùí ðïëõìÝóùí áëëÜ êáé Üëëùí ôýðùí áíôéêåéìÝíùí. Ãéá ðáñÜäåéãìá, óå ìéá öüñìá åßíáé äõíáôÞ ç Ýíèåóç åíüò åããñÜöïõ åðåîåñãáóôÞ êåéìÝíïõ Þ åíüò öýëëïõ åñãáóßáò åíüò õðïëïãéóôéêïý öýëëïõ ê.Ü.

Áíáêåöáëáßùóç Ôá Windows ðáñÝ÷ïõí ôç äéåðáöÞ åëÝã÷ïõ ìÝóùí, ìÝóù ôçò ïðïßáò ï ðñïãñáììáôéóôÞò ìðïñåß íá óõìðåñéëÜâåé óôéò åöáñìïãÝò ôïõ Þ÷ï, âßíôåï, êéíïýìåíï ó÷Ýäéï. Ç ïíïìáôïëïãßá êáé ïé äéáôáãÝò ðñïò ôéò óõóêåõÝò åßíáé ôõðïðïéçìÝíåò êáé ãßíåôáé ìå ôç âïÞèåéá ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí. Ôï áíôéêåßìåíï ðïëõìÝóùí ðåñéëáìâÜíåé Ýíá óýíïëï áðü ðëÞêôñá, ôá ïðïßá 217


áíôéóôïé÷ïýí óôéò ëåéôïõñãßåò ðïõ äéáêñßíïõìå óå ìéá ôõðéêÞ óõóêåõÞ êáóåôïöþíïõ Þ óå ìéá ôõðéêÞ óõóêåõÞ âßíôåï ôçò ôçëåüñáóçò. ÔõðéêÝò óõóêåõÝò ðïõ ìðïñåß íá ÷åéñéóôåß ôï áíôéêåßìåíï ðïëõìÝóùí åßíáé ïé CDAudio, WaveAudio, Sequencer, Dat, Animation, VCR,

VideoDisk, AVIVideo. ÅöáñìïãÝò ìå ðïëõìåóéêÝò äõíáôüôçôåò ìðïñïýìå íá äçìéïõñãÞóïõìå êáé ìå ôç âïÞèåéá ôïõ ìç÷áíéóìïý óýíäåóçò êáé åíóùìÜôùóçò áíôéêåéìÝíùí. Ìå ôçí åíóùìÜôùóç åíüò áíôéêåéìÝíïõ, ôï áíôéêåßìåíï, ðïõ óõíÞèùò âñßóêåôáé óå áñ÷åßï, áíôéãñÜöåôáé ìÝóá óôçí åöáñìïãÞ ðåëÜôç êáé åãêëùâßæåôáé. Ìå ôç óýíäåóç, üôáí ç åöáñìïãÞ ðåëÜôçò ÷ñåéáóôåß ôï áíôéêåßìåíï, ôï êáëåß ìÝóá áðü ôï áñ÷Ýôõðï áñ÷åßï.

ÅñãáóôçñéáêÝò ÁóêÞóåéò 1. Äçìéïõñãßá åíüò áðëïý ÷åéñéóôçñßïõ ãéá áêïõóéêÜ CD. Ìå ôçí ðñïûðüèåóç üôé óôïí õðïëïãéóôÞ õðÜñ÷åé êÜñôá Þ÷ïõ ìå ç÷åßá êáé óõóêåõÞ CD-ROM, ôïðïèåôÞóôå ðÜíù óå ìéá öüñìá Ýíá áíôéêåßìåíï ðïëõìÝóùí. ÃñÜøôå ðñüãñáììá þóôå ôï áíôéêåßìåíï ðïëõìÝóùí íá åîïìïéþíåé ôçí ðñüóïøç åëÝã÷ïõ åíüò áêïõóôéêïý CD. 2. ÐñáãìáôïðïéÞóôå âÞìá âÞìá ôçí Üóêçóç 17-1. 3. ÐñáãìáôïðïéÞóôå âÞìá âÞìá ôçí Üóêçóç 17-2. Ìåôáó÷çìáôßóôå ôçí Üóêçóç, þóôå íá åßíáé äõíáôü êáé ôï ðáßîéìï áñ÷åßùí MIDI. 4. ÔñïðïéÞóôå ôçí Üóêçóç 17-3 þóôå áíôß ãéá ìéá åôéêÝôá ùò åíäåßêôç ôçò ðñïüäïõ óôçí åêôÝëåóç ôïõ êïììáôéïý ðïëõìÝóùí íá ÷ñçóéìïðïéåßôáé ìéá ñÜâäïò êýëéóçò.

5. Ç éäéüôçôá From êáé ç éäéüôçôá To ôïõ áíôéêåéìÝíïõ ðïëõìÝóùí óõíôÜóóïíôáé ùò: áíôéêåßìåíï.From = áñ÷Þ áíôéêåßìåíï.Ôï = ôÝëïò êáé êáèïñßæïõí, óôç ìïíÜäá ìÝôñçóçò ðïõ Ý÷åé ðñïêáèïñéóôåß áðü ôçí éäéüôçôá

TimeFormat, ôçí áñ÷Þ áðü ôçí ïðïßá èá áñ÷ßóåé íá ðáßæåôáé Ýíá ðïëõìåóéêü êïììÜôé (Þ÷ïò Þ âßíôåï) êáé ôï ôÝëïò, óôï ïðïßï èá ôåñìáôéóôåß ôï ðáßîéìü ôïõ. Íá ãñáöåß ðñüãñáììá óôï ïðïßï íá ãßíåôáé ç åðéëïãÞ åíüò êïììáôéïý âßíôåï êáé íá êáèïñßæåôáé ôï áñ÷éêü êáé ôï ôåëéêü ðëáßóéï ðïõ èá ðáñïõóéáóôåß. 6. ÅêôåëÝóôå ôçí Üóêçóç 17-4. Óôï äåýôåñï ìÝëïò ôçò Üóêçóçò ðñáãìáôïðïéÞóôå áëëïéþóåéò ðÜíù óôï áíôéêåßìåíï ó÷åäßáóçò êáé áðïèçêåýóôå ôï áðïôÝëåóìá óå áñ÷åßï. Áíïßîôå ôï áñ÷åßï áðü ôçí åöáñìïãÞ ðïõ ôï õðïóôçñßæåé. 7. ×ñçóéìïðïéþíôáò ôï åñãáëåßï ÝíóùìÜôùóçò êáé óýíäåóçò, äçìéïõñãÞóôå ïèüíç ðïõ íá ðñïâÜëëåé Ýíá çìåñïëüãéï (Calendar).

ÌÜèçìá 18

Ðßíáêåò (Óõóôïé÷ßåò) Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá åðåîçãïýí ôç äéáöïñÜ ìåôáîý ôùí ðéíÜêùí (arrays) êáé ôùí áðëþí ìåôáâëçôþí. Íá åðåîçãïýí ôç óçìáóßá ôùí äåéêôþí óôïõò ðßíáêåò. Íá ðñáãìáôïðïéïýí äçëþóåéò ðéíÜêùí. Íá ÷ñçóéìïðïéïýí ðéíÜêåò ãéá ôçí êùäéêïðïßçóç äåäïìÝíùí üìïéáò ìïñöÞò êáé ìåãÜëïõ üãêïõ. Óôçí ðñÜîç, üôáí èÝëïõìå íá áíáöåñèïýìå óå Ýíá óýíïëï ïìïåéäþí áíôéêåéìÝíùí ÷ñçóéìïðïéïýìå Ýíá ãåíéêü üíïìá, üôáí üìùò èÝëïõìå íá áíáöåñèïýìå óå Ýíá óõãêåêñéìÝíï óôïé÷åßï ôïõ óõíüëïõ, åðéóõíÜðôïõìå óôï ãåíéêü üíïìá êáé Ýíá äåýôåñï óõíèåôéêü, ðïõ ðñïóäéïñßæåé åðáêñéâþò ôï óôïé÷åßï. Ãéá ðáñÜäåéãìá, üëá ôá ôìÞìáôá ôçò äåõôÝñáò ëõêåßïõ, Ý÷ïõí ôï ãåíéêü üíïìá Â, ãéá íá áíáöåñèïýìå üìùò óå Ýíá áðü áõôÜ èÝôïõìå åðéðëÝïí êáé Ýíáí áñéèìçôéêü äåßêôç. ¸ôóé, ìå Â1 óõìâïëßæïõìå ôï ðñþôï ôìÞìá ôçò äåõôÝñáò ëõêåßïõ, ìå Â2 ôï äåýôåñï ôìÞìá, ìå Â3 ôï ôñßôï êôë. ¼ðùò Ý÷ïõìå äåé ãéá ôçí áðïèÞêåõóç ôéìþí ìÝóá óå Ýíá ðñüãñáììá ÷ñçóéìïðïéïýìå ìåôáâëçôÝò. Óôçí ðåñßðôùóç ðïõ Ý÷ïõìå Ýíá ìåãÜëï ðëÞèïò ïìïåéäþí ìåôáâëçôþí äåí åßíáé áíáãêáßï íá ïñßóïõìå êáé Ýíá ìïíáäéêü üíïìá ãéá êÜèå ìßá áðü áõôÝò. Ç VB ìáò äßíåé ô�� äõíáôüôçôá íá ÷ñçóéìïðïéïýìå ôï ßäéï ãåíéêü üíïìá ãéá Ýíá óýíïëï ìåôáâëçôþí êáé íá áíáöåñüìáóôå óå ìéá óõãêåêñéìÝíç áðü áõôÝò, ãñÜöïíôáò ôï ãåíéêü üíïìá êáé Ýíáí áñéèìçôéêü äåßêôç (index). Ïé ìåôáâëçôÝò áõôïý ôïõ ôýðïõ ïíïìÜæïíôáé ìåôáâëçôÝò ìå äåßêôç êáé óõíèÝôïõí ôéò åðïíïìáæüìåíåò óõóôïé÷ßåò Þ áëëéþò ðßíáêåò (arrays). ¸óôù, üôé ìÝóá óå Ýíá ðñüãñáììá èÝëïõìå íá äéá÷åéñéóôïýìå ôá ïíüìáôá ôùí 20 ìáèçôþí ìéáò ôÜîçò.×ñçóéìïðïéþíôáò áðëÝò ìåôáâëçôÝò êáé óýìöùíá ìå üóá ãíùñßæïõìå ìÝ÷ñé ôþñá, èá Ýðñåðå íá äçëþóïõìå ôüóá ïíüìáôá ìåôáâëçôþí, üóá áíôéóôïé÷ïýí óôï ðëÞèïò Óôïé÷åßï 1 ôùí ìáèçôþí. Student 1 Äçìéïõñãþíôáò üìùò Ýíáí ðßíáêá, áñêåß Óôïé÷åßï 2 íá äçëþóïõìå Ýíá ìüíï üíïìá. Ôá óôïé÷åßá ôïõ ðßíáêá ìðïñïýí íá ðñïóäéïñéóôïýí Student 2 áðü Ýíáí äåßêôç ðïõ õðïäçëþíåé ôçí áýîïõóá óåéñÜ ôïõò ìÝóá óôïí ðßíáêá. Ç ÷ñÞóç ôùí ðéíÜêùí óõìâÜëëåé óôçí áðëïðïßçóç ôçò êùäéêïðïéÞóçò ôùí ìåôáâëçôþí ìÝóá óå Ýíá ðñüãñáììá, êÜíåé ôá ðñïãñÜììáôá ðéï ãåíéêÜ êáé äßíåé ëýóåéò óå ðñïâëÞìáôá, ôá ïðïßá äåí ìðïñïýí íá ëõèïýí ìå ôç ÷ñÞóç áðëþí ìåôáâëçôþí.

Óôïé÷åßï 20

Student 20

Students

Ó÷Þìá 18-1. ÁðëÝò ìåôáâëçôÝò êáé ðßíáêáò

ÄÞëùóç ðßíáêá. ÁíáöïñÜ óôïé÷åßùí ðßíáêá

Ôá ïíüìáôá ôùí ðéíÜêùí, ùò ïíüìáôá ìåôáâëçôþí, õðáêïýïõí óôïõò ßäéïõò áêñéâþò êáíüíåò, óôïõò ïðïßïõò õðáêïýïõí êáé ôá ïíüìáôá ôùí áðëþí ìåôáâëçôþí. ÄçëáäÞ, ðñÝðåé íá áñ÷ßæïõí áðü ãñÜììá, íá ìç óõíôßèåíôáé áðü ðåñéóóüôåñïõò áðü 255 ÷áñáêôÞñåò, íá ìç óõìðßðôïõí ìå äåóìåõìÝíåò ëÝîåéò. Ðñéí ÷ñçóéìïðïéÞóïõìå Ýíáí ðßíáêá óôï ðñüãñáììá, ðñÝðåé ðñþôá íá ôïí äçëþóïõìå, þóôå ç VB íá äåóìåýóåé ôïí êáôÜëëçëï ÷þñï óôç ìíÞìç êáé íá êáèïñßóåé ôïí ôñüðï ìå ôïí ïðïßï èá ÷åéñéóôåß ôá óôïé÷åßá ôïõ. ÁìÝóùò ìåôÜ ôï üíïìá ôïõ ðßíáêá, êáé ìÝóá óå ðáñåíèÝóåéò, äçëþíïõìå ôç ìÝãéóôç ôéìÞ ðïõ ìðïñåß íá ðÜñåé ï äåßêôçò. ÓõãêåêñéìÝíá, ç äÞëùóç åíüò ðßíáêá ãßíåôáé ìå ôç äçëùôéêÞ åíôïëÞ Dim ùò åîÞò:

Dim üíïìá_ìåôáâëçôÞò(ìÝãéóôïò_äåßêôçò) As ôýðïò üðïõ üíïìá_ìåôáâëçôÞò, ôï üíïìá ôïõ ðßíáêá, ìÝãéóôïò_äåßêôçò ç ìåãáëýôåñç ôéìÞ ôïõ äåßêôç êáé ôýðïò, Ýíáò áðü ôïõò ôýðïõò äåäïìÝíùí. 218

219


Áò óçìåéùèåß üôé ôïí ìÝãéóôï äåßêôç ôïõ ðßíáêá, ôïí åðéëÝîáìå êáôÜ ðïëý ìåãáëýôåñï ôùí áðáéôÞóåùí ôïõ ðñïâëÞìáôïò, ãéá íá åßíáé äõíáôÞ ç ÷ñÞóç ôïõ ðñïãñÜììáôïò êáé óå ìéá ìåëëïíôéêÞ áýîçóç ôùí áðáéôÞóåùí.

ÐáñÜäåéãìá 18-1. ¸óôù ç ðåñßðôùóç ôùí 20 ìáèçôþí ðïõ áíáöÝñáìå ðéï ðÜíù. ×ñçóéìïðïéþíôáò áðëÝò ìåôáâëçôÝò ðñÝðåé íá êÜíïõìå ôéò äçëþóåéò:

Dim Student1 Dim Student2 Dim Student3 : : Dim Student20

Ç áíáöïñÜ óå Ýíá óôïé÷åßï ôïõ ðßíáêá ãßíåôáé ìå ôç âïÞèåéá áñéèìçôéêïý äåßêôç. Ï äåßêôçò åíüò ðßíáêá ãñÜöåôáé áìÝóùò ìåôÜ ôï üíïìá ôïõ êáé ìÝóá óå ðáñåíèÝóåéò. Ï äåßêôçò äåí áðïôåëåß ôìÞìá ôïõ ïíüìáôïò áëëÜ Ýíá ðñüóèåôï ÷áñáêôçñéóôéêü, ðïõ äéáöïñïðïéåß Ýíá óôïé÷åßï ôïõ ðßíáêá áðü üëá ôá Üëëá óôïé÷åßá. Ï äåßêôçò ìðïñåß íá åßíáé áêÝñáéá áñéèìçôéêÞ óôáèåñÜ, ìåôáâëçôÞ Þ ðáñÜóôáóç.

As String As String As String : : As String

×ñçóéìïðïéþíôáò üìùò Ýíá ãåíéêü üíïìá ãéá Ýíáí ðßíáêá, áñêåß íá ãñÜøïõìå: Dim Students(20)

ÐáñÜäåéãìá 18-3.

As String

Åßíáé ëïéðüí ðñïöáíÝò ðüóï äýó÷ñçóôï ìðïñåß íá ãßíåé Ýíá ðñüãñáììá, áí ãéá üìïéá äåäïìÝíá ÷ñçóéìïðïéÞóïõìå äéáöïñåôéêÜ ïíüìáôá ìåôáâëçôþí êáé ðüóï ðéï ìéêñü êáé ðåñéåêôéêü, áí ÷ñçóéìïðïéÞóïõìå Ýíáí ðßíáêá. Óôç óõãêåêñéìÝíç ðåñßðôùóç, Þäç áðü ôçí ðåñéï÷Þ ôùí äçëþóåùí, Ý÷ïõìå êåñäßóåé 19 ãñáììÝò êþäéêá êáé öáíôáóôåßôå ðüóï èá êåñäßæáìå, áí Þôáí áíÜãêç íá åðåîåñãáóôïýìå ôá óôïé÷åßá üëùí ôùí ìáèçôþí ìéáò ó÷ïëéêÞò ðåñéöÝñåéáò Þ êáé ïëüêëçñçò ôçò ÅëëÜäïò! Ç áíåîÜñôçôç äÞëùóç ìåôáâëçôþí èá Þôáí áíåöÜñìïóôç êáé ìüíï ç äÞëùóç ìå ðßíáêá èá Þôáí õëïðïéÞóéìç.

Óôï ìÜèçìá 2 åß÷áìå ôïíßóåé ôç óçìáóßá ôçò óùóôÞò äïìÞò äåäïìÝíùí

Ç äÞëùóç åíüò ðßíáêá ìðïñåß íá ãßíåé êáé ìå ìéá áðü ôéò äçëùôéêÝò åíôïëÝò Private, Public, Static. Ôï ðïéá áðü áõôÝò èá ÷ñçóéìïðïéçèåß åîáñôÜôáé áðü ôçí åìâÝëåéá ðïõ èÝëïõìå íá ðñïóäþóïõìå óôïí ðßíáêá. ¼ðùò Ý÷ïõìå äåé ïé êùäéêÝò ëÝîåéò Private êáé Dim åßíáé éóïäýíáìåò. Ç êùäéêÞ ëÝîç Public ÷ñçóéìïðïéåßôáé, üôáí èÝëïõìå ï ðßíáêáò íá Ý÷åé êáèïëéêü

Ãéá ôïí ôñüðï äÞëùóçò, ôçí åìâÝëåéá êáé ôïí ôýðï ôùí ðéíÜêùí éó÷ýïõí üóá Ý÷ïõìå áíáöÝñåé óôï ìÜèçìá 6 ðåñß ìåôáâëçôþí.

÷áñáêôÞñá êáé íá åßíáé äõíáôÞ ç ÷ñÞóç ôùí óôïé÷åßùí ôïõ ìÝóá óå üëï ôï ðñüãñáììá. Ç êùäéêÞ ëÝîç Static äéáôçñåß ôï ðåñéå÷üìåíï ôùí óôïé÷åßùí ôïõ ðßíáêá ìåôáîý ôùí êëÞóåùí ôçò õðïñïõôßíáò. Ç ìÝãéóôç ôéìÞ äåßêôç åðéëÝãåôáé ìå êñéôÞñéï ôï ðëÞèïò ôùí óôïé÷åßùí ôïõ ðßíáêá. Ãéá íá åßíáé ãåíéêü Ýíá ðñüãñáììá êáé ãéá íá ìçí ÷ñåéÜæåôáé íá ãßíïíôáé áëëáãÝò êÜèå öïñÜ ðïõ ðñüêåéôáé íá ÷ñçóéìïðïéçèåß ìå äéáöïñåôéêü ðëÞèïò äåäïìÝíùí, óõíÞèùò åðéëÝãåôáé ìéá éêáíïðïéçôéêÜ ìåãÜëç ôéìÞ ùò ôéìÞ ìÝãéóôïõ äåßêôç, ðïõ åßíáé áñêåôÞ íá êáëýøåé Ýíá ìåãÜëï ðëÞèïò ðåñéðôþóåùí ãéá ôéò ïðïßåò ðñüêåéôáé íá ÷ñçóéìïðïéçèåß Ýíá ðñüãñáììá. Ãéá ðáñÜäåéãìá, áí ôï ðñüãñáììá ôïõ ðéï ðÜíù ðáñáäåßãìáôïò ðñüêåéôáé íá êáëýøåé ôéò áíÜãêåò ìéáò ìüíï ôÜîçò, ï ìÝãéóôïò äåßêôçò ìðïñåß íá Ý÷åé ôéìÞ ìÝ÷ñé 40, áí ðñüêåéôáé üìùò íá êáëýøåé ôéò áíÜãêåò åíüò ó÷ïëåßïõ ï ìÝãéóôïò äåßêôçò ìðïñåß íá ðÜñåé ôéìÞ ìÝ÷ñé 1000, ðïõ óçìáßíåé üôé åßíáé äõíáôüí íá êáëýðôåé êáé ôéò áíÜãêåò ìéáò ôÜîçò ê.ï.ê. Èá Ýëåãå ëïéðüí êáíåßò, üôé ðñÝðåé íá åðéëÝãïõìå ìåãÜëåò ôéìÝò ãéá íá ìðïñåß Ýíá ðñüãñáììá íá êáëýðôåé áðü ôéò ðéï ãåíéêÝò ìÝ÷ñé êáé ôéò ðéï åéäéêÝò ðåñéðôþóåéò. ¼ìùò, üðùò èá äïýìå óôçí åðüìåíç ðáñÜãñáöï, êÜôé ôÝôïéï äåí åßíáé äõíáôüí. Ìðïñïýìå íá äçìéïõñãÞóïõìå ðßíáêá ïðïéïõäÞðïôå ôýðïõ äåäïìÝíùí, ãéá ðáñÜäåéãìá Boolean, Integer, Long, Single, String êëð. Ôï ìÝãåèïò ìíÞìçò, ðïõ äåóìåýåôáé êáôÜ ôç äÞëùóç åíüò ðßíáêá, åßíáé áêÝñáéï ðïëëáðëÜóéï ôïõ ðëÞèïõò ôùí bytes, ðïõ äåóìåýïíôáé ãéá êÜèå ôýðï ìåôáâëçôÞò êáé åîáñôÜôáé áðü ôçí ôéìÞ ôïõ ìÝãéóôïõ äåßêôç. Ãé' áõôü êáé äåí ðñÝðåé íá äçëþíåôáé ôéìÞ ìÝãéóôïõ äåßêôç ðïëý ìåãáëýôåñç áðü áõôÞí ðïõ ðñüêåéôáé íá ÷ñçóéìïðïéçèåß óôçí ÷åéñüôåñç ôùí ðåñéðôþóåùí. Ðáñáäåßãìáôá 18-2. á) Óå Ýíá äßêôõï õðÜñ÷ïõí 300 óõíäåäåìÝíïé õðïëïãéóôÝò. Óå Ýíá ðñüãñáììá äéá÷åßñéóçò ôùí õðïëïãéóôþí, ï ðßíáêáò ðïõ ðåñéÝ÷åé ôéò IP äéåõèýíóåéò ôïõò ìðïñåß íá äçëùèåß ùò:

Dim WorkStationIP(300)

As String

Ðáñ' üëï ðïõ ôçí IP äéåýèõíóç ôç èåùñïýìå áñéèìü, ðñÝðåé íá ôç ÷åéñéóôïýìå óáí óõìâïëïóåéñÜ ìÝóá óôï ðñüãñáììá, áöïý áðïôåëåßôáé áðü ôÝóóåñá áñéèìçôéêÜ ôìÞìáôá ðïõ ÷ùñßæïíôáé ìå ôåëåßåò. â) Óå Ýíá ðñüãñáììá æçôåßôáé íá áðïèçêåýóïõìå ôéò ôéìÝò 30 áíôéóôÜóåùí ðïõ õðÜñ÷ïõí óå Ýíá çëåêôñïíéêü êýêëùìá. ÊÜíïõìå ôç äÞëùóç:

Dim Resistance(70)

As Single 220

Óõíå÷ßæïíôáò ôçí áíÜëõóç ôïõ ðñïâëÞìáôïò ôçò êùäéêïðïßçóçò ôùí ïíïìÜôùí ôùí ìáèçôþí, èÝëïõìå íá áíáöåñèïýìå óôï ðñüãñáììÜ ìáò óå êÜðïéïõò ìáèçôÝò. Ãéá íá áíáöåñèïýìå óôïí 1ï ìáèçôÞ èá ãñÜöáìå:

Students(1) ï

åðßóçò, ãéá íá áíáöåñèïýìå óôïí 2 ìáèçôÞ èá ãñÜöáìå:

Students(2) Óôçí ðåñßðôùóç ðïõ èÝëïõìå íá áíáöåñèïýìå óôïí ìáèçôÞ i, üðïõ ôï i áêÝñáéá áñéèìçôéêÞ ìåôáâëçôÞ èá ãñÜöáìå:

Students(i) ÔÝëïò, óôçí ðåñßðôùóç ðïõ èá èÝëáìå íá áíáöåñèïýìå óôïí ìåôÜ ôïí i ìáèçôÞ èá ãñÜöáìå:

Students(i+1) Ç áíáöïñÜ óå óôïé÷åßï ôïõ ðßíáêá ìå äåßêôç ìåãáëýôåñï áðü ôçí ôéìÞ ôïõ ìåãáëýôåñïõ äåßêôç ðñïêáëåß äéáêïðÞ ôïõ ðñïãñÜììáôïò êáé åìöÜíéóç ôïõ ìçíýìáôïò "Run-time error '9' Subscript out of range".

ÅéóáãùãÞ, åêôýðùóç, åðåîåñãáóßá óôïé÷åßùí ðßíáêá

ÊÜèå ðñüãñáììá, üðùò êáé êÜèå êáôáóêåõÞ, äçìéïõñãåßôáé íá íá ìðïñåß íá êáëýøåé áíÜãêåò ðïõ Ý÷ïõí ðñïäéáãñáöåß.

Óôéò ðåñéóóüôåñåò åöáñìïãÝò óÞìåñá æçôåßôáé ç äéá÷åßñéóç ôåñÜóôéùí üãêùí äåäïìÝíùí. Ç åßóïäïò, ç åðåîåñãáóßá êáé ç åìöÜíéóÞ ôïõò áðáéôïýí åéäéêïýò ôñüðïõò êùäéêïðïßçóçò, þóôå íá ðñïêýðôïõí ìéêñÜ, áðëÜ êáé åýêïëá óôç óõíôÞñçóç ðñïãñÜììáôá. Ç âáóéêÞ ôå÷íéêÞ ðÜíù óôçí ïðïßá óôçñßæïíôáé ïé ôñüðïé êùäéêïðïßçóçò åßíáé ï óõíäõáóìüò ôùí ðéíÜêùí ìå âñü÷ïõò. ¼ðùò èá äïýìå, óõó÷åôßæïíôáò ôï ìåôñçôÞ åíüò âñü÷ïõ ìå ôïí äåßêôç åíüò ðßíáêá ìðïñïýìå íá åðåîåñãáóôïýìå üëá ôá óôïé÷åßá ôïõ ðßíáêá ìÝóá óå Ýíá âñü÷ï. ÓõíÞèùò, ç åéóáãùãÞ óôïé÷åßùí ãßíåôáé áðü áñ÷åßá Þ ðáñÜèõñá. Óôï åðüìåíï ðáñÜäåéãìá ÷ñçóéìïðïéïýìå ôï áðëïýóôåñï ðáñÜèõñï åéóáãùãÞò, ðïõ åßíáé ôï ðáñÜèõñï ôçò óõíÜñôçóçò InputBox. Åðßóçò, ç åêôýðùóç óôïé÷åßùí ãßíåôáé óå ðáñÜèõñá Þ óôïí åêôõðùôÞ. Óôï åðüìåíï ðáñÜäåéãìá ÷ñçóéìïðïéïýìå Ýíá äåýôåñï ðáñÜèõñï ãéá ôçí ðáñïõóßáóç ôùí óôïé÷åßùí. ÐáñÜäåéãìá 18-4. Ãéá íá åéóÜãïõìå ôá ïíüìáôá ôùí ìáèçôþí ìéáò ôÜîçò ìÝóá óå Ýíá ðñüãñáììá êÜíïõìå ôéò äçëþóåéò êáé ãñÜöïõìå ôïí êþäéêá:

'ÄÞëùóç ìåôáâëçôþí Dim Students(40) As String 'Ðßíáêáò ìáèçôþí Dim No As Integer 'ÐëÞèïò ìáèçôþí ôçò ôÜîçò Dim i As Integer 'ÌåôñçôÞò âñü÷ïõ 'ÅéóáãùãÞ ðëÞèïõò ìáèçôþí No = InputBox("ÐëÞèïò ìáèçôþí", "ÅéóáãùãÞ") If No > 40 Then End 'ÅéóáãùãÞ ïíïìÜôùí ìáèçôþí For i = 1 To No Students(i) = InputBox("¼íïìá " & i & "ïõ ìáèçôÞ", "ÅéóáãùãÞ") Next i 221

Ï äåßêôçò åíüò ðßíáêá äåí ìðïñåß íá ãñáöôåß óôï êÜôù äåîéü ìÝñïò ôïõ ïíüìáôïò ãéá êáèáñÜ ôå÷íéêïýò ëüãïõò


Ç ðñþôç óõíÜñôçóç InputBox ìåôáöÝñåé óôï ðñüãñáììá ôï ðëÞèïò ôùí ìáèçôþí ôçò ôÜîçò. Áí óôç ìåôáâëçôÞ No äïèåß ôéìÞ ìåãáëýôåñç ôïõ 40, ðïõ åßíáé ç ìåãáëýôåñç åðéôñåðôÞ ôéìÞ ãéá ôïí äåßêôç (ôüóï Ý÷åé äçëùèåß óôç äçëùôéêÞ åíôïëÞ Dim), ôï ðñüãñáììá äéáêüðôåôáé, þóôå íá ðñïóôáôåõôåß ç ìç ïìáëÞ äéáêïðÞ ôïõ áðü ìåëëïíôéêÞ õðåñ÷åßëéóç ôïõ ðßíáêá. Óôï äåýôåñï âñü÷ï, ãéá êÜèå ìáèçôÞ, áðü ôïí ðñþôï ìÝ÷ñé êáé ôïí ôåëåõôáßï, ëáìâÜíåôáé ôï üíïìÜ ôïõ êáé ãßíåôáé ç êáôá÷þñéóÞ ôïõ óôï áíôßóôïé÷ï óôïé÷åßï ôïõ ðßíáêá ðïõ Ý÷åé äçëùèåß üôé èá ðåñéÝ÷åé ôá ïíüìáôá ôùí ìáèçôþí. Ôçí ðñþôç Åéêüíá 18-1. Ç InputBox ãéá åéóáãùãÞ ïíüìáôïò ìáèçôÞ öïñÜ ï ìåôñçôÞò i ôïõ âñü÷ïõ ðáßñíåé ôçí ôéìÞ 1, Üñá ìå ôçí áíáöïñÜ Students(i) õðïíïå��ôáé ôï óôïé÷åßï Students(1)

óáñþíåé ôïõò ÷áñáêôÞñåò (øçößá) ôçò áëöáñéèìçôéêÞò ìåôáâëçôÞò NStr áðü ôïí äåýôåñï ðñïò ôïí ôåëåõôáßï êáé ôïõò ôïðïèåôåß óôá óôïé÷åßá ôïõ ðßíáêá áðü ôï ðñþôï óôïé÷åßï ðñïò ôï ôåëåõôáßï. ÐáñÜäåéãìá 18-6. ¸óôù üôé ôï üíïìá, ôï ðáôñþíõìï êáé ôï åðþíõìï N áôüìùí Ý÷ïõí êáôá÷ùñéóôåß óôá óôïé÷åßá ôùí ðéíÜêùí FirstName, FatherName êáé SurName, áíôßóôïé÷á. Ð.÷. ÁñéóôïôÝëçò

Ðáýëïò

Êéïýóçò

óôïé÷åßá 1ïõ áôüìïõ

Êùíóôáíôßíá

Íßêïò

ÓéáøÜëç

óôïé÷åßá 2ïõ áôüìïõ

ÂáóéëéêÞ

ÓôáìÜôçò

Ãêéþíç

óôïé÷åßá Íïõ áôüìïõ

FirstName

FatherName

SurName

ðïõ Ý÷åé óõó÷åôéóôåß ìå ôïí ðñþôï ìáèçôÞ. Ôï ðéï êÜôù ôìÞìá ðñïãñÜììáôïò, áíïßãåé ôï ðáñÜèõñï ôçò öüñìáò OutputForm êáé

Ó÷Þìá 18-1. Ôá óôïé÷åßá ôïõ ðñþôïõ áôüìïõ âñßóêïíôáé óôçí ðñþôç èÝóç ôùí ðéíÜêùí, ôá óôïé÷åßá ôïõ äåýôåñïõ áôüìïõ óôç äåýôåñç èÝóç ôùí ðéíÜêùí ê.ï.ê.

åìöáíßæåé óôï åóùôåñéêü ôïõ ôá ïíüìáôá ôùí ìáèçôþí ðïõ Ý÷ïõí åéóá÷èåß ìå ôïí êþäéêá ðïõ

Ôï ôìÞìá ðñïãñÜììáôïò:

'Öüñôùóå ôç öüñìá OutputForm.Show 'ÅìöÜíéóå ôéò åðéêåöáëßäåò OutputForm.Print "á/á", "¼íïìá" 'ÅìöÜíéóå ôá ïíüìáôá For i = 1 To No OutputForm.Print i, Students(i) Next i

For i = 1 To N Printer.Print Left( FirstName(i), 1 ) & "." & _ Left( FatherName(i), 1 ) & "." & _ SurName(i) Next i

ôõðþíåé ôç óýíôìçóç ôùí ïíïìÜôùí, äçëáäÞ:

Á.Ð.Êéïýóçò Ê.Í.ÓéáøÜëç : Â.Ó.Ãêéþíç

¢óêçóç 18-1.

Åéêüíá 18-2. Ôï ðáñÜèõñï ìå ôïí êáôÜëïãï ôùí ïíïìÜôùí ðïõ åìöáíßæåôáé ìÝóá áðü ôï ðñüãñáììá. Ç åðåîåñãáóßá ôùí óôïé÷åßùí åíüò ðßíáêá ãßíåôáé êáé áõôÞ êáôÜ êáíüíá ìå ôç âïÞèåéá âñü÷ùí. Ôá óôïé÷åßá ôïõ ðßíáêá ìðïñïýí íá ðñïóðåëáóôïýí ìå ôç óåéñÜ ðïõ Ý÷ïõí åéóá÷èåß, ìå áíôßóôñïöç óåéñÜ Þ ìå ôõ÷áßá áíáöïñÜ ôïõ äåßêôç. ÐáñÜäåéãìá 18-5. ¸óôù, üôé èÝëïõìå íá áðïìïíþóïõìå ôá øçößá åíüò èåôéêïý áêåñáßïõ áñéèìïý N êáé íá ôá ôïðïèåôÞóïõìå óôá óôïé÷åßá åíüò ðßíáêá ìå üíïìá Digit, êáôá÷ùñßæïíôáò ôï øçößï ôùí ìïíÜäùí óôï óôïé÷åßï 1, ôùí äåêÜäùí óôï óôïé÷åßï 2 ê.ï.ê. ÃñÜöïõìå ôï ôìÞìá ðñïãñÜììáôïò:

'ÄÞëùóç ìåôáâëçôþí Dim Digit(10) As Integer 'Ðßíáêáò øçößùí Dim N As Long 'Ï áñéèìüò Dim NStr As String 'Ï áñéèìüò Í óáí óõìâïëïóåéñÜ Dim DigitStr As String * 1 'Øçößï ôïõ áñéèìïý Dim i As Integer 'ÌåôñçôÞò âñü÷ïõ N = InputBox("ÐëçêôñïëïãÞóôå áñéèìü", "ÅéóáãùãÞ") 'ÌåôáôñïðÞ áñéèìïý óå óõìâïëïóåéñÜ NStr = Str(N) For i = 2 To Len(NStr) DigitStr = Mid( NStr, i, 1) Digit(i - 1) = DigitStr Next i Ç óõíÜñôçóç Str ìåôáôñÝðåé ôïí áñéèìü óå óõìâïëïóåéñÜ, ôçò ïðïßáò ï ðñþôïò ÷áñáêôÞñáò åßíáé ôï êåíü äéÜóôçìá. Ï âñü÷ïò, ãéá íá áãíïçèåß ôï êåíü äéÜóôçìá, 222

¸óôù, üôé ìáò äßíïõí ôéò èåñìïêñáóßåò ðïõ óçìåéþèçêáí ìéá ìÝñá óå 30, ôï ðïëý, ðüëåéò ôçò ÅëëÜäáò óôéò 12 ôï ìåóçìÝñé. Ìáò æçôïýí íá õðïëïãßóïõìå êáé íá åìöáíßóïõìå ôç ìÝóç èåñìïêñáóßá, ðñïóèÝôïíôáò üëåò ôéò èåñìïêñáóßåò ôçò ëßóôáò êáé äéáéñþíôáò ìå ôï óõíïëéêü áñéèìü ôïõò. ÃñÜöïõìå ôïí êþäéêá:

'ÄÞëùóç ìåôáâëçôþí Dim Temp(30) As Single 'ÌÝ÷ñé 30 èåñìïêñáóßåò Dim No As Integer 'ÐëÞèïò èåñìïêñáóéþí áðü ôïí ÷ñÞóôç Dim i As Integer 'ÌåôñçôÞò âñü÷ïõ Dim TotalTemp As Single 'Áèñïéóìá èåñìïêñáóéþí Dim AvergTemp As Single 'ÌÝóïò üñïò 'ÅéóáãùãÞ ðëÞèïõò èåñìïêñáóéþí No = InputBox("ÐëÞèïò ðüëåùí", "ÅéóáãùãÞ") If (No < 1) Or (No > 30) Then End 'ÅéóáãùãÞ èåñìïêñáóéþí For i = 1 To No Temp(i) = InputBox("Èåñìïêñáóßá óôçí ðüëç " & i, "ÅéóáãùãÞ") Next i 'Õðïëïãéóìüò ìÝóïõ üñïõ TotalTemp = 0 'Áñ÷éêü Üèñïéóìá 0 For i = 1 To No TotalTemp = TotalTemp + Temp(i) 'Ìåñéêü Üèñïéóìá Next i AvergTemp = TotalTemp / Íï 'ÌÝóïò üñïò 'ÅìöÜíéóç áðïôåëÝóìáôïò MsgBox "Ç ìÝóç èåñìïêñáóßá åßíáé " & AvergTemp Óôï ôìÞìá ðïõ õðïëïãßæåôáé ï ìÝóïò üñïò, îåêéíÜìå äßíïíôáò óôç ìåôáâëçôÞ TotalTemp, ðïõ èá ðåñéÝ÷åé ôï Üèñïéóìá ôùí èåñìïêñáóéþí, ôçí ôéìÞ 0. Óå êÜèå áíáêýêëùóç ôïõ âñü÷ïõ ôï Üèñïéóìá áõîÜíåôáé êáôÜ ôç èåñìïêñáóßá ðïõ óçìåéþèçêå óôçí i ðüëç. 223


Ðáñáäåßãìáôá 18-8.

Áöïý áèñïéóôïýí ïé èåñìïêñáóßåò üëùí ôùí ðüëåùí ãßíåôáé äéáßñåóç ìå ôï ðëÞèïò ôùí ðüëåùí. ÐñïóÝîôå, üôé ãéá íá åßíáé óùóôüò ï áëãüñéèìïò êáé íá ìçí ðñïêëçèåß äéáêïðÞ ôïõ ðñïãñÜììáôïò óôçí ðåñßðôùóç ðïõ ï ÷ñÞóôçò äþóåé ðëÞèïò óôïé÷åßùí ßóï ìå 0 (äéáßñåóç ìå ôï 0 êáôÜ ôïí õðïëïãéóìü ôïõ ìÝóïõ üñïõ), ôïðïèåôÞèçêå óõíèÞêç ðïõ ôåñìáôßæåé ôï ðñüãñáììá óôçí ðåñßðôùóç ðïõ äïèåß No ßóï ìå 0.

Ùò åðÝêôáóç ôùí ðáñáäåéãìÜôùí 18-7: á) Ç äçëùôéêÞ åíôïëÞ:

Dim Seat_Name(30, 15) As String äçìéïõñãåß ðßíáêá êáôÜëëçëï ãéá ôçí áðïèÞêåõóç ôùí ïíïìÜôùí ôùí èåáôþí ðïõ Ý÷ïõí êëåßóåé èÝóåéò óå Ýíá èÝáôñï, ðïõ Ý÷åé 30 óåéñÝò êáèéóìÜôùí ìå 15 êáèßóìáôá óå êÜèå óåéñÜ. â) Ç äçëùôéêÞ åíôïëÞ:

ÄéóäéÜóôáôïé êáé ðïëõäéÜóôáôïé ðßíáêåò

Dim Grades(30, 12)

¸ùò ôþñá ìåëåôÞóáìå ðßíáêåò ôùí ïðïßùí ôá óôïé÷åßá ìðïñïýìå íá ôá öáíôáóôïýìå áíåðôõãìÝíá êáôÜ ìéá äéÜóôáóç (ìïíïäéÜóôáôïé ðßíáêåò) êáé ôùí ïðïßùí ïé ìåôáâëçôÝò Ý÷ïõí Ýíáí ìüíï äåßêôç (Äåßôå ó÷Þìá 18-1). ÐïëëÝò öïñÝò üìùò ðñïêýðôåé ç áíÜãêç íá äçìéïõñãçóïõìå ðßíáêåò ðïõ ôá óôïé÷åßá ôïõò íá åßíáé áíáðôõãìÝíá óå äýï äéáóôÜóåéò. ¸íáò ôÝôïéïò ðßíáêáò ïíïìÜæåôáé äéóäéÜóôáôïò êáé ïé ìåôáâëçôÝò ôïõ Ý÷ïõí äýï äåßêôåò.

äçìéïõñãåß ðßíáêá êáôÜëëçëï ãéá ôçí áðïèÞêåõóç ôùí âáèìþí 30 ìáèçôþí óå 12 ìáèÞìáôá. Ç äéá÷åßñéóç ôùí ðéíÜêùí ãßíåôáé óõíÞèùò ìå Ýíèåôïõò âñü÷ïõò. Óôçí ðåñßðôùóç ðïõ ðñüêåéôáé íá óáñùèïýí üëá ôá óôïé÷åßá åíüò ðïëõäéÜóôáôïõ ðßíáêá, ÷ñçóéìïðïéïýíôáé ôüóïé âñü÷ïé üóåò åßíáé êáé ïé äéáóôÜóåéò ôïõ ðßíáêá. Óå êÜèå ìåôñçôÞ ôïõ âñü÷ïõ áíôéóôïé÷ßæïõìå êáé Ýíá äåßêôç ôïõ ðßíáêá.

Ðáñáäåßãìáôá 18-7. á) Ôá êáèßóìáôá åíüò èåÜôñïõ åßíáé äéáôåôáãìÝíá óå ãñáììÝò êáé óå óôÞëåò. Óå Ýíá åéóéôÞñéï èåÜôñïõ ç áíáöïñÜ óôï êÜèéóìá ãßíåôáé ìå áíáãñáöÞ ôçò óåéñÜò ðïõ âñßóêåôáé ôï êÜèéóìá êáé ôïõ áýîïíôá áñéèìïý ôïõ êáèßóìáôïò ìÝóá óôç óåéñÜ.

As Integer

êÜèéóìá (1,1) óåéñÜ 1, áýîùí áñéèìüò 1 êÜèéóìá (3,2) óåéñÜ 3, áýîùí áñéèìüò 2

Ó÷Þìá 18 - 3. Ç áñßèìçóç áñ÷ßæåé áðü ôï ðÜíù áñéóôåñü êÜèéóìá

â) ¸óôù üôé èÝëïõìå íá êáôá÷ùñßóïõìå ôç âáèìïëïãßá ôùí ìáèçôþí ìéáò ôÜîçò, þóôå óå Óôï ðáñÜäåéãìá 18-6 äåí êÜèå ãñáììÞ íá õðÜñ÷ïõí ïé âáèìïß åíüò ìáèçôÞ óôá ìáèÞìáôá ôçò ÖõóéêÞò, ôçò Ý÷ïõìå Ýíáí äéóäéÜóôáôï ðßíáêá áëëÜ ôñåéò ×çìåßáò, ôùí ÍÝùí åëëçíéêþí êáé ôçò Éóôïñßáò.

ÐáñÜäåéãìá 18-9. Ãéá íá êáôá÷ùñßóïõìå ôá ïíüìáôá ôùí èåáôþí áíôéóôïé÷ßæïíôÜò ôá ìå ôá óôïé÷åßá åíüò äéóäéÜóôáôïõ ðßíáêá ãñÜöïõìå:

Dim Seat_Name(30, 15) As String Dim Message As String For i = 1 To 30 For j = 1 To 15 Message = "Oíïìá èåáôÞ: " & i & "ç óåéñÜ " & j & "ç èÝóç." Seat_Name(i, j) = InputBox(Message, "ÅéóáãùãÞ") Next i Next j

ìïíïäéÜóôáôïõò.

ÖõóéêÞ ×çìåßá ÍÝá Éóôïñßá Ðáýëïõ Ãêßêáò ÊïñÜëëç Ïéêïíüìïõ Ãáëéþôïò

17 12 15 20 18

1ï ìÜèçìá

18 15 16 18 19

15 16 17 19 19

2ï ìÜèçìá

118 13 17 17 20

âáèìïß âáèìïß

1ïõ áôüìïõ 2ïõ áôüìïõ

âáèìïß Íïõ áôüìïõ

5ïìÜèçìá

Ó÷Þìá 18-4. Ç äéÜôáîç åíüò êáôáëüãïõ ìáèçôþí êáé âáèìþí óå ìïñöÞ ðßíáêá. Óôïí ðßíáêá ôçò VB èá åê÷ùñçèïýí ìüíïí ïé âáèìïß. Ôá ïíüìáôá ôùí ìáèçôþí êáé ôùí ìáèçìÜôùí äåí áíÞêïõí óôïí ðßíáêá. Óôïí ðáñáðÜíù ðßíáêá öáßíïíôáé ðÝíôå ìáèçôÝò êáé ï âáèìüò ôïõò óå êÜèå Ýíá áðü ôá 4 ìáèÞìáôá. Ç äéÜôáîç ðïõ ðñïêýðôåé åßíáé Ýíáò äéóäéÜóôáôïò ðßíáêáò. ¸÷åé ãñáììÝò, ðïõ áíôéóôïé÷ïýí óôçí ðñþôç äéÜóôáóç, êáé óôÞëåò ðïõ áíôéóôïé÷ïýí óôç äåýôåñç äéÜóôáóç. Ôá äåäïìÝíá ôïõ äéäéÜóôáôïõ ðßíáêá ðñÝðåé íá åßíáé ôïõ ßäéïõ ôýðïõ. Óôçí ðåñßðôùóç ôïõ ðáñáäåßãìáôïò ìáò åßíáé áêÝñáéïé. Óôçí VB ìðïñïýìå íá ïñßóïõìå ðßíáêåò ü÷é ìüíï ìéáò êáé äýï äéáóôÜóåùí áëëÜ ðïëëþí äéáóôÜóåùí (multidimensional). Ôï ìÝãéóôï ðëÞèïò ôùí äéáóôÜóåùí åßíáé ðåñßðïõ 60, áñéèìüò êÜðùò õðåñâïëéêüò, áöïý óðÜíéá ÷ñåéÜæåôáé íá ÷ñçóéìïðïéÞóïõìå ðåñéóóüôåñåò áðü 2 Þ 3 äéáóôÜóåéò. Ç äÞëùóç åíüò ðßíáêá ðïëëþí äéáóôÜóåùí ãßíåôáé üðùò êáé óôçí ðåñßðôùóç ôïõ ìïíïäéÜóôáôïõ ðßíáêá ìå ôéò äçëùôéêÝò åíôïëÝò Dim, Public, Private, Static. Ìåôáîý ôùí ðáñåíèÝóåùí ôïðïèåôïýìå ìßá ôéìÞ ãéá êÜèå äéÜóôáóç. Ï ãåíéêüò ôñüðïò óýíôáîçò åßíáé ï åîÞò:

Dim üíïìá_ìåôáâëçôÞò(ìÝãéóôïò_äåßêôçò1, ìÝãéóôïò_äåßêôçò2, …) As ôýðïò 224

Ôï êÜôù üñéï ôùí äåéêôþí ÌÝ÷ñé áõôü ôï óçìåßï åßäáìå ðáñáäåßãìáôá óôá ïðïßá öáßíåôáé ðþò ìðïñïýìå íá äçëþóïõìå ôç ìåãáëýôåñç ôéìÞ ðïõ ìðïñåß íá ðÜñåé ï äåßêôçò åíüò ðßíáêá. ¼ìùò, äåí áíáöÝñáìå ôßðïôå ãéá ôç ìéêñüôåñç ôéìÞ ðïõ ìðïñåß íá ðÜñåé ï äåßêôçò. ºóùò ìÜëéóôá íá óáò äçìéïõñãÞèçêå ç åíôýðùóç üôé ç ìéêñüôåñç ôéìÞ ìðïñåß íá åßíáé ðÜíôá 1. Óôçí ðñáãìáôéêüôçôá ç ìéêñüôåñç ôéìÞ ðïõ ìðïñåß íá ðÜñåé ï äåßêôçò, åêôüò êáé áí Ý÷åé äçëùèåß äéáöïñåôéêÜ, åßíáé ç ôéìÞ 0. ¢óêçóç 18-2. ¸óôù, üôé ôï üíïìá ôïõ áñ÷åßïõ C:\…\VB\Wizards\Template\Finish.bmp Ý÷åé äïèåß ùò ôéìÞ óôçí éäéüôçôá Picture åíüò ðëáéóßïõ åéêüíáò ìå üíïìá Canvas. Óôçí ðåñéï÷Þ ôïõ ðëáéóßïõ åéêüíáò èá åßíáé ó÷åäéáóìÝíç ç åéêüíá ðïõ âñßóêåôáé áðïèçêåõìÝíç óôï áñ÷åßï. Ìáò æçôïýí íá ãñÜøïõìå ðñüãñáììá, ôï ïðïßï íá áíáóôñÝöåé ôçí åéêüíá êÜèå öïñÜðïõ ðáôåßôáé ðëÞêôñï ìå üíïìá Invert. Ôá åéêïíïóôïé÷åßá (pixels) ìéáò åéêüíáò åßíáé äéáôåôáãìÝíá óå óôÞëåò x êáé óå ãñáììÝò y. Ôçí åéêüíá ìðïñïýìå íá ôçí áðïèçêåýóïõìå óå Ýíáí äéóäéÜóôáôï ðßíáêá, áí óå êÜèå óôïé÷åßï ôïõ ðßíáêá áíôéãñÜøïõìå ôï ÷ñþìá êÜèå åéêïíïóôïé÷åßïõ. Ç áíôéãñáöÞ ìðïñåß íá ãßíåé áíôéãñÜöïíôáò ôï ÷ñþìá ôïõ ðÜíù áñéóôåñÜ åéêïíïóôïé÷åßïõ ôçò åéêüíáò óôï óôïé÷åßï (0,0) ôïõ ðßíáêá, ôï ÷ñþìá ôïõ áìÝóùò åðüìåíïõ ðñïò ôá äåîéÜ åéêïíïóôïé÷åßïõ.

Åéêüíá 18-3. Ôï áðïôÝëåóìá ôçò áíáóôñïöÞò 225


Ðáñáäåßãìáôá 18-11.

óôï óôïé÷åßï (0,1) ôïõ ðßíáêá ê.ï.ê. ìÝ÷ñé íá åîáíôëçèïýí üëá ôá åéêïíïóôïé÷åßá ôçò ãñáììÞò. Ìå ôïí ßäéï ôñüðï óáñþíïõìå êáé ôá åéêïíïóôïé÷åßá ôçò äåýôåñçò ãñáììÞò ôçò åéêüíáò ìåôáöÝñïíôáò ôá: óôï (1,0) óôïé÷åßï ôïõ ðßíáêá, óôï (1,1) óôïé÷åßï ôïõ ðßíáêá ê.ï.ê. Áí ôá óôïé÷åßá ôïõ ðßíáêá ôá ôïðïèåôÞóïõìå ðÜëé ìÝóá óôï ðëáßóéï ôçò åéêüíáò, áñ÷ßæïíôáò ôçí ôïðïèÝôçóç áðü ôçí êÜôù äåîéÜ ðëåõñÜ êáé óáñþíïíïíôáò ôçí ðåñéï÷Þ ðñïò ôá áñéóôåñÜ êáé ðÜíù, èá ãßíåé ç áíáóôñïöÞ ôçò åéêüíáò. Óå ìïñöÞ êþäéêá èá ãñÜöáìå:

á) Ç äçëùôéêÞ åíôïëÞ:

Dim Lessons(1 Ôï 12) As String ïñßæåé åëÜ÷éóôç ôéìÞ äåßêôç ôï 1 êáé ìÝãéóôç ôï 12. Åðßóçò ç äçëùôéêÞ åíôïëÞ:

Dim YearPeriod(1990 Ôï 2100) As Integer

Private Sub Invert_Click()

ïñßæåé åëÜ÷éóôç ôéìÞ äåßêôç ôï 1990 êáé ìÝãéóôç ôï 2100.

'ÅíäéÜìåóïò ðßíáêáò 'Ïñéæüíôéï ðëÜôïò 'Äåßêôåò óÜñùóçò

Dim Pixel(800, 600) As Long Dim MaxX, MaxY As Long Dim x, y As Long Canvas.ScaleMode = vbPixels MaxX = Canvas.ScaleWidth - 1 MaxY = Canvas.ScaleHeight - 1

â) Ç äçëùôéêÞ åíôïëÞ:

Dim IC_Description(1000 Ôï 9999) As String ïñßæåé åëÜ÷éóôç ôéìÞ äåßêôç ôï 1000 êáé ìÝãéóôç ôï 9999. Óôçí óõãêåêñéìÝíç ðåñßðôùóç ï äåßêôçò ìðïñåß íá ôáõôéóôåß ìå ôïí ôåôñáøÞöéï êùäéêü åíüò ïëïêëçñùìÝíïõ êõêëþìáôïò (IC) ãéá íá áðëïðïéçèåß ï ôñüðïò áíáöïñÜò. Ð.÷.:

'Ïé äéáóôÜóåéò óå åéêïíïóôïé÷åßá

'ÁíôéãñáöÞ óôïí ðßíáêá 'Ãéá êÜèå ãñáììÞ For y = 0 To MaxY '" " óôÞëç For x = 0 To MaxX Pixel(x, y) = Canvas.Point(x, y) Next x Next y 'ÌåôáöïñÜ áðü ôïí ðßíáêá êáé áíáóôñïöÞ For y = 0 To MaxY For x = 0 To MaxX Canvas.PSet (x, y), Pixel(MaxX - x, MaxY - y) Next x Next y

IC_Description(7400) IC_Description(7402) IC_Description(7404) : IC_Description(7474)

ã) Ôá üñéá ìÝóá óôá ïðïßá êõìáßíåôáé Ýíáò äåßêôçò ìðïñåß íá åßíáé êáé áñíçôéêÜ, ð.÷. óôç äçëùôéêÞ åíôïëÞ:

Dim Temperature(-45 Ôï 120) As Long ä) Ïé äçëþóåéò êáé ôùí äýï ïñßùí åßíáé äõíáôüí íá ãßíïõí êáé óå äéóäéÜóôáôïõò êáé óå ðïëõäéÜóôáôïõò ðßíáêåò.

End Sub

Dim Chess(1 Ôï 8, 1 To 8) As Long Dim Cube(1 To 20, 1 To 10, 10) As Long

Óôçí ðéï ðÜíù Üóêçóç ç ôéìÞ 0 Ý÷åé õðüóôáóç ùò åëÜ÷éóôç ôéìÞ äåßêôç. ÌåñéêÝò öïñÝò üìùò ç ôéìÞ 0 äåí Ý÷åé õðüóôáóç. Ãéá ðáñÜäåéãìá, äåí Ý÷åé íüçìá ï ìçäåíéêüò ìáèçôÞò, ç ìçäåíéêÞ ðüëç êôë. ¸ôóé, ðáñ' üëï ðïõ õðÜñ÷åé óôïé÷åßï ìå äåßêôç 0 êáé äåóìåýåôáé ï áíôßóôïé÷ïò ÷þñïò ìíÞìçò, ôï óôïé÷åßï äåí ÷ñçóéìïðïéåßôáé ìÝóá óôïí êþäéêá. Ãéá íá áðïöýãïõìå áõôÞí, ôçí ðåñéôôÞ ãéá ðïëëïýò, äÝóìåõóç, ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå ðñéí áðü ôéò äçëùôéêÝò åíôïëÝò, ðïõ ïñßæïõí ðßíáêåò, ôç äçëùôéêÞ åíôïëÞ:

Óôáôéêïß êáé äõíáìéêïß ðßíáêåò

Option Base åëÜ÷éóôïò_äåßêôçò üðïõ åëÜ÷éóôïò_äåßêôçò áñéèìüò 0 Þ 1. ÐáñÜäåéãìá 18-10. Ìå ôéò åíôïëÝò:

Option Base 1 Dim Students(30) Dim Lessons(12) Dim Grades(30, 12)

As String As String As Integer

Äçëþíåôáé üôé ï ðßíáêáò Students èá Ý÷åé 30 áêñéâþò óôïé÷åßá, ï ðßíáêáò Lessons èá Ý÷åé 12 áêñéâþò óôïé÷åßá êáé ï ðßíáêáò Grades èá Ý÷åé 30x12=360 óôïé÷åßá. Áí äåí åß÷å ðñïçãçèåß ç äçëùôéêÞ åíôïëÞ Option Base, ï ðßíáêáò Students èá äçëùíüôáí ãéá 31 óôïé÷åßá, ï ðßíáêáò Lessons ãéá 13 óôïé÷åßá êáé ï ðßíáêáò Grades ãéá 31x13=403 óôïé÷åßá. Ç åíôïëÞ Option Base èåùñåßôáé óÞìåñá ìÜëëïí îåðåñáóìÝíç, áöïý ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå åíáëëáêôéêÜ Ýíáí Üëëï ôñüðï äÞëùóçò, ï ïðïßïò ïñßæåé ôüóï ôï êÜôù üñéï åíüò äåßêôç, üóï êáé ôï ðÜíù üñéï ôïõ. Ç äÞëùóç ãßíåôáé ìÝóá óôçí áíôßóôïé÷ç äçëùôéêÞ åíôïëÞ, ãñÜöïíôáò ìÝóá óôçí ðáñÝíèåóç ôçí åëÜ÷éóôç ôéìÞ ôïõ äåßêôç, ôçí êùäéêÞ ëÝîç To êáé ôç ìÝãéóôç ôéìÞ ôïõ äåßêôç. 226

= "4 ðýëåò NAND, 2 åéóüäùí" = "4 ðýëåò NOR, 2 åéóüäùí " = "6 ðýëåò NOR" : = "Delay Flip-Flop"

Ï êáèïñéóìüò ÷þñïõ óôïõò ðïëõäéÜóôáôïõò ðßíáêåò ÷ñåéÜæåôáé ðñïóï÷Þ. Ôï ìÝãåèïò ôïõ ðßíáêá ðñïêýðôåé áðü ôï ãéíüìåíï ôïõ åýñïõò ôéìþí êÜèå äåßêôç. Ð.÷. óå ôñéóäéÜóôáôï ðßíáêá ìå êÜèå äåßêôç 100, ÷ñåéÜæïíôáé 100x100x100=1.000.000 óôïé÷åßá. Ðïëý åýêïëá ìðïñïýìå íá âãïýìå åêôüò ïñßùí ìíÞìçò ÷ùñßò íá ôï êáôáëÜâïõìå ...

Ï ôñüðïò äÞëùóçò ôïõ ìåãÝèïõò ôùí ðéíÜêùí, ðïõ ðåñéãñÜøáìå óôéò ðñïçãïýìåíåò ðáñáãñÜöïõò, èÝôåé ôïí ðåñéïñéóìü üôé ðñÝðåé íá ãíùñßæïõìå åê ôùí ðñïôÝñùí ôç ìÝãéóôç êáé ôçí åëÜ÷éóôç ôéìÞ ðïõ ìðïñåß íá ðÜñåé Ýíáò äåßêôçò êáôÜ ôçí åêôÝëåóç ôçò åöáñìïãÞò. Áõôüò ï ôñüðïò äÞëùóçò äçìéïõñãåß óôáôéêïýò ðßíáêåò. Óôçí VB õðÜñ÷åé ç äõíáôüôçôá ïñéóìïý êáé äõíáìéêþí ðéíÜêùí, äçëáäÞ ðéíÜêùí ôùí ïðïßùí ôá üñéá, êáé êáôÜ óõíÝðåéá êáé ôï ìÝãåèïò, ìðïñåß íá áëëÜîåé êáôÜ ôç äéÜñêåéá ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò êáé äåí åßíáé óôáôéêÜ êáé ðñïêáèïñéóìÝíá ôç óôéãìÞ ôçò êùäéêïðïßçóçò áðü ôïí ðñïãñáììáôéóôÞ. Áõôü åßíáé áñêåôÜ ÷ñÞóéìï, áöïý ðïëý óðÜíéá ãíùñßæïõìå ôïõò üãêïõò ôùí äåäïìÝíùí ðïõ èá ÷ñçóéìïðïéÞóåé êÜèå ÷ñÞóôçò. Ãéá ðáñÜäåéãìá, óôçí Üóêçóç 18-2 ÷ñçóéìïðïéÞóáìå Ýíáí ðßíáêá ìå 800x600 = 480.000 óôïé÷åßá Þ 1.920.000 ãéá íá êáëýøïõìå ôçí ðåñßðôùóç ðïõ ôï ìÝãåèïò ôïõ ðëáéóßïõ åéêüíáò èá Þôáí ðïëý ìåãÜëï. Áí üìùò ÷ñçóéìïðïéïýóáìå Ýíáí äõíáìéêü ðßíáêá, ôï ìÝãåèüò ôçò ìíÞìçò èá äåóìåýïíôáí êáôÜ ôç óôéãìÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò êáé èá ìðïñïýóå íá êáèïñéóôåß áíÜëïãá ìå ôéò ôñÝ÷ïõóåò áíÜãêåò. Ç äÞëùóç åíüò äõíáìéêïý ðßíáêá ãßíåôáé ìå äçëùôéêÞ åíôïëÞ, üðùò êáé ôùí óôáôéêþí ðéíÜêùí, áëëÜ ÷ùñßò ôçí áíáãñáöÞ ôçò ìÝãéóôçò ôéìÞò ôùí äåéêôþí ìÝóá óôéò ðáñåíèÝóåéò. Ãéá ðáñÜäåéãìá:

Dim Students() Dim Grades()

As String As Integer

Ï êáèïñéóìüò üìùò ôùí ïñßùí ôùí äåéêôþí ãßíåôáé ìå ôçí åíôïëÞ ReDim.

ReDim Students(20) ReDim Grades(1 To 30, 1 To 12) Redim MonthDays(1 To 28) 227

Ç åíôïëÞ Redim äåí ìðïñåß íá ãñáöåß óôçí ðåñéï÷Þ äçëþóåùí ìéáò ðñïãñáììáôéóôéêÞò ìïíÜäáò, áëëÜ ìüíïí ìÝóá óôïí êþäéêá ìéáò õðïñïõôßíáò.


ÐáñÜäåéãìá 18-12. Ìðïñïýìå íá äéáìïñöþóïõìå ôïí êþäéêá ôçò Üóêçóçò 18-1, þóôå íá ìç ãßíåôáé äéáêïðÞ ôçò åêôÝëåóçò ôïõ ðñïãñÜììáôïò êáé íá åßíáé äõíáôÞ ç åêôÝëåóÞ ôïõ ãéá üðïéï ðëÞèïò ôéìþí èåñìïêñáóéþí èåëÞóåé íá åéóÜãåé ï ÷ñÞóôçò. Dim Temp() As Single 'ÄÞëùóç äõíáìéêïý ðßíáêá ôýðïõ Single Dim No As Integer 'ÐëÞèïò èåñìïêñáóéþí áðü ôïí ÷ñÞóôç 'ÅéóáãùãÞ ðëÞèïõò èåñìïêñáóéþí No = InputBox("ÐëÞèïò ðüëåùí", "ÅéóáãùãÞ") ReDim Temp(No) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá Ç åíôïëÞ Redim ìðïñåß íá äå÷ôåß ìÝóá óôéò ðáñáíèÝóåéò ìåôáâëçôÝò, óå áíôßèåóç ìå ôçí åíôïëÞ Dim ðïõ ìðïñåß íá äå÷ôåß ìüíïí óôáèåñÝò. Ç ôñÝ÷ïõóá ìÝãéóôç ôéìÞ ôïõ äåßêôç åíüò ðßíáêá ìðïñåß íá áíé÷íåõôåß êáëþíôáò ôç óõíÜñôçóç Ubound, ðïõ äÝ÷åôáé ùò ðáñáìÝôñïõò ôï üíïìá ôïõ ðßíáêá êáé ôïí áýîïíôá áñéèìü ôïõ äåßêôç, ð.÷. Ubound(Temp,1) ãéá ôïí ðñþôï äåßêôç ôïõ ðßíáêá Temp êáé Ubound(Grades, 2) ãéá ôïí äåýôåñï äåßêôç ôïõ ðßíáêá Grades . Åðßóçò, ç åëÜ÷éóôç ôéìÞ ôïõ äåßêôç åíüò ðßíáêá ìðïñåß íá áíé÷íåõôåß êáëþíôáò ôç óõíÜñôçóç Lbound, ç ïðïßá óõíôÜóóåôáé üðùò áêñéâþò êáé ç Ubound. ÊÜèå öïñÜ ðïõ åêôåëåßôáé ç åíôïëÞ Redim ïé ôéìÝò ôùí óôïé÷åßùí ôïõ ðßíáêá ÷Üíïíôáé. Ç VB áñ÷éêïðïéåß ôïí ðßíáêá êáé èÝôåé ãéá ôéìÞ óôï êÜèå óôïé÷åßï, ôçí ôéìÞ 0 ãéá ôïõò áñéèìçôéêïýò ôýðïõò êáé ôçí ôéìÞ "" ãéá ôïõò áëöáñéèìçôéêïýò. ÕðÜñ÷ïõí üìùò ðåñéðôþóåéò óôéò ïðïßåò äå èÝëïõìå íá ÷áèïýí ïé õðÜñ÷ïõóåò ôéìÝò. Áõôü ìðïñåß íá ãßíåé ÷ñçóéìïðïéþíôáò ôçí êùäéêÞ ëÝîç Preserve óôç äçëùôéêÞ åíôïëÞ ReDim. ÐáñÜäåéãìá 18-13. Óôï ðéï êÜôù ôìÞìá ðñïãñÜììáôïò, üóï ï ÷ñÞóôçò ðëçêôñïëïãåß áñéèìïýò Ýíáò äõíáìéêüò ðßíáêáò Volts óõíå÷þò áõîÜíåé ôï ìÝãåèüò ôïõ êáé ïé áñéèìïß êáôá÷ùñßæïíôáé óôá óôïé÷åßá ôïõ.

Dim Volts() Dim CurrentValue ReDim Volts(1)

'Ïñéóå äõíáìéêü ðßíáêá

Do

'ÅéóáãùãÞ ôéìÞò CurrentValue = InputBox("ÔñÝ÷ïõóá ôéìÞ", "ÔÜóç") If Not IsNumeric(CurrentValue) Then Exit Do 'ÅðÝêôáóç ôïõ ðßíáêá êáôÜ 1 ReDim Preserve Volts(UBound(Volts, 1) + 1) 'ÅéóáãùãÞ ôéìÞò óôï ôåëåõôáßï óôïé÷åßï ôïõ ðßíáêá Volts(UBound(Volts, 1)) = CurrentValue Loop

ÅñãáóôçñéáêÝò áóêÞóåéò 1. ÓõíèÝóôå ðñüãñáììá óôï ïðïßï íá ãßíåôáé åéóáãùãÞ êáé åêôýðùóç ôùí ïíïìÜôùí ìáèçôþí. ×ñçóéìïðïéÞóôå ãéá õðüäåéãìá ôïí êþäéêá ðïõ ðåñéãñÜöåôáé óôï ðáñÜäåéãìá 18-4. 2. Íá ãñáöåß ðñüãñáììá ðïõ íá äÝ÷åôáé ôá ïíüìáôá ôùí çìåñþí ôçò åâäïìÜäáò êáé íá ôá ðáñïõóéÜæåé óå ìéá öüñìá 3. ÃñÜøôå ðñüãñáììá ãéá ôçí åéóáãùãÞ ôïõ ïíüìáôïò, ôïõ ïíüìáôïò ðáôÝñá êáé ôïõ åðùíýìïõ åíüò óõíüëïõ ðñïóþðùí. Ôï ðñüãñáììá íá åêôõðþíåé ôá ïíüìáôá ôùí ðñïóþðùí üðùò óôï ðáñÜäåéãìá 18-6. 4. ÅêôåëÝóôå ôçí Üóêçóç 18-1 åéóÜãïíôáò ðñáãìáôéêÝò ôéìÝò èåñìïêñáóéþí, ðïõ èá ðÜñåôå áðü ôï íõ÷ôåñéíü äåëôßï åéäÞóåùí ôçò ôçëåüñáóçò. 5. ÃñÜøôå ðñüãñáììá ãéá ôï ðáñÜäåéãìá 18-9. 6. ÅêôåëÝóôå ôçí Üóêçóç 18-2 ðïõ ðñáãìáôïðïéåß ôçí áíáóôñïöÞ ìéáò åéêüíáò. Óôç óõíÝ÷åéá áëëÜîåôå ôçí åíôïëÞ:

Canvas.PSet (x, y), Pixel(MaxX - x, MaxY - y) ôïõ äåýôåñïõ âñü÷ïõ óå:

Canvas.PSet (x, y), Pixel(MaxX - x, y) Ôé ðáñáôçñåßôå; Ó÷ïëéÜóôå ôï áðïôÝëåóìá. ÐïéÜ Üëëç áëëáãÞ ìðïñåßôå íá êÜíåôå, þóôå íá ôïðïèåôçèåß äéáöïñåôéêÜ ç åéêüíá ìÝóá óôï ðëáßóéï åéêüíáò; Ôé èá óõíÝâáéíå áí äåí ÷ñçóéìïðïéïýóáìå ôïí ðßíáêá ãéá ôçí åíäéÜìåóç áðïèÞêåõóç ôùí åéêïíïóôïé÷åßùí áëëÜ åöáñìüæáìå ôçí áíáóôñïöÞ áðåõèåßáò ðÜíù óôá åéêïíïóôïé÷åßá; 7. Ðñïóáñìüóôå ôçí Üóêçóç 18-2, þóôå íá ÷ñçóéìïðïéåß äõíáìéêü ðßíáêá. 8. ÃñÜøôå ðñüãñáììá óôï ïðïßï íá ãßíïíôáé ìå ôç óåéñÜ ïé åîÞò åíÝñãåéåò: á) Íá áðïèçêåýïíôáé ôá ïíüìáôá ìáèçôþí óå Ýíáí ìïíïäéÜóôáôï ðßíáêá ìå üíïìá Names. â) Íá áðïèçêåýïíôáé ôá ïíüìáôá ìáèçìÜôùí óå Ýíáí ìïíïäéÜóôáôï ðßíáêá ìå üíïìá

Lessons. ã) Ìå óõíÜñôçóç InputBox íá åéóÜãïíôáé ïé âáèìïß êÜèå ìáèçôÞ óå êÜèå ìÜèçìá. Óôçí ðåñéï÷Þ ìçíýìáôïò ôïõ äéáëïãéêïý ðáñáèýñïõ íá åìöáíßæåôáé ôï üíïìá ôïõ ìáèçôÞ êáé ôïõ ìáèÞìáôïò êáé ü÷é ïé áýîïíôåò áñéèìïß.

Óçìåéþóåéò:

Ìüíïí ôï ðÜíù üñéï ôïõ äåßêôç åßíáé äõíáôüí íá ìåôáâëçèåß ìå ìéá åíôïëÞ Redim. Ôï êÜôù üñéï êáèþò êáé ôï ðëÞèïò ôùí äåéêôþí ìðïñåß íá êáèïñéóôåß ìüíïí êáôÜ ôçí åêôÝëåóç ôçò Redim ôçí ðñþôç öïñÜ. Åðßóçò, ìå ôçí åíôïëÞ Redim äåí åßíáé äõíáôüí íá ãßíåé ç áëëáãÞ ôïõ ôýðïõ äåäïìÝíùí ôïõ ðßíáêá.

Áíáêåöáëáßùóç

Ãéá Ýíá óýíïëï ìåôáâëçôþí ìðïñïýìå íá ÷ñçóéìïðïéÞóïõìå Ýíá ãåíéêü üíïìá êáé íá áíáöåñüìáóôå óå ìéá óõãêåêñéìÝíç áðü áõôÝò, ãñÜöïíôáò ôï ãåíéêü üíïìá êáé Ýíáí áñéèìçôéêü äåßêôç. Ïé ìåôáâëçôÝò áõôïý ôïõ ôýðïõ ïíïìÜæïíôáé ìåôáâëçôÝò ìå äåßêôç êáé óõíèÝôïõí ðßíáêåò. Ç áíáöïñÜ óå Ýíá óôïé÷åßï ôïõ ðßíáêá ãßíåôáé ìå ôç âïÞèåéá áñéèìçôéêïý äåßêôç. Óõó÷åôßæïíôáò ôï ìåôñçôÞ åíüò âñü÷ïõ ìå ôïí äåßêôç åíüò ðßíáêá ìðïñïýìå íá åðåîåñãáóôïýìå üëá ôá óôïé÷åßá ôïõ ðßíáêá ìÝóá óå Ýíá âñü÷ï. ÁíÜëïãá ìå ôï ðëÞèïò ôùí äåéêôþí Ýíáò ðßíáêáò ìðïñåß íá åßíáé ìïíïäéÜóôáôïò, äéóäéÜóôáôï, …, ðïëõäéÜóôáôïò. Ç äÞëùóç åíüò ðßíáêá ãßíåôáé ìå åíôïëÝò Dim, Private,

Public, Static. Åêôüò áðü ôïõò óôáôéêïýò ðßíáêåò õðÜñ÷ïõí êáé ïé äõíáìéêïß. Óôïõò äõíáìéêïýò ðßíáêåò ôï ðëÞèïò ôùí óôïé÷åßùí ôïõò êáèïñßæåôáé ìå ôçí åíôïëÞ Redim. 228

229


ÌÜèçìá 19

ÂáóéêÝò äéáäéêáóßåò ðÜíù óå ðßíáêåò Ôåëåéþíïíôáò áõôü ôï ìÜèçìá ïé ìáèçôÝò èá ìðïñïýí: Íá ðåñéãñÜöïõí áëãïñßèìïõò åýñåóçò åëÜ÷éóôçò êáé ìÝãéóôçò ôéìÞò. Íá áíáëýïõí áëãïñßèìïõò ôáîéíüìçóçò óôïé÷åßùí ðéíÜêùí. Íá êùäéêïðïéïýí áëãïñßèìïõò áíáæÞôçóçò ôéìþí ìÝóá óå ðßíáêåò. Íá áíáëýïõí áëãïñßèìïõò óõã÷þíåõóçò óôïé÷åßùí ðéíÜêùí. ÕðÜñ÷ïõí ìåñéêÝò äéáäéêáóßåò ðïõ ìðïñïýìå íá ôéò ÷áñáêôçñßóïõìå âáóéêÝò, ìéáò êáé ÷ñçóéìïðïéïýíôáé ðÜñá ðïëý óõ÷íÜ óôéò äéÜöïñåò åöáñìïãÝò ðïõ åðåîåñãÜæïíôáé ðßíáêåò. ÊÜðïéåò áðü áõôÝò ôéò äéáäéêáóßåò, ôéò ðéï áðëÝò, üðùò ôçí áíáöïñÜ óå Ýíá óôïé÷åßï, ôçí åéóáãùãÞ óôïé÷åßùí, ôçí áíôéãñáöÞ, ôéò ìåëåôÞóáìå Þäç óôï ðñïçãïýìåíï êåöÜëáéï ðáñÜëëçëá ìå ôç ãåíéêÞ èåùñßá ðåñß ðéíÜêùí. Óå áõôü ôï êåöÜëáéï èá ìåëåôÞóïõìå ðéï óýíèåôåò âáóéêÝò äéáäéêáóßåò, üðùò ôç äéáäéêáóßá åýñåóçò åëÜ÷éóôïõ üñïõ, ôçí ôáîéíüìçóç ôùí äåäïìÝíùí åíüò ðßíáêá, ôç óõã÷þíåõóç ôùí ðåñéå÷ïìÝíùí äýï ðéíÜêùí êáé ôçí áíáæÞôçóç ìéáò ôéìÞò ìÝóá óå Ýíá ðßíáêá.

Åýñåóç åëÜ÷éóôïõ üñïõ ¸óôù, üôé óå Ýíáí ðßíáêá Á ðïõ Ý÷åé Í óôïé÷åßá, Ý÷åé áðïèçêåõôåß Ýíá óýíïëï áðü áñéèìïýò êáé Ýóôù üôé æçôÜìå íá âñïýìå ôï ìéêñüôåñï áðü áõôïýò. Ï áëãüñéèìïò áíáëýåôáé óôá åîÞò âÞìáôá: 1. Áõèáßñåôá èåùñïýìå üôé ï åëÜ÷éóôïò üñïò âñßóêåôáé óôï ðñþôï óôïé÷åßï ôïõ ðßíáêá. 2. ÊÜíïõìå óõãêñßóç ôïõ õðïôéèÝìåíïõ åëÜ÷éóôïõ üñïõ ìå ôï åðüìåíï óôïé÷åßï ôïõ ðßíáêá. Áí ôï ðåñéå÷üìåíï ôïõ åðüìåíïõ óôïé÷åßïõ åßíáé ìéêñüôåñï ôïõ õðïôéèÝìåíïõ åëÜ÷éóôïõ, èåùñïýìå ùò íÝï åëÜ÷éóôï ôï ðåñéå÷üìåíï ôïõ óôïé÷åßïõ. 3. ÅðáíáëáìâÜíïõìå ôï âÞìá 2, óáñþíïíôáò üëá ôá óôïé÷åßá ôïõ ðßíáêá ìÝ÷ñé íá öôÜóïõìå óôï óôïé÷åßï Á(Í). Óôï ðñüãñáììá ðïõ äßíïõìå, Ý÷ïõìå ðáñåìâÜëëåé êáé åíôïëÝò ðïõ êÜíïõí áíÜãíùóç ôùí óôïé÷åßùí ôïõ ðßíáêá êáé åêôýðùóç ôïõ åëÜ÷éóôïõ üñïõ.

Option Explicit 'ÅëÜ÷éóôïò äåßêôçò ôï 1 Option Base 1 : 'ÄÞëùóç ôïõ ðßíáêá Dim A() 'Ôï ðëÞèïò ôùí óôïé÷åßùí Dim N As Integer 'ÌåôñçôÞò âñü÷ïõ Dim i As Integer 'Ðñïóùñéíüò åëÜ÷éóôïò Dim Min 'ÈÝóç ðñïóùñéíïý åëÜ÷éóôïõ Dim k As Integer 'Ðñïóäéüñéóå ôï ðëÞèïò óôïé÷åßùí ôïõ ðßíáêá N = InputBox("ÐëÞèïò óôïé÷åßùí", "ÅéóáãùãÞ") 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá ReDim A(N) 'ÅéóáãùãÞ óôïé÷åßùí For i = 1 To N A(i) = InputBox("Óôïé÷åßï " & i, "ÅéóáãùãÞ") Next i 'Åýñåóç åëÜ÷éóôïõ 'Åóôù üôé ï åëÜ÷éóôïò åßíáé ï ðñþôïò Min = A(1): k=1 For i = 2 To N 'Áí äåí éó÷ýåé ç õðüèåóç If Min > A(i) Then ' íÝïò åëÜ÷éóôïò ï Á(i) Min = A(i) k=i End If Next i 'ÅìöÜíéóç áðïôåëÝóìáôïò MsgBox "ÅëÜ÷éóôïò üñïò ï " & Min & " óôç èÝóç " & k 231


Ôáîéíüìçóç ¸óôù Ýíá óýíïëï áñéèìçôéêþí Þ áëöáñéèìçôéêþí äåäïìÝíùí. Óôç äéáäéêáóßá ôçò ôáîéíüìçóçò (sorting) ðßíáêá ìáò æçôåßôáé íá äéáôÜîïõìå ôá äåäïìÝíá ðïõ õðÜñ÷ïõí óôá óôïé÷åßá ôïõ óå áýîïõóá Þ óå öèßíïõóá óåéñÜ ìå âÜóç ôçí ôéìÞ ôïõò. Ãéá ðáñÜäåéãìá, áí ôá äåäïìÝíá áíôéóôïé÷ïýí óôá ïíüìáôá åíüò óõíüëïõ áôüìùí, ôï íá ôá äéáôÜîïõìå óå áýîïõóá óåéñÜ, óçìáßíåé íá ôá ôïðïèåôÞóïõìå óå áëöáâçôéêÞ óåéñÜ. ÕðÜñ÷ïõí ðïëëïß áëãüñéèìïé ôáîéíüìçóçò ðïõ ðïéêßëïõí ùò ðñïò ôç äïìÞ, ôï ðëÞèïò ôùí âçìÜôùí, ôï åßäïò êáé ôï ðëÞèïò ôùí óõãêñßóåùí êáé ôç äéÜñêåéá åêôÝëåóçò. Óôç óõíÝ÷åéá èá ðåñéãñÜøïõìå Ýíá ðïëý áðëü áëãüñéèìï ôáîéíüìçóçò ðïõ åßíáé ãíùóôüò ùò ôáîéíüìçóç ìå áðåõèåßáò åðéëïãÞ (straight selection). Ï áëãüñéèìïò áõôüò åßíáé ï ðéï áðëüò áëãüñéèìïò ôáîéíüìçóçò. ÏíïìÜæåôáé Ýôóé, äéüôé êÜèå öïñÜ åðéëÝãåé ôïí ìéêñüôåñï áñéèìü áðü Ýíá óýíïëï áñéèìþí. ¸óôù, üôé óå Ýíáí ðßíáêá ìå üíïìá A Ý÷ïõí áðïèçêåõôåß N ôï ðëÞèïò äåäïìÝíá. Óå êÜèå

Ï üñïò ôáîéíüìçóç áðïôåëåß ðéóôÞ ìåôÜöñáóç ôïõ üñïõ sort ðïõ èåùñåßôáé áäüêéìïò ãéá ôç ëåéôïõñãßá ðïõ ôïí ÷ñçóéìïðïéïýìå. Ðåñéóóüôåñï äüêéìïò èá Þôáí ï üñïò order ðïõ óçìáßíåé äéáôÜóóù

ðÝñáóìá, ð.÷. óôï ðÝñáóìá i, ôá óôïé÷åßá ôïõ ðßíáêá ÷ùñßæïíôáé íïåñÜ óå äýï ôìÞìáôá : Ôï ôìÞìá õðïäï÷Þò ìå óôïé÷åßá ôá: A(1), A(2),..., A(i-1), óôï ïðïßï âñßóêïíôáé ôá ìÝ÷ñé åêåßíç ôç óôéãìÞ ôáîéíïìçìÝíá äåäïìÝíá. Ôï ðçãáßï ôìÞìá ìå óôïé÷åßá ôá: A(i), A(i+1),..., A(N), óôï ïðïßï ðåñéÝ÷ïíôáé ôá õðüëïéðá ìç ôáîéíïìçìÝíá äåäïìÝíá ôïõ ðßíáêá. ¼ôáí ï áëãüñéèìïò îåêéíÜ, óôï ðÝñáóìá i=1, ôï ôìÞìá õðïäï÷Þò äåí Ý÷åé êáèüëïõ óôïé÷åßá, áöïý üðùò öáßíåôáé áðü ôïí ïñéóìü ôïõ ôìÞìáôïò õðïäï÷Þò ôï ðÜíù ôïõ üñéï åßíáé i-1=1-

1=0 êáé ôï A(0) óôïé÷åßï äåí Ý÷åé ïñéóôåß óôïí ðßíáêá (äåßôå ðßíáêá 19-1). Áðü ôï ðçãáßï ôìÞìá ðïõ ðåñéÝ÷åé üëá ôá óôïé÷åßá ôïõ ðßíáêá âñßóêåôáé ç ìéêñüôåñç ôéìÞ, ìå ôñüðï ðïõ ðåñéãñÜøáìå óôçí ðñïçãïýìåíç ðáñÜãñáöï. Ç ìéêñüôåñç ôéìÞ ôïðïèåôåßôáé óôï ðñþôï óôïé÷åßï ôïõ ðçãáßïõ ôìÞìáôïò, äçëáäÞ óôï óôïé÷åßï A(1), åíþ ç ôéìÞ ðïõ âñéóêüôáí óå áõôü ôï óôïé÷åßï ôïðïèåòôåßôáé óôï óôïé÷åßï ðïõ ðåñéåß÷å ôç ìéêñüôåñç ôéìÞ. Óôï åðüìåíï ðÝñáóìá, ôï ðÝñáóìá i=2, ôï ôìÞìá õðïäï÷Þò ðåñéÝ÷åé Ýíá óôïé÷åßï, ìå ôç ìéêñüôåñç ôéìÞ êáé ôï åýñïò ôïõ ðçãáßïõ ôìÞìáôïò Ý÷åé åëáôôùèåß êáôÜ 1. Áðü ôï ðçãáßï ôìÞìá åðéëÝãåôáé ðÜëé ï ìéêñüôåñïò üñïò êáé ôïðïèåôåßôáé óôç èÝóç ôïõ ðñþôïõ óôïé÷åßïõ ôïõ ðçãáßïõ ôìÞìáôïò, ôç èÝóç A(2) áõôÞ ôç öïñÜ, åíþ ï üñïò ðïõ âñéóêüôáí óå áõôÞí ôç èÝóç ìåôáöÝñåôáé óôç èÝóç, óôçí ïðïßá åß÷å âñåèåß ï ìéêñüôåñïò üñïò. Åßíáé åõíüçôï üôé ôï íÝï ôìÞìá õðïäï÷Þò ðåñéÝ÷åé äýï üñïõò ôáîéíïìçìÝíïõò. ÁõôÞ ç äéáäéêáóßá åðáíáëáìâÜíåôáé áõîÜíïíôáò êÜèå öïñÜ ôï i êáôÜ 1, ìÝ÷ñéò üôïõ íá ìçí áðïìåßíåé ðçãáßï ôìÞìá. Óå êÜèå ðÝñáóìá âñßóêïõìå ôç ìéêñüôåñç ôéìÞ ôïõ ðçãáßïõ ôìÞìáôïò êáé ôç ìåôáöÝñïõìå áðü ôï óôïé÷åßï, Ýóôù A(j), óôï óôïé÷åßï A(i), äçëáäÞ óôçí ðñþôç èÝóç ôïõ ðçãáßïõ ôìÞìáôïò. Åðßóçò, ðáñÜëëçëá ãéá íá ìç ÷áèåß ç ðáëéÜ ôéìÞ ôïõ óôïé÷åßïõ A(i), ãßíåôáé ìåôáöïñÜ ôçò óôç èÝóç A(j). Ï áëãüñéèìïò óõìðëçñþíåôáé óå N-1 ðåñÜóìáôá (óáñþóåéò) ôùí óôïé÷åßùí ôïõ ðßíáêá.

67 67

90 90

32 32

79 79

72 72

62 62

90 90

10 10

i=2

10

90

32

79

72

62

90

67

i=3

10

32

90

79

72

62

90

67

i=4

10

32

62

79

72

90

90

67

i=5

10

32

62

67

72

90

90

79

i=6

10

32

62

67

72

90

90

79

i=7

10

32

62

67

72

79

90

90

10

32

62

67

72

79

90

90

ÔåëéêÞ êáôÜóôáóç:

232

Ôï ôìÞìá ðñïãñÜììáôïò ðïõ õëïðïéåß ôïí ðáñáðÜíù áëãüñéèìï åßíáé ôï åîÞò:

Option Explicit Option Base 1 'ÅëÜ÷éóôïò äåßêôçò ôï 1 : Dim A() 'ÄÞëùóç ôïõ ðßíáêá Dim N As Integer 'Ôï ðëÞèïò ôùí óôïé÷åßùí Dim i, j As Integer 'ÌåôñçôÝò âñü÷ùí Dim Min 'Ðñïóùñéíüò åëÜ÷éóôïò Dim k As Integer 'ÈÝóç ðñïóùñéíïý åëÜ÷éóôïõ Dim MsgStr As String 'Áíáêïßíùóç äéÜôáîçò '1. Åßóïäïò äåäïìÝíùí 'ÄéÜâáóå ôï ðëÞèïò ôùí óôïé÷åßùí ôïõ ðßíáêá N = InputBox("ÐëÞèïò óôïé÷åßùí", "ÅéóáãùãÞ") ReDim A(N) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá 'ÅéóáãùãÞ óôïé÷åßùí For j = 1 To N A(j) = InputBox("Óôïé÷åßï " & j, "ÅéóáãùãÞ") Next j '2. Åðåîåñãáóßá äåäïìÝíùí 'Ðñáãìáôïðïßçóå Í-1 ðåñÜóìáôá For j = 1 To N - 1 'Åýñåóç åëÜ÷éóôïõ óôï ðçãáßï ôìÞìá Min = A(j): k=j 'Åóôù üôé ï åëÜ÷éóôïò åßíáé ï ðñþôïò For i = j + 1 To N If A(i) < Min Then 'Áí äåí éó÷ýåé ç õðüèåóç áíôéêáôÜóôçóå Min = A(i) k=i End If Next i 'ÁíôéìåôÜèåóç á' óôïé÷åßïõ ôïõ ðçãáßïõ ìå åëÜ÷éóôï A(k) = A(j) 'Ôï á' ôïõ ðçãáßïõ óôç èÝóç ôïõ åëÜ÷éóôïõ A(j) = Min 'Ôï åëÜ÷éóôï óôç èÝóç ôïõ á' ôïõ ðçãáßïõ Next j '3. ¸îïäïò áðïôåëåóìÜôùí 'ÅìöÜíéóå ôá óôïé÷åßá äéáôåôáãìÝíá MsgStr = "" For j = 1 To N MsgStr = MsgStr & A(j) & ", " Next j MsgBox MsgStr, , "ÄéáôåôáãìÝíá äåäïìÝíá" Ôï ôìÞìá 2 (åðåîåñãáóßá äåäïìÝíùí) ðåñéÝ÷åé Ýíáí âñü÷ï, ìå ìåôñçôÞ ôç ìåôáâëçôÞ j. Ï âñü÷ïò ðñáãìáôïðïéåß ôá äéáäï÷éêÜ ðåñÜóìáôá. Óôï åóùôåñéêü áõôïý ôïõ âñü÷ïõ åêôåëïýíôáé ïé äéáäéêáóßåò åýñåóçò ôïõ åëá÷ßóôïõ óôï ðçãáßï ôìÞìá (Ý÷åé äéáìïñöùèåß êÜðùò ï êþäéêáò ôçò ðñïçãïýìåíçò ðáñáãñÜöïõ) êáé ç áíôéìåôÜèåóç ôïõ åëÜ÷éóôïõ ìå ôï ðñþôï óôïé÷åßï ôïõ ðçãáßïõ ôìÞìáôïò.

Á(1) Á(2) Á(3) Á(4) Á(5) Á(6) Á(7) Á(8) Áñ÷éêÞ êáôÜóôáóç: i=1

Óôïí ðßíáêá 19-1 öáßíåôáé, óôéò äéáäï÷éêÝò ãñáììÝò, ç ðñüïäïò ôçò ôáîéíüìçóçò êáôÜ ôá äéáäï÷éêÜ ðåñÜóìáôá. Óå êÜèå ãñáììÞ, ôï ôìÞìá ðïõ Ý÷åé ôïíéóôåß, áðïôåëåß ôï ðçãáßï ôìÞìá. Åðßóçò, öáßíåôáé ðùò ôï ðñþôï óôïé÷åßï ôïõ ðçãáßïõ ôìÞìáôïò áíôéìåôáôßèåôáé ìå ôïí ìéêñüôåñï üñï ôïõ ðçãáßïõ ôìÞìáôïò êáé üôé óå êÜèå ðÝñáóìá ìéá ôéìÞ ìåôáöÝñåôáé êáé êáôáëáìâÜíåé ôçí ôåëéêÞ ôçò èÝóç.

Óõã÷þíåõóç

8ï ðÝñáóìá äåí ÷ñåéÜæåôáé. Äåí õðÜñ÷åé ëüãïò íá âñåèåß åëÜ÷éóôïò ãéá Ýíá óôïé÷åßï.

Óôç äéáäéêáóßá ôçò óõã÷þíåõóçò (merging) äýï ðéíÜêùí, A êáé B, ìáò æçôåßôáé íá óõíåíþóïõìå ôá äåäïìÝíá ðïõ ðåñéÝ÷ïõí ôá óôïé÷åßá ôïõò, óå Ýíáí íÝï ðßíáêá C. Éäéáßôåñï åíäéáöÝñïí ðáñïõóéÜæåé ç óõã÷þíåõóç óôçí ðåñßðôùóç ðïõ ôá óôïé÷åßá ôùí ðéíÜêùí åßíáé Þäç äéáôåôáãìÝíá êáôÜ ôçí ßäéá öïñÜ êáé èÝëïõìå ç äéÜôáîç íá äéáôçñçèåß êáé óôïí íÝï ðßíáêá. Áò õðïèÝóïõìå, üôé ïé áñ÷éêïß ðßíáêåò Ý÷ïõí ôéò ôéìÝò ôïõò äéáôåôáãìÝíåò êáôÜ áýîïõóá óåéñÜ êáé üôé ìå ôçí ßäéá óåéñÜ èÝëïõìå íá ôïðïèåôçèïýí êáé ïé ôéìÝò óôïí ôñßôï ðßíáêá. Ç ìÝèïäïò ðïõ áêïëïõèïýìå åßíáé áðëÞ. Óõãêñßíïõìå ðÜíôá Ýíá óôïé÷åßï ôïõ ðßíáêá A ìå Ýíá óôïé÷åßï ôïõ ðßíáêá B. Ôï ìéêñüôåñï áðü áõôÜ ôï ôïðïèåôïýìå óôïí ðßíáêá C êáé áðü ôïí 233


ðßíáêá ðïõ ìåôáöÝñèçêå ôï óôïé÷åßï (ôïí Á Þ ôïí Â) ðáßñíïõìå ôï åðüìåíï óôïé÷åßï. Ãéá ðáñÜäåéãìá, îåêéíÜìå óõãêñßíïíôáò ôï ðñþôï óôïé÷åßï ôïõ ðßíáêá A ìå ôï ðñþôï óôïé÷åßï ôïõ ðßíáêá Â. Áí A(1)<B(1), ôïðïèåôïýìå ôçí ôéìÞ ôïõ Á(1) óôç èÝóç C(1) êáé óõíå÷ßæïõìå ãéá íá óõãêñßíïõìå ôï óôïé÷åßï A(2) ìå ôï B(1). Áíôßèåôá, áí A(1)>=B(1), ôïðïèåôïýìå ôçí ôéìÞ ôïõ B(1) óôç èÝóç C(1) êáé óõíå÷ßæïõìå ãéá íá óõãêñßíïõìå ôï óôïé÷åßï A(1) ìå ôï

B(2).

ÅðáíáëáìâÜíïõìå ìÝ÷ñé íá åîáíôëçèïýí üëá ôá óôïé÷åßá åíüò åê ôùí äýï ðéíÜêùí. ¼ôáí óõìâåß áõôü, ìåôáöÝñïõìå óôïí ðßíáêá C ôá õðüëïéðá óôïé÷åßá ôïõ ðßíáêá ðïõ äåí Ý÷ïõìå óáñþóåé ìÝ÷ñé ôï ôÝëïò.

¸ëåã÷ïò

ÓõíèÞêç

A(1)<B(1) ÁëçèÞò A(1) A(2)<B(1) ØåõäÞò A(2) A(2)<B(2) ÁëçèÞò A(3) A(3)<B(2) ØåõäÞò A(4) A(3)<B(3) ØåõäÞò A(3)<B(4) ÁëçèÞò A(4)<B(4) ÁëçèÞò Ï ðßíáêáò A åîáíôëÞèçêå. ÌåôáöïñÜ ôïõ B

1 7 16 19

1 4 7 10 16 16 19 23 34

C(1) C(2) C(3) C(4) C(5) C(6) C(7) C(8) C(9)

4 10 16 23 34

B(1) B(2) B(3) B(4) B(5)

Ó÷Þìá 19-1. Äåßãìá äéáäéêáóßáò óõã÷þíåõóçò Óôï ó÷Þìá 19-1 äßíåôáé ó÷çìáôéêÜ ç äéáäéêáóßá óõã÷þíåõóçò ãéá äýï ðßíáêåò ìå 4 êáé 5 óôïé÷åßá. Óôçí áñéóôåñÞ óôÞëç áíáöÝñïíôáé ïé Ýëåã÷ïé ðïõ ðñáãìáôïðïéïýíôáé óå êÜèå âÞìá. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ õëïðïéåß ôïí ðáñáðÜíù áëãüñéèìï åßíáé ôï åîÞò:

Option Base 1 'ÅëÜ÷éóôïò äåßêôçò ôï 1 : Dim A(), B(), C() 'ÄÞëùóç ðéíÜêùí Dim N, Ì As Integer 'Ôï ðëÞèïò ôùí óôïé÷åßùí ôùí A, B Dim i, j, k As Integer 'Äåßêôåò ðéíÜêùí A, B, C Dim MsgStr As String 'Áíáêïßíùóç '1. Åßóïäïò äåäïìÝíùí 'Óôïé÷åßá ðßíáêá A N = InputBox("ÐëÞèïò óôïé÷åßùí ðßíáêá Á", "ÅéóáãùãÞ") ReDim A(N) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá Á For i = 1 To N A(i) = InputBox("Ðßíáêáò Á óôïé÷åßï " & i, "ÅéóáãùãÞ") Next i 'Óôïé÷åßá ðßíáêá Â Ì = InputBox("ÐëÞèïò óôïé÷åßùí ðßíáêá Â", "ÅéóáãùãÞ") ReDim B(Ì) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá  For j = 1 To Ì B(j) = InputBox("Ðßíáêáò B óôïé÷åßï " & j, "ÅéóáãùãÞ") Next j ReDim C(N + Ì) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá C '2. Äéáäéêáóßá óõã÷þíåõóçò 'Áñ÷éêïðïßçóç ôùí äåéêôþí i = 1: j = 1: k=1 'ÌÝ÷ñé íá åîáíôëçèïýí ôá óôïé÷åßá åíüò ôùí ðéíÜêùí Do While (i <= N) And (j <= Ì) If A(i) < B(j) Then C(k) = A(i) 'Óôïé÷åßï áðü ôïí ðßíáêá Á i=i+1 'Ôï åðüìåíï ôïõ Á Else C(k) = B(j) 'Óôïé÷åßï áðü ôïí ðßíáêá  j=j+1 'Ôï åðüìåíï ôïõ  End If k=k+1 Loop 'ÌåôÜöåñå ôá õðüëïéðá óôïé÷åßá ôïõ A Þ ôïõ B óôïí C For j = j To Ì 'Ï âñü÷ïò äåí åêôåëåßôáé áí j>M C(k) = B(j) k=k+1 Next j 234

For i = i To N 'Ï âñü÷ïò äåí åêôåëåßôáé áí i>N C(k) = A(i) k=k+1 Next i '3. ¸îïäïò áðïôåëåóìÜôùí MsgStr = "" For k = 1 To N + Ì MsgStr = MsgStr & C(k) & ", " Next k MsgBox MsgStr, , "ÄéáôåôáãìÝíá äåäïìÝíá"

ÓåéñéáêÞ áíáæÞôçóç Ç áðëïýóôåñç ìÝèïäïò áíáæÞôçóçò ìéáò ôéìÞò ìÝóá óå Ýíáí ðßíáêá, ôïõ ïðïßïõ ôá óôïé÷åßá åßíáé (Þ äåí åßíáé) äéáôåôáãìÝíá, åßíáé ç ìÝèïäïò ôçò óåéñéáêÞò áíáæÞôçóçò (sequential search). Ç ìÝèïäïò âáóßæåôáé óôçí åîÞò áðëÞ áñ÷Þ. Îåêéíþíôáò áðü ôï ðñþôï óôïé÷åßï ôïõ ðßíáêá, óõãêñßíïõìå ôï ðåñéå÷üìåíü ôïõ ìå ôçí ôéìÞ ðïõ ìáò åíäéáöÝñåé. Áí ïé äýï ôéìÝò åßíáé ßóåò, ç ìÝèïäïò óôáìáôÜåé êáé áíáêïéíþíåé üôé ç ôéìÞ âñÝèçêå óôï ðñþôï óôïé÷åßï. Áí üìùò ïé äýï ôéìÝò åßíáé äéáöïñåôéêÝò, ç äéáäéêáóßá óýãêñéóçò åðáíáëáìâÜíåôáé ìå ôï äåýôåñï óôïé÷åßï, ýóôåñá ìå ôï ôñßôï ê.ï.ê. Ìå áõôüí ôïí ôñüðï åßôå åíôïðßæåôáé óå êÜðïéï áðü ôá óôïé÷åßá ç ôéìÞ ðïõ ìáò åíäéáöÝñåé, åßôå äéáðéóôþíåôáé, áöïý åëåã÷èïýí üëá ôá óôïé÷åßá ôïõ ðßíáêá, üôé ç ôéìÞ äåí ðåñéÝ÷åôáé óôïí ðßíáêá. Ôï ôìÞìá ðñïãñÜììáôïò, ðïõ õëïðïéåß ôïí ðáñáðÜíù áëãüñéèìï, åßíáé ôï åîÞò:

Option Base : Dim A() Dim N Dim i Dim Key Dim MsgStr

1

'ÅëÜ÷éóôïò äåßêôçò ôï 1

'ÄÞëùóç ôïõ ðßíáêá As Integer 'Ôï ðëÞèïò ôùí óôïé÷åßùí As Integer 'ÌåôñçôÞò âñü÷ïõ 'ÔéìÞ ðñïò áíáæÞôçóç As String 'Áíáêïßíùóç

'1. Åßóïäïò äåäïìÝíùí 'ÄéÜâáóå ôï ðëÞèïò ôùí óôïé÷åßùí ôïõ ðßíáêá N = InputBox("ÐëÞèïò óôïé÷åßùí", "ÅéóáãùãÞ") ReDim A(N) 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá 'ÅéóáãùãÞ óôïé÷åßùí For j = 1 To N A(j) = InputBox("Óôïé÷åßï " & j, "ÅéóáãùãÞ") Next j 'ÔéìÞ ðñïò áíáæÞôçóç Key = InputBox("ÐïéÜ åßíáé ç ðñïò áíáæÞôçóç ôéìÞ ?", "ÁíáæÞôçóç") '2. Äéáäéêáóßá áíáæÞôçóçò For i = 1 To N If A(i) = Key Then Exit For Next i '3. Áíáêïßíùóç áðïôåëÝóìáôïò If i <= N Then MsgStr = "ÂñÝèçêå óôç èÝóç " & i Else 'ÌåôñçôÞò i>N óçìáßíåé üôé äå äéáêüðçêå ï âñü÷ïò óôç ìÝóç MsgStr = "Äå ÂñÝèçêå" End If MsgBox MsgStr, , "ÁíáæÞôçóç" Ôï ðëÞèïò ôùí êýêëùí ðïõ ãßíïíôáé óôï âñü÷ï ôïõ ôìÞìáôïò 2 ôïõ ðñïãñÜììáôïò êõìáßíåôáé áðü 1, áí ç ôéìÞ âñßóêåôáé óôï ðñþôï óôïé÷åßï, ìÝ÷ñé N, áí ç ôéìÞ âñßóêåôáé óôï ôåëåõôáßï óôïé÷åßï. Óå ðåñßðôùóç ðïõ ôá óôïé÷åßá åßíáé Þäç ôáîéíïìçìÝíá, ôï ðñüãñáììá ìðïñåß íá âåëôéùèåß. Áí êáôÜ ôç óÜñùóç ôùí óôïé÷åßùí ôïõ ðßíáêá âñåèåß óôïé÷åßï ìå ôéìÞ ìåãáëýôåñç áðü ôçí áíáæçôïýìåíç ðñÝðåé íá äéáêüðôåôáé ç äéáäéêáóßá, þóôå íá ìç ãßíåôáé ðåñéôôÞ áíáæÞôçóç óôá åðüìåíá óôïé÷åßá. ¼ðùò èá äïýìå óôçí åðüìåíç ðáñÜãñáöï óôçí ðåñßðôùóç ôùí ôáîéíïìçìÝíùí óôïé÷åßùí åöáñìüæïíôáé ôá÷ýôåñïé áëãüñéèìïé. 235

Óôï ðáñÜäåéãìá 2-5 Ý÷åé áíáëõèåß ìÝ âÞìáôá ï áëãüñéèìïò ôçò óåéñéáêÞò áíáæÞôçóçò.


ÔÝëïò, ðñÝðåé íá óçìåéùèåß üôé ï áëãüñéèìïò áíáæÞôçóçò ÷ñåéÜæåôáé ôñïðïðïßçóç, óôçí ðåñßðôùóç ðïõ áíáæçôïýíôáé üëåò ïé åìöáíßóåéò ìéáò ôéìÞò ìÝóá óôá óôïé÷åßá ôïõ ðßíáêá.

ÄõáäéêÞ áíáæÞôçóç Ç ìÝèïäïò ôçò äõáäéêÞò áíáæÞôçóçò (binary search) åöáñìüæåôáé ìüíï óå äéáôåôáãìÝíïõò ðßíáêåò. Ðñüêåéôáé ãéá ìéá áðü ôéò ðéï ãñÞãïñåò ìåèüäïõò áíáæÞôçóçò. Ç éäÝá óôçí ïðïßá âáóßæåôáé ç ìÝèïäïò åßíáé ç åîÞò: Óå êÜèå âÞìá óõãêñßíïõìå ôçí ôéìÞ ðïõ áíáæçôÜìå, Ýóôù Key, ìå ôçí ôéìÞ ôïõ óôïé÷åßïõ A(i), ðïõ âñßóêåôáé óôï ìÝóï åíüò ôìÞìáôïò ôïõ ðßíáêá. Áí Key>A(i) ôüôå ç ðñïò áíáæÞôçóç ôéìÞ ðñÝðåé íá âñßóêåôáé ìåôÜ áðü ôï óôïé÷åßï ðïõ ìüëéò åëÝãîáìå. Ãé' áõôü êáé ç áíáæÞôçóç óõíå÷ßæåôáé óôï êÜôù ìéóü ôïõ ôìÞìáôïò ðïõ åîåôÜæåôáé. Áíôßèåôá, áí Key<A(i),

Óôï ðáñÜäåéãìá 2-5 Ý÷åé áíáëõèåß ìå âÞìáôá ï áëãüñéèìïò ôçò äõáäéêÞò áíáæÞôçóçò.

ôüôå ç áíáæÞôçóç óõíå÷ßæåôáé óôï ðÜíù ìéóü ôïõ ôìÞìáôïò ðïõ åîåôÜæïõìå. ÄçëáäÞ óå êÜèå âÞìá áðïêëåßåôáé ôï ìéóü ôïõ ôìÞìáôïò ðïõ Ý÷åé áðïìåßíåé áðü ôï ðñïçãïýìåíï âÞìá. Ç äéáäéêáóßá åëÝã÷ïõ-áðüññéøçò áñ÷ßæåé ìå ðåñéï÷Þ áíß÷íåõóçò ïëüêëçñï ôïí ðßíáêá êáé óõíå÷ßæåôáé ìÝ÷ñéò üôïõ åßôå íá áíé÷íåõôåß ç áíáæçôïýìåíç ôéìÞ åßôå íá äéáðéóôùèåß üôé äåí õðÜñ÷åé ç ôéìÞ óå êáíÝíá óôïé÷åßï ôïõ ðßíáêá. Óôïí ðßíáêá 19-2, óôéò äéáäï÷éêÝò ãñáììÝò öáßíåôáé ç ðñüïäïò ôçò áíáæÞôçóçò êáôÜ ôá âÞìáôá åêôÝëåóçò ôïõ áëãïñßèìïõ. Óå êÜèå ãñáììÞ, ôï ôìÞìá ðïõ Ý÷åé ôïíéóôåß, áðïôåëåß ôçí ðåñéï÷Þ ðïõ áðïìÝíåé ãéá áíáæÞôçóç. Åðßóçò, óôïí ðßíáêá öáßíïíôáé êáé ïé ôéìÝò ôùí ìåôáâëçôþí Top, Bottom êáé Middle, ðïõ óçìåéþíïõí ôï ìéêñüôåñï óôïé÷åßï, ôï ìåãáëýôåñï óôïé÷åßï êáé ôï óôïé÷åßï ôïõ ìÝóïõ áíôßóôïé÷á, ôçò ðåñéï÷Þò áíáæÞôçóçò. Ç ðñïò áíáæÞôçóç ôéìÞ åßíáé ôï 90, ðïõ åíôïðßæåôáé ìåôÜ áðü 4 âÞìáôá.

ÂÞìá Top Middle Bottom Á(1) Á(2) Á(3) Á(4) Á(5) Á(6) Á(7) Á(8) Á(9) Á(10) Á(11) Á(12) Á(13) 1 2 3 4

1 8 11 11

7 10 12 11

13 13 13 11

10 10 10 10

27 27 27 27

32 32 32 32

35 35 35 35

54 54 54 54

62 62 62 62

67 67 67 67

72 72 72 72

79 79 79 79

Ðßíáêáò 19-2. Ôï ôìÞìá ðñïãñÜììáôïò ðïõ õëïðïéåß ôïí ðáñáðÜíù áëãüñéèìï åßíáé ôï åîÞò:

Option Explicit Option Base 1 : Dim A() Dim N As Integer Dim i As Integer Dim Top As Integer Dim Middle As Integer Dim Bottom As Integer Dim Key Dim MsgStr As String

'ÅëÜ÷éóôïò äåßêôçò ôï 1 'ÄÞëùóç ôïõ ðßíáêá 'Ôï ðëÞèïò ôùí óôïé÷åßùí 'ÌåôñçôÞò âñü÷ïõ '¢íù üñéï ðåñéï÷Þò áíáæÞôçóçò 'ÌÝóïí 'ÔéìÞ ðñïò áíáæÞôç'ÊÜôù üñéïóç 'Áíáêïßíùóç

'1. Åßóïäïò äåäïìÝíùí 'ÄéÜâáóå ôï ðëÞèïò ôùí óôïé÷åßùí ôïõ ðßíáêá N = InputBox("ÐëÞèïò óôïé÷åßùí", "ÅéóáãùãÞ") 'Êáèïñéóìüò ìåãÝèïõò ôïõ ðßíáêá ReDim A(N) 'ÅéóáãùãÞ óôïé÷åßùí For i = 1 To N A(i) = InputBox("Óôïé÷åßï " & i, "ÅéóáãùãÞ") Next i 'ÔéìÞ ðñïò áíáæÞôçóç Key = InputBox("ÐïéÜ åßíáé ç ðñïò áíáæÞôçóç ôéìÞ ?", "ÁíáæÞôçóç") '2. Äéáäéêáóßá áíáæÞôçóçò 'Áñ÷éêÜ üñéá Top = 1: Bottom = N 236

83 83 83 83

90 90 90 90

95 95 95 95

99 99 99 99

'Ïóï õðÜñ÷åé ðåñéï÷Þ áíáæÞôçóçò Do While Top <= Bottom Middle = (Top + Bottom) \ 2 'Âñåò ôï ìÝóï ôïõ äéáóôÞìáôïò Select Case Key Case Is < A(Middle) Top = Middle + 1 'Ç ôéìÞ óôï êÜôù ìÝñïò ôïõ ðßíáêá Case Is > A(Middle) Bottom = Middle - 1 'Ç ôéìÞ óôï ðÜíù ìÝñïò ôïõ ðßíáêá Case Else Exit Do 'Ç ôéìÞ âñÝèçêå End Select Loop '3. ¸îïäïò áðïôåëåóìÜôùí If Top <= Bottom Then MsgStr = "Ç ôéìÞ âñÝèçêå óôç èÝóç " & Middle Else MsgStr = "Ç ôéìÞ äå âñÝèçêå" End If MsgBox MsgStr, , "ÁíáæÞôçóç" ÐáñáôçñÞóôå ôï ôÝ÷íáóìá äéáêïðÞò ôïõ âñü÷ïõ. Áí ôï êÜôù üñéï ãßíåé ìéêñüôåñï ôïõ ðÜíù ïñßïõ óçìáßíåé üôé äåí Ý÷åé áðïìåßíåé ðåñéï÷Þ áíáæÞôçóçò. Åðßóçò, ôï ßäéï êñéôÞñéï ÷ñçóéìïðïéåßôáé êáé ãéá íá áíé÷íåõôåß, áí ç áíáæÞôçóç äéáêüðçêå áðü ôçí åýñåóç ôçò ôéìÞò Þ áðü åîÜíôëçóç ôçò ðåñéï÷Þò áíáæÞôçóçò. Ç äõáäéêÞ áíáæÞôçóç ôåñìáôßæåôáé ìåôÜ áðü Int(log2N)+1 åëÝã÷ïõò ôï ðïëý. Áí èåùñÞóïõìå üôé Ý÷ïõìå Ýíáí ðßíáêá ìå 10.000.000 óôïé÷åßá, óôá ïðïßá åßíáé êáôá÷ùñéóìÝíá ïíüìáôá ôïõ ðëçèõóìïý ôçò ÅëëÜäáò, èá ÷ñåéáóôïýí 24 ôï ðïëý Üëìáôá êáé áíáæçôÞóåéò óôá óôïé÷åßá ôïõ ãéá íá åíôïðéóôåß Ýíá üíïìá. Áíôßèåôá ç óåéñéáêÞ áíáæÞôçóç áðáéôåß 5.000.000 åëÝã÷ïõò êáôÜ ìÝóï üñï.

ÅñãáóôçñéáêÝò áóêÞóåéò 1. ÄçìéïõñãÞóôå åöáñìïãÞ, óôçí ïðïßá íá åöáñìüæåôáé ï áëãüñéèìïò ôçò åýñåóçò ôïõ ìÝãéóôïõ åíüò ðßíáêá. 2. ÄçìéïõñãÞóôå åöáñìïãÞ óôçí ïðïßá íá ÷ñçóéìïðïéåßôáé ï áëãüñéèìïò ôçò áðåõèåßáò åðéëïãÞò ãéá ôçí ôáîéíüìçóç ôùí óôïé÷åßùí åíüò ðßíáêá. 3. Óôá óôïé÷åßá åíüò ðßíáêá âñßóêïíôáé ôá âéâëßá ôçò ó÷ïëéêÞò âéâëéïèÞêçò. ÃñÜøôå ðñüãñáììá, óôï ïðïßï ìå ôïí áëãüñéèìï ôçò óåéñéáêÞò áíáæÞôçóçò íá åëÝã÷åé áí Ýíá âéâëßï õðÜñ÷åé óôç âéâëéïèÞêç Þ ü÷é. 4. ¸íáò ðßíáêáò Ý÷åé ôá óôïé÷åßá ôïõ ôáîéíïìçìÝíá. Âåëôéþóôå ôï ðñüãñáììá ôçò óåéñéáêÞò áíáæÞôçóçò, þóôå íá äéáêüðôåôáé óôçí ðåñßðôùóç ðïõ êáôÜ ôç óÜñùóç ôùí óôïé÷åßùí ðßíáêá âñåèåß óôïé÷åßï ìå ôéìÞ ìåãáëýôåñç áðü ôç æçôïýìåíç. 5. Óå Ýíáí ðßíáêá õðÜñ÷ïõí åðáíáëáìâáíüìåíåò ôéìÝò. ÔñïðïðïéÞóôå ôï ðñüãñáììá ôçò óåéñéáêÞò áíáæÞôçóçò, þóôå íá åßíáé äõíáôÞ ç áíáöïñÜ üëùí ôùí èÝóåùí óôéò ïðïßåò õðÜñ÷åé ç ðñïò áíáæÞôçóç ôéìÞ. 6. ÃñÜøôå Ýíá ðñüãñáììá ðïõ íá ôáîéíïìåß äýï ðßíáêåò êáé ìåôÜ íá ôïõò óõã÷ùíåýåé. 7. Íá äçìéïõñãçèåß ðñüãñáììá, ôï ïðïßï íá äéáãñÜöåé ìéá ôéìÞ áðü Ýíá óôïé÷åßï åíüò ðßíáêá. Õðüäåéîç: Áöïý åíôïðéóôåß ôï ðñïò äéáãñáöÞ óôïé÷åßï íá ãßíåé ìåôÜèåóç üëùí ôùí õðïëïßðùí ðñïò ôá ðÜíù. ÌåôÜ ìå åíôïëÞ Redim Preserve íá áëëÜîåé ôï ìÝãåèïò ôïõ ðßíáêá. 8. Óôá óôïé÷åßá äýï ðéíÜêùí êáôá÷ùñßæïõìå, óå áíôßóôïé÷åò èÝóåéò, ôá ïíüìáôá ôùí êñáôþí ôçò Åõñþðçò êáé ôéò ðñùôåýïõóÝò ôïõò. ÃñÜøôå ðñüãñáììá, ôï ïðïßï íá äéáâÜæåé ôï üíïìá ôïõ êñÜôïõò êáé íá ìáò åìöáíßæåé ôçí ðñùôåýïõóÜ ôïõ. 237


Visual Basic 8 - 19