Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2007, 18:25   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
Стрелка Как работать с TCanvas - на PaintBox1 программа должна рисовать полигон

Обьясните пожалуйста как работать с функцией TCanvas.Если можно то попадробней,
куда чего написать.
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 30.12.2007, 19:25   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

TCanvas - это не функция, это класс, представляющий собой "холст для рисования". Его имеют практически все визуальные компоненты Delphi. Он влючает в себя функции для вычерчивания линий, эллипсов, прямоугольников и т.п., а так же инкапсулирует другие классы для штриховки замкнутых фигур, назначения типа линий, шрифтов и т.д.
http://www.programmersforum.ru/showp...34&postcount=4
Внизу каждой страницы форума, есть ссылка на сайт Клуба программистов Delphi, там специально для вас выложены книги. Например, в книге Фленова в 12 главе все подробно расписано.
_Dmitry вне форума Ответить с цитированием
Старый 02.01.2008, 09:07   #3
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию PaintBox

Вопрос такой:
Есть Form1, на ней панель с закладками, на второй закладке есть группа на которой я разместил PaintBox1... Как сделать так, чтобы именно на на этом PaintBox1 программа рисовала нужный мне полигон?
Если можно, то поподробнее.
Спасибо.
Almaas вне форума Ответить с цитированием
Старый 02.01.2008, 10:29   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код:
var
  P: array[1..5] of TPoint; //массив точек
begin
  //координаты точек
  P[1].X:=10; P[1].Y:=10;
  P[2].X:=50; P[2].Y:=10;
  P[3].X:=100; P[3].Y:=50;
  P[4].X:=100; P[4].Y:=100;
  P[5].X:=50; P[5].Y:=100;
  //рисуем полигон
  PaintBox1.Canvas.Polygon(P);
_Dmitry вне форума Ответить с цитированием
Старый 02.01.2008, 21:17   #5
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Только стоит учесть, что PaintBox, в отличие от Image, не хранит изображение и его придется перерисовывать каждый раз при обновлении окна. Так что код лучше вставить в событие OnPaint формы или обновлять по таймеру (в зависимости от задачи).
Jeni вне форума Ответить с цитированием
Старый 03.01.2008, 10:04   #6
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Ага, спасибо. Я уже заменил PaintBox1 на Image1.
Теперь возник следующий вопрос - как сделать фон Image1 таким же, как фон остальных окон?
Almaas вне форума Ответить с цитированием
Старый 03.01.2008, 10:22   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Сделайте фон прозрачным
Код:
Image1.Transparent:=true;
или залейте его нужным цветом
Код:
Image1.Canvas.Brush.Color:=clBtnFace; //цвет заливки
Image1.Canvas.Brush.Style:=bsSolid; //стиль заливки - сплошная
Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

Последний раз редактировалось _Dmitry; 03.01.2008 в 10:30.
_Dmitry вне форума Ответить с цитированием
Старый 03.01.2008, 10:57   #8
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Еще вопрос. На данный момент программа вычерчивает заданное сечение, ставит размерные линии с засечками и выводит подписи к размерам. Можно ли сделать так, чтобы текст писалася под углом 90 градусов? Да, и еще, можно ли сделать, чтобы текст позиционировался по центру к указанной координате?

Последний раз редактировалось Almaas; 03.01.2008 в 11:00.
Almaas вне форума Ответить с цитированием
Старый 03.01.2008, 13:35   #9
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Со вторым вопросом все просто - сдвигайте текст на половину строки влево
Код:
var
  X,Y: integer;
  S: string;
begin
  S:='aaaaaaaaaaaaaaaaaaaaaaaaaaa';
  X:=100; Y:=100; //координаты центра строки
  with Image1.Canvas do
    TextOut(X-round(TextWidth(S)/2),Y,S);
Лучше это оформить ввиде процедуры
_Dmitry вне форума Ответить с цитированием
Старый 03.01.2008, 14:25   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Текст под углом
Код:
var
  LF: TLogFont;
  FNew,FOld: HFont;
begin
  //Сохраняем хендл шрифта канвы
  FOld:=Image1.Canvas.Font.Handle;
  //обнуляем поля структуры параметров нового шрифта
  FillChar(LF,SizeOf(LF),0);
  //назначаем параметры нового шрифта
  LF.lfHeight:=40; //размер
  LF.lfWeight:=fw_Normal;
  LF.lfEscapement:=900; //угол поворота в десятых долях градуса
  StrPCopy(LF.lfFaceName,'Times New Roman');
  //создаем шрифт на основе заданных параметров
  FNew:=CreateFontIndirect(LF);
  //назначаем его для канвы
  Image1.Canvas.Font.Handle:=FNew;
  //выводим текст
  Image1.Canvas.TextOut(20,200,'aaaaaaaaaa');
  //убиваем шрифт, если больше не нужен
  DeleteObject(FNew);
  //назначаем первоначальный шрифт для канвы
  Image1.Canvas.Font.Handle:=FOld;
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, работающая под вистой, должна разделить hdd еще на 2 диска KORT Софт 1 25.08.2008 13:57
Delphi 6 - Программа должна узнать уровень загруженности процессора Никки Общие вопросы Delphi 3 20.11.2007 19:40
WinApi, программа должна выдавать основной номер версии ОС MARGO Win Api 2 16.11.2007 21:14
Программа отлично работает при событии Button1Click, и отказывается работать в FormCreate xTANATOSx Общие вопросы Delphi 3 19.09.2007 08:02
TListView; не рисует цветом TCanvas JetAPI Компоненты Delphi 9 24.08.2007 22:22