powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
25 сообщений из 110, страница 3 из 5
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855747
Вопрос в продолжении.
Как срабатывает событие Paint? Как оно влияет на обновление канваса?
Попробовал рисовать стрелку в событии Paint PintBox-а но на канвасе родителя, но получилось не очень. Канвас обновляется не весь сразу, а после отрисовки каждого ПаинБокса (при том сами пайнбоксы все сразу обновляются, а вот стрелки - нет). Как-то попросить/заставить его этого не делать можно? Двойная буферизация включена.
В жизни всё не так плохо, как на гифке, просто мерцает. Вторая часть гифки когда пошагово выполнял. Дабы не вносить лишние ошибки рисую линию простым MoveTo;

...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855778
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичВопрос в продолжении.
Как срабатывает событие Paint? Как оно влияет на обновление канваса?
Попробовал рисовать стрелку в событии Paint PintBox-а но на канвасе родителя, но получилось не очень. Канвас обновляется не весь сразу, а после отрисовки каждого ПаинБокса (при том сами пайнбоксы все сразу обновляются, а вот стрелки - нет). Как-то попросить/заставить его этого не делать можно? Двойная буферизация включена.
В жизни всё не так плохо, как на гифке, просто мерцает. Вторая часть гифки когда пошагово выполнял. Дабы не вносить лишние ошибки рисую линию простым MoveTo;
выложи исходник
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855782
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovkealon(Ruslan)ну например объекты в "псевдокоде" надо как-то связать с действиями и поддерживать согласованность довольно трудно
сравни со стандартным редактором формы, почти на любой объект есть реальное поле в коде.
И это не просто фигуры рисования, это уже отдельные сущности


Когда число элементов заранее неизвестно, то а коде поля на объект очевидно не будет, т.к. они создаются рантайм.
А что касается обработки событий объектов одного типа, то тоже решается очень просто
<g onclick="form.GroupClick(this)"..
Собственно все. Опять же, на фоне сравнения десятка строчек для визуализации здесь, и тысяч строк при варианте в лоб, это несерьезно.если добавить к этому коду его "бизнеслогику", в обоих вариантах выйдет прибизительно столько же

другое дело, что ему пока сложно "отделять мух от котлет" и у него всё в куче, но все на чём-то учатся, у него же программирование не основная деятельность - процесс будет идти дольше
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855812
КвейдАндрей ИгоревичВопрос в продолжении.
выложи исходникБлин, на работе осталось, на эту папку забыл синхронизацию настроить.
Ну суть там в этом коде из примера выше от 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.
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);

//вот тут рисуется линия TDrawPanel - панель со включенным канвасом (на ней рисую);
 (Self.Parent as TDrawPanel).Canvas.Pen.Width:=3; 
 (Self.Parent as TDrawPanel).Canvas.Moveto (Round(Left+width/2)-80,Round(Top+height/2)+80);
 (Self.Parent as TDrawPanel).Canvas.Lineto (Round(Left+width/2),Round(Top+height/2)) ;

end;

...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855881
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Код: sql
1.
2.
3.
4.
//вот тут рисуется линия TDrawPanel - панель со включенным канвасом (на ней рисую);
 (Self.Parent as TDrawPanel).Canvas.Pen.Width:=3; 
 (Self.Parent as TDrawPanel).Canvas.Moveto (Round(Left+width/2)-80,Round(Top+height/2)+80);
 (Self.Parent as TDrawPanel).Canvas.Lineto (Round(Left+width/2),Round(Top+height/2)) ;


Зачем вы рисуете на Parent ?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39855903
DimaBrАндрей Игоревич
Код: sql
1.
2.
3.
4.
//вот тут рисуется линия TDrawPanel - панель со включенным канвасом (на ней рисую);
 (Self.Parent as TDrawPanel).Canvas.Pen.Width:=3; 
 (Self.Parent as TDrawPanel).Canvas.Moveto (Round(Left+width/2)-80,Round(Top+height/2)+80);
 (Self.Parent as TDrawPanel).Canvas.Lineto (Round(Left+width/2),Round(Top+height/2)) ;


