Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисование на канве Image [D7, WinXP]


kyn66 ©   (2007-12-10 16:30:00) 

На форме есть Image1 размером 168х320 pix. Пытаюсь в цикле на канву вывести шрифт. Почему не рисуется на канве?

...
    for y := 5 to 10 do
  Image1.Canvas.TextOut(5 , y, chr(y));
...


kyn66   (2007-12-11 09:23:00) [1]

Нет, все окейно, я действительно ошибся с назначением размера имагеса, все работает, спасибо !


{RASkov}   (2007-12-10 18:06:00) [2]

> [0] kyn66   (10.12.07 16:30)
> размером 168х320 pix

или тебе именно в этот рект нужно "загнать"?
Тогда алгорит сменится... Немного не так должно быть, но не намного сложнее....


kyn66   (2007-12-10 17:59:00) [3]

Спасибо, попробую разбираться сам


{RASkov}   (2007-12-10 17:56:00) [4]

> [12] kyn66   (10.12.07 17:26)

Размеры Image'су "не правильные" задаешь....
Я же тебе пример вывода на канву формы сделал.... а уж размер общего прямоугольника посчитать, я думаю сам сожешь....
Также +5 и +2 можешь убрать, это я для лучшего восприятия сделал :)


kyn66   (2007-12-10 17:26:00) [5]

вроде похоже, но ешшо не то, какой-то он обрезаный получился
http://yurec66.narod.ru/Vopros/arial.png


{RASkov}   (2007-12-10 17:16:00) [6]

> [9] kyn66   (10.12.07 17:12)
> А на выходе тока 1 символ "Я"

А подумать????
У тебя чему равны X и Y?


{RASkov}   (2007-12-10 17:13:00) [7]

> [9] kyn66   (10.12.07 17:12)

procedure TForm1.Button1Click(Sender: TObject);
var R, C, W, H, Chw, Chh: Integer; Ch: Byte;
begin
 Chw:=Canvas.TextWidth('W')+5;
 Chh:=Canvas.TextHeight('W')+2;
 for C:=0 to 15 do
  for R:=0 to 13 do begin
   Ch:=32+((16*R)+C);
   W:=Chw*C;
   H:=Chh*R;
   Canvas.TextOut(W, H, CHR(Ch));
  end;
end;


kyn66   (2007-12-10 17:12:00) [8]


> Сделай два цикла... один вложеный в другой...

Это просто пример для показа здесь. Полный текс вааще такой:

  Image1.Picture.Bitmap.Width := 180;
  Image1.Picture.Bitmap.Height := 320;
  for y:= 0 to 13 do
   for x:= 0 to 15 do
    begin
       fnt := y * 16 + x + 32;
     Image1.Canvas.TextOut(x , y, chr(fnt));
   end;


А на выходе тока 1 символ "Я"


kyn66   (2007-12-10 17:06:00) [9]


> for y := 0 to 3 do  Image1.Canvas.TextOut(5 , y * 32, chr(y+32));

так вааще ни одного 8-(


homm   (2007-12-10 17:00:00) [10]

> [5] kyn66   (10.12.07 16:54)
> Дело в том, что рисует, только один символ.

Ах вот оно что :)

for y := 0 to 3 do
 Image1.Canvas.TextOut(5 , y * 32, chr(y+32));


{RASkov}   (2007-12-10 16:58:00) [11]

> [5] kyn66   (10.12.07 16:54)

Сделай два цикла... один вложеный в другой...


kyn66   (2007-12-10 16:54:00) [12]

Дело в том, что рисует, только один символ. Почему в цикле не рисует.Есть другой вариант, рисует все символу, но в одну строку, а мен нужно 16х14

...
w := 0
For i:=32 to 255 do
  Begin
    Image1.Canvas.TextOut(w , 0, chr(i));
    w := w + StringGrid1.Canvas.TextWidth(chr(i));
  end;
...


Eraser   (2007-12-10 16:50:00) [13]


> kyn66   (10.12.07 16:30) 

imho, скорее всего, помимо ошибки в алгоритме, вы не там рисуете. Рисовать можно либо на Image1.Picture.Bitmap.Canvas либо на битмапе в памяти, а отображать через WM_PAINT (OnPaint) какого-нибудь оконного контрола. В общем случае, второй вариант правильнее. У вас ни тот, ни другой.


kyn66   (2007-12-10 16:49:00) [14]

>> Efir  
Немного ошибся, просто хотел пример по быстрому привести

for y := 32 to 35 do
  Image1.Canvas.TextOut(5 , y + 32, chr(y));


KSergey   (2007-12-10 16:44:00) [15]

> kyn66   (10.12.07 16:30)  
>     for y := 5 to 10 do
>   Image1.Canvas.TextOut(5 , y, chr(y));

Смещаться на 1 пиксель для вывода очередной буквы - маловато будет, однако. Ну в смысле - буквы наложатся одна на другую.
Хотя, конечно, Efir прав по поводу основнй причины.


Efir   (2007-12-10 16:36:00) [16]

Прежде чем писать такой код следует заглянуть в таблицу ASCII и увидеть, что букав таких нету. А начинаюся они с кода 32.


Наверх

Титульная страница Поиск, карта сайта Написать письмо