Wizytówka (Pascal)

0

Siemano, mam napisać wizytówkę w pascalu.
Ma ona wyglądać tak :

  • Trzy linijki z napisami (Imię, nazwisko, adres)
  • Ramka
  • Obramowanie ramki podwójne

No i mam problem, jak zrobić ramkę i obramowanie :o?
I kolejny problem z jakim się borykam, to jest to że nie muszę wpisywać tych danych (imię, nazwisko, adres) tylko mogą być gołe napisy, a u mnie w programie wygląda to tak że wyskakuje mi Imię, wpisuję imię, POTWIERDZAM enterem i dopiero wtedy wyskakuje nazwisko, wpisuje nazwisko itd. Jak zrobić żeby nie było trzeba zatwierdzać?
Kod na to wygląda u mnie tak :

begin
clrscr;

write('Podaj imię : ');
readln(imie);

write('Podaj nazwisko : ');
readln(nazwisko);
 

W załączniku jest obrazek który pokazuje jak ma to wyglądać, od profesor %)

0

I to ma być w konsoli??

0

Tego mi już nie powiedziała...
Ale projekt mam wyslac w .pas wiec spoko :)

0

a skąd program ma wiedzieć czy twoje imię jest już "gotowe" czy jeszcze chcesz coś dopisać? komputery nie myślą jak ludzie.
Widzę, że używasz Turbo Pascala w przykładowych kodach źródłowych masz demo ramek, kontrolek edycyjnych przewijaków itp. jak dokładnie się nazywa to demo nie powiem bo nie mam u siebie TP od dawna.
Jeśli nie chcesz korzystać z gotowców to wypisz sobie wszystkie znaki ASCII wybierz te z których można stworzyć ramkę i baw się funkcjami typu GotoXY do przemieszczania kursora ew. Wypisuj całe linie formując ramkę - przydatna może być funkcja Format, która pozwoli zachować stałą szerokość napisu zamiast wypełniać wiersz samemu spacjami. z przydatnych funkcji jeszcze Textbackground i Textcolor() do zmiany kolorów tła i napisów

0

Nie poradze sobie z tą ramką ani obramowaniem, kurde, a do 20 mam to odesłać :(
Zrobiłem tylko tekst....

0

Spróbuj zrobić tak:

write('|---------------|');
write('| Podaj imie:   |');
write('|---------------|');
0

Tylko że ta ramka to ma być chyba linią ciągłą.. i trzeba inny kolor ustawić jeszcze..

1

Możesz użyć tego unit'a do kolorowania konsoli: http://rvelthuis.de/programs/console.html Tu wszystko jest. A co do linii ciągłej, poczytaj o ASCII w konsoli, tu masz znaki, które możesz wyświetlić, znajdziesz tu też swoje linie: http://benryves.com/tutorials/winconsole/ascii.gif Temat o wyświetlaniu ramki był już wczoraj czy przedwczoraj: Tekst w ramkach

0

Wszystko niby okej, ale tu mają być dwie ramki.
I ich się chyba nie da pokolorować używając ASCII ?
Zresztą, jestem tak zielony że i tak nie wiem jak to zrobić..
Napisałem

procedure TextBackground(Color: 5); 

i mi błąd wywala.. ;[

1

Pascal'a to ja już nie pamiętam, ale Color: 5 chyba nie jest poprawne, samo 5 starczy nie? Bo podajesz sam parametr, typ jest już w deklaracji procedury. Jak ramek się nie da? Przecież ramka to nic innego jak zbiór znaków ASCII, a każdy ze znaków tych da się pokolorować w konsoli. Druga sprawa to czcionka, ta na rysunku nie jest o równych szerokościach, więc takiej się nie zrobi w konsoli, ale mam nadzieję, że to tylko rysunek pomocniczy. Jeszcze co do podwójnych ramek: najpierw rysujesz tą z zewnątrz, a potem tą wewnętrzna; ta zewnętrzna będzie miała wymiar wewnętrznej + 2 na każdą płaszczyznę (x, y), bo jest większa. Wewnętrzna ramka zaś będzie mieć wymiar długości najdłuższego wyrazu w ramce + 2 na każdą płaszczyznę (x, y), czyli tak aby ramka faktycznie obramowywała tekst.

0

Okej, poradziłem sobie z kolorem. Kolejna sprawa, jak wstawić te pieprzone ramki :O

0

Czyżby nie dałem ci linku do wątku, który pojawił się wczoraj?? Dałem. Wytłumaczę jeszcze raz. Jeden element ramki zajmuje tyle co litera i inny znak ASCII, bo sam nim jest. Skoro dajmy na to najdłuższy wyraz w twoim obramowanym tekście to "Nazwisko" + właśnie to nazwisko np. Kowalski, to wiadomo, że pierwsza ramka musi mieć co najmniej szerokość na 17 znaków +_2 ("Nazwisko: Kowalski" - 17 zn.). Te 2 to dodatkowe elementy, tak aby można było zrobić boki ramki. Teraz wysokość. Wysokość pierwszej (wew.) ramki będzie wynosić tyle ile masz wierszy tekstu i znów + 2. Zewnętrzna ramka: analogicznie, ale łatwiej bo teraz wzorujesz się tylko na poprzedniej ramce, czyli wymiary poprzedniej ramki + 2 w szer. i wys. To wszystko zrobisz w pętli. Jak taka pętla powinna wyglądać, znajdziesz w wątku, do którego dałem ci link. Wsio.

0

ja w takich razach puszszczam

var c:char;
begin
  for c:=#32 to #255 do begin
    if ord(c)mod 8=0 then writeln;
    write(ord(c):3,#32,c,#32:4);
  end
end. 

a później zastanawiam się co do czego

0

Source:

program Wizytowka;

uses CRT;

var
  i : Integer;
begin
  ClrScr();
  TextBackground(Yellow);
  TextColor(Red);
  for i := 1 to 30 do Write(Chr($DC));
  WriteLn();
  WriteLn(Chr($DB)+'                            '+Chr($DB));
  WriteLn(Chr($DB)+'  Imie: Jan                 '+Chr($DB));
  WriteLn(Chr($DB)+'  Nazwisko: Nowak           '+Chr($DB));
  WriteLn(Chr($DB)+'  Adres: ul. Dluga 1        '+Chr($DB));
  WriteLn(Chr($DB)+'         00-002 Warszawa    '+Chr($DB));
  WriteLn(Chr($DB)+'                            '+Chr($DB));

  for i := 1 to 30 do Write(Chr($DF));

  ReadLn;
end.

Output:
user image

0

a powiedzcie mi, są jeszcze drukarki PostScript'owe? nie w drukarniach ale w domu?
tak ładnie robiło się różne... polskie, ramki...

1 użytkowników online, w tym zalogowanych: 0, gości: 1