powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
25 сообщений из 110, страница 2 из 5
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855273
stanilar Стрелочки можно нарисовать на холсте того компонента, на котором лежат Ваши наследники панели.

А как сделать, чтоб стрелочки были поверх этих самых наследников (в том числе и всяких лейблов, имеджей и прочего, что я могу напихать в свой компонент позже).
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855278
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

В твоем случае один и тот же атрибут, для одного и того же элемента будет устанавливается не только из нескольких разных участков кода, но и из нескольких разных типов файлов (js, css, html).
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855283
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич"для себя"
Думаю что "для себя", если ты не планируешь стать гуру программирования вин-апи, есть задачи и поинтересней и более востребованней.

Андрей ИгоревичНу и другие вещи (всякие скругленные бары и прочее) они рисует просто прекрасно у него свой алгоритм рисования. Разницу в картинках не вижу, но предполагаю что на ТееChart для 10-ки, по умолчанию, включено сглаживание для графиков.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855292
stanilarАндрей Игоревич"для себя"
Думаю что "для себя", если ты не планируешь стать гуру программирования вин-апи, есть задачи и поинтересней и более востребованней.Яж прикладную задачу решить хочу, и хочу "чтоб было красиво (и удобно)" :), потому тыкаюсь в то, что удается найти или что вычитал. Но да, многие пути оказываются слишком сложными.
stanilarАндрей ИгоревичНу и другие вещи (всякие скругленные бары и прочее) они рисует просто прекрасно у него свой алгоритм рисования. Разницу в картинках не вижу, но предполагаю что на ТееChart для 10-ки, по умолчанию, включено сглаживание для графиков.
А я как-то могу "включить" эту функцию сглаживания для своих рисований на канвасе?
П.С. На картинках очень большая разница, может у вас браузер сглаживает или масштабирует?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855297
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичА я как-то могу "включить" эту функцию сглаживания для своих рисований на канвасе?


Я уже писал, GDI+ или Direct2D
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855311
asviridenkovАндрей ИгоревичА я как-то могу "включить" эту функцию сглаживания для своих рисований на канвасе?

Я уже писал, GDI+ или Direct2DasviridenkovПри желании, за пол года вполне сможете сделать нормальную версию.
Ладно, обойдусь пока без сглаживания... :)
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855338
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovЯ уже писал, GDI+ или Direct2D

Вроде у вин-контролов есть процедура, в котором они сами себя нарисовать могут. Можно самому алгоритм сглаживания написать. И не обязательно за пол года. Задача то сглаживать стрелочки? Такую, может быть, можно и из учебника скопипастить.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855366
Я вот совсем чуть поковырялся с наследниками TGraphicControl (ну для примера тот же Image или SpeedButton) и такой вопрос возник, как же его на передний план выносить выше панелей, это же по сути рисунки. В интернете предлагают способы которые опять перекрывает другие компоненты. Пока вот не могу придумать. Есть ли возможность создать какой-нибудь невидимый слой, которые не перекрывает компоненты?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855367
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все ваши шестиугольники и стрелочки - TGraphicsControl, а ПОЛЕ на котором они в конечно итоге нарисованы - TWinControl.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855371
DimaBrВсе ваши шестиугольники и стрелочки - TGraphicsControl, а ПОЛЕ на котором они в конечно итоге нарисованы - TWinControl.
Я понимаю (это очевидно), но как я понял из написанного, мне предлагают отказаться от TWinControl использовав для рисования стрелок сразу TGraphicsControl на Форме/Большой Панели. Так как 3+ сотни TWinControl - это плохо.
Отказываться от панелей под шестигранники не хочется, они удобные. А вот как стрелочки поверх нарисовать без TWinControl под них пока не понял.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855374
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОтказываться от панелей под шестигранники не хочется, они удобные.
Что именно удобного ?
автор А вот как стрелочки поверх нарисовать без TWinControl под них пока не понял.
Графические Стрелочки могут быть нарисованы на Оконном контроле. Чтобы они были поверх шестиугольников, сами шестиугольники должны быть графическими.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855389
DimaBrавторОтказываться от панелей под шестигранники не хочется, они удобные.
Что именно удобного ?
Ну основное что на них будет несколько label и image (на котором буду рисовать другие картинки (не стрелочки, но вместе со стрелочками)), может потом ещё что-то буду добавлять из компонентов (там много всего разного в зависимости от загруженных данных). Которые я просто кинул на панель и дальше мне только саму панельку двигать и больше ни о чем не думать (в картинках примерах я показал что у меня всё двигается, перемещается и перетаскивается, маштабируется, сейчас сделано через взаимные связи координат).
На что ещё можно кинуть другие компоненты и при этом, что бы можно было обрезать компонент по контуру (шестиугольник)? Ещё на панель удобно перетаскивать мышкой чрез предельно простые две строчки кода.