Зачем вы рисуете на Parent ?
Тут можно понять вопрос в двух вариантах.
1. Почему на Parent, а не на Пеинтбоксе? - Потому что стрелки могут выходить сильно за пределы шестигранника и рисовать их на канвасе пеинтбокса неразумно, он тогда будет перекрывать доступ ко всему.
2. Почему написал Parent, а не конкретный компонент? - есть дальнейшие планы по реализации, и там хочется все "шестигранные компоненты" включить в компонент наследник панели с канвасом в виде MyDrawPanel.Item[xxx].(процедуры и параметры) . В принципе описать можно по разному, сути не меняет. На указанную проблему мерцания не влияет, можно и конкретный канвас указать, так же будет. Мне больше интересно как вообще событие Paint обновляет канвас, видимо из него рисовать на других канвасах вне ПейнБокса плохая идея, надо будет разобраться.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856441
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP.

Товарищи, просьба срач не устраивать.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856656
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если всё это рисовать в directX (2d) или opengl?!
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856781
mkrа если всё это рисовать в directX (2d) или opengl?!Освоение возможностей данных библиотек я оставил на чуть попозже. Стоит ли сейчас туда лезть?

По поводу стрелок. Чего-то не соображу как их рисовать.
Дело в чем, событие Pain у TPainBox срабатывает в самом конце, после любого кода. То есть если я нарисуют стрелки на канвасе родителя в коде даже после создания TPainBox, пример для сути (не код, просто суть)
Код: pascal
1.
2.
PainBox:=TPainBox.Create(Parent);
With Parent.Canvas do LineTo (X,Y);


То событие Paint всё равно нарисует PaintBox поверх линии.

Если же рисовать стрелку вызывая на канвасе родителя из события Paint, то могут происходить самые разные вакханалии, например обновление канваса родителя вызывает событие Paint у PaintBox-ов который вызывает канвас родителя который... (ну вы поняли, зациклится и будет мерцать вечтно). При двойной буферизации такого не происходит, но происходят другие неприятности (видимо, просто цикл обновлений канваса прерывается на случайном месте и стрелка то видна, то нет).
Если попробовать рисовать стрелки в событии OnMove тоже интересные эффекты рядом с ПаинБоксом (видимо канвас родителя перерисовывается не весь, а только рядом с перемещаемым ПаинБоксом).
В общем мои идеи рисования стрелок что-то не сработали. Вот блин сложная задача для меня :).
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856813
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

кажется тут уже писали, есть другой вариант, идея которого в том, что не использовать какие-либо компоненты для изображения шестиугольников и стрелок, а рисовать всё прямо на одном PaintBox (или на Canvas какого-то другого компонента).
Написать функцию, которая рисует шестиугольник заданного размера и цвета в заданном месте, функцию, которая рисует стрелку в заданном направлении в заданном месте. Хранить данные о всех шестиугольниках и стрелках в массивах или каком-то другом контейнере.
Перемещение реализовать через обработку событий мыши. Мышка нажата - в массиве шестиугольников отыскивается тот, на котором она нажата. Когда отпускается - этот шестиугольник перерисовывается в новом месте.
Всё рисуется на скрытом Bitmap, а потом готовая, полностью нарисованная картинка копируется на PaintBox.

Direct2D добавляется в таком варианте просто, в справке описано.

Не знаю, может тут есть какие-то не видные мне недостатки и проблемы (например недостатки GDI), но по-моему это - самый легковесный способ рисования по сравнению с созданием десятков или сотен компонентов для шестиугольников.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856816
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
>>>Когда отпускается - этот шестиугольник перерисовывается в новом месте.
Точнее, в таком варианте нужно видимо всю картинку перерисовать.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856822
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

