Jak zrobić ramkę na tekst w programie?

Witam.

Mam zrobić program kalkulator. Cały program już mam, ale chciałbym się dowiedzieć jak zrobić ramkę na dany tekst w tym programie?

Program napisał: Jan Kowalski

Możliwe działania do wyboru:

***************************

***************************

***************************

I chciałbym dodać ramkę na tytuł czyli “Program napisał: Jan Kowalski”. Jak to zrobić?

WriteLn(#$C9#$CD#$CD#$CD#$CD#$CD#$BB#$0A#$BA’ :stuck_out_tongue_winking_eye: '#$BA#$0A#$C8#$CD#$CD#$CD#$CD#$CD#$BC);

Odpal charmap.exe ustaw czcionkę “Terminal” - tam jest więcej tego dobrego.

Może to pomoże:

program ramka;

var i: Integer;

begin

  Writeln('Kody ASCII z zakresu 128-255');

  for i:= 128 to 255 do begin

    Write(i, ' - ', Chr(i), ' ');

    if (i mod 8) = 7 then Writeln;

  end;

  Writeln('Ramka podwojna');

  writeln(Chr(201), Chr(205), Chr(205), Chr(187));

  Writeln(Chr(186), 'Hi', Chr(186));

  Writeln(Chr(200), Chr(205), Chr(205), Chr(188));

  Readln;

end.

Program napisany w Turbo Pascalu, ale powinien działać u Ciebie.

Kolor tekstu: procedure TextColor(Color: Byte)

Kolor tła: procedure TextBackground(Color: Byte)

Tylko gdzie to wstawić w swoim programie mam żeby działało?

Dodane 20.01.2010 (Śr) 19:59

program kalkulator;

uses crt;

var

znak, odp : char;

wynik, a, b : real;

begin

repeat

begin

clrscr;

textcolor(green);

writeln ('Program napisał: Jan Kowalski');

writeln;

textcolor(yellow);

writeln ('Możliwe działania do wyboru: ');

writeln;

writeln ('"+" - dodawanie');

writeln ('"-" - odejmowanie');

writeln ('"*" - mnożenie');

writeln ('"/" - dzielenie');

writeln;

write ('Wybieram: ');

readln(znak);

if odp='D' then

begin

case znak of

'+':

begin

writeln ('Poprzedni wynik to: ',wynik:4:2);

write ('Podaj liczbę: ');

readln(a);

wynik:=wynik+a;

writeln ('Wynik to: ',wynik:4:2);

end;

'-':

begin

writeln ('Poprzedni wynik to: ',wynik:4:2);

write ('Podaj pierwszą liczbę: ');

readln(a);

wynik:=wynik-a;

writeln ('Wynik to: ',wynik:4:2);

end;

'*':

begin

writeln ('Poprzedni wynik to: ',wynik:4:2);

write ('Podaj liczbę: ');

readln(b);

wynik:=wynik*b;

writeln ('Wynik to: ',wynik:4:2);

end;

'/':

begin

writeln ('Poprzedni wynik to: ',wynik:4:2);

repeat

begin

write ('Podaj liczbę: ');

readln(b);

end;

until b<>0;

wynik:=wynik/b;

writeln ('Wynik to: ',wynik:4:2);

end;

else writeln ('Nie wybrałeś żadnego działania');

end;

end

else

begin

wynik:=0;

case znak of

'+':

begin

write ('Podaj pierwszą liczbę: ');

readln(a);

write ('Podaj drugą liczbę: ');

readln(b);

wynik:=a+b;

writeln ('Wynik to: ',wynik:4:2);

end;

'-':

begin

write ('Podaj pierwszą liczbę: ');

readln(a);

write ('Podaj drugą liczbę: ');

readln(b);

wynik:=a-b;

writeln ('Wynik to: ',wynik:4:2);

end;

'*':

begin

write ('Podaj pierwszą liczbę: ');

readln(a);

write ('Podaj drugą liczbę: ');

readln(b);

wynik:=a*b;

writeln ('Wynik to: ',wynik:4:2);

end;

'/':

begin

write ('Podaj pierwszą liczbę: ');

readln(a);

repeat

begin

write ('Podaj drugą liczbę: ');

readln(b);

end;

until b<>0;

wynik:=a/b;

writeln ('Wynik to: ',wynik:4:2);

end;

else writeln ('Nie wybrałeś żadnego działania');

end;

end;

repeat

begin

write ('Zakończ program(E), licz od nowa(L), wykonaj następne działania(D): ');

odp:=upcase(readkey);

writeln;

end;

until (odp='E') or (odp='L') or (odp='D')

end;

until odp='E'

end.

Tak wygląda mój program…gdzie zrobić to z ramką?

W dowolnym miejscu gdzie to potrzebujesz, to tylko wydruk specjalnych znaczków.

No niestety zanim zastosujesz to trza zrozumieć o co w tym biega.

Ponieważ nie podałeś od początku w którym miejscu jakiego kodu chcesz to wstawić to dostałeś dwa przykłady zrobienia tego samego na dwa sposoby. Przeanalizuj, zrozum, dopasuj do swojego kodu.

No to może gotowa procedura:

program Ramki;


uses Crt;


procedure WriteInFrames(Txt: String; IsSingleFrame: Boolean; TxtColor, FrameColor: Byte);

const Frames: array[Boolean, 1..6] of Char = (

      (#218, #196, #191, #179, #192, #217), (* Ramka pojedyncza *)

      (#201, #205, #187, #186, #200, #188)); (* Ramka podwojna *)

    (* TL H TR V BL BR *)

var i, len: Integer;

    OldColor: Byte;

begin

  OldColor:= TextAttr; (* Zapamietaj atrybuty tekstu *)

  len:= Length(Txt);

  (* Pierwsza linijka *)

  TextColor(FrameColor);

  Write(Frames[IsSingleFrame, 1]);

  for i:= 1 to len do Write(Frames[IsSingleFrame, 2]);

  Writeln(Frames[IsSingleFrame, 3]);

  (* Druga linijka *)

  Write(Frames[IsSingleFrame, 4]);

  TextColor(TxtColor);

  Write(Txt);

  TextColor(FrameColor);

  Writeln(Frames[IsSingleFrame, 4]);

  (* Trzecia linijka *)

  Write(Frames[IsSingleFrame, 5]);

  for i:= 1 to len do Write(Frames[IsSingleFrame, 2]);

  Writeln(Frames[IsSingleFrame, 6]);

  TextAttr:= OldColor; (* Przywroc pierwotne atrybuty tekstu *)

end;


begin

  ClrScr;

  Writeln('Program testowy (kolor domyslny)');

  WriteInFrames('To jest ramka pojedyncza', false, yellow, cyan);

  WriteInFrames('A to jest ramka podwojna', true, green, red);

  Writeln('Znowu kolor domyslny');

  Readln;

end.

Wstaw procedurę WriteInFrames do swojego programu i następnie w miejscu, gdzie chcesz wstawić tytuł zamiast

Writeln(' Program napisał: Jan kowalski ');

napisz

WriteInFrames(' Program napisał: Jan kowalski ', false, Yellow, Green);

Parametry procedury:

  1. Tekst, który ma być w ramce

  2. Jaka ramka: false - pojedyncza, true - podwójna

  3. Kolor tekstu

  4. Kolor ramki

program wyznaczanie_najmniejszego_elementu;

USES CRT;

VAR a,b,c:REAL;

begin

clrscr;

Writeln(‘Podaj Liczby’);

READ (a,b,c);

IF a

THEN

If a

Then

Writeln('najmniejsza jest ',a:10:2)

Else

WRITELN('najmniejsza jest ',c:10:2)

Else

IF b

THEN

WRITELN('najmniejsza jest ',b:10:2)

Else

Writeln(‘c jest najmniejsza’);

Repeat until keypressed

end.

mam taki program jak dodać ramkę podwójną ??? proszę o szybką odpowiedź :wink:

Dokładnie tak jak napisano w poście nad twoim postem.

i gdzie mam to wkleić albo gdzie ten tekst dać ???

Tak trudno przeczytać posta ??

nie trudno tylko że nie działa !!

niektórzy to by gotowca chcieli… Czasami trzeba coś dopasować do swoich potrzeb :slight_smile:

sorry bardzo program sobie sama zrobiłam tylko ramka nie chce się uruchomić i właśnie o to się pytam gdzie mam ten tekst obliczeń wstawić bo nie wiem !!

WriteInFrames(’

program wyznaczanie_najmniejszego_elementu;

USES CRT;

VAR a,b,c:REAL;

begin

clrscr;

Writeln(‘Podaj Liczby’);

READ (a,b,c);

IF a

THEN

If a

Then

Writeln('najmniejsza jest ',a:10:2)

Else

WRITELN('najmniejsza jest ',c:10:2)

Else

IF b

THEN

WRITELN('najmniejsza jest ',b:10:2)

Else

Writeln(‘c jest najmniejsza’);

Repeat until keypressed

end.’, false);

tak ma być czy jak ?! bo jakoś mi nie wchodzi !!

nie tak. Cały kod procedury musisz wstawić do programu, a następnie wszystkie Writeln zamienić na WriteInFrames w kodzie swojego pprogramu

tak mi wyświetla błąd ;/

Ale jaki błąd, to już nie byłaś łaskawa napisać. Dodatkowo mogłaś (a nawet powinnaś) wkleić kod swojego programu, aby było się do czego odnieść

Mimo to i tak spróbuję Ci pomóc, zwłaszcza że przy próbie zastosowania procedury WriteInFrames w Twoim programie trzeba zwrócić uwagę na pewien szczegół. Nie można do niej przekazać tekstu razem ze zmienną, tak jak to robisz w przypadku stosowania instrukcji Writeln.

Tak więc po kolei:

Zadeklaruj dodatkową zmienną tekstową, np Napis

var Napis: string;

Wstaw treść samej procedury do swojego programu, najlepiej bezpośrednio przed słowem begin oznaczającym początek programu głównego Tu masz treść programu głównego ze zmodyfikowanym fragmentem, który wyświetla napis w ramce, gdy najmniejsza jest liczba a. Resztę musisz sobie sama poprawić.

begin

  ClrScr;

  Write('Podaj 3 liczby: ');

  Readln(a,b,c);

  if a
    if a
      Str(a:5:2, Napis);

      Napis:= 'Najmniejsza jest: ' + Napis;

      WriteInFrames(Napis, true, Green, Red);

    end

    else begin

      Writeln('Najmniejsza jest: ',c:5:2);

    end

  else

  if b
    Writeln('najmniejsza jest: ',b:5:2);

  end

  else begin

    Writeln('c jest najmniejsza');

  end;

  repeat until Keypressed;

end.[/code]