Problem z czytaniem kodu

0

Witam mam za zadanie zrobić ramkę w kolorze, a wewnątrz niej napis na innym tle i innego koloru. Mój problem polega na tym, ze nie potrafie zmienić koloru w środku mojej ramki. Mógłby mi ktoś powiedziec, gdzie popełniam błąd? :

 program xyz;
 uses crt;
 var i:byte;

 procedure ramka1;
 begin
 textbackground(green);
 textcolor(green);
 FOR i:=10 TO 69 DO
 begin
 gotoxy(i,5);
 write('_');
 end;

 FOR i:=6 TO 20 DO
 begin
 gotoxy(69,i);
 write('|');
 end;

 FOR i:=68 DOWNTO 10 DO
 begin
 gotoxy(i,20);
 write('_');
 end;
 FOR i:=20 DOWNTO 6 DO
 begin
 gotoxy(10,i);
 write('|');
 end;
 end;

 begin
 clrscr;
 ramka1;
 begin
 textcolor(blue);
 gotoxy(25,10);
 write('Kaziu');
 writeln;
 gotoxy(25,12);
 write('numer 7');
 textbackground(white);
 end;
 readln;
 end.
0

textbackground powinieneś dać przed pisaniem.

0

Niestety to nic nie zmienia :/, na biało robi się tylko tam gdzie jest napis, natomiast ja chcę, żeby całe tło to w ramce było na biało

0

Może wypełnij ramkę spacjami.

0

Można to osiągnąć na wiele sposobów, najprościej wykorzystać pętle i wypełnić okno znakiem spacji, wcześniej ustawiając odpowiedni kolor dla tła tekstu (procedura TextBackground()); Ja to zrobiłem przykładowo na procedurach, DrawFrame rysująca prostokąt oraz DrawText - rysująca tekst:

program TextFrames;
uses
  Crt;

type
  TFontColor = 0 .. 15;
  TBackColor = 0 .. 7;

  procedure DrawFrame(X, Y, Width, Height: Byte; Color: TBackColor);
  var
    I, J: Byte;
  begin
    TextBackground(Color);

    for I := 0 to Height - 1 do
      begin
        GoToXY(X, Y + I);

        for J := 0 to Width - 1 do
          Write(' ');
      end;
  end;

  procedure DrawText(X, Y: Byte; Font: TFontColor; Back: TBackColor; Text: String);
  begin
    TextColor(Font);
    TextBackground(Back);

    GoToXY(X, Y);
    Write(Text);
  end;

begin
  ClrScr;

  DrawFrame(5, 5, 16, 3, Blue);
  DrawText(7, 6, Black, Blue, 'Turbo Pascal');

  ReadLn;
end.

DrawFrame:

Parametr Typ Opis
X Byte Pozycja X (odstęp od lewej krawędzi ekranu, liczona od 1)
Y Byte Pozycja Y (odstęp od górnej krawędzi ekranu, liczona od 1)
Width Byte Szerokość ramki (ilość znaków)
Height Byte Wysokość ramki (ilość znaków)
Color TBackColor Kolor wypełnienia ramki (tła)
DrawText:
Parametr Typ Opis
---------------- ---------------- ----------------
X Byte Pozycja X (odstęp od lewej krawędzi ekranu, liczona od 1)
Y Byte Pozycja Y (odstęp od górnej krawędzi ekranu, liczona od 1)
Font TFontColor kolor tekstu
Back TBackColor kolor wypełnienia ramki (tła pod tekstem)
Text String tekst do wyświetlenia

Można jeszcze wykorzystać procedure Window, która odpowiada za utworzenie nowego okna tekstowego; Więcej masz w pomocy TP, bo zapewne w nim piszesz;


Jak chcesz mieć ładniejsze okienko na tekst to popracuj nad modyfikacją tych procedur i dodaj możliwość ustalenia stylu obramowania (odpowiednie zbiory znaków) i kolory dla wszystkiego, co będzie rysowane;

