home *** CD-ROM | disk | FTP | other *** search
- /* LEKCJA02.C
- //---------------------------------------------------------------------------
- Temat:
- Komunikacja z u╛ytkownikiem poprzez okna dialogowe
- //---------------------------------------------------------------------------
- Funkcje:
- EXT(207) short Message(
- EXT(208) void MouseHelp(
- EXT(211) void SetFuncText(
- EXT(224) short StringInput(
- EXT(203) short DlgInput(
- HLP_INV(f,b,s)
- //---------------------------------------------------------------------------
-
- EXT(207) short Message( //
- char *str1, // 1. linia tekstu (max. 40 znaków)
- char *str2, // 2. linia tekstu
- char *but1, // 1. klawisz (mo╛e mieå wartoÿå NULL)
- char *but2, // 2. klawisz (mo╛e mieå wartoÿå NULL)
- char *but3, // 3. klawisz (max. 9 znaków)
- short defbut); // standard-klawisz (1-3)
-
- Opis:
- Funkcja przedstawia na ekranie dwie linie tekstu (str1, str2)
- dêugoÿci od 0 do 40 znaków oraz trzy klawisze o nazwach tekstowych
- (but1, but2, but3) zawierajÑcych od 0 do 9 znaków.
- Jeÿli klawisz (but1 i/lub but2) ma wartoÿå NULL to jest on niewidoczny.
- Klawisz but3 nie mo╛e mieå wartoÿci NULL !
- Parametr defbut zawiera numer klawisza uznanego za standardowy, który
- b⌐dzie wskazywany kursorem po wywoêaniu funkcji.
-
- Return:
- 0 => jeÿli wybrany punkt le╛y poza oknem dialogowym
- n => numer wybranego klawisza (but1= 1, but2= 2, but3= 3)
-
- Przykêad:
- Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
- "klawisz-1","klawisz-2","klawisz-3",3);
- //---------------------------------------------------------------------------
-
- EXT(208) void MouseHelp( //
- char *str1, // opis znaczenia lewego klawisza (max. 13)
- char *str2, // opis znaczenia prawego klawisza
- ushort inv); // kolor tekstu i têa (HLP_INV)
-
- Opis:
- Tekst informacyjny wpisywany w dolnej cz⌐ÿci ekranu przedstawiajÑcy
- znaczenie klawiszy myszy o dêugoÿci do 13 znaków.
- Parametr inv definiuje kolor tekstu i têa zmiennej tekstowej definiujÑcej
- pole przeznaczone do opisu dziaêania lewego klawisza. Aby uêatwiå
- jego przeliczenie przygotowano makro HLP_INV.
-
- HLP_INV(f,b,s)
- f = kolor tekstu, b = kolor têa, s = dzwi⌐k ?
- Jeÿli obydwie wartoÿci (f, b) sÑ równe 0 przyjmowany jest kolor
- standardowy.
- Jeÿli parametr s=1 zostanie wydany sygnaê dzwi⌐kowy.
-
- Przykêad:
- MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));
- //---------------------------------------------------------------------------
-
- EXT(211) void SetFuncText( //
- char *text); // wyÿwietlany tekst (max. 27 znaków)
-
- Opis:
- Tekst informacyjny podajÑcy nazw⌐ aktualnie wykonywanej funkcji
- o dêugoÿci do 27 znaków.
-
- Patrz te╛:
- MouseHelp
-
- Przykêad:
- SetFuncText("pokaz wartoÿci numerycznych");
- //---------------------------------------------------------------------------
-
- EXT(224) short StringInput( //
- char *title, // tekst informacyjny (max. 49 znaków)
- char *buf, // bufor do edycji tekstu (max. 255 znaków)
- ushort buflen); // wielkoÿå bufora
-
- Opis:
- Pozwala u╛ytkownikowi wpisaå lini⌐ tekstu do bufora o dêugoÿci buflen.
- Title jest tekstem informacyjnym maksymalnej dêugoÿci 49 znaków
- ukazujÑcym si⌐ w oknie dialogowym i "podpowiadajÑcym" u╛ytkownikowi
- co ma robiå.
-
- Patrz te╛:
- DlgInput
-
- Return:
- TRUE => przy potwierdzeniu "ok"
- FALSE => po wybraniu klawisza "powrót"
-
- Przykêad:
- StringInput("Wpisz rzÑdany tekst !",tekst,255);
- //---------------------------------------------------------------------------
-
- EXT(203) short DlgInput( //
- ushort num, // iloÿå pól (1 - 10)
- char *title, // tytuê pola dialogowego (max. 21 znaków)
- t_dlgdta *dta); // tablica z opisem pól
-
- Opis:
- Zdefiniowanie zmiennych numerycznych.
- Pozwala u╛ytkownikowi podaå wartoÿci zmiennym i/lub wybraå opcj⌐
- dziaêania funkcji.
-
- Sposób zdefiniowania tablicy pól:
-
- typedef struct _dlgdta
- {
- char text[11]; // nazwa klawisza (max. 9 znaków)
- uchar type; // typ pola
- void _far *val; // adres zmiennej lub NULL dla klawisza
- } t_dlgdta;
-
- Typy zmiennych, jakie mogÑ wyst⌐powaå w tablicy:
-
- DLG_SHT : short integer
- DLG_LNG : long integer
- DLG_PHI : double - wartoÿå kÑta podana przez u╛ytkownika w stopniach
- zostaje zamieniona dla interpretera na radiany.
- DLG_LEN : double - dêugoÿå lub koordynaty podane przez u╛ytkownika
- w aktualnie u╛ywanej jednostce zostaj⌐ zamienione dla
- interpretera na milimetry.
- DLG_FAC : double - faktor numeryczny
- DLG_BUT : klawisz z napisem tekstowym do wyboru opcji.
-
- Return:
- 0 => po wybraniu klawisza "powrót"
- 1 => przy potwierdzeniu "ok"
- n => numer klawisza z opcjÑ (o ile istnieje)
-
- Przykêad:
- DlgInput(4," ustalenie zmiennych",&dlg[0])
-
- */
- //---------------------------------------------------------------------------
- // Andrzej Setman WiedeΣ 5-6.08.1995
- //---------------------------------------------------------------------------
- #include "std.h"
- #include "megatyp.h"
- #include "megacad.h"
- //---------------------------------------------------------------------------
- short main(char *filename, char *args)
- {
- t_dlgdta dlg[5];
-
- char tekst[255], kette[42];
- short butret, klawisz= 1;
- short sht= 100;
- long lng= 123456789;
- double phi= (DEF_PI/4);
- double len= 100;
- double fac= 100;
-
- while (klawisz != 0)
- {
- dlg[0].type= dlg[1].type= dlg[2].type= dlg[3].type= DLG_BUT;
- dlg[0].val = dlg[1].val = dlg[2].val = dlg[3].val = NULL;
- strcpy(dlg[0].text,"Message");
- strcpy(dlg[1].text,"DlgInput");
- strcpy(dlg[2].text,"MouseHelp");
- strcpy(dlg[3].text,"StringInpu");
-
- SetFuncText("Wybierz wêaÿciwy klawisz ! ");
-
- klawisz= DlgInput(4," funkcje dialogowe",&dlg[0]);
-
- switch(klawisz)
- {
- case 1: // demonstracja funkcji Message
-
- SetFuncText("u╛ycie funkcji Message");
- butret = Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "U╛ytkownik wybiera jednÑ z 4 mo╛liwoÿci.",
- "klawisz-1","klawisz-2","klawisz-3",3);
- switch(butret)
- {
- case 1:
- Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "wybrano: 'klawisz-1'",
- NULL,NULL,"ok",3);
- break;
- case 2:
- Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "wybrano: 'klawisz-2'",
- NULL,NULL,"ok",3);
- break;
- case 3:
- Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "wybrano: 'klawisz-3'",
- NULL,NULL,"ok",3);
- break;
- default:
- Message("Przykêad demonstrujÑcy funkcj⌐ 'Message'",
- "Wskazano punkt poza oknem dialogowym !",
- NULL,NULL,"ok",3);
- break;
- }
- break;
- //------------------------------------------------------------------
-
- case 2: // demonstracja funkcji DlgInput
-
- dlg[0].type= DLG_SHT;
- dlg[1].type= DLG_LNG;
- dlg[2].type= DLG_FAC;
- dlg[3].type= DLG_PHI;
- dlg[4].type= DLG_FAC;
- dlg[0].val= &sht;
- dlg[1].val= &lng;
- dlg[2].val= &fac;
- dlg[3].val= φ
- dlg[4].val= &len;
- strcpy(dlg[0].text,"int short ");
- strcpy(dlg[1].text,"int long ");
- strcpy(dlg[2].text,"double ");
- strcpy(dlg[3].text,"kÑt ");
- strcpy(dlg[4].text,"odst⌐p ");
-
- SetFuncText("pokaz wartoÿci numerycznych");
- butret= DlgInput(5,"--wpisanie wartosci--",&dlg[0]);
-
- if (butret==0) break;
-
- sprintf(kette,"sht= %d lng= %d ", sht, lng);
- Message("zmienne typu 'short int' i 'long int'",
- kette,NULL,NULL,"ok",3);
-
- sprintf(kette,"stopnie= %f radiany= %f ", phi/DEF_PI*180l, phi);
- Message("wartoÿå kÑta w stopniach i w radianach",
- kette,NULL,NULL,"ok",3);
- sprintf(kette,"dêugoÿå= %f faktor= %f ", len, fac);
- Message("dêugoÿå w 'mm' i faktor niemianowany",
- kette,NULL,NULL,"ok",3);
- break;
- //------------------------------------------------------------------
-
- case 3: // demonstracja funkcji MouseHelp
-
- SetFuncText("u╛ycie funkcji MouseHelp"); // nazwa funkcji
- MouseHelp("lewy klawisz","prawy klawisz",HLP_INV(1,10,1));
- Message("","",NULL,NULL,"",3);
- MouseHelp("","",0);
- break;
- //------------------------------------------------------------------
-
- case 4: // demonstracja funkcji StringInput
-
- SetFuncText("u╛ycie funkcji StringInput");
- StringInput("Przypisanie zmiennej tekstowej dowolnego tekstu !",
- tekst,255);
- if(strlen(tekst) <= 40)
- {
- Message(" Aktualna zawartoÿå zmiennej tekstowej: ",
- tekst,NULL,NULL,"ok",3);
- }
- else
- {
- Message("Tekst jest zbyt dêugi, by przedstawiå go",
- "przy u╛yciu funkcji 'Message' !",NULL,NULL,"ok",3);
- }
- break;
- //------------------------------------------------------------------
-
- default: // 'klawisz' = 0
-
- Message(" Koniec demonstracji - wybrano 'powrót'",
- " lub wskazano poza oknem dialogowym !",
- NULL,NULL,"ok",3);
- break;
- }
- }
- return(0);
- }
- //---------------------------------------------------------------------------
-