|
Вопрос # 1 901/ вопрос открыт / |
|
О Мудрейшие из Мудрейших! Как мне нарисовать в форме (или в Image) графический примитив: прямую, прямоугольник или что-то в этом роде?
Зарание прошу прощения за такой тупой вопрос!
Примечание #1 (14 сентября 2008, 20:11): Дело в том,что прописывая графические примитивы(линия, прямоугольник и тп) призапуске программы они не отображаются!
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 14 сентября 2008, 19:42
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Аксион
Здравствуйте, Ученый!
У form, image и некоторых других компонентов делфи есть свойство canvas, с помощью него можно нарисовать всё что угодно, вот несколько примеров:
-----------------
.Canvas.Pen.Color:=clred; //устанавливает цвет кисти на крассный
-----------------
.Canvas.MoveTo(5,5);
.Canvas.LineTo(15,15); //эти две строи рисуют линию из точек с координатами (5,5) в (15,15)
-----------------
.Canvas.Rectangle(х,у,х2,у2); //рисует квадрат, координаты (х,у) и (х2,у2) указывают диагоняль квадрата
----------------
.Canvas.Pixels(x,y); // рисует точку с координатами (х,у)
-----------------
Так же у канваса есть свойство Brush, которое устанавливает тип и цвет заливки
.Canvas.Brush.collor:=clred //цвет заливки будет красным
.Canvas.Brush.stule:=bsDiagCross //заливка будет "крестовой"
Ну, а дальше сами разберётесь...
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 14 сентября 2008, 20:13
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: ANBsoft
Здравствуйте, Ученый!
В зависимости от того что Вам нужно, можно использовать компонент TShape, или рисовать по канве, как описал предыдущий оратор.
Дополню следующее, если Вы рисуете на канве формы, то это будет видно до следующей перерисовки формы, поэтому для того чтобы отрисованное было видно всегда, обрабатывайте событие OnPain и отрисовывайте в нем.
Успехов.
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 14 сентября 2008, 20:25
Оценка за ответ: 2
|
Мини-форум вопроса
Всего сообщений: 24; последнее сообщение — 15 сентября 2008, 14:30; участников в обсуждении: 5.
Страницы: [1] [2] [Следующая »]
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 20:24 [#2]:
Слушай, Блазер! Проблема втом, что прописывая через canvas при запуске ничего не отображается, выходит пустая форма! Не мог бы скинуть полнусть код какого нибудь примитива!
|
|
Аксион (статус: 4-ый класс), 14 сентября 2008, 20:25 [#3]:
а форма пустая?
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 20:28 [#4]:
Да! Форма пустая!
|
|
ANBsoft (статус: Студент), 14 сентября 2008, 20:31 [#5]:
Перенеси отрисовку в событие OnPaint
|
|
Аксион (статус: 4-ый класс), 14 сентября 2008, 20:33 [#7]:
А где отрисовка то стоит? В онкриэйт чтоли?
|
|
Аксион (статус: 4-ый класс), 14 сентября 2008, 20:35 [#8]:
Прощу прощения в FormCreate, если там то есстественно отрисовыватся не будет...Перенеси в OnPaint как сказал Бубырь Александр Николаевич
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 20:41 [#9]:
Блазер! На счет примера все понятно! Но есть одно но: нада ножать на кнопку! А как Сделать так чобы без кнопки сразу появлялось нарисованное?
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 20:44 [#10]:
Я конечно сильно извеняюсь, ноя в этом деле даже менше чем новичек! Объясните что такое FormCreate,OnPain и с чем их едят?
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:03 [#11]:
Вот посмотрите как я делаю! В чем ошибка?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Rectangle (10,10,100,100);
end;
end.
|
|
Вадим К (статус: Академик), 14 сентября 2008, 21:14 [#12]:
А что же не работает? специально скомпилировал и запустил - есть черный прямоугольник. Что же не работает?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:16 [#13]:
Да вы что а у меня пустая форма! Ни какого прямоугольника нет!
|
|
Вадим К (статус: Академик), 14 сентября 2008, 21:21 [#14]:
у меня есть. Странно. есть правда одно предположение, что делфи глюканула. Можно проверить так - поставить кнопку на форму и запустить. Если не появиться - значит глюканула. Если появиться - тогда глюк в другом месте.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:27 [#15]:
С кнопкой идет!
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:29 [#16]:
А без кнопки не появляется!
|
|
Вадим К (статус: Академик), 14 сентября 2008, 21:34 [#17]:
код для кнопки никакой не пишем?
То есть, просто поставив кнопку на форму и прописав OnPaint указанную выше строку, имеем нужный результат (прямоугольник)?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:41 [#18]:
Если код не пишем-ниче не появляется! если пишем:
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Canvas.Pen.Color:=clred;
form1.Canvas.MoveTo(100,100);
form1.Canvas.LineTo(200,200);
end;
- тогда появляется!
|
|
Вадим К (статус: Академик), 14 сентября 2008, 21:43 [#19]:
Вот этот код надо перенести в OnPaint и должно (обязано) работать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 сентября 2008, 21:48 [#20]:
Ввожу:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormOnPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormOnPaint(Sender: TObject);
begin
form1.Canvas.Pen.Color:=clred;
form1.Canvas.MoveTo(100,100);
form1.Canvas.LineTo(200,200);
end;
end.
А результата нет!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|