![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте.
Задача состоит в том, что бы написать слово, выбранное пользователем, буквами. Отдельная буква слова должна прописываться такими же буквами. Пример: слово hey h h h h hhh h h h h eee e ee e eee y y y y yy y y Как то так. только слово должно быть написано в строку. объясните, хотя бы алгоритм, пожалуйста. p.s. бред, но по другому объяснить не получается. Последний раз редактировалось Stigm, 11.09.2010 в 02:25. |
#2
|
|||
|
|||
![]() Интересная задачка, решил ее очень хитропопым способом) рисуем в буфере символ, и используем его как маску для рисования, шрифт для удобства подобран с постоянной длиной и шириной символов, написано под консольное приложения, для облегчения переноса кода. Так же, использовал вспомогательную функцию GotoXY.
Код:
{$APPTYPE CONSOLE} uses Windows, SysUtils, Graphics; const CWidth = 8; CHeight = 16; CWord = 'DELPHI6'; //слово которое выведем на экран. var Buffer:TBitmap; //буфер hCon: integer; //хэндл консоли procedure GotoXY(X, Y : Word); //перемещаем курсор по XY var Coord: TCoord; begin Coord.X := X; Coord.Y := Y; SetConsoleCursorPosition(hCon, Coord); end; procedure DrawMask(aSymbol:char; const aX, aY:integer); //основная процедура, рисует символ по координатам XY var x,y:byte; begin with Buffer.Canvas do begin TextOut(0,0,aSymbol); for x:=0 to CWidth-1 do for y:=0 to CHeight-1 do if (Pixels[x,y] <> clWhite) then begin GotoXY(aX+(x*1), aY+Y); Write(aSymbol); end end; end; procedure DrawString(const aString:String; const aX, aY:Byte); //выводим слово по буквам var i:byte; begin if Length(aString) > 0 then for i:=1 to Length(aString) do DrawMask(aString[i],aX+((i-1)*CWidth), aY); end; begin hCon := GetStdHandle(STD_OUTPUT_HANDLE); //подготавливаем буфер Buffer:=TBitmap.Create; with Buffer do begin Height:=CHeight; Width:=CWidth; with Canvas do begin with Font do begin Name:='Courier New'; Color:=clBlack; Pitch:=fpFixed; Size:=10; end; with Brush do begin Color:=clWhite; Style:=bsSolid; end; end; end; //выводим слово DrawString(CWord, 2,2); //уничтожаем буфер Buffer.Destroy; Writeln; Readln; end. |
#3
|
|||
|
|||
![]() Спасибо!! Оригинальное решение. Мне это представлялось на подобии взятия образца из текстового файла в котором расписаны все буквы.
|