Jak zrobić ramkę na tekst w programie?


(Mb9107) #1

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ć?


([alex]) #2

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.


(Simplex111) #3

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)


(Mb9107) #4

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ą?


([alex]) #5

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


(Mb9107) #6

.............................................................................................................................................................................


([alex]) #7

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.


(Simplex111) #8

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


(Nicki146) #9

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:


([alex]) #10

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


(Nicki146) #11

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


(Drobok) #12

Tak trudno przeczytać posta ??


(Nicki146) #13

nie trudno tylko że nie działa !!


(Jacek705) #14

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


(Nicki146) #15

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 !!


(Jacek705) #16

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


(Nicki146) #17

tak mi wyświetla błąd ;/


(Simplex111) #18

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]

(Zulowski) #19