Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
whoim
7 / 7 / 1
Регистрация: 27.02.2013
Сообщений: 148
1

Простая графика: объекты и связи

27.02.2013, 02:19. Просмотров 845. Ответов 5
Метки нет (Все метки)

приветствую!
нужно - уметь размещать скажем на TPanel скажем TShape, двигать их туда-суда и писать на них немного текста. Обзовем - объект. Благо, не сильно сложно - динамически создаю tshape в массиве оных, обрабатываю нажатия мыши (нашел пример в сети для дельфи) - все отлично.

Но мне нужно дорисовывать к этим объектам пины - торчащие круглешочки - и уметь связывать их между собой, храня результат в массиве. Линию то в канвасе tpanel нарисовать могу, но толку.. Не представляю с какой стороны подступится даже.

Может, есть готовый компонент, который подойдет под мои нужды?

Спасибо за ответы!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 02:19
Ответы с готовыми решениями:

Простая форма обратной связи (не роботает)
Пытаюсь написать простую форму обратной связи вот код HTML страницы где встроена форма ...

Простая линия связи (найти или спроэктировать)
Доброго времени суток. Подскажите пожалуйста, ищу возможность соединить N наушников с микрофом в...

Простая графика
Кто может напишите с помощью каких функций в C++ можно начертить линию (из заданной точки экрана в ...

Простая графика.
Кто может помогите, паскаль был, но графику не учили, а тут дали задание по графике:

Простая графика
Недавно решил попробовать написать свою собственную игру на c++. С языком знаком хорошо (...

5
MLPMan
Кандёхаем веселее!
294 / 306 / 76
Регистрация: 02.10.2012
Сообщений: 2,123
27.02.2013, 05:10 2
А почему рисование линии не подходит? Дополнительные кружки тоже можно дорисовать.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27445 / 18375 / 7273
Регистрация: 22.10.2011
Сообщений: 32,330
Записей в блоге: 6
27.02.2013, 10:30 3
whoim, у TShape есть обработчик OnPaint, напиши одну процедуру, подходящую под его прототип, которая будет на шейпе рисовать всё, что нужно (кружочки, текст, ...), и подмени OnPaint для всех шейпов, лежащих на форме,. И тебе останется только, зная текущие координаты шейпа, и смещение пинов, рисовать на канве панели линии между ними.

Пример:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type
  { TForm1 }
  TForm1 = class(TForm)
    // ...
  private
    { private declarations }
    procedure MyShapePaint(Sender: TObject);
  public
    { public declarations }
  end;
 
// ...
procedure TForm1.MyShapePaint(Sender: TObject);
var
  Sh : TShape;
  txt : string;
begin
  Sh := Sender as TShape;
  with Sh.Canvas do
  begin
    Brush.Color := clBtnFace;
    Brush.Style := bsSolid;
    Pen.Color := clBtnFace;
    Pen.Style := psSolid;
    Rectangle(0, 0, Sh.Width, Sh.Height); // Чтобы была возможность рисовать "снаружи" компонента
 
    Pen.Color := clBlack;
    Pen.Style := psSolid;
    Rectangle(5, 0, Sh.Width - 5, Sh.Height);
    txt := IntToStr(Sh.Tag);
    TextOut((Sh.Width - TextWidth(txt) - 10) div 2,
            (Sh.Height - TextHeight(txt)) div 2, txt);
 
    Rectangle(0, 5, 6, 10);
    Rectangle(0, Sh.Height-10, 6, Sh.Height - 5);
  end;
end;
 
// И при создании формы:
procedure TForm1.FormCreate(Sender: TObject);
var i : Integer;
begin
  for i := 0 to Self.ComponentCount - 1 do
    if Self.Components[i] is TShape then
      (Components[i] as TShape).OnPaint := @MyShapePaint;
end;
Выдаст вот такую картинку:
0
Миниатюры
Простая графика: объекты и связи  
whoim
7 / 7 / 1
Регистрация: 27.02.2013
Сообщений: 148
28.02.2013, 12:11  [ТС] 4
Ребят, спасибо! буду пробовать. С линиями вопрос в том, что нужно рисовать полилинию, которая будет строго под 90 градусов выглядеть и обходить автоматически другие объекты на форме - вот тут и загвоздка в методике расчета координат..

Добавлено через 12 часов 48 минут
ну, спасибо за пинок - потихоньку получается!

http://my.jetscreenshot.com/1474/m_20130227-os2g-37kb.jpg

http://youtu.be/r5zHvk8cdts

Добавлено через 11 часов 57 минут
Продолжение вопросов. Хочу динамически создаваемому шейпу присвоить TImage как parent. Ответ:
unit1.pas(259,60) Error: Incompatible type for arg no. 1: Got "TImage", expected "TWinControl"

Чего это он?

Добавлено через 16 минут
понял, он не контейнер
ну и ладно, буду на форме рисовать
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27445 / 18375 / 7273
Регистрация: 22.10.2011
Сообщений: 32,330
Записей в блоге: 6
28.02.2013, 12:14 5
TImage не может быть Parent-ом, у него нет окна, он потомок TGraphicControl, родитель - всегда оконный компонент, то есть, потомок TWinControl.
0
whoim
7 / 7 / 1
Регистрация: 27.02.2013
Сообщений: 148
28.02.2013, 12:15  [ТС] 6
UI, спасибо! нарыл уж.
0
28.02.2013, 12:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 12:15

Простая Графика на чистом Си
Всем привет! На чистом Си нужна простая графическая библиотека для работы в visual studio, которая...

Простая фрактальная графика
Вывод кривой реальзиван через graphics.h. В моей программе кривую рисует только при n=0(прямая...

простая графика в дельфи
Всех с наступающим!!! Ребят, я вот просмотрел пример в паскале, все понял, ясно стало многое....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru