Toon posts:

[C] textcolor() wil niet luisteren!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met het schrijven van een beveiligingssysteem dat elektronica kan aansturen voor een schoolproject. Nu moet het dus ook "graphisch" zijn in DOS.

Dus het gebruiken van de textcolor() functie is verplicht.

Maar nu heb ik het volgende probleem:

Ik heb dus mijn main functie en daarin roep ik een functie aan die een kader maakt op het scherm, zonder kleur. En een titel bovenin die in defineer in de funtie, in kleur welke ik ook weer defineer in de functie.

Dus:
code:
1
MainFrame(9, "Dit is de titel met de kleur 9");


Hoe dan ook. Dat gaat goed, ik gebruik cputs() om de kleuren text te schrijven en printf() om de normale text te schrijven.

Maar het moment dat ik in mijn menutje kies om naar een andere functie te gaan, in dit geval AdminLogin(), dan krijg ik opeens een blauw kader, met blauwe titel, en alles in het blauw :o

Hier heb ik dus niet om gevraagd.

Ga ik weer terug naar m'n hoofd functie dan is alles opeens rood (uitgaande van het feit dat de username/password niet goed was, dan krijg je rode text).

Maar om het venster te printen gebruik ik geen cprintf() of cputs(), dus alleen als ik kleur wil gebruik ik dus cputs() en de rest is gewoon printf(). Dan zou je toch zeggen dat het moet lukken? In mijn main() werkt het wel, maar het moment dat ik overstap, werkt het niet meer.


Wat doe ik fout?


Dit is trouwens de main():
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int main() {

    while(MainMenu.choice != 1 || MainMenu.choice != 2)
    {
        clrscr();

        //print mainframe on the screen
        //check vars.h for tech. documentation
        //on the integers used for the colors.
        MainFrame(9, "Business Software Alliance - Software Security System");

/************* DIT WERKT DUS WEL **************/


        //print menu on the screen
        DisplayMainMenu();


            //react to user input at MainMenu()
            if (MainMenu.choice == 1)
            {
                //goto login screen for the administrator
                AdminLogin();
            }
            else if (MainMenu.choice == 2)
            {
                //boot the application which allows users to login and borrow software
                //from the safe, upon scanning of the software.
                CDSafe();
            }
            else
            {
                //if user did not choose a correct option, sound a 'beep'
                SideLine(16);
                textcolor(12);
                cprintf("Please choose one of the options from the Menu. Press any key to continue.\n");
                printf("\a");
                getch();
                
            }//end if

    }//end while

    return 0;
}



En dit werkt dus niet, dan wordt alles opeens blauw:
code:
1
2
3
4
5
6
7
8
9
10
11
void AdminLogin()
{
    clrscr();
    MainFrame(9, "Business Software Alliance - Administrator Login");


    SideLine(17);
    printf("Enter your username and password, or if you don't have that, type 'exit'");


/****** Hier is nog meer code maar dat is niet relevant, hier is het dus al mis gegaan, alles is hier dus BLAUW. En dat moet niet. */

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Tis moeilijk te zeggen zonder de code van MainFrame te zien. Ik zie wel ik regel 35 van je eerste code snippet dat je textcolor(12) doet. Misschien dat dit het effect veroorzaakt?

Verwijderd

Topicstarter
SWfreak schreef op 13 februari 2004 @ 20:21:
Tis moeilijk te zeggen zonder de code van MainFrame te zien. Ik zie wel ik regel 35 van je eerste code snippet dat je textcolor(12) doet. Misschien dat dit het effect veroorzaakt?
Ik zal het even weghalen. Maar ook als 'ie daar niet eens komt, dus als ik in 1 keer een goede optie kies, dan krijg ik 't alsnog.

En de rest is niet geschreven met cprintf of cputs.

Maaruh, hier is de MainFrame() code (sorry was 't vergeten :o ):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/* The main frame used through out the entire program: */
void MainFrame(int TitleColor, char *TitleName) 
{

    //remove the blinking cursor thing from the screen, its ugly.
    _setcursortype(_NOCURSOR);

    //top-left corner
    gotoxy(1,1);
    printf("%c", 201);

    //horizontal line at the top
    for(x=2;x<=79;x++) {
    gotoxy(x,1);
    printf("%c", 205);
    }

    //top-right corner
    gotoxy(80,1);
    printf("%c", 187);

    //vertical lines left and right

    for(y=2;y<=48;y++) {
    gotoxy(1,y);
    printf("%c", 186);
    gotoxy(80,y);
    printf("%c", 186);
    }

    //horizonal line under the title/header
    gotoxy(1,9);
    printf("%c", 204);

    for(x=2; x<=79; x++) {
    gotoxy(x,9);
    printf("%c", 205);
    }
    printf("%c", 185);

    gotoxy(2,11);

    //bottom-left corner
    gotoxy(1,49);
    printf("%c", 200);

    //bottom-right corner
    gotoxy(80,49);
    printf("%c", 188);

    //horizontal line at the bottom
    for(x=2; x<=79; x++) {
    gotoxy(x,49);
    printf("%c", 205);
    }


    //title/header
    gotoxy(3,5);
    textcolor(TitleColor);
    cputs(TitleName);

}//MainFrame();



Edit:
Het weghalen van die textcolor(12); op regel 35 van de main() werkt niet.

[ Voor 9% gewijzigd door Verwijderd op 13-02-2004 20:33 ]


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Wat me iig opvalt is dat je voor het tekenen van het kader de kleur niet veranderd naar welke kleur je ook wilt gebruiken voor het kader. Het lijkt me dat het kader zo getekend wordt in de laatste kleur die gebruikt is. Ik zie ook niet hoe het gebruik van printf ipv cputs hier verandering in moet brengen...

[ Voor 3% gewijzigd door SWfreak op 13-02-2004 20:44 ]


Verwijderd

Topicstarter
Had wat topics gelezen in de search :)

Maar met cprintf() print je kleur, en printf() hoort geen kleur te printen. Of de kleur nou gedefineerd is of niet.


Maar dat werkt dus blijkbaar niet, is er dan een manier om te textcolor() te resetten ofzo?

Verwijderd

Topicstarter
dubbel post maar ik heb 't opgelost.

Heb m'n eigen versie van cprintf() geschreven:

code:
1
2
3
4
5
6
void coltext(int txtcolor, char *input)
{
    textcolor(txtcolor);
    cprintf("%s", input);
    textcolor(7);
}


:) Reset the kleur gelijk als 'ie ermee klaar is, in tegenstelling tot cprintf();

Toch wat handiger lijkt me :)
Pagina: 1