Jeśli chcesz wykorzystać jakieś znaki do budowy obramowania, wykorzystaj specjalne znaki do tego stworzone; W załączniku lista znaków kodu ASCII - wybierz sobie odpowiednie;

0

Piszę nowy post, żeby przesadnie nie przedłużać poprzedniego; Poniżej masz przykładową procedurkę rysującą okno z obramowaniem i tekstem w wybranej pozycji; Można wybrać rózne kolory, rozmiary, położenie oraz styl obramowania; Oczywiście można ją skrócić, ale to do Ciebie należy;

program TextFrameEx;
uses
  Crt;

type
  { COLORS }
  TBackColor = Black .. LightGray;
  TFontColor = Black .. White;

  { FRAME CHAR SET }
  TWndFrmCharSet = array [Boolean, 0 .. 5] of Char;

  { WINDOW INFO }
  TWndInfo = record
    Window: record
      X, Y: Byte;
      Width, Height: Byte;
      Color: TBackColor;
    end;
    Frame: record
      Color: TFontColor;
      DblFrmLine: Boolean;
    end;
    Text: record
      X, Y: Byte;
      Color: TFontColor;
      Value: String;
    end;
  end;

  procedure Wnd(const WndInfo: TWndInfo);
  const
    WndFrmCharSet: TWndFrmCharSet = ((#196, #179, #218, #191, #192, #217),
                                     (#205, #186, #201, #187, #200, #188));
  var
    I, J: Byte;
  begin
    with WndInfo do
      begin
        { WINDOW }
        TextBackground(Window.Color);

        for I := 0 to Window.Height - 1 do
          begin
            GoToXY(Window.X, Window.Y + I);

            for J := 0 to Window.Width - 1 do
              Write(' ');
          end;

        { FRAME }
        TextColor(Frame.Color);

        GoToXY(Window.X, Window.Y);
        Write(WndFrmCharSet[Frame.DblFrmLine][2]);

        for I := 0 to Window.Width - 3 do
          Write(WndFrmCharSet[Frame.DblFrmLine][0]);

        Write(WndFrmCharSet[Frame.DblFrmLine][3]);
        GoToXY(Window.X, Window.Y + Window.Height - 1);
        Write(WndFrmCharSet[Frame.DblFrmLine][4]);

        for I := 0 to Window.Width - 3 do
          Write(WndFrmCharSet[Frame.DblFrmLine][0]);

        Write(WndFrmCharSet[Frame.DblFrmLine][5]);

        for I := 0 to Window.Height - 3 do
          begin
            GoToXY(Window.X, Window.Y + I + 1);
            Write(WndFrmCharSet[Frame.DblFrmLine][1]);
            GoToXY(Window.X + Window.Width - 1, Window.Y + I + 1);
            Write(WndFrmCharSet[Frame.DblFrmLine][1]);
          end;

        { TEXT }
        TextColor(Text.Color);
        GoToXY(Window.X + Text.X, Window.Y + Text.Y);
        Write(Text.Value);
      end;
  end;

var
  WndInfo: TWndInfo;
begin
  ClrScr;

  { COMPLETE WINDOW INFO REC }
  with WndInfo do
    begin
      { WINDOW }
      Window.X := 5;
      Window.Y := 5;
      Window.Width := 55;
      Window.Height := 5;
      Window.Color := LightGray;
      { FRAME }
      Frame.Color := Blue;
      Frame.DblFrmLine := False;
      { TEXT }
      Text.X := 2;
      Text.Y := 2;
      Text.Color := White;
      Text.Value := 'Replace "Turbo Pascal" for "Free Pascal Compiler"';
    end;

  { MAKE WND }
  Wnd(WndInfo);
  ReadLn;
end.

Jeżeli interesuje Cię lepsza grafika okienka, wykorzsytaj tryb graficzny i moduł Graph (jeśli nie masz, jest dostępny w sieci);

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