Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Вниз

Рисование на канве Image   Найти похожие ветки 

 
kyn66   (2007-12-10 16:30) [0]

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

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


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

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


 
KSergey ©   (2007-12-10 16:44) [2]

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

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


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

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

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


 
Eraser ©   (2007-12-10 16:50) [4]


> kyn66   (10.12.07 16:30) 

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


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

Дело в том, что рисует, только один символ. Почему в цикле не рисует.Есть другой вариант, рисует все символу, но в одну строку, а мен нужно 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;
...


 
{RASkov} ©   (2007-12-10 16:58) [6]

> [5] kyn66   (10.12.07 16:54)

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


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

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

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

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


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


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

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


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


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

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

  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 символ "Я"


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

> [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;


 
{RASkov} ©   (2007-12-10 17:16) [11]

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

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


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

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


 
{RASkov} ©   (2007-12-10 17:56) [13]

> [12] kyn66   (10.12.07 17:26)

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


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

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


 
{RASkov} ©   (2007-12-10 18:06) [15]

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

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


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
6-1177420044
tytus
2007-04-24 17:07
2008.01.06
idTCPClient 10 в длл - как проверить коннект?


4-1181989365
cosinus
2007-06-16 14:22
2008.01.06
Как с помощью WinAPI расшарить папку на удаленном компе?


3-1188540789
pyJIoH
2007-08-31 10:13
2008.01.06
Oracle. COLUMN_NAME, не тот порядок.


15-1196676782
vajo
2007-12-03 13:13
2008.01.06
Стоит ли брать эту видеокарту?


15-1196622484
shlst
2007-12-02 22:08
2008.01.06
Ваши состояния :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский