Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2013, 08:25
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию Вопрос по линиям

Всем здравствуйте, у меня появился такой вопрос, хочу реализовать рисование линии на панели на которой лежит множество кнопок, вопрос рисую линию на панели и она будет отображаться поверх кнопок? и второй вопрос посложнее, понял что реализация при помощи линий мне не очень поможет, так как мне нужно к примеру посчитать числа лежащие в caption кнопок, которые лежат между двумя линиями, дак вот, надо же обращаться к линии как к объекта и как то вычислить площадь между этими двумя линиями, вопрос как?
Ответить с цитированием
  #2  
Старый 23.03.2013, 09:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Палитра компонентов, вкладка Additional, выбрать Shape или Bevel, что больше подойдёт и "поиграться" с их свойствами Pen, Shape etc.
Ответить с цитированием
  #3  
Старый 23.03.2013, 11:10
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Bevel беру к примеру, могу ли я рисовать линию в какую хочу сторону а не только снизу сверху слева справа? как тогда задать к примеру по диагонали?
Ответить с цитированием
  #4  
Старый 23.03.2013, 11:51
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Еще такой вопрос вот код
Код:
Lines: array [0..3000] of TCanvas;

Lines[i]:=TCanvas.Create;
Lines[i].Pen.Color:=clred;
Lines[i].MoveTo(Sklad.Top, Sklad.Left);
Lines[i].LineTo(100,100);

то есть, что я хочу, создать массив линий, но сначала хотя бы начертить одну красную, Moveto как я понял это начальная точка, Lineto куда вести линию. И код конечно не работает, вроде говорит что канва не доступна, как правильно его переделать?
Ответить с цитированием
  #5  
Старый 23.03.2013, 11:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Её вязать надо с чем-то.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 23.03.2013, 12:41
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
Лампочка

Цитата:
Сообщение от sandysman
Bevel беру к примеру, могу ли я рисовать линию в какую хочу сторону а не только снизу сверху слева справа...
Последнее не вкурсе, размер и положение как обычно у всех видимых компонентов - Left, Top и ширина с высотой. За один проход меняется так
Код:
var
bLeft, bTop, bWidth, bHeight : integer;
begin
Bevel1.SetBounds(bLeft, bTop, bWidth, bHeight);
end;
Ответить с цитированием
  #7  
Старый 23.03.2013, 13:30
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Продолжая биться над массивом линий, пробую объявить массив так
Код:
Lines[i]: array [0..3000] of TShapes;

тогда при помощи рисования четырех угольника, можно его "сжимать" и рисовать линию, тогда такой вопрос как рисовать четырехугольник не на форме а на панели, в виде линии при помощи данного объекта?
Ответить с цитированием
  #8  
Старый 23.03.2013, 17:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от sandysman
Продолжая биться над массивом линий...
А не проще кинуть Image, да загрузить в него готовый рисунок подложки, и биться тогда не надо.
Ответить с цитированием
  #9  
Старый 23.03.2013, 17:49
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Не не проще, прога не про рисование, линии нужны для отсечения секторов, и подсчета в них чисел.
Ответить с цитированием
  #10  
Старый 24.03.2013, 07:55
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Код:
Var Lines: array [0..3000] of TShape;
i,j:integer;
begin
i:=1;
Lines[i]:=TShape.Create(Form1);
Lines[i].Parent:=form1;
Lines[i].Shape:=stRectangle;
Lines[i].Left:=Button1.Left+20;
Lines[i].Top:=Button1.Top+20;
Lines[i].Width:=Form1.Height div 2;
Lines[i].Height:=1;
Lines[i].Pen.Color:=clRed;
Lines[i].Visible:=true;
вот код, чертит линию, но что мне теперь надо, может кто подскажет. Нужно добавить угл черчения, чтобы по 360 градусов чертилась линия, и как мне сделать проверку на то что если линия к примеру попадает на какой-нибудь объект, то она стирается и чертится выше данного объекта?
Ответить с цитированием
  #11  
Старый 24.03.2013, 09:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тут надо не рисовать на канве, а создавать объекты на одной поверхности, тогда ты можешь пробежаться по массиву созданых объектов и определится с пересечением. Это возвращает к началу темы, когда шла речь про Shape. По сути, вам нужен простейший векторный графический редактор.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 29.03.2013, 14:30
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

такая проблема, как нарисовать линию ровно под углом, а то получается не совсем красиво.

Код:
procedure TForm1.FormPaint(Sender: TObject);
Var
i,j,sum,c:integer;
begin
i:=1;
sum:=0;
Lines[i].NachX:=button1.Left+button1.Width;
Lines[i].NachY:=button1.top+button1.Height div 2;
Lines[i].KonechX:=0;
Lines[i].KonechY:=button1.top;
form1.canvas.Pen.Color:=clred;
form1.Canvas.Pen.Width:=1;
form1.Canvas.MoveTo(Lines[i].NachX,Lines[i].NachY);
c:=form1.Width div 2;
while (c<>form1.Width) do begin
form1.Canvas.LineTo(c, Lines[i].KonechY);
if PointIntoRect (Lines[i], button3)=true then sum:=strtoint(button3.caption);
if PointIntoRect (Lines[i],button2)=true then sum:=sum+strtoint(button2.Caption);
c:=c+1;
end;
и с косинусами и синусами не работает, чтобы поднять к примеру y на один а x просто плавно до чертить до него.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter