1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Это не 6 прямоугольников, а 5, но переплетены так, что
Поменяй
for i:=1 to 5 do begin y1:=round ((GetMaxY/9)*(1+i) - k); y2:=round ((GetMaxY/9)*(2+i)); { <--- Здесь } Rectangle(X1,Y1,X2,Y2); readln; { <--- Для теста } end;
procedure SetBkColor(ColorNum: Word); { Background color means background screen color in this case, and it is } { INDEPENDANT of the viewport settings, so we must clear the whole screen } { with the color. } ...
То есть, после вызова SetBkColor, чтобы изменения вступили в силу, надо вызвать ClearDevice, следовательно программа не будет работать точно так же, как и в TP...
То есть, после вызова SetBkColor, чтобы изменения вступили в силу, надо вызвать ClearDevice, следовательно парограмма не будет работать точно так же, как и в TP...
А без отчистки экрана никак?
Добавлено через 11 мин. и что надо сделать что б работало SetTextStyle? а то у меня шрифты не отличаются...
С использованием SetBkColor - никак. А по-другому - очень медленно:
for i:=0 to 15 do begin readln(color); setfillstyle(solidfill, color); floodfill(1, 1, getbkcolor); OutTextXY (100,100+(i*10), ColorToString(Color)); end;
Я брал из 7-го Турбо Паскаля - формат один и тот же... Если надо - забирай: fonts.rar ( 71.69 килобайт )
Кол-во скачиваний: 460
Цитата
что такое SetTextJustify?
Устанавливает выравнивание текста. То что я привел - говорит компилятору, что точка, координаты которой задаешь в OutTextXY, будет левой (LeftText) верхней (TopText) точкой выводимого текста, то есть, весь текст пойдет от нее вправо и вниз. А вот для того, чтобы пропускать между строками, напечатанными разными шрифтами одинаковое расстояние, пользуемся TextHeight, которая выдаст высоту переданной ей буквы (обычно передают "W", как самую высокую) для текущего шрифта...
begin if init = grOk then begin Dr; UserEnter(); {case UserEnter() of 1 : New 2 : last; 3 : Record; 4 : level; 5 : Rules; 6 : exit; end; } Readln; CloseGraph; end; end.
проблема основная -- что-то с циклом отрисовки нового выбора пользователя(прямоугольник новый не отрисовывается) проблемма второстепенная -- текст выводится не в центр что делать?
for i:=1 to 6 do begin y1:=round ((GetMaxY / 10)*(i+1) +k); y2:=round ((GetMaxY/10)*(i+2) ); Rectangle(X1,Y1,X2,Y2); outtextxy(x1 + ((x2 - x1) div 2), y1 + ((y2 - y1) div 2), menuText(i)); end; end;
function UserEnter():integer; var select:integer; ch:char; x1,x2,y1,y2,k:integer; C:word; const Up = #72; Down = #80; Esc =#27; begin k:=round ((GetMaxY / 50)); select:=1; repeat x1:=round (GetMaxX*(1 / 3)); x2:=round (GetMaxX*(2/3)); y1:=round ((GetMaxY / 10)*(select+1) +k); y2:=round ((GetMaxY/10)*(select+2) ); Rectangle(X1-10,Y1-10,X2+10,Y2+10); ch:=ReadKey; case ch of #0: case readkey of Up: if select > 1 then dec(select); Down: if select < max_items then inc(select); end; Esc: break; end;
...outtextxy(x1 + ((x2 - x1) div 2), y1 + ((y2 - y1) div 2), menuText(i));...
ага, только есть вопрос... к вот этому x1 + ((x2 - x1) div 2) ведь round( ((x2+x1-Length(menuText(i))*ширина символа)/2 )) тоесть (х2 - х1) -- длина всего прямоугольника, (Length( menuText(i) )*ширина символа) -- ширина строки(далее L), тогда (х2 - х1)-L--<<остаток>>, делем на 2 и получаем левый остаток. Но и x1 + ((x2 - x1) div 2) выводит посредине, почему?
Потому что именно так я нахожу центр прямоугольника, а потом заставляю текст выводиться со смещением (centertext, centertext), то есть, центр текста совпадает с центром прямоугольника.
Как это делается - проблема модуля Graph, это пусть он себе голову морочит, что надо сделать для правильного вывода текста. Я только говорю, что я хочу получить в результате.