Я это все написал еще на первой странице, но самурай не ищет прямых путей, хочет сам набить все шишки.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856854
s62кажется тут уже писали, есть другой вариант, идея которого в том, что не использовать какие-либо компоненты для изображения шестиугольников и стрелок, а рисовать всё прямо на одном PaintBox (или на Canvas какого-то другого компонента).
Написать функцию, которая рисует шестиугольник заданного размера и цвета в заданном месте, функцию, которая рисует стрелку в заданном направлении в заданном месте. Хранить данные о всех шестиугольниках и стрелках в массивах или каком-то другом контейнере.
Перемещение реализовать через обработку событий мыши. Мышка нажата - в массиве шестиугольников отыскивается тот, на котором она нажата. Когда отпускается - этот шестиугольник перерисовывается в новом месте.
Всё рисуется на скрытом Bitmap, а потом готовая, полностью нарисованная картинка копируется на PaintBox.

Один в один всё уже реализовано в работающем коде именно так :), смотри первый пост, даже на битмапе уже рисую "ассоциирую". Мне то чего хотелось:
Я хотел сделать компонент который был полностью самодостаточен и существует отдельно от остального кода (многоугольник + стрелка + лейблы + рисунок типа стрелки). Создал в коде - там сразу всё по умолчанию уже хорошо. Далее меняя параметры получаю нужную мне картинку.
Ну и хотел реализовать события на клики по лейблам и высвечивающиеся подсказки. Ещё дополнительно компонент родитель в виде массивов компонентов типа описанного выше с доступом Родитель.Item[...].(Свойство или Метод)

Просто у меня в коде просто огромное количество разных данных в разных форматах, я их постоянно добавляю и редактирую, и рисовальщик в виде массива с которого рисуется вся картинка с прорвой параметров (цвет, 5 текстов (размер, стиль, позиция, цвет), толщина обводки, цвет обводки, координаты многоугольника, размер многоугольника, тип рисунка (стрелка, годограф), ещё куча всего) для всех элементов, который расположен в коде программы очень неудобен. Я решил его вынести в отдельный модуль и описать качественно для максимального удобства работы в дальнейшем (а это будет постоянно).
Единый рисунок можно (и уже сделано), но не очень удобно. Особенно в часть перехвата координат мыши.
Ну например, я вот сделал и описал код на событие "OnMove" для вывода подсказки при наведени на текст, а тут что-то надо в конструкторе менять, переделывать под новые реалии - и всё уползает, опять всё переделывать, а там куча взаимосвязей (координаты, размер, масштаб, координаты текста), это сложно и неудобно (постоянно всё ломается), куда менее удобно чем небольшие сегментированные компоненты за работоспособностью которых следить куда проще.

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

Никто не говорит отказываться от объектной модели, просто не делайте эти объекты компонентами дельфи.
Опишите свой класс с методами отрисовки, отработки событий и.т.д, а далее делайте класс контейнер который будет обрабатывать массив объектов этих классов, вызывая отрисовку и передавая события.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856875
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
TDrawObject = class
  private
    fCanvas: TCanvas; // канвас, на котором будем рисовать (или на панели или на движущемся PaintBox)
    fBounds: TRect;
  public
    procedure Draw(R: TRect); virtual;abstract;
    property Bounds: TRect read fBounds write fBounds;
end;

TArrow = class(TDrawObject)
  private
    fPenSize: integer;
  public
    procedure Draw(R: TRect);override;
    property PenSize: integer read fPenSize write fPenSize;
end;

THexagon = class(TDrawObject)
  private
    fArrow: TArrow; // стрелка к фигуре
    fText1: string;
    fText2: string;
  public
    procedure Draw(R: TRect);override;
    property Text1: string read fText1 write fText1;
    property Text2: string read fText2 write fText2;
end;