DimaBrавтор А вот как стрелочки поверх нарисовать без TWinControl под них пока не понял.
Графические Стрелочки могут быть нарисованы на Оконном контроле. Чтобы они были поверх шестиугольников, сами шестиугольники должны быть графическими. И это мало чем будет отличаться от того, что рисую я сейчас, просто перехват координат на рисунке и события будет сам делфи делать.

Я хочу, что бы была возможность навести/кликнуть на любое число/рисунок и увидеть дополнительную информацию, по сути у меня получилось почти всё, кроме треклятых стрелочек :).
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855390
Я тут подумал, что может не очень точно выразился в часть "не блокирует взаимодействие", то место где сами стрелки находятся, там можно и блокировать взаимодействие(это не очень важно), просто все доступные способы рисования стрелки блокируют не только контур стрелки, но и весь прямоугольник в который она вписана.
В принципе я могу обрезать панель чуть шире стрелки и сделать её прозрачной, по крайней мере то ужасное обрезание лесенками не будет видно. Но это всё равно приведет у нескольким сотням ВиндКонтролов.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855391
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу основное что на них будет несколько label и image (на котором буду рисовать другие картинки
Зачем кидать какие то дополнительные контролы ? Не проще ли просто вывести текст и картинку поверх шестиугольника ?

авторЯ хочу, что бы была возможность навести/кликнуть на любое число/рисунок и увидеть дополнительную информацию
Разве нельзя обработать клик по шестиугольнику ?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855392
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите, какая есть заготовка !!!
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855394
DimaBrавторНу основное что на них будет несколько label и image (на котором буду рисовать другие картинки
Зачем кидать какие то дополнительные контролы ? Не проще ли просто вывести текст и картинку поверх шестиугольника ?

авторЯ хочу, что бы была возможность навести/кликнуть на любое число/рисунок и увидеть дополнительную информацию
Разве нельзя обработать клик по шестиугольнику ?
Ну я вначале это описал, всё можно, даже не просто можно, я как бы уже всё это сделал почти так (просто перехват координат и события реализовал сам, а не через компоненты).

Сложно объяснить не углубляясь в суть отображаемых данных (а это долго), но панель с контролами просто банально удобнее как с алгоритмичесткой точки зрения (есть один компонент, который полностью самодостаточен, рисование, перемещение, вывод данных, обработку событий, вывод хинтов и т.п. всё можно реализовать внутри него, а я просто присваиваю параметры и всё), так и с точки зрения кода. Ну банально, вот хочу я переместить один шестиугольник (смотри картинки "примеры" в первом комментарии), в случае с панелькой я просто перемешаю её и как бы всё, больше ничего не надо, а в случае с компонентами надо их как-то связать (компоненты одного шестиугольника), перемещать совместно.
Я попробую сделать как вы говорите, может там и не так всё сложно. Просто уж больно мне компонент- наследник панели понравился, ни тебе канвасы не нужны, ни какие-то дополнительные условия.
DimaBrСмотрите, какая есть заготовка !!!
А что тут происходит?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855395
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичСложно объяснить не углубляясь в суть отображаемых данных (а это долго), но панель с контролами просто банально удобнее как с алгоритмичесткой точки зрения


Пока не захотите все это зуммировать
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855396
asviridenkovАндрей ИгоревичСложно объяснить не углубляясь в суть отображаемых данных (а это долго), но панель с контролами просто банально удобнее как с алгоритмичесткой точки зрения


Пока не захотите все это зуммировать
А в чем подводные камни? Я планировал отключать видимость панели на которой они расположены (и всех своих компонентов), далее менять размеры панелей, "перевырезать" форму и опять включать. Хотя лейблы надо будет смещать, но относительные координаты просто на коэффициент помножить, не сложно, вроде. Если панели созданы и невидимы SetWindowRgn, вроде, быстро работает.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855398
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на коленке
Код: 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.
TMyShape = class(TPaintBox)
  protected
    procedure Paint; override;
  public
    Text1: string;
    Text2: string;
    Text3: string;
end;

procedure TMyShape.Paint;
var P : array [1..7] of TPoint;
    a,i,R: integer;
begin
  Canvas.Brush.Color := clRed;
  Canvas.Brush.Style := bsSolid;
  a := 0;
  R := Width div 2;
  for i:= 1 to 7 do begin
    P[i].x := R+Round(R*sin(a*pi/180));
    P[i].y := R+Round(R*cos(a*pi/180));
    a := a+60;
  end;
  Canvas.Polygon(P);
  Canvas.TextOut((Width-Canvas.TextWidth(Text1)) div 2,10,Text1);
  Canvas.TextOut((Width-Canvas.TextWidth(Text2)) div 2,22,Text2);
  Canvas.TextOut((Width-Canvas.TextWidth(Text3)) div 2,35,Text3);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    S: TMyShape;
begin
  for i := 0 to 999 do begin
    S := TMyShape.Create(self);
    S.Parent := self;
    S.SetBounds(Random(Width-60),Random(Height-60),60,60);
    S.Text1 := '№ '+IntToStr(i);
    S.Text2 := FormatFloat('#0.00',Random*1000);
    S.Text3 := FormatFloat('#0.000',Random*1000);
  end;
end;


...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855400
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855549
DimaBr

Повторил, заменив текс на лейблы. В принципе рабочая схема. Но по факту - стрелки это рисунок который всё время надо перерисовывать. Ну и форма Пейнбокса таки квадрат в который что-то вписано, с соответсвующим перекрытием
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855576
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичDimaBr

Но по факту - стрелки это рисунок который всё время надо перерисовывать.потому что кадр нужно генерировать целиком, сразу со всеми элементами, и только после этого выводить на экран, например
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855600
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичПовторил, заменив текс на лейблы. В принципе рабочая схема. Но по факту - стрелки это рисунок который всё время надо перерисовывать. Ну и форма Пейнбокса таки квадрат в который что-то вписано, с соответсвующим перекрытием
Выставь просто DoubleBuffered = True у контейнера (в данном случае это TForm1) на котором находятся все компоненты. VCL сделает двойную буферизацию.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855633
КвейдАндрей Игоревичпропущено...

Но по факту - стрелки это рисунок который всё время надо перерисовывать.потому что кадр нужно генерировать целиком, сразу со всеми элементами, и только после этого выводить на экран, например

Понятно, просто тоже надо продумывать будет. А что у вас на гифке происходит?
kealon(Ruslan)Андрей ИгоревичПовторил, заменив текс на лейблы. В принципе рабочая схема. Но по факту - стрелки это рисунок который всё время надо перерисовывать. Ну и форма Пейнбокса таки квадрат в который что-то вписано, с соответсвующим перекрытием.

Выставь просто DoubleBuffered = True у контейнера (в данном случае это TForm1) на котором находятся все компоненты. VCL сделает двойную буферизацию.
Спасибо, попробую, не успел ещё с ней разобраться.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855640
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичПонятно, просто тоже надо продумывать будет. А что у вас на гифке происходит?

Это пример того, о чем я говорил. Кадр со всеми элементами (линиями и якорями, за которые линии "цепляются") прорисовывается в буфере, затем целиком выводится на экран. Получается плавная анимация. В вашей задаче нужно реализовать подобный механизм.
...
Рейтинг: 0 / 0
25 сообщений из 110, страница 2 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]