TDrawPanel = class(TPanel)
  private
    fHexList: TList;  // список всех фигур
    fMoveHex, fMoveArrow: TPaintBox; // эти Боксы для передвижения
    fHex: THexagon; // указатель на ту фигуру которую двигаем
    xHex,yHex,xArrow,yArrow: integer;
    procedure DoPaintHex(Sender: TObject);
    procedure DoPaintArrow(Sender: TObject);
  public
    procedure Paint;override;
    constructor Create(AOwner: TComponent);override;
    destructor Destroy; override;
    function FindHexagon(X,Y: integer): THexagon;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;

// отрисовка панели
procedure TDrawPanel.Paint;
var i: integer;
begin
  inherited;
// рисуем все фигуры
  for i := 0 to fHexList.Count-1 do THexagon(fHexList[i]).Draw(THexagon(fHexList[i]).Bounds);
// а затем рисуем все стрелки
  for i := 0 to fHexList.Count-1 do THexagon(fHexList[i]).fArrow.Draw(THexagon(fHexList[i]).fArrow.Bounds);
end;



...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39856880
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
TDrawObject = class
  private
    fCanvas: TCanvas; // канвас, на котором будем рисовать (или на панели или на движущемся PaintBox)
    fBounds: TRect;
  public
    procedure Draw(R: TRect); virtual;abstract;
    property Bounds: TRect read fBounds write fBounds;
end;

TArrow = class(TDrawObject)
  private
    fPenSize: integer;
  public
    procedure Draw(R: TRect);override;
    property PenSize: integer read fPenSize write fPenSize;
end;

THexagon = class(TDrawObject)
  private
    fArrow: TArrow; // стрелка к фигуре
    fText1: string;
    fText2: string;
  public
    procedure Draw(R: TRect);override;
    property Text1: string read fText1 write fText1;
    property Text2: string read fText2 write fText2;
end;

TDrawPanel = class(TPanel)
  private
    fHexList: TList;  // список всех фигур
    fMoveHex, fMoveArrow: TPaintBox; // эти Боксы для передвижения
    fHex: THexagon; // указатель на ту фигуру которую двигаем
    xHex,yHex,xArrow,yArrow: integer;
    procedure DoPaintHex(Sender: TObject);
    procedure DoPaintArrow(Sender: TObject);
  public
    procedure Paint;override;
    constructor Create(AOwner: TComponent);override;
    destructor Destroy; override;
    function FindHexagon(X,Y: integer): THexagon;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;

// отрисовка панели
procedure TDrawPanel.Paint;
var i: integer;
begin
  inherited;
// рисуем все фигуры
  for i := 0 to fHexList.Count-1 do THexagon(fHexList[i]).Draw(THexagon(fHexList[i]).Bounds);
// а затем рисуем все стрелки
  for i := 0 to fHexList.Count-1 do THexagon(fHexList[i]).fArrow.Draw(THexagon(fHexList[i]).fArrow.Bounds);
end;




В принципе рабоче, хотя уже почти то же самое, что и было изначально :). Ладно, видимо только так можно.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39861655
Наконец появилось свободное время поковыряться. В принципе всё что хотел изначально - сделал. Не так просто в коде как с панельками, но пойдет. Не уверен, конечно, в своих решения, но, вроде, работает :). От лейблов пришлось отказаться, всё-таки 500 штук сильно долго рисуются (0.2-0.3 секунды).
Единственно Хинты не совсем идеально работают. Вывод Хинта привязал к MouseMove (если попал в многоугольник то..., если в шестиграннике попал на текст, то..). Но, видимо, так как всё один компонент - само не перерисовывалось (хотя в статусбаре при присвоении менялось сразу), пришлось выводить через Application.ActivateHint(), но он мгновенно рисуется при наведении. В принципе и так неплохо, может даже и лучше.

В принципе по алгоритмам вопросов много (часто кажется, что как-то неправильно сделал), но, наверное, наглеть не стоит с вопросами. Всем просто огромнейшее спасибо.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39862159
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,
визуально - круто.
бросайте исходники демки на github, может кто и глянет.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39877935
Такой вопрос возник. Есть панель, на основании делаю наследника с нужными мне особенностями, пусть будет ChangingPanel (панель с возможностью изменения размеров + рамка + иконка указателя) и на основании неё уже делаю наследника с нужным содержимым панели - пусть будет LegendPanel.
Сложность в чём, я хотел бы рисовать рамку в ChangingPanel (дабы в наследниках уже не думать об этом), а в наследнике рисовать уже то, что мне нужно.
Делал так:
В ChangingPanel и LegendPanel:
Код: pascal
1.
 procedure Paint; override;


В ChangingPanel
Код: pascal
1.
2.
3.
4.
procedure LegendPanel.Paint;
Begin
 //рисую рамку
end;


в LegendPanel уже
Код: pascal
1.
2.
3.
4.
5.
procedure LegendPanel.Paint;
Begin
  inherited;
  //рисую всякое
end;



но Inherited вызывает Paint изначальной Панели, а не ChangingPanel. Почему?

(по факту рисую посложнее, на панели - paitbox с отступами от границ для рамки и везде использую буферный канвас который в конце процедуры копирую).

Для наглядности, рисую легенду.

Ну и в принципе, есть ли более простые способы реализовать показанное на гифке, сейчас я рамку вообще в ручную рису (прямоугольник + 4 прямоугольника по углам, перемещение через ReleaseCapture; perform(WM_SysCommand, $F0.., 0) ну и тому подобное ), может уже всё давно готовое есть и я кривой велосипед изобретаю?

...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39877936
А, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел.
И можно ли вообще сделать так же, но для родителя? Чтоб потомок имел доступ к свойству родителя (пусть через parent.property), и никто более. Просто ну очень сложно мне продумать логику так, чтоб всё в private было и писать для каждой фигни property тоже тяжко. А всё public как-то неправильно.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39877937
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878281
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич, ты это собираешься продавать программистам? Если нет - не парься над тем что неважно. Главное чтоб тебе было всё ясно-понятно и легко было поддерживать. Культура программирования хорошо оттачивается в командах, но это отдельная песня. Лучше найми дизайнера, а то в цветовой каше глаза сломаешь, хрен прочтешь половину текста
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878393
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичА, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел.
strict protected ?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878418
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpАндрей ИгоревичА, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел.
strict protected ?
Из другой оперы, немного.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878467
ёёёёёАвтар, http://docwiki.embarcadero.com/RADStudio/Rio/en/Methods_(Delphi)#Final_Methods
Слегка не понял. Да и на 7ке, вроде, не работает, как я понимаю. Но поизучаю поподробнее.

white_niggerАндрей Игоревич, ты это собираешься продавать программистам? Если нет - не парься над тем что неважно. Главное чтоб тебе было всё ясно-понятно и легко было поддерживать. Культура программирования хорошо оттачивается в командах, но это отдельная песня. Лучше найми дизайнера, а то в цветовой каше глаза сломаешь, хрен прочтешь половину текста

Ну так, в рамках развития потихоньку приучаю себя к культуре :), когда программа разрастается до очень больших размеров это очень помогает. Ну и очень помогает, когда свой код читаешь через некоторое время.

white_nigger Лучше найми дизайнера ха-ха :(

Это отладочная программа в которой вывожу почти всё, что только можно, дабы сразу отловить ошибки. В основной программе такого объема данных не будет (по факту на гифке просто огромное количество информации выводиться, такое в принципе читать сложно, в основной программе выводятся отдельные группы данных)

alekcvpАндрей ИгоревичА, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел.
strict protected ?
У меня и так каждый компонент в отдельном модуле, думаю это избыточно.
...
Рейтинг: 0 / 0
25 сообщений из 110